java.conf 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966
  1. macro _INPUT_WITH_FLAG(Flag, IN[]) {
  2. .CMD=$_INPUT_WITH_FLAG_IMPL(${pre=$Flag :IN} IN $IN)
  3. }
  4. macro _INPUT_WITH_FLAG_IMPL(IN{input}[], Args...) {
  5. .CMD=$Args ${input;hide:IN}
  6. }
  7. macro ACCELEO(XSD{input}[], MTL{input}[], MTL_ROOT="${MODDIR}", LANG{input}[], OUT{output}[], OUT_NOAUTO{output}[], OUTPUT_INCLUDES[], DEBUG?"stdout2stderr":"stderr2stdout") {
  8. .PEERDIR=build/platform/java/jdk $JDK_RESOURCE_PEERDIR
  9. .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input;pre=build/scripts/:DEBUG.py} $JDK_RESOURCE/bin/java -Dfile.encoding=utf8 -classpath ${RUN_JAR_PROG_CP_PRE}${tool:"tools/acceleo"}${RUN_JAR_PROG_CP_SUF} ru.yandex.se.logsng.tool.Cli $_INPUT_WITH_FLAG(--xsd IN $XSD) $_INPUT_WITH_FLAG(--mtl IN $MTL) $_INPUT_WITH_FLAG(--lang IN $LANG) --output-dir $BINDIR --build-root ${ARCADIA_BUILD_ROOT} --source-root ${ARCADIA_ROOT} --mtl-root $MTL_ROOT ${output_include;hide:OUTPUT_INCLUDES} ${output;hide:OUT} ${output;noauto;hide:OUT_NOAUTO} ${kv;hide:"p JV"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}
  10. }
  11. ### @usage: JAVA_LIBRARY()
  12. ###
  13. ### The module describing java library build.
  14. ###
  15. ### Documentation: https://wiki.yandex-team.ru/yatool/java/
  16. module JAVA_LIBRARY: JAR_LIBRARY {
  17. .SEM=BUILD_JAR_SEM
  18. }
  19. PROGRAM_AND_TESTS_CP_COLLECTING_NODES_SEM=IGNORED
  20. ### @usage: JAVA_PROGRAM()
  21. ###
  22. ### The module describing java programs build.
  23. ### Output artifacts: .jar and directory with all the jar to the classpath of the formation.
  24. ###
  25. ### Documentation: https://wiki.yandex-team.ru/yatool/java/
  26. multimodule JAVA_PROGRAM {
  27. module JAR_RUNNABLE: _JAR_RUNNABLE {
  28. .ALLOWED=JAVA_RUNTIME_PEERDIR JAVA_RUNTIME_EXCLUDE
  29. .SEM=PROGRAM_AND_TESTS_CP_COLLECTING_NODES_SEM
  30. # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle:
  31. # * A -> B -> C -> lib-v1.4
  32. # | |-> DM(lib-v1.1)
  33. # | |-> EXCLUDE(lib-v1.4)
  34. # | |-> FORBID_CONFLICT_DM_RECENT = OK
  35. # |-> DM(lib-v1.1)
  36. # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path)
  37. .IGNORED=RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION PROVIDES FEATURE_VERSION
  38. .ALIASES=JAVA_RUNTIME_PEERDIR=PEERDIR JAVA_RUNTIME_EXCLUDE=EXCLUDE
  39. .PEERDIRSELF=JAR_COMPILATION
  40. SET(MODULE_TYPE JAVA_PROGRAM)
  41. }
  42. module JAR_COMPILATION: JAR_LIBRARY {
  43. .IGNORED=JAVA_RUNTIME_PEERDIR JAVA_RUNTIME_EXCLUDE
  44. .ALIASES=JAVA_RUNTIME_PEERDIR=_NOOP_MACRO JAVA_RUNTIME_EXCLUDE=_NOOP_MACRO
  45. .SEM=BUILD_JAR_SEM
  46. .FINAL_TARGET=no
  47. SET(MODULE_TYPE JAVA_PROGRAM)
  48. when ($OPENSOURCE == "yes" && $AUTOCHECK == "yes") {
  49. # FIXME: Replace AUTOCHECK == yes with _not a host platform_ check after YMAKE-218
  50. MODULE_LICENSES_RESTRICTION_TYPES = ALLOW_ONLY
  51. MODULE_LICENSES_RESTRICTIONS = SERVICE REQUIRE_CITATION REQUIRE_MODIFICATIONS_DISCLOSURE
  52. }
  53. when ($OS_IOS == "yes" || $OS_ANDROID == "yes" || $MAPSMOBI_BUILD_TARGET == "yes") {
  54. MODULE_LICENSES_RESTRICTION_TYPES = ALLOW_ONLY
  55. MODULE_LICENSES_RESTRICTIONS = SERVICE REQUIRE_CITATION
  56. }
  57. when ($OPENSOURCE == "yes" && $AUTOCHECK == "yes" && $MAKE_UBERJAR_VALUE == "yes") {
  58. # At the time LICENCE_RESTRICTION does not properly distinct static / dynamic linkage in UBERJAR() modules.
  59. # Hence we forbid using UBERJAR() in OPENSOURCE()
  60. #
  61. # Should be fixed in YMAKE-1043
  62. _OK = no
  63. }
  64. ASSERT(_OK "UBERJAR() macro can not be used in opensource builds, see YMAKE-1043")
  65. }
  66. }
  67. BUILD_JUNIT5_JAR_SEM=$BUILD_JAR_SEM && junit5_test
  68. multimodule JUNIT5 {
  69. # ATTENTION ya ide idea relies on this submodule name to find scope of `ya make` build before project generation
  70. module JAR_TESTABLE: _JAR_TEST {
  71. .ALLOWED=YT_SPEC
  72. # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle:
  73. # * A -> B -> C -> lib-v1.4
  74. # | |-> DM(lib-v1.1)
  75. # | |-> EXCLUDE(lib-v1.4)
  76. # | |-> FORBID_CONFLICT_DM_RECENT = OK
  77. # |-> DM(lib-v1.1)
  78. # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path)
  79. .IGNORED=JAVA_SRCS RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION PROVIDES FEATURE_VERSION
  80. .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE
  81. .PEERDIRSELF=JAR_COMPILATION
  82. .SEM=PROGRAM_AND_TESTS_CP_COLLECTING_NODES_SEM
  83. PEERDIR(devtools/jtest-annotations/junit5)
  84. SET(MODULE_TYPE JUNIT5)
  85. }
  86. module JAR_COMPILATION: JAR_LIBRARY {
  87. .ALLOWED=YT_SPEC
  88. .ALIASES=JAVA_TEST_PEERDIR=_NOOP_MACRO JAVA_TEST_EXCLUDE=_NOOP_MACRO
  89. .FINAL_TARGET=no
  90. .DEFAULT_NAME_GENERATOR=FullPath
  91. .SEM=BUILD_JUNIT5_JAR_SEM
  92. PEERDIR+=devtools/junit5-runner
  93. PEERDIR+=build/platform/java/jacoco-agent
  94. when ($OPENSOURCE != "yes") {
  95. PEERDIR+=devtools/jtest-annotations/junit5
  96. }
  97. SET(MODULE_TYPE JUNIT5)
  98. }
  99. }
  100. BUILD_JUNIT4_JAR_SEM=$BUILD_JAR_SEM && junit4_test
  101. multimodule JTEST {
  102. # ATTENTION ya ide idea relies on this submodule name to find scope of `ya make` build before project generation
  103. module JAR_TESTABLE: _JAR_TEST {
  104. .ALLOWED=YT_SPEC
  105. # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle:
  106. # * A -> B -> C -> lib-v1.4
  107. # | |-> DM(lib-v1.1)
  108. # | |-> EXCLUDE(lib-v1.4)
  109. # | |-> FORBID_CONFLICT_DM_RECENT = OK
  110. # |-> DM(lib-v1.1)
  111. # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path)
  112. .IGNORED=JAVA_SRCS RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION PROVIDES FEATURE_VERSION
  113. .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE
  114. .PEERDIRSELF=JAR_COMPILATION
  115. .SEM=PROGRAM_AND_TESTS_CP_COLLECTING_NODES_SEM
  116. SET(MODULE_TYPE JTEST)
  117. PEERDIR(devtools/junit-runner devtools/jtest-annotations/junit4)
  118. DEPENDENCY_MANAGEMENT(contrib/java/com/google/code/gson/gson/2.10.1 contrib/java/com/beust/jcommander/1.72 contrib/java/junit/junit/4.12)
  119. }
  120. module JAR_COMPILATION: JAR_LIBRARY {
  121. .ALLOWED=YT_SPEC
  122. .ALIASES=JAVA_TEST_PEERDIR=_NOOP_MACRO JAVA_TEST_EXCLUDE=_NOOP_MACRO
  123. .FINAL_TARGET=no
  124. .DEFAULT_NAME_GENERATOR=FullPath
  125. .SEM=BUILD_JUNIT4_JAR_SEM
  126. SET(MODULE_TYPE JTEST)
  127. DEPENDS(contrib/java/org/sonarsource/scanner/cli/sonar-scanner-cli/2.8)
  128. PEERDIR+=build/platform/java/jacoco-agent
  129. when ($OPENSOURCE != "yes") {
  130. PEERDIR+=devtools/jtest-annotations/junit4
  131. }
  132. }
  133. }
  134. multimodule JTEST_FOR {
  135. # ATTENTION ya ide idea relies on this submodule name to find scope of `ya make` build before project generation
  136. module JAR_TESTABLE: _JAR_TEST {
  137. .ALLOWED=YT_SPEC
  138. # TODO(svidyuk) JAVA_DEPENDENCIES_CONFIGURATION must not be ignored here but there are diagnostics issues in case of ECLUDE in the middle:
  139. # * A -> B -> C -> lib-v1.4
  140. # | |-> DM(lib-v1.1)
  141. # | |-> EXCLUDE(lib-v1.4)
  142. # | |-> FORBID_CONFLICT_DM_RECENT = OK
  143. # |-> DM(lib-v1.1)
  144. # |-> FORBID_CONFLICT_DM_RECENT = FAIL (because downgrade from v1.4 to v1.1 is detected before understanding that v1.4 was excuded on the examined path)
  145. .IGNORED=JAVA_SRCS RUN_JAVA_PROGRAM JAVA_DEPENDENCIES_CONFIGURATION PROVIDES FEATURE_VERSION
  146. .ALIASES=JAVA_TEST_PEERDIR=PEERDIR JAVA_TEST_EXCLUDE=EXCLUDE
  147. .PEERDIRSELF=JAR_COMPILATION
  148. .SEM=PROGRAM_AND_TESTS_CP_COLLECTING_NODES_SEM
  149. SET(MODULE_TYPE JTEST_FOR)
  150. PEERDIR(${UNITTEST_DIR} devtools/junit-runner)
  151. DEPENDENCY_MANAGEMENT(contrib/java/com/google/code/gson/gson/2.8.6 contrib/java/com/beust/jcommander/1.72 contrib/java/junit/junit/4.12)
  152. }
  153. module JAR_COMPILATION: JAR_LIBRARY {
  154. .ALLOWED=YT_SPEC
  155. .ALIASES=JAVA_TEST_PEERDIR=_NOOP_MACRO JAVA_TEST_EXCLUDE=_NOOP_MACRO
  156. .FINAL_TARGET=no
  157. .DEFAULT_NAME_GENERATOR=FullPath
  158. .SEM=BUILD_JUNIT4_JAR_SEM
  159. SET(MODULE_TYPE JTEST_FOR)
  160. DEPENDS(contrib/java/org/sonarsource/scanner/cli/sonar-scanner-cli/2.8)
  161. PEERDIR(devtools/junit-runner build/platform/java/jacoco-agent ${UNITTEST_DIR})
  162. }
  163. }
  164. multimodule JAVA_CONTRIB_PROGRAM {
  165. module JAR_RUNNABLE: _JAR_RUNNABLE {
  166. .IGNORED=JAVA_SRCS RUN_JAR_PROGRAM RUN_JAVA_PROGRAM JAR_RESOURCE SRC_RESOURCE LOCAL_JAR
  167. .PEERDIRSELF=JAR_COMPILATION
  168. SET(MODULE_TYPE JAVA_PROGRAM)
  169. ENABLE(DISABLE_SCRIPTGEN)
  170. }
  171. module JAR_COMPILATION: JAVA_CONTRIB {
  172. .ALIASES=JAVA_RUNTIME_PEERDIR=_NOOP_MACRO JAVA_RUNTIME_EXCLUDE=_NOOP_MACRO
  173. .FINAL_TARGET=no
  174. .SEM=BUILD_JAR_SEM
  175. }
  176. }
  177. # tag:java-specific
  178. JAVA_VCS_MF_ARG=
  179. COMPILE_JAVA_MF=${hide:JAVA_FAKEID} $COMPILE_JAVA $MAVEN_EXPORT_CMD
  180. # tag:java-specific
  181. when ($EXT_JAVA_VCS_INFO == "yes") {
  182. JAVA_VCS_MF_ARG=--vcs-mf $VCS_JAVA
  183. COMPILE_JAVA_MF=${hide:JAVA_FAKEID} $GENERATE_VCS_JAVA_INFO_NODEP && $COMPILE_JAVA $MAVEN_EXPORT_CMD
  184. }
  185. # tag:java-specific
  186. EXT_JAVA_VCS_INFO=no
  187. ### @usage: EMBED_JAVA_VCS_INFO()
  188. ###
  189. ### Embed manifest with vcs info into `EXTERNAL_JAVA_LIBRARY`
  190. ### By default this is disabled.
  191. macro EMBED_JAVA_VCS_INFO() {
  192. .SEM=add_vcs_info_to_mf ${hide;output:"VcsInfoMfDummy.java"}
  193. ENABLE(EXT_JAVA_VCS_INFO)
  194. }
  195. # tag:java-specific tag:internal
  196. ### @usage: EXTERNAL_JAVA_LIBRARY() #internal
  197. ###
  198. ### EXTERNAL_JAVA_LIBRARY() is a module for creating a .jar file using non-Java code (generators etc.)
  199. ### Unlike regular JAVA_LIBRARY this module doesn't produce .pom file, so it cannot be exported to Maven itself.
  200. ### PEERDIR it from JAVA_LIBRARY or JAVA_PROGRAM for export to Maven.
  201. module EXTERNAL_JAVA_LIBRARY: _BASE_UNIT {
  202. .EXTS=.jsrc .java .jar .mf
  203. .NODE_TYPE=Bundle
  204. .CMD=COMPILE_JAVA_MF
  205. # TODO(YMAKE-27) all contribs involved into opensource export must be JAVA_CONTRIB modules
  206. # and this module must not be intended for export. Such hange will break JBUILD and thus is
  207. # blocked on YMAKE-27
  208. .SEM=JAVA_CONTRIB_SEM
  209. .PEERDIR_POLICY=as_build_from
  210. .FINAL_TARGET=no
  211. .ALIASES=SRCS=_SRCS_NO_GLOBAL
  212. .ALLOWED=EMBED_JAVA_VCS_INFO
  213. .RESTRICTED=EXTERNAL_JAR
  214. .GLOBAL=MAVEN_EXPORT_COORDS EXPORT_GRADLE_PROJECT_COORDS
  215. PEERDIR(build/platform/java/jdk)
  216. PEERDIR+=$JDK_RESOURCE_PEERDIR $EXTERNAL_JAVA_EXTRA_PEERDIR
  217. when ($KOTLIN_PROTO == "yes") {
  218. PEERDIR+=build/platform/java/kotlin contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk8/${KOTLIN_VERSION}
  219. }
  220. when ($MAVEN_EXPORT == "yes") {
  221. when ($MAVEN_DEPLOY == "yes") {
  222. PEERDIR+=build/external_resources/maven
  223. MAVEN_EXPORT_CMD= && $MAVEN_EXPORT_GEN_DEPLST && $MAVEN_EXPORT_GEN_POM && $MAVEN_DEPLOY_CMD
  224. }
  225. otherwise {
  226. MAVEN_EXPORT_CMD= && $MAVEN_EXPORT_GEN_DEPLST && $MAVEN_EXPORT_GEN_POM
  227. }
  228. MAVEN_EXPORT_COORDS_GLOBAL=$MAVEN_EXPORT_GOUP_ID:${MODULE_PREFIX}${REALPRJNAME}:${MAVEN_EXPORT_VERSION}:
  229. }
  230. PEERDIR_TAGS=JAVA_PROTO JAVA_FBS JAVA_IDL PACKAGE_UNION
  231. HAS_MANAGEABLE_PEERS=yes
  232. DYNAMIC_LINK=yes
  233. _PROTO_CMDLINE=$_JAVA_PROTO_CMDLINE
  234. _EVLOG_CMDLINE=$_JAVA_EVLOG_CMDLINE
  235. _FBS_CMDLINE=$_JAVA_FLATC_CMDLINE
  236. when ($PACKAGE_PREFIX) {
  237. PACKAGE_PREFIX_ARGS=--package-prefix=$PACKAGE_PREFIX
  238. }
  239. DISABLE(NEED_PLATFORM_PEERDIRS)
  240. NO_PLATFORM()
  241. SET(MODULE_SUFFIX .jar)
  242. SET(MODULE_LANG JAVA)
  243. _WHEN_EXPORT_GRADLE()
  244. }
  245. # tag:java-specific
  246. ALL_JAR_SOURCES=
  247. LINT_JAVA_SOURCES=
  248. ALL_SRCDIRS=
  249. LINK_JAR_RESOURCES=
  250. LINK_JAR_JSOURCES=
  251. JAR_GEN_SRCS=
  252. JAR_GEN_JSRCS=
  253. macro _JAVA_SRCS(RESOURCES?"yes":"no", SRCDIR=".", PACKAGE_PREFIX="", EXCLUDE[], FILES[], SKIP_CHECK_SRCDIR?"SKIP_CHECK_SRCDIR":"", Globs...) {
  254. _CHECK_JAVA_SRCDIR($SKIP_CHECK_SRCDIR $SRCDIR)
  255. SET_APPEND(ALL_SRCDIRS $SRCDIR)
  256. SET(VAR_SALT $SRCDIR $Globs $EXCLUDE $PACKAGE_PREFIX $RESOURCES $FILES)
  257. SET(JAR_SRCS_GLOB uniq_${hash:VAR_SALT})
  258. _LATE_GLOB(${JAR_SRCS_GLOB} ${pre=${SRCDIR}/:Globs} EXCLUDE ${EXCLUDE})
  259. SET_APPEND(LINT_JAVA_SOURCES \${input;rootrel;ext=.java:${JAR_SRCS_GLOB}})
  260. SET_APPEND(ALL_JAR_SOURCES --jsources ${BINDIR}/misc/${tolower:JAR_SRCS_GLOB}.src.txt --resources ${BINDIR}/misc/${tolower:JAR_SRCS_GLOB}.res.txt --srcdir ${quo:SRCDIR} \${input:${JAR_SRCS_GLOB}} ${pre=\$\{input\:\";suf=\"\}:FILES})
  261. _FILL_JAR_COPY_RESOURCES_CMD(LINK_JAR_RESOURCES ${quo:SRCDIR} ${BINDIR}/cls ${PACKAGE_PREFIX} ${BINDIR}/misc/${tolower:JAR_SRCS_GLOB}.res.txt)
  262. _FILL_JAR_COPY_RESOURCES_CMD(LINK_JAR_JSOURCES ${quo:SRCDIR} ${BINDIR}/src ${PACKAGE_PREFIX} ${BINDIR}/misc/${tolower:JAR_SRCS_GLOB}.src.txt)
  263. _FILL_JAR_GEN_SRCS(JAR_GEN_SRCS JAR $SRCDIR ${BINDIR}/cls ${BINDIR}/all-java.srclst $KT_SRCLIST ${BINDIR}/misc/all-gr-sources.txt ${BINDIR}/misc/${tolower:JAR_SRCS_GLOB}.res.txt $Globs EXCLUDE $EXCLUDE)
  264. _FILL_JAR_GEN_SRCS(JAR_GEN_JSRCS SRC_JAR $SRCDIR ${BINDIR}/cls ${BINDIR}/all-java.srclst $KT_SRCLIST ${BINDIR}/misc/all-gr-sources.txt ${BINDIR}/misc/${tolower:JAR_SRCS_GLOB}.src.txt $Globs EXCLUDE $EXCLUDE)
  265. }
  266. # tag:java-specific
  267. # Fill semantic jar_source_set by JAVA_SRCS() Args
  268. SEM_JAR_SOURCE_SET=
  269. macro _SEM_JAR_SOURCE_SET(SRCDIR=".", PACKAGE_PREFIX="", EXCLUDE[], FILES[], RESOURCES?"RESOURCES":"", SKIP_CHECK_SRCDIR?"SKIP_CHECK_SRCDIR":"", Globs...) {
  270. # Now ignore SKIP_CHECK_SRCDIR, PACKAGE_PREFIX, EXCLUDE, RESOURCES, FILES
  271. SET_APPEND(SEM_JAR_SOURCE_SET && jar_source_set ${pre=${SRCDIR}\::Globs})
  272. }
  273. ### Fill JAVA_SRCS to value for ya ide idea and real apply for late globs
  274. macro FULL_JAVA_SRCS(Args...) {
  275. _IDEA_JAVA_SRCS_VALUE($Args)
  276. _JAVA_SRCS($Args)
  277. }
  278. # tag:java-specific
  279. ### @usage: DEFAULT_JAVA_SRCS_LAYOUT()
  280. ###
  281. ### DEFAULT_JAVA_SRCS_LAYOUT() declare all source files can be find at maven/gradle standard path src/main/java **/*.java
  282. ### and all resources an be find at maven/gradle standard path src/main/resources **/*
  283. macro DEFAULT_JAVA_SRCS_LAYOUT() {
  284. # Maven default source paths, supported by gradle too
  285. # JAVA_SRCS may be alias of FULL_JAVA_SRCS
  286. FULL_JAVA_SRCS(SRCDIR src/main/java **/*.java SKIP_CHECK_SRCDIR)
  287. FULL_JAVA_SRCS(RESOURCES SRCDIR src/main/resources **/* SKIP_CHECK_SRCDIR)
  288. }
  289. # tag:java-specific
  290. ### @usage: DEFAULT_JUNIT_JAVA_SRCS_LAYOUT()
  291. ###
  292. ### DEFAULT_JUNIT_JAVA_SRCS_LAYOUT() declare all test source files can be find at maven/gradle standard path src/test/java **/*.java
  293. ### and all resources can be find at maven/gradle standard path src/test/resources **/*
  294. macro DEFAULT_JUNIT_JAVA_SRCS_LAYOUT() {
  295. # Maven default test source paths, supported by gradle too
  296. # JAVA_SRCS may be alias of FULL_JAVA_SRCS
  297. FULL_JAVA_SRCS(SRCDIR java **/*.java SKIP_CHECK_SRCDIR)
  298. FULL_JAVA_SRCS(RESOURCES SRCDIR resources **/* SKIP_CHECK_SRCDIR)
  299. }
  300. macro _HASH_HELPER(Args...) {
  301. .CMD=${hash:Args}
  302. .SEM=${hash:Args}
  303. }
  304. macro _GENTAR_HELPER(OUT_DIR[], Args...) {
  305. .CMD=${cwd:BINDIR} $YMAKE_PYTHON ${input:"build/scripts/autotar_gendirs.py"} --pack ${OUT_DIR} --outs ${output;tared;suf=.$_HASH_HELPER($Args).gentar:OUT_DIR} ${kv;hide:"tared_kind nodir"}
  306. }
  307. # tag:java-specific
  308. RUN_JAR_PROG_CP_PRE=@
  309. RUN_JAR_PROG_CP_SUF=.cplst
  310. when($JDK_VERSION == "8") {
  311. RUN_JAR_PROG_CP_PRE=
  312. RUN_JAR_PROG_CP_SUF=
  313. }
  314. # tag:java-specific
  315. JDK_LATEST_VERSION=19
  316. JDK_LATEST_PEERDIR=build/platform/java/jdk/jdk${JDK_LATEST_VERSION}
  317. # tag:java-specific
  318. macro _DO_2_RUN_JAR_PROGRAM(IN_DIRS_VAR="uniq_", IN_DIRS_INPUTS[], IN{input}[], IN_NOPARSE{input}[], IN_DIR[], OUT_NOAUTO{output}[], OUT{output}[], TOOL{tool}[], OUT_DIR[], CLASSPATH[], ADD_SRCS_TO_CLASSPATH?"yes":"no", CWD="${ARCADIA_BUILD_ROOT}", STDOUT="", STDOUT_NOAUTO="", Args...) {
  319. _LATE_GLOB(${IN_DIRS_VAR} ${suf=/**/*:IN_DIR})
  320. _CHECK_RUN_JAVA_PROG_CLASSPATH($CLASSPATH)
  321. .PEERDIR=build/platform/java/jdk $JDK_RESOURCE_PEERDIR
  322. .CMD=${kv;hide:"p RJ"} ${kv;hide:"pc blue"} ${hide:JAVA_FAKEID} ${cwd:BINDIR} $YMAKE_PYTHON ${input:"build/scripts/mkdir.py"} ${OUT_DIR} && ${cwd:CWD} $YMAKE_PYTHON ${input:"build/scripts/setup_java_tmpdir.py"} $YMAKE_PYTHON ${input:"build/scripts/stdout2stderr.py"} ${pre=--file=:STDOUT} ${output;hide:STDOUT} ${pre=--file=:STDOUT_NOAUTO} ${output;hide;noauto:STDOUT_NOAUTO} $YMAKE_PYTHON ${input:"build/scripts/fix_java_command_file_cp.py"} --build-root ${ARCADIA_BUILD_ROOT} $JDK_RESOURCE/bin/java -Dfile.encoding=utf8 -classpath ${RUN_JAR_PROG_CP_PRE}${tool:CLASSPATH}${RUN_JAR_PROG_CP_SUF} ${Args} && $_GENTAR_HELPER($CLASSPATH $IN_DIR $IN $IN_NOPARSE $TOOL $Args OUT_DIR $OUT_DIR) ${input;hide:IN} ${input;context=TEXT;hide:IN_NOPARSE} ${output;noauto;hide:OUT_NOAUTO} ${output;hide:OUT} ${tool;hide:TOOL} ${IN_DIRS_INPUTS}
  323. }
  324. # tag:java-specific
  325. macro _DO_1_RUN_JAR_PROGRAM(IN_DIRS_VAR="uniq", Args...) {
  326. _DO_2_RUN_JAR_PROGRAM($Args IN_DIRS_VAR $IN_DIRS_VAR IN_DIRS_INPUTS ${"$"}{input;hide:$IN_DIRS_VAR})
  327. }
  328. # tag:java-specific
  329. macro RUN_JAVA_PROGRAM(Args...) {
  330. _DO_1_RUN_JAR_PROGRAM($Args IN_DIRS_VAR uniq_${hash:Args})
  331. }
  332. # tag:java-specific
  333. _JAR_ANN_PROCESSORS=
  334. _JAR_ANN_PROC_OPT_PREFIX=
  335. macro JAR_ANNOTATION_PROCESSOR(Classes...) {
  336. SET_APPEND(_JAR_ANN_PROCESSORS $Classes)
  337. SET(_JAR_ANN_PROC_OPT_PREFIX -processor)
  338. # for ya ide idea only
  339. SET_APPEND(ANNOTATION_PROCESSOR_VALUE $ARGS_DELIM $Classes)
  340. }
  341. # tag:java-specific
  342. macro _JAR_ANN_PROC_OPTS(Classes...) {
  343. .CMD=$_JAR_ANN_PROC_OPT_PREFIX ${join=,:Classes}
  344. }
  345. # tag:java-specific
  346. macro _NOOP_MACRO(Args...) {
  347. ENABLE(UNUSED_MACRO)
  348. }
  349. # tag:java-specific
  350. module _JAR_BASE: _BARE_UNIT {
  351. .NODE_TYPE=Bundle
  352. .CMD=TOUCH_UNIT
  353. .PEERDIR_POLICY=as_build_from
  354. .FINAL_TARGET=no
  355. .ALIASES=SRCS=_SRCS_NO_GLOBAL
  356. .ALLOWED=EMBED_JAVA_VCS_INFO DEPENDENCY_MANAGEMENT EXCLUDE
  357. .DEFAULT_NAME_GENERATOR=TwoDirNames
  358. .RESTRICTED=WITH_JDK RESOURCE RESOURCE_FILES
  359. .GLOBAL=EXPORT_GRADLE_PROJECT_COORDS
  360. PEERDIR_TAGS=JAVA_PROTO JAVA_FBS JAVA_IDL DLL JAR_COMPILATION __EMPTY__
  361. HAS_MANAGEABLE_PEERS=yes
  362. DYNAMIC_LINK=yes
  363. _PROTO_CMDLINE=$_JAVA_PROTO_CMDLINE
  364. _EVLOG_CMDLINE=$_JAVA_EVLOG_CMDLINE
  365. _FBS_CMDLINE=$_JAVA_FLATC_CMDLINE
  366. DISABLE(NEED_PLATFORM_PEERDIRS)
  367. NO_PLATFORM()
  368. VCS_JAVA=${suf=.__vcs_version__.mf:TARGET}
  369. SET(MODULE_LANG JAVA)
  370. _WHEN_EXPORT_GRADLE()
  371. }
  372. JAVA_CONTRIB_PROXY_SEM=IGNORED
  373. # tag:java-specific
  374. module JAVA_CONTRIB_PROXY: _JAR_BASE {
  375. .SEM=JAVA_CONTRIB_PROXY_SEM
  376. _DONT_REQUIRE_LICENSE()
  377. }
  378. # tag:java-specific
  379. macro _FETCH_CONTRIB(Id, Out, SBR="sbr:") {
  380. .CMD=${hide:SANDBOX_FAKEID} ${cwd:BINDIR} ${resource;pre=$SBR:Id} $YMAKE_PYTHON ${input:"build/scripts/fetch_from_sandbox.py"} --resource-file $(RESOURCE_ROOT)/sbr/$Id/resource --resource-id $Id --copy-to ${output:Out} ${input;hide:"build/scripts/fetch_from.py"} ${requirements;hide:"network:full"} ${kv;hide:"p SB"} ${kv;hide:"pc yellow"} ${kv;hide:"show_out"}
  381. ADD_CHECK(check.resource $Id)
  382. }
  383. # tag:java-specific
  384. LOCAL_JAR_PATH=
  385. LOCAL_SOURCES_JAR_PATH=
  386. JAR_RESOURCE_ID=
  387. SRC_RESOURCE_ID=
  388. FETCH_SRCS_JAR=
  389. FETCH_TARGET_JAR=
  390. FETCH_CONTRIB_JAR=${hide:JAVA_FAKEID} $FETCH_TARGET_JAR $FETCH_SRCS_JAR
  391. # tag:java-specific
  392. macro JAR_RESOURCE(Id) {
  393. SET(JAR_RESOURCE_ID $Id)
  394. }
  395. # tag:java-specific
  396. macro SRC_RESOURCE(Id) {
  397. SET(SRC_RESOURCE_ID $Id)
  398. }
  399. # tag:java-specific
  400. macro LOCAL_JAR(File) {
  401. SET(LOCAL_JAR_PATH $File)
  402. }
  403. # tag:java-specific
  404. macro LOCAL_SOURCES_JAR(File) {
  405. SET(LOCAL_SOURCES_JAR_PATH $File)
  406. }
  407. JAVA_CONTRIB_SEM= \
  408. consumer_classpath $EXPORT_GRADLE_PROJECT_COORDS ${hide:TARGET} ${hide:AUTO_INPUT} && \
  409. peers_closure $MANAGED_PEERS_CLOSURE && \
  410. peers_closure_coords $EXPORT_GRADLE_PROJECT_COORDS_GLOBAL && \
  411. exclude $EXCLUDE_VALUE && \
  412. IGNORED
  413. # tag:java-specific
  414. module JAVA_CONTRIB: _JAR_BASE {
  415. .CMD=FETCH_CONTRIB_JAR
  416. .PEERDIR_POLICY=as_include
  417. .SEM=JAVA_CONTRIB_SEM
  418. .FINAL_TARGET=yes
  419. .GLOBAL=MAVEN_EXPORT_COORDS EXPORT_GRADLE_PROJECT_COORDS
  420. when ($JAR_RESOURCE_ID) {
  421. FETCH_TARGET_JAR= && $_FETCH_CONTRIB($JAR_RESOURCE_ID ${BINDIR}/${MODULE_PREFIX}${REALPRJNAME}${MODULE_SUFFIX})
  422. }
  423. otherwise {
  424. when ($LOCAL_JAR_PATH) {
  425. FETCH_TARGET_JAR= && $FS_TOOLS copy ${input:LOCAL_JAR_PATH} $TARGET
  426. }
  427. otherwise {
  428. FETCH_TARGET_JAR= && $GENERATE_VCS_JAVA_INFO_NODEP && ${cwd:BINDIR} $JDK_RESOURCE/bin/jar cfvm $TARGET $VCS_JAVA .
  429. PEERDIR+=build/platform/java/jdk
  430. PEERDIR+=$JDK_RESOURCE_PEERDIR
  431. }
  432. }
  433. when ($SRC_RESOURCE_ID) {
  434. FETCH_SRCS_JAR= && $_FETCH_CONTRIB($SRC_RESOURCE_ID ${BINDIR}/${REALPRJNAME}-sources.jar)
  435. }
  436. otherwise {
  437. when ($LOCAL_SOURCES_JAR_PATH) {
  438. FETCH_SRCS_JAR= && $FS_TOOLS copy ${input:LOCAL_SOURCES_JAR_PATH} ${output;pre=${BINDIR}/;suf=-sources.jar:REALPRJNAME}
  439. }
  440. otherwise {
  441. FETCH_SRCS_JAR= && $GENERATE_VCS_JAVA_INFO_NODEP && $FS_TOOLS md ${BINDIR}/fake-src && ${cwd;suf=/fake-src:BINDIR} $JDK_RESOURCE/bin/jar cfvm ${output;pre=${BINDIR}/;suf=-sources.jar:REALPRJNAME} $VCS_JAVA .
  442. PEERDIR+=build/platform/java/jdk
  443. PEERDIR+=$JDK_RESOURCE_PEERDIR
  444. }
  445. }
  446. when ($MAVEN_EXPORT == "yes") {
  447. _MAKEFILE_INCLUDE_LIKE_DEPS+=pom.xml
  448. FETCH_CONTRIB_JAR+= && $MAVEN_EXPORT_GEN_DEPLST
  449. }
  450. SET(MODULE_SUFFIX .jar)
  451. _SETUP_MAVEN_EXPORT_COORDS_IF_NEED($MODDIR)
  452. }
  453. MAKE_JAVA_CLASSPATH_FILE=$YMAKE_PYTHON ${input:"build/scripts/make_java_classpath_file.py"} ${input;hide:"build/scripts/process_command_files.py"}
  454. # tag:kotlin-specific
  455. KOTLINC_OPTS_VALUE=
  456. # tag:kotlin-specific
  457. KT_SRCLIST=${BINDIR}/misc/all-kt-sources.txt
  458. KT_SRSCLIST_FLAG=--kotlin $KT_SRCLIST
  459. KT_CLASSES_DIR=${BINDIR}/kt_cls
  460. KT_CLASSPATH=${BINDIR}/kt_cp.txt
  461. COLLECT_KT_CLASSPATH=${WRITER_PY} --file ${BINDIR}/kt_bfg.txt -m --ya-start-command-file ${ext=.jar:MANAGED_PEERS_CLOSURE} --ya-end-command-file
  462. LINK_KT_CLASSPATH=${MAKE_JAVA_CLASSPATH_FILE} ${BINDIR}/kt_bfg.txt $KT_CLASSPATH && $FS_TOOLS md $KT_CLASSES_DIR
  463. COMPILE_KT= \
  464. ${cwd:ARCADIA_BUILD_ROOT} ${env:"LC_ALL=en_US.UTF-8"} $YMAKE_PYTHON ${input:"build/scripts/with_pathsep_resolve.py"} $YMAKE_PYTHON ${input:"build/scripts/run_javac.py"} --kotlin --sources-list $KT_SRCLIST \
  465. $JDK_RESOURCE/bin/java -jar $KOTLIN_COMPILER_RESOURCE_GLOBAL/kotlin-compiler.jar -no-stdlib -module-name $REALPRJNAME -jvm-target ${KOTLIN_JVM_TARGET} \
  466. @$KT_SRCLIST -classpath @$KT_CLASSPATH $KOTLINC_FLAGS_VALUE -d $KT_CLASSES_DIR $KOTLINC_OPTS_VALUE
  467. ALL_KT_COMMANDS=
  468. KT_CLASSPATH_ITEM=
  469. # tag:kotlin-specific
  470. KT_KAPT_SOURCES_DIR=${BINDIR}/kapt_gen_src
  471. KT_KAPT_STUBS_DIR=${BINDIR}/kapt_gen_stubs
  472. KT_KAPT_AP_CLASSPATH=
  473. KT_KAPT_PLUGIN_OPTS=-P plugin:org.jetbrains.kotlin.kapt3:sources=${KT_KAPT_SOURCES_DIR} -P plugin:org.jetbrains.kotlin.kapt3:classes=${KT_CLASSES_DIR} -P plugin:org.jetbrains.kotlin.kapt3:stubs=${KT_KAPT_STUBS_DIR} -P plugin:org.jetbrains.kotlin.kapt3:aptMode=stubsAndApt
  474. ### @usage: KAPT_OPTS(opts...)
  475. ###
  476. ### Used to specify annotation processor qualified class names.
  477. ### If specified multiple times, only last specification is used.
  478. macro KAPT_OPTS(Args...) {
  479. SET_APPEND(KT_KAPT_PLUGIN_OPTS ${pre=-P :Args})
  480. }
  481. ### @usage: KAPT_ANNOTATION_PROCESSOR(processors...)
  482. ###
  483. ### Used to specify annotation processor qualified class names.
  484. ### If specified multiple times, only last specification is used.
  485. macro KAPT_ANNOTATION_PROCESSOR(Args...) {
  486. KAPT_OPTS(${pre="plugin:org.jetbrains.kotlin.kapt3:processors=":Args})
  487. }
  488. ### @usage: KAPT_ANNOTATION_PROCESSOR_CLASSPATH(jars...)
  489. ###
  490. ### Used to specify classpath for annotation processors.
  491. ### If specified multiple times, all specifications are used.
  492. macro KAPT_ANNOTATION_PROCESSOR_CLASSPATH(Args...) {
  493. PEERDIR($Args)
  494. SET_APPEND(KT_KAPT_AP_CLASSPATH $Args)
  495. }
  496. # tag:java-specific
  497. JAVAC_CMD=$JDK_RESOURCE/bin/javac
  498. ERROR_PRONE_JAVAC_CMD=${YMAKE_PYTHON} ${input:"build/scripts/build_java_with_error_prone2.py"} $JDK_RESOURCE/bin/java $JDK_RESOURCE/bin/javac $ERROR_PRONE_RESOURCE/error_prone.jar
  499. # tag:java-specific tag:codenav
  500. JAVA_YNDEXING=no
  501. # tag:java-specific
  502. when ($USE_SYSTEM_KYTHE) {
  503. KYTHE_RESOURCE=$USE_SYSTEM_KYTHE
  504. }
  505. otherwise {
  506. KYTHE_RESOURCE=$KYTHE_RESOURCE_GLOBAL
  507. }
  508. # tag:java-specific tag:codenav
  509. _JAVA_YNDEXING_CMD=$YMAKE_PYTHON ${input:"build/scripts/build_java_codenav_index.py"} $TARGET $ARCADIA_BUILD_ROOT $ARCADIA_ROOT ${BINDIR}/all-java.srclst $JDK_RESOURCE/bin/java -jar $KYTHE_RESOURCE/kythe/extractors/javac_extractor.jar
  510. _DO_JAVA_YNDEXING=
  511. # tag:java-specific
  512. SOURCES_JAR=no
  513. when ($BUILD_TYPE == "DEBUG" && $NO_DEBUGINFO != "yes") {
  514. SOURCES_JAR=yes
  515. }
  516. _PACK_SRC_JAR_IMPL=&& $FS_TOOLS md ${BINDIR}/src $JAR_GEN_JSRCS $LINK_JAR_JSOURCES && ${cwd;suf=/src:BINDIR} $JDK_RESOURCE/bin/jar cfvm ${output;pre=${BINDIR}/${MODULE_PREFIX};suf=-sources.jar:REALPRJNAME} $VCS_JAVA .
  517. _PACK_SRC_JAR=
  518. # tag:java-specific
  519. _PACK_JNI=
  520. _PACK_JNI_CMD= && $FS_TOOLS link_or_copy_to_dir --ya-start-command-file ${ext=.so:MANAGED_PEERS_CLOSURE} ${ext=.dll:MANAGED_PEERS_CLOSURE} ${ext=.dylib:MANAGED_PEERS_CLOSURE} --ya-end-command-file ${BINDIR}/cls
  521. # tag:java-specific
  522. _MAKE_JSTYLE_FILE_LIST=
  523. # tag:java-specific
  524. _LINK_UBERJAR=
  525. _UBERJAR_SELF=
  526. _DO_LINK_UBERJAR= && $JDK_RESOURCE/bin/java -cp $UBERJAR_RESOURCE/devtools-java_shader.jar ru.yandex.devtools.emigrante.Main --out-jar $TARGET $_UBERJAR_SELF ${ext=.jar;pre=--jar :MANAGED_PEERS_CLOSURE} ${UBERJAR_PREFIX_FLAG} ${UBERJAR_HIDE_EXCLUDE_FLAGS} $UBERJAR_PATH_EXCLUDES ${UBERJAR_MANIFEST_TRANSFORMER_MAIN_FLAG} ${UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE_FLAGS} ${UBERJAR_APPENDING_TRANSFORMER_FLAGS} ${UBERJAR_SERVICES_RESOURCE_TRANSFORMER_FLAG} \
  527. && $YMAKE_PYTHON ${input:"build/scripts/mkdir.py"} $BINDIR/_empty/META-INF \
  528. && $YMAKE_PYTHON ${input:"build/scripts/touch.py"} $BINDIR/_empty/META-INF/MANIFEST.MF \
  529. && $UPDATE_VCS_JAVA_INFO_NODEP($TARGET) \
  530. && ${cwd;suf=/_empty:BINDIR} ${JDK_RESOURCE}/bin/jar ufv ${TARGET} META-INF/MANIFEST.MF \
  531. && $JDK_RESOURCE/bin/jar ufvm $TARGET $VCS_JAVA
  532. # tag:java-specific
  533. macro _PACK_JAR_HELPER(Out) {
  534. .CMD=${cwd;suf=/cls:BINDIR} ${env:"LC_ALL=en_US.UTF-8"} $JDK_RESOURCE/bin/jar cfvm $Out $VCS_JAVA .
  535. }
  536. # tag:java-specific
  537. macro _JAVAC_RUN_HELPER(JAVAC_CMD_WITH_ARGS...) {
  538. .CMD=${cwd:ARCADIA_BUILD_ROOT} ${env:"LC_ALL=en_US.UTF-8"} $YMAKE_PYTHON ${input:"build/scripts/with_pathsep_resolve.py"} $YMAKE_PYTHON ${input:"build/scripts/setup_java_tmpdir.py"} $YMAKE_PYTHON ${input:"build/scripts/run_javac.py"} --sources-list ${BINDIR}/all-java.srclst ${JAVAC_CMD_WITH_ARGS} @${BINDIR}/all-java.srclst -classpath ${ARCADIA_BUILD_ROOT}/bfg.jar -Xpkginfo:always ${JAVAC_OPTS} $_JAR_ANN_PROC_OPTS($_JAR_ANN_PROCESSORS) -d ${BINDIR}/cls -g -encoding UTF-8
  539. }
  540. macro _ADD_HIDDEN_INPUTS(Inputs...) {
  541. .CMD=${input;hide:Inputs}
  542. }
  543. # tag:java-specific
  544. ERROR_PRONE_JDK16_ADD_OPENS=-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
  545. ERROR_PRONE_2_7_1_FORCED_OPTS=-Xep:InlineMeInliner:OFF -Xep:SameNameButDifferent:OFF
  546. # tag:java-specific
  547. macro _ADD_OPTS_IF_NON_EMPTY(Opt, Args...) {
  548. .CMD=${pre=$Opt :Args}
  549. }
  550. macro _ADD_GEN_POM_FROM_COORD_FILES_ARGS(Deps...) {
  551. .CMD=${pre=--deps-coords ;ext=.jar;suf=.mvn_coords:Deps}
  552. }
  553. MAVEN_BIN=$MAVEN_RESOURCE_GLOBAL/bin/mvn
  554. MAVEN_EXPORT_OUT_DIR_FLAG=$_ADD_OPTS_IF_NON_EMPTY(--output-dir ${MAVEN_EXPORT_OUT_DIR})
  555. MAVEN_EXPORT_SOURCE_DIRS=$_ADD_OPTS_IF_NON_EMPTY(--source-dirs ${ALL_SRCDIRS})
  556. MAVEN_EXPORT_DEPS_COORS=$_ADD_GEN_POM_FROM_COORD_FILES_ARGS(${MANAGED_PEERS_CLOSURE})
  557. MAVEN_EXPORT_OUT_DIR=
  558. MAVEN_EXPORT=no
  559. MAVEN_DEPLOY=no
  560. MAVEN_DEPLOY_SOURCES=
  561. MAVEN_EXPORT_VERSION={vcs_revision}
  562. MAVEN_EXPORT_GEN_DEPLST= \
  563. $WRITER_PY \
  564. --file ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.mvn_coords:REALPRJNAME} \
  565. --ya-start-command-file -m ${pre=D=:MAVEN_EXPORT_COORDS_GLOBAL} ${pre=E=:EXCLUDED_MAVEN_EXPORT_COORDS_GLOBAL} --ya-end-command-file \
  566. ${hide:APPLIED_EXCLUDES}
  567. MAVEN_EXPORT_GEN_POM=${kv;hide:"mvn_export yes"} \
  568. $YMAKE_PYTHON ${input:"build/scripts/generate_pom.py"} \
  569. --from-coord-files \
  570. --vcs-info $(VCS)/vcs.json \
  571. --target-path $MODDIR \
  572. $MAVEN_EXPORT_SOURCE_DIRS \
  573. $MAVEN_EXPORT_DEPS_COORS \
  574. $MAVEN_EXPORT_OUT_DIR_FLAG \
  575. --target-coords ${suf=.mvn_coords:TARGET} \
  576. --pom-path ${output:"pom.xml"}
  577. MAVEN_DEPLOY_CMD=$YMAKE_PYTHON ${input:"build/scripts/stdout2stderr.py"} $MAVEN_BIN \
  578. deploy:deploy-file -DpomFile=$BINDIR/pom.xml \
  579. -Dfile=$TARGET -DrepositoryId=$MAVEN_REPO_ID -Durl=$MAVEN_REPO_URL -Djava.net.preferIPv4Addresses=false -Djava.net.preferIPv6Addresses=true \
  580. ${MAVEN_DEPLOY_SOURCES} \
  581. $_ADD_OPTS_IF_NON_EMPTY(-gs $MAVEN_EXPORT_SETTINGS) \
  582. $_ADD_OPTS_IF_NON_EMPTY(-s $MAVEN_EXPORT_SETTINGS)
  583. MAVEN_EXPORT_CMD=
  584. # tag:java-specific
  585. JAVA_COVERAGE_SRCLIST_FLAG=--coverage ${output;pre=${MODULE_PREFIX};suf=.cpsf:REALPRJNAME} --source-root ${ARCADIA_ROOT}
  586. JAVA_COVERAGE_SRCLIST=
  587. PREPARE_JAVA_BUILD_DIRS=$FS_TOOLS md ${BINDIR}/cls && $FS_TOOLS md ${BINDIR}/misc
  588. EXTRACT_GENDIRS=${cwd:BINDIR} $YMAKE_PYTHON ${input:"build/scripts/autotar_gendirs.py"} --unpack --ext .gentar ${ext=.gentar:AUTO_INPUT}
  589. COLLECT_JAVA_SRCLIST=${YMAKE_PYTHON} ${input:"build/scripts/make_java_srclists.py"} ${input;hide:"build/scripts/process_command_files.py"} ${input;hide:"build/scripts/java_pack_to_file.py"} --moddir ${CURDIR} --java ${BINDIR}/all-java.srclst ${KT_SRSCLIST} ${JAVA_COVERAGE_SRCLIST} --ya-start-command-file ${ALL_JAR_SOURCES} ${ext=.java:AUTO_INPUT} ${ext=.kt:AUTO_INPUT} --ya-end-command-file
  590. COLLECT_CLASSPATH=${WRITER_PY} --file ${BINDIR}/bfg.txt -m --ya-start-command-file ${rootrel:MANAGED_PEERS_CLOSURE} $KT_CLASSPATH_ITEM --ya-end-command-file
  591. LINK_CLASSPATH=${YMAKE_PYTHON} ${input:"build/scripts/make_manifest_from_bf.py"} ${BINDIR}/bfg.txt ${ARCADIA_BUILD_ROOT}/bfg.jar
  592. COMPILE_JAVA_SRCLIST=$_JAVAC_RUN_HELPER($JAVAC_CMD)
  593. PACK_JAR=$_PACK_JAR_HELPER($TARGET)
  594. # NOTE: No && before LINK_JAR_RESOURCES, ALL_KT_COMMANDS and JAR_GEN_SRCS needed since those vars either empty or starts with &&
  595. LINK_JAR=${hide:JAVA_FAKEID} ${kv;hide:"p JV"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} ${requirements;hide:"cpu:2"} \
  596. $PREPARE_JAVA_BUILD_DIRS \
  597. && $EXTRACT_GENDIRS \
  598. && $COLLECT_JAVA_SRCLIST \
  599. $JAR_GEN_SRCS \
  600. $ALL_KT_COMMANDS \
  601. && $COLLECT_CLASSPATH \
  602. && $LINK_CLASSPATH \
  603. && $COMPILE_JAVA_SRCLIST \
  604. $LINK_JAR_RESOURCES \
  605. && ${cwd;suf=/cls:BINDIR} $GENERATE_VCS_JAVA_INFO_NODEP . \
  606. $_PACK_SRC_JAR \
  607. $_PACK_JNI \
  608. && $PACK_JAR \
  609. $_DO_JAVA_YNDEXING \
  610. $_MAKE_JSTYLE_FILE_LIST \
  611. $_LINK_UBERJAR \
  612. $MAVEN_EXPORT_CMD \
  613. $_ADD_HIDDEN_INPUTS($JAVA_EXTERNAL_DEPENDENCIES_VALUE)
  614. # tag:java-specific
  615. _EXT_SRC_JAR=
  616. _EXT_JAR=
  617. _COPY_EXT_SRC_JAR= && $FS_TOOLS md ${BINDIR}/empty && ${cwd;suf=/empty:BINDIR} $JDK_RESOURCE/bin/jar cfvM ${output;pre=${BINDIR}/${MODULE_PREFIX};suf=-sources.jar:REALPRJNAME} .
  618. _DO_USE_EXT_JAR=${hide:JAVA_FAKEID} $FS_TOOLS copy ${input:_EXT_JAR} $TARGET $_COPY_EXT_SRC_JAR $MAVEN_EXPORT_CMD
  619. _DO_COPY_EXT_SRC_JAR= && $FS_TOOLS copy $_EXT_SRC_JAR ${output;pre=${BINDIR}/${MODULE_PREFIX};suf=-sources.jar:REALPRJNAME}
  620. macro JAVA_RESOURCE(JAR, SOURCES="") {
  621. SET(_EXT_SRC_JAR $SOURCES)
  622. SET(_EXT_JAR $JAR)
  623. }
  624. # tag:java-specific tag:fbs
  625. JAVA_FLATBUFFERS_VERSION = 23.5.26
  626. _KOTLIN_ALLOWED_VERSIONS = contrib/java/org/jetbrains/kotlin/kotlin-allopen/${KOTLIN_VERSION} \
  627. contrib/java/org/jetbrains/kotlin/kotlin-allopen-compiler-plugin/${KOTLIN_VERSION} \
  628. contrib/java/org/jetbrains/kotlin/kotlin-annotation-processing/${KOTLIN_VERSION} \
  629. contrib/java/org/jetbrains/kotlin/kotlin-compiler/${KOTLIN_VERSION} \
  630. contrib/java/org/jetbrains/kotlin/kotlin-compiler-embeddable/${KOTLIN_VERSION} \
  631. contrib/java/org/jetbrains/kotlin/kotlin-daemon-client/${KOTLIN_VERSION} \
  632. contrib/java/org/jetbrains/kotlin/kotlin-daemon-embeddable/${KOTLIN_VERSION} \
  633. contrib/java/org/jetbrains/kotlin/kotlin-gradle-plugin-api/${KOTLIN_VERSION} \
  634. contrib/java/org/jetbrains/kotlin/kotlin-gradle-plugin-model/${KOTLIN_VERSION} \
  635. contrib/java/org/jetbrains/kotlin/kotlin-lombok-compiler-plugin/${KOTLIN_VERSION} \
  636. contrib/java/org/jetbrains/kotlin/kotlin-main-kts/${KOTLIN_VERSION} \
  637. contrib/java/org/jetbrains/kotlin/kotlin-maven-allopen/${KOTLIN_VERSION} \
  638. contrib/java/org/jetbrains/kotlin/kotlin-maven-lombok/${KOTLIN_VERSION} \
  639. contrib/java/org/jetbrains/kotlin/kotlin-maven-noarg/${KOTLIN_VERSION} \
  640. contrib/java/org/jetbrains/kotlin/kotlin-maven-serialization/${KOTLIN_VERSION} \
  641. contrib/java/org/jetbrains/kotlin/kotlin-noarg-compiler-plugin/${KOTLIN_VERSION} \
  642. contrib/java/org/jetbrains/kotlin/kotlin-osgi-bundle/${KOTLIN_VERSION} \
  643. contrib/java/org/jetbrains/kotlin/kotlin-reflect/${KOTLIN_VERSION} \
  644. contrib/java/org/jetbrains/kotlin/kotlin-scripting-common/${KOTLIN_VERSION} \
  645. contrib/java/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/${KOTLIN_VERSION} \
  646. contrib/java/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/${KOTLIN_VERSION} \
  647. contrib/java/org/jetbrains/kotlin/kotlin-scripting-ide-services/${KOTLIN_VERSION} \
  648. contrib/java/org/jetbrains/kotlin/kotlin-scripting-jsr223/${KOTLIN_VERSION} \
  649. contrib/java/org/jetbrains/kotlin/kotlin-scripting-jvm/${KOTLIN_VERSION} \
  650. contrib/java/org/jetbrains/kotlin/kotlin-scripting-jvm-host/${KOTLIN_VERSION} \
  651. contrib/java/org/jetbrains/kotlin/kotlin-script-runtime/${KOTLIN_VERSION} \
  652. contrib/java/org/jetbrains/kotlin/kotlin-script-util/${KOTLIN_VERSION} \
  653. contrib/java/org/jetbrains/kotlin/kotlin-serialization-compiler-plugin/${KOTLIN_VERSION} \
  654. contrib/java/org/jetbrains/kotlin/kotlin-stdlib/${KOTLIN_VERSION} \
  655. contrib/java/org/jetbrains/kotlin/kotlin-stdlib-common/${KOTLIN_VERSION} \
  656. contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk7/${KOTLIN_VERSION} \
  657. contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk8/${KOTLIN_VERSION} \
  658. contrib/java/org/jetbrains/kotlin/kotlin-stdlib-js/${KOTLIN_VERSION} \
  659. contrib/java/org/jetbrains/kotlin/kotlin-test/${KOTLIN_VERSION} \
  660. contrib/java/org/jetbrains/kotlin/kotlin-test-annotations-common/${KOTLIN_VERSION} \
  661. contrib/java/org/jetbrains/kotlin/kotlin-test-common/${KOTLIN_VERSION} \
  662. contrib/java/org/jetbrains/kotlin/kotlin-test-js/${KOTLIN_VERSION} \
  663. contrib/java/org/jetbrains/kotlin/kotlin-test-junit/${KOTLIN_VERSION} \
  664. contrib/java/org/jetbrains/kotlin/kotlin-test-junit5/${KOTLIN_VERSION} \
  665. contrib/java/org/jetbrains/kotlin/kotlin-test-testng/${KOTLIN_VERSION}
  666. # tag:java-specific
  667. module _COMPILABLE_JAR_BASE : _JAR_BASE {
  668. _GHOST_PEERDIR($_FORCED_DEPENDENCY_MANAGEMENT_VALUE)
  669. # flatbuffers-java
  670. DEPENDENCY_MANAGEMENT(contrib/java/com/google/flatbuffers/flatbuffers-java/${JAVA_FLATBUFFERS_VERSION})
  671. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/com/google/flatbuffers/flatbuffers-java EXCEPT contrib/java/com/google/flatbuffers/flatbuffers-java/${JAVA_FLATBUFFERS_VERSION})
  672. # protobuf-java
  673. DEPENDENCY_MANAGEMENT(contrib/java/com/google/protobuf/protobuf-java/${JAVA_PROTO_RUNTIME_VERSION})
  674. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/com/google/protobuf/protobuf-java EXCEPT contrib/java/com/google/protobuf/protobuf-java/${JAVA_PROTO_RUNTIME_VERSION})
  675. # protobuf-javalite
  676. DEPENDENCY_MANAGEMENT(contrib/java/com/google/protobuf/protobuf-javalite/${JAVA_PROTO_RUNTIME_VERSION})
  677. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/com/google/protobuf/protobuf-javalite EXCEPT contrib/java/com/google/protobuf/protobuf-javalite/${JAVA_PROTO_RUNTIME_VERSION})
  678. # protobuf-java-util
  679. DEPENDENCY_MANAGEMENT(contrib/java/com/google/protobuf/protobuf-java-util/${JAVA_PROTO_RUNTIME_VERSION})
  680. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/com/google/protobuf/protobuf-java-util EXCEPT contrib/java/com/google/protobuf/protobuf-java-util/${JAVA_PROTO_RUNTIME_VERSION})
  681. # protobuf-kotlin
  682. DEPENDENCY_MANAGEMENT(contrib/java/com/google/protobuf/protobuf-kotlin/${JAVA_PROTO_RUNTIME_VERSION})
  683. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/com/google/protobuf/protobuf-kotlin EXCEPT contrib/java/com/google/protobuf/protobuf-kotlin/${JAVA_PROTO_RUNTIME_VERSION})
  684. # kotlin
  685. DEPENDENCY_MANAGEMENT($_KOTLIN_ALLOWED_VERSIONS)
  686. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-stdlib EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-stdlib/${KOTLIN_VERSION})
  687. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk7 EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk7/${KOTLIN_VERSION})
  688. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk8 EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk8/${KOTLIN_VERSION})
  689. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-stdlib-js EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-stdlib-js/${KOTLIN_VERSION})
  690. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-stdlib-common EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-stdlib-common/${KOTLIN_VERSION})
  691. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-reflect EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-reflect/${KOTLIN_VERSION})
  692. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-osgi-bundle EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-osgi-bundle/${KOTLIN_VERSION})
  693. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test/${KOTLIN_VERSION})
  694. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test-junit EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test-junit/${KOTLIN_VERSION})
  695. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test-junit5 EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test-junit5/${KOTLIN_VERSION})
  696. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test-testng EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test-testng/${KOTLIN_VERSION})
  697. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test-js EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test-js/${KOTLIN_VERSION})
  698. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test-common EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test-common/${KOTLIN_VERSION})
  699. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-test-annotations-common EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-test-annotations-common/${KOTLIN_VERSION})
  700. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-main-kts EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-main-kts/${KOTLIN_VERSION})
  701. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-script-runtime EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-script-runtime/${KOTLIN_VERSION})
  702. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-script-util EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-script-util/${KOTLIN_VERSION})
  703. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-scripting-common EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-scripting-common/${KOTLIN_VERSION})
  704. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-scripting-jsr223 EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-scripting-jsr223/${KOTLIN_VERSION})
  705. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-scripting-jvm EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-scripting-jvm/${KOTLIN_VERSION})
  706. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-scripting-jvm-host EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-scripting-jvm-host/${KOTLIN_VERSION})
  707. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-scripting-ide-services EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-scripting-ide-services/${KOTLIN_VERSION})
  708. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-compiler EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-compiler/${KOTLIN_VERSION})
  709. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-compiler-embeddable EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-compiler-embeddable/${KOTLIN_VERSION})
  710. CHECK_DEPENDENT_DIRS(DENY PEERDIRS contrib/java/org/jetbrains/kotlin/kotlin-daemon-client EXCEPT contrib/java/org/jetbrains/kotlin/kotlin-daemon-client/${KOTLIN_VERSION})
  711. }
  712. _JAR_MAIN_CLASS=
  713. macro JAR_MAIN_CLASS(Class) {
  714. SET(_JAR_MAIN_CLASS ${Class})
  715. }
  716. _JAR_MAIN_SEM=
  717. _ADD_JAR_MAIN_SEM= && app_main_class ${_JAR_MAIN_CLASS}
  718. GRADLE_EXPORT_PUBLISHING=no
  719. _GRADLE_EXPORT_PUBLISHING_SEM=
  720. PUBLISH_MAVEN_VERSION=no
  721. _DO_GRADLE_EXPORT_PUBLISHING_SEM= && publish True && publish_group $MAVEN_EXPORT_GOUP_ID && publish_version $PUBLISH_MAVEN_VERSION
  722. BUILD_JAR_SEM= \
  723. jar $MODDIR $REALPRJNAME ${hide:TARGET} ${hide:AUTO_INPUT} && \
  724. applied_excludes $EXCLUDED_EXPORT_GRADLE_PROJECT_COORDS_GLOBAL ${hide:APPLIED_EXCLUDES} && \
  725. excludes_rules $EXCLUDE_VALUE && \
  726. consumer_classpath $EXPORT_GRADLE_PROJECT_COORDS $_JAR_MAIN_SEM $_GRADLE_EXPORT_PUBLISHING_SEM && \
  727. exclude $EXCLUDE_VALUE \
  728. $SEM_JAR_SOURCE_SET
  729. ### _EXPORT_GRADLE_TARGET_ATTR(NAME, VALUE...)
  730. ###
  731. ### Add target attribute `NAME` for .SEM if `VALUE` is non-empty
  732. ### ` && $Name $Value
  733. macro _EXPORT_GRADLE_TARGET_ATTR(NAME, VALUE...) {
  734. .SEM=${pre= && $NAME :VALUE}
  735. }
  736. BUILD_PROTO_JAR_SEM= \
  737. jar_proto $MODDIR $REALPRJNAME ${hide:target} ${hide:AUTO_INPUT} && \
  738. consumer_classpath $EXPORT_GRADLE_PROJECT_COORDS $_EXPORT_GRADLE_TARGET_ATTR(proto_namespace $PROTO_NAMESPACE) $_EXPORT_GRADLE_TARGET_ATTR(proto_grpc ${ext=yes:_GRPC_ENABLED}) && \
  739. exclude $EXCLUDE_VALUE
  740. # tag:java-specific tag:internal
  741. ### @usage: JAR_LIBRARY() #internal
  742. ###
  743. ### Reimplementation of the JAVA_LIBRARY with ymake.core.conf and ymake based dependency management
  744. module JAR_LIBRARY: _COMPILABLE_JAR_BASE {
  745. .EXTS=.jsrc .java .jar .mf .gentar .kt
  746. .CMD=LINK_JAR
  747. .SEM=BUILD_JAR_SEM
  748. .FINAL_TARGET=yes
  749. .ALIASES=JAVA_SRCS=FULL_JAVA_SRCS ANNOTATION_PROCESSOR=JAR_ANNOTATION_PROCESSOR
  750. .RESTRICTED=EXTERNAL_JAR
  751. .GLOBAL=MAVEN_EXPORT_COORDS EXPORT_GRADLE_PROJECT_COORDS
  752. MODULE_SUFFIX=.jar
  753. PEERDIR(build/platform/java/jdk)
  754. PEERDIR+=$JDK_RESOURCE_PEERDIR
  755. when ($_EXT_SRC_JAR) {
  756. _COPY_EXT_SRC_JAR=_DO_COPY_EXT_SRC_JAR
  757. }
  758. when ($_EXT_JAR) {
  759. LINK_JAR=$_DO_USE_EXT_JAR
  760. }
  761. when ($OPENSOURCE_EXPORT == "no") {
  762. BUILD_JAR_SEM=IGNORED
  763. }
  764. when ($_JAR_MAIN_CLASS) {
  765. _JAR_MAIN_SEM=$_ADD_JAR_MAIN_SEM
  766. }
  767. when ($GRADLE_EXPORT_PUBLISHING == "yes") {
  768. _GRADLE_EXPORT_PUBLISHING_SEM=$_DO_GRADLE_EXPORT_PUBLISHING_SEM
  769. }
  770. # in the ideal world this statement must be under condition bellow
  771. DEPENDENCY_MANAGEMENT(contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk8/${KOTLIN_VERSION})
  772. when ($WITH_KOTLIN_VALUE) {
  773. KT_SRSCLIST=$KT_SRSCLIST_FLAG
  774. _MAKE_LINT_KT_FILES_LIST = $YMAKE_PYTHON ${input:"build/scripts/kt_copy.py"} $KT_SRCLIST ${output;noauto:"all-kt-sources.txt"} $(SOURCE_ROOT) $(BUILD_ROOT)
  775. ALL_KT_COMMANDS=&& $COLLECT_KT_CLASSPATH && $LINK_KT_CLASSPATH
  776. when ($WITH_KAPT_VALUE == "yes") {
  777. # For Kapt usage see: https://kotlinlang.org/docs/kapt.html#using-in-cli
  778. # See for kapt.kotlin.generated: https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/kapt3-cli/testData/integration/kotlinFileGeneration/build.txt
  779. _KAPT_OPTS=-Xplugin=${tool:"contrib/java/org/jetbrains/kotlin/kotlin-annotation-processing/1.9.20"} $KT_KAPT_PLUGIN_OPTS
  780. _RUN_KAPT=${YMAKE_PYTHON} ${input:"build/scripts/with_kapt_args.py"} ${pre=--ap-classpath :KT_KAPT_AP_CLASSPATH} -- $COMPILE_KT $_KAPT_OPTS
  781. _APPEND_KAPT_GENERATED_SRCS=$YMAKE_PYTHON ${input:"build/scripts/resolve_java_srcs.py"} -d $KT_KAPT_SOURCES_DIR --include-patterns '**/*.java' '**/*.kt' --resolve-kotlin --append -s ${BINDIR}/all-java.srclst -k $KT_SRCLIST -r ${BINDIR}/not-used.txt
  782. ALL_KT_COMMANDS+=&& $_RUN_KAPT && $_APPEND_KAPT_GENERATED_SRCS
  783. }
  784. ALL_KT_COMMANDS+=&& $COMPILE_KT && $_MAKE_LINT_KT_FILES_LIST
  785. LINK_JAR_RESOURCES+=&& $FS_TOOLS copy_all_files ${KT_CLASSES_DIR} ${BINDIR}/cls
  786. PEERDIR+=build/platform/java/kotlin contrib/java/org/jetbrains/kotlin/kotlin-stdlib-jdk8
  787. when($WITH_KOTLINC_PLUGIN_ALLOPEN) {
  788. KOTLINC_OPTS_VALUE+=-Xplugin=${KOTLIN_COMPILER_RESOURCE_GLOBAL}/plugins/kotlin-allopen-plugin.jar
  789. }
  790. when($WITH_KOTLINC_PLUGIN_LOMBOK) {
  791. KOTLINC_OPTS_VALUE+=-Xplugin=${KOTLIN_COMPILER_RESOURCE_GLOBAL}/plugins/kotlin-lombok-plugin.jar
  792. }
  793. when($WITH_KOTLINC_PLUGIN_NOARG) {
  794. KOTLINC_OPTS_VALUE+=-Xplugin=${KOTLIN_COMPILER_RESOURCE_GLOBAL}/plugins/kotlin-noarg-plugin.jar
  795. }
  796. when($WITH_KOTLINC_PLUGIN_SERIALIZATION) {
  797. KOTLINC_OPTS_VALUE+=-Xplugin=${KOTLIN_COMPILER_RESOURCE_GLOBAL}/plugins/kotlin-serialization-plugin.jar
  798. }
  799. # Must be in sync with KT_CLASSES_DIR!
  800. # There are problems in JDK13 with abs paths in classpath baked into jar file manifest. Using relative path
  801. # here assumes that jar file with classpath for javac located in the $ARCADIA_BUILD_ROOT
  802. KT_CLASSPATH_ITEM=$MODDIR/kt_cls
  803. }
  804. otherwise {
  805. KT_SRSCLIST=
  806. ALL_KT_COMMANDS=
  807. KT_CLASSES=
  808. }
  809. when ($MAVEN_EXPORT == "yes") {
  810. when ($MAVEN_DEPLOY == "yes") {
  811. PEERDIR+=build/external_resources/maven
  812. MAVEN_EXPORT_CMD= && $MAVEN_EXPORT_GEN_DEPLST && $MAVEN_EXPORT_GEN_POM && $MAVEN_DEPLOY_CMD
  813. }
  814. otherwise {
  815. MAVEN_EXPORT_CMD= && $MAVEN_EXPORT_GEN_DEPLST && $MAVEN_EXPORT_GEN_POM
  816. }
  817. MAVEN_EXPORT_COORDS_GLOBAL=$MAVEN_EXPORT_GOUP_ID:${MODULE_PREFIX}${REALPRJNAME}:${MAVEN_EXPORT_VERSION}:
  818. }
  819. when ($SOURCES_JAR == "yes") {
  820. _PACK_SRC_JAR=$_PACK_SRC_JAR_IMPL
  821. MAVEN_DEPLOY_SOURCES=-Dsources=${output;pre=${BINDIR}/${MODULE_PREFIX};suf=-sources.jar:REALPRJNAME}
  822. }
  823. when ($JAVA_COVERAGE == "yes") {
  824. JAVA_COVERAGE_SRCLIST=$JAVA_COVERAGE_SRCLIST_FLAG
  825. }
  826. when ($MAKE_UBERJAR_VALUE == "yes") {
  827. _LINK_UBERJAR=$_DO_LINK_UBERJAR
  828. PACK_JAR=$_PACK_JAR_HELPER(${BINDIR}/${REALPRJNAME}.lib.jar)
  829. # TODO: This condition is incorrect in case of autoinputs _UBERJAR_SELF should be empty only for
  830. # modules without AUTO_INPUT and without JAVA_SRCS added inputs.
  831. when($ALL_JAR_SOURCES) {
  832. _UBERJAR_SELF=--jar ${BINDIR}/${REALPRJNAME}.lib.jar
  833. }
  834. PEERDIR+=build/platform/java/uberjar
  835. PEERDIR+=$UBERJAR_RESOURCE_PEERDIR
  836. }
  837. when($JAVA_YNDEXING == "yes") {
  838. PEERDIR+=build/platform/java/kythe
  839. _DO_JAVA_YNDEXING=&& $_JAVAC_RUN_HELPER($_JAVA_YNDEXING_CMD) && ${cwd:BINDIR} $YMAKE_PYTHON ${input:"build/scripts/find_and_tar.py"} kindex.tar .kzip ${output;hide;tared:"kindex.tar"}
  840. }
  841. when($ERROR_PRONE_VALUE) {
  842. PEERDIR+=$ERROR_PRONE_PEERDIR
  843. JAVAC_CMD=$ERROR_PRONE_JAVAC_CMD
  844. }
  845. when($ERROR_PRONE_VALUE && $JDK_REAL_VERSION == "17") {
  846. JAVAC_FLAGS_VALUE+=$ERROR_PRONE_JDK16_ADD_OPENS
  847. JAVAC_OPTS+=$ERROR_PRONE_JDK16_ADD_OPENS
  848. }
  849. when($ERROR_PRONE_VALUE && $JDK_REAL_VERSION == "18") {
  850. JAVAC_FLAGS_VALUE+=$ERROR_PRONE_JDK16_ADD_OPENS
  851. JAVAC_OPTS+=$ERROR_PRONE_JDK16_ADD_OPENS
  852. }
  853. when($ERROR_PRONE_VALUE && $JDK_REAL_VERSION == "19") {
  854. JAVAC_FLAGS_VALUE+=$ERROR_PRONE_JDK16_ADD_OPENS
  855. JAVAC_OPTS+=$ERROR_PRONE_JDK16_ADD_OPENS
  856. }
  857. when($ERROR_PRONE_VALUE && $JDK_REAL_VERSION == "20") {
  858. JAVAC_FLAGS_VALUE+=$ERROR_PRONE_JDK16_ADD_OPENS
  859. JAVAC_OPTS+=$ERROR_PRONE_JDK16_ADD_OPENS
  860. }
  861. when($ERROR_PRONE_VALUE && $JDK_REAL_VERSION == "21") {
  862. JAVAC_FLAGS_VALUE+=$ERROR_PRONE_JDK16_ADD_OPENS
  863. JAVAC_OPTS+=$ERROR_PRONE_JDK16_ADD_OPENS
  864. }
  865. when($ERROR_PRONE_VALUE && $ERROR_PRONE_VERSION == "2.7.1") {
  866. JAVAC_FLAGS_VALUE+=$ERROR_PRONE_2_7_1_FORCED_OPTS
  867. JAVAC_OPTS+=$ERROR_PRONE_2_7_1_FORCED_OPTS
  868. }
  869. when ($JAVA_ADD_DLLS_VALUE == "yes") {
  870. CONSUME_NON_MANAGEABLE_PEERS=yes
  871. _PACK_JNI=$_PACK_JNI_CMD
  872. }
  873. when ($LINT_LEVEL_VALUE != "none") {
  874. _MAKE_JSTYLE_FILE_LIST= && ${WRITER_PY} --file ${output;noauto:"lint-java.srclst"} -m --ya-start-command-file $LINT_JAVA_SOURCES --ya-end-command-file
  875. }
  876. SET(MODULE_TYPE JAVA_LIBRARY)
  877. ENABLE(YMAKE_JAVA_TEST)
  878. _ADD_KOTLIN_STYLE_CHECKS($(BUILD_ROOT)/$MODDIR/all-kt-sources.txt REQUIREMENTS cpu:2)
  879. _ADD_JAVA_STYLE_CHECKS($(BUILD_ROOT)/$MODDIR/lint-java.srclst::$(SOURCE_ROOT))
  880. _ADD_CLASSPATH_CLASH_CHECK()
  881. JAVA_MODULE()
  882. }
  883. # tag:java-specific
  884. _SCRIPTGEN_FLAGS=
  885. macro _GEN_JAVA_SCRIPT_IMPL(Out, Template, Props...) {
  886. .CMD=$SCRIPTGEN_RESOURCE_GLOBAL/scriptgen --java $JDK_RESOURCE/bin/java --output ${output:Out} --template ${input:Template} ${_SCRIPTGEN_FLAGS} -D JAR_NAME=${REALPRJNAME}.jar -D CLASSPATH=${nopath;join;ext=.jar;pre="::":MANAGED_PEERS_CLOSURE} -D PROJECT_DIR=${MODDIR} -D JAR_BASENAME=${REALPRJNAME} $Props
  887. }
  888. # tag:java-specific
  889. _GEN_USERSCRIPTS=
  890. macro _ADD_GEN_JAVA_SCRIPT(Out, Template, Props...) {
  891. SET_APPEND(_GEN_USERSCRIPTS && \$_GEN_JAVA_SCRIPT_IMPL($Out $Template $Props))
  892. }
  893. # tag:java-specific
  894. _PACK_JDK=
  895. # tag:java-specific
  896. DO_GEN_JAVA_RUN_SH=
  897. _SOURCE_JARS=
  898. _SOURCE_JARS_CPLIST=
  899. GEN_JAVA_RUN_SH=$SCRIPTGEN_RESOURCE_GLOBAL/scriptgen --java $JDK_RESOURCE/bin/java --output ${output:"run.sh"} -D GENERATE_DEFAULT_RUNNER=yes -D JAR_NAME=${REALPRJNAME}.jar -D CLASSPATH=${nopath;join;pre="::":MANAGED_PEERS_CLOSURE} -D PROJECT_DIR=${REALPRJNAME} -D JAR_BASENAME=${REALPRJNAME}
  900. GEN_RUN_CP=${WRITER_PY} --file ${BINDIR}/run-bf.txt -Q -m --ya-start-command-file ${nopath;qe;pre=$REALPRJNAME/:MANAGED_PEERS_CLOSURE} --ya-end-command-file && ${YMAKE_PYTHON} ${input:"build/scripts/make_manifest_from_bf.py"} ${BINDIR}/run-bf.txt ${TARGET}
  901. COLLECT_JAR_PROGRAM_CP=$FS_TOOLS link_or_copy_to_dir --ya-start-command-file ${ext=.jar:MANAGED_PEERS_CLOSURE} ${ext=.so:MANAGED_PEERS_CLOSURE} ${ext=.dll:MANAGED_PEERS_CLOSURE} ${ext=.dylib:MANAGED_PEERS_CLOSURE} ${_SOURCE_JARS} --ya-end-command-file ${BINDIR}/${REALPRJNAME} ${hide;late_out;nopath;ext=.jar;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} ${hide;late_out;nopath;ext=.so;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} ${hide;late_out;nopath;ext=.dll;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} ${hide;late_out;nopath;ext=.dylib;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE}
  902. MAKE_JAR_PROGRAM_CPLST=${MAKE_JAVA_CLASSPATH_FILE} --from-args ${output;pre=$MODULE_PREFIX;suf=${MODULE_SUFFIX}.cplst:REALPRJNAME} --ya-start-command-file ${nopath;rootrel;ext=.jar;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} ${_SOURCE_JARS_CPLIST} --ya-end-command-file
  903. TAR_CLASSPATH= && $YMAKE_PYTHON ${input:"build/scripts/find_and_tar.py"} ${output;pre=$MODULE_PREFIX;suf=.tar:REALPRJNAME} ${cwd;pre=$BINDIR/:REALPRJNAME}
  904. DO_TAR_CLASSPATH=
  905. LINK_JAR_PROGRAM=${hide:JAVA_FAKEID} $FS_TOOLS md ${BINDIR}/${REALPRJNAME} && $COLLECT_JAR_PROGRAM_CP && $DO_GEN_JAVA_RUN_SH && $GEN_RUN_CP && $MAKE_JAR_PROGRAM_CPLST $DO_TAR_CLASSPATH $_GEN_USERSCRIPTS $_PACK_JDK ${kv;hide:"p JP"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}
  906. # tag:java-specific
  907. # UBERJAR program link command
  908. LINK_UBERJAR_PROGRAM=${hide:JAVA_FAKEID} ${kv;hide:"p UJ"} ${MAKE_JAVA_CLASSPATH_FILE} --from-args ${output;pre=$MODULE_PREFIX;suf=${MODULE_SUFFIX}.cplst:REALPRJNAME} $TARGET \
  909. && $FS_TOOLS md ${BINDIR}/${REALPRJNAME} \
  910. && $FS_TOOLS link_or_copy ${BINDIR}/${REALPRJNAME}.jar $TARGET \
  911. && $FS_TOOLS link_or_copy_to_dir --ya-start-command-file ${BINDIR}/${REALPRJNAME}.jar ${ext=.so:MANAGED_PEERS_CLOSURE} ${ext=.dll:MANAGED_PEERS_CLOSURE} ${ext=.dylib:MANAGED_PEERS_CLOSURE} ${_SOURCE_JARS} --ya-end-command-file ${BINDIR}/${REALPRJNAME} ${hide;output;ext=.jar;pre=$BINDIR/$REALPRJNAME/:REALPRJNAME} ${hide;late_out;nopath;ext=.so;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} ${hide;late_out;nopath;ext=.dll;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} ${hide;late_out;nopath;ext=.dylib;pre=$BINDIR/$REALPRJNAME/:MANAGED_PEERS_CLOSURE} \
  912. $DO_TAR_CLASSPATH \
  913. $_GEN_USERSCRIPTS \
  914. $_PACK_JDK
  915. # tag:java-specific
  916. RUN_WITH_SOURCES=no
  917. # TODO jbuild creates tar with all classpath deps by default and some projects rely on this. In ymake build this tar file creation is not needed and should be disabled by default in future
  918. TARED_CLASSPATH=yes
  919. _JAR_SRCS_CALLED=no
  920. # tag:java-specific
  921. macro _MARK_JAVA_PROG_WITH_SOURCES(Args...) {
  922. ENABLE(_JAR_SRCS_CALLED)
  923. }
  924. # tag:java-specific
  925. module _JAR_RUNNABLE: _COMPILABLE_JAR_BASE {
  926. .FINAL_TARGET=yes
  927. .CMD=LINK_JAR_PROGRAM
  928. .SEM=IGNORED
  929. .ALIASES=JAVA_SRCS=_MARK_JAVA_PROG_WITH_SOURCES GENERATE_SCRIPT=_YMAKE_GENERATE_SCRIPT
  930. .ALLOWED=WITH_JDK
  931. .PEERDIR_POLICY=as_build_from
  932. MODULE_SUFFIX=.run.cp.jar
  933. CONSUME_NON_MANAGEABLE_PEERS=yes
  934. when ($RUN_WITH_SOURCES == "yes") {
  935. _SOURCE_JARS=${ext=.jar;noext;suf=-sources.jar:MANAGED_PEERS_CLOSURE} ${hide;late_out;ext=.jar;nopath;pre=$BINDIR/$REALPRJNAME/;noext;suf=-sources.jar:MANAGED_PEERS_CLOSURE}
  936. _SOURCE_JARS_CPLIST=${nopath;rootrel;ext=.jar;pre=$BINDIR/$REALPRJNAME/;noext;suf=-sources.jar:MANAGED_PEERS_CLOSURE}
  937. }
  938. when ($TARED_CLASSPATH == "yes") {
  939. DO_TAR_CLASSPATH=$TAR_CLASSPATH
  940. }
  941. when ($DISABLE_SCRIPTGEN) {
  942. DO_GEN_JAVA_RUN_SH=
  943. }
  944. otherwise {
  945. DO_GEN_JAVA_RUN_SH=$GEN_JAVA_RUN_SH
  946. PEERDIR+=build/platform/java/scriptgen
  947. }
  948. when ($MAKE_UBERJAR_VALUE == "yes") {
  949. LINK_JAR_PROGRAM=$LINK_UBERJAR_PROGRAM
  950. DYNAMIC_LINK=no
  951. _SCRIPTGEN_FLAGS=-D IS_UBERJAR=yes
  952. }
  953. otherwise {
  954. _SCRIPTGEN_FLAGS=-D IS_UBERJAR=no
  955. }
  956. CHECK_PROVIDES()
  957. }
  958. # tag:java-specific
  959. LINK_JAR_TEST=${hide:JAVA_FAKEID} ${WRITER_PY} --file ${BINDIR}/run-bf.txt -Q -m --ya-start-command-file ${ext=.jar:MANAGED_PEERS_CLOSURE} --ya-end-command-file && ${YMAKE_PYTHON} ${input:"build/scripts/make_manifest_from_bf.py"} ${BINDIR}/run-bf.txt ${TARGET} ${kv;hide:"p JT"}
  960. YMAKE_JAVA_TEST=
  961. module _JAR_TEST: _COMPILABLE_JAR_BASE {
  962. .FINAL_TARGET=yes
  963. .CMD=LINK_JAR_TEST
  964. .DEFAULT_NAME_GENERATOR=FullPath
  965. CONSUME_NON_MANAGEABLE_PEERS=yes
  966. SET(MODULE_SUFFIX .test.cp.jar)
  967. ENABLE(YMAKE_JAVA_TEST)
  968. JAVA_TEST()
  969. CHECK_PROVIDES()
  970. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  971. }
  972. # tag:java-specific
  973. JAVA_SWIG_DELIM=JAVA_SWIG_DELIM
  974. # tag:java-specific
  975. JDK_REAL_VERSION=
  976. JDK_VERSION=
  977. when ($JDK_VERSION == "21") {
  978. JDK_REAL_VERSION=21
  979. }
  980. elsewhen ($JDK_VERSION == "20") {
  981. JDK_REAL_VERSION=20
  982. }
  983. elsewhen ($JDK_VERSION == "19") {
  984. JDK_REAL_VERSION=19
  985. }
  986. elsewhen ($JDK_VERSION == "18") {
  987. JDK_REAL_VERSION=18
  988. }
  989. elsewhen ($JDK_VERSION == "17") {
  990. JDK_REAL_VERSION=17
  991. }
  992. elsewhen ($JDK_VERSION == "15") {
  993. JDK_REAL_VERSION=15
  994. }
  995. elsewhen ($JDK_VERSION == "11") {
  996. JDK_REAL_VERSION=11
  997. }
  998. elsewhen ($JDK_VERSION == "8") {
  999. JDK_REAL_VERSION=8
  1000. }
  1001. elsewhen ($MAPSMOBI_BUILD_TARGET && $OS_ANDROID) {
  1002. JDK_REAL_VERSION=11
  1003. }
  1004. otherwise {
  1005. JDK_REAL_VERSION=17
  1006. }
  1007. # tag:java-specific
  1008. # remove extra peerdir to jdk11 after https://st.yandex-team.ru/DEVTOOLS-8851 is done
  1009. when ($USE_SYSTEM_JDK) {
  1010. JDK_RESOURCE_PEERDIR=
  1011. }
  1012. otherwise {
  1013. when ($JDK_REAL_VERSION == "21") {
  1014. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk21 build/platform/java/jdk/jdk17
  1015. }
  1016. when ($JDK_REAL_VERSION == "20") {
  1017. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk20 build/platform/java/jdk/jdk17
  1018. }
  1019. when ($JDK_REAL_VERSION == "19") {
  1020. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk19 build/platform/java/jdk/jdk17
  1021. }
  1022. when ($JDK_REAL_VERSION == "18") {
  1023. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk18 build/platform/java/jdk/jdk17
  1024. }
  1025. when ($JDK_REAL_VERSION == "17") {
  1026. # need jdk11 for spare parts in "host" platform
  1027. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk17 build/platform/java/jdk/jdk11
  1028. }
  1029. when ($JDK_REAL_VERSION == "15") {
  1030. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk15 build/platform/java/jdk/jdk17
  1031. }
  1032. when ($JDK_REAL_VERSION == "11") {
  1033. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk11 build/platform/java/jdk/jdk17
  1034. }
  1035. when ($JDK_REAL_VERSION == "8") {
  1036. JDK_RESOURCE_PEERDIR=build/platform/java/jdk/jdk8 build/platform/java/jdk/jdk17
  1037. }
  1038. }
  1039. # tag:java-specific
  1040. when ($JDK_REAL_VERSION == "21") {
  1041. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar21
  1042. }
  1043. when ($JDK_REAL_VERSION == "20") {
  1044. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar20
  1045. }
  1046. when ($JDK_REAL_VERSION == "19") {
  1047. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar18
  1048. }
  1049. when ($JDK_REAL_VERSION == "18") {
  1050. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar18
  1051. }
  1052. when ($JDK_REAL_VERSION == "17") {
  1053. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar17
  1054. }
  1055. when ($JDK_REAL_VERSION == "15") {
  1056. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar15
  1057. }
  1058. when ($JDK_REAL_VERSION == "11") {
  1059. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar11
  1060. }
  1061. when ($JDK_REAL_VERSION == "8") {
  1062. UBERJAR_RESOURCE_PEERDIR=build/platform/java/uberjar/uberjar8
  1063. }
  1064. # tag:java-specific
  1065. JAVAC_OPTS=
  1066. when ($USE_SYSTEM_JDK) {
  1067. JDK_RESOURCE=$USE_SYSTEM_JDK
  1068. }
  1069. otherwise {
  1070. when ($JDK_REAL_VERSION == "21") {
  1071. JDK_RESOURCE=$JDK21_RESOURCE_GLOBAL
  1072. }
  1073. when ($JDK_REAL_VERSION == "20") {
  1074. JDK_RESOURCE=$JDK20_RESOURCE_GLOBAL
  1075. }
  1076. when ($JDK_REAL_VERSION == "19") {
  1077. JDK_RESOURCE=$JDK19_RESOURCE_GLOBAL
  1078. }
  1079. when ($JDK_REAL_VERSION == "18") {
  1080. JDK_RESOURCE=$JDK18_RESOURCE_GLOBAL
  1081. }
  1082. when ($JDK_REAL_VERSION == "17") {
  1083. JDK_RESOURCE=$JDK17_RESOURCE_GLOBAL
  1084. }
  1085. when ($JDK_REAL_VERSION == "15") {
  1086. JDK_RESOURCE=$JDK15_RESOURCE_GLOBAL
  1087. }
  1088. when ($JDK_REAL_VERSION == "11") {
  1089. JDK_RESOURCE=$JDK11_RESOURCE_GLOBAL
  1090. }
  1091. when ($JDK_REAL_VERSION == "8") {
  1092. JDK_RESOURCE=$JDK8_RESOURCE_GLOBAL
  1093. }
  1094. }
  1095. # tag:java-specific
  1096. when (!$USE_SYSTEM_ERROR_PRONE) {
  1097. # Still not done: DTCC-667
  1098. when ($JDK_REAL_VERSION == "8") {
  1099. ERROR_PRONE_VERSION=2.3.1
  1100. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.3.1
  1101. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_3_1_RESOURCE_GLOBAL
  1102. }
  1103. elsewhen ($JDK_REAL_VERSION == "11" || $JDK_REAL_VERSION == "15") {
  1104. ERROR_PRONE_VERSION=2.7.1
  1105. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.7.1
  1106. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_7_1_RESOURCE_GLOBAL
  1107. }
  1108. elsewhen ($JDK_REAL_VERSION == "17") {
  1109. ERROR_PRONE_VERSION=2.10.0
  1110. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.10.0
  1111. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_10_0_RESOURCE_GLOBAL
  1112. }
  1113. elsewhen ($JDK_REAL_VERSION == "18") {
  1114. ERROR_PRONE_VERSION=2.14.0
  1115. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.14.0
  1116. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_14_0_RESOURCE_GLOBAL
  1117. }
  1118. elsewhen ($JDK_REAL_VERSION == "19") {
  1119. ERROR_PRONE_VERSION=2.18.0
  1120. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.18.0
  1121. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_18_0_RESOURCE_GLOBAL
  1122. }
  1123. elsewhen ($JDK_REAL_VERSION == "20") {
  1124. ERROR_PRONE_VERSION=2.18.0
  1125. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.18.0
  1126. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_18_0_RESOURCE_GLOBAL
  1127. }
  1128. elsewhen ($JDK_REAL_VERSION == "21") {
  1129. ERROR_PRONE_VERSION=2.18.0
  1130. ERROR_PRONE_PEERDIR=build/platform/java/error_prone/2.18.0
  1131. ERROR_PRONE_RESOURCE=$ERROR_PRONE_2_18_0_RESOURCE_GLOBAL
  1132. }
  1133. otherwise {
  1134. ERROR_PRONE_VERSION=2.7.1
  1135. ERROR_PRONE_PEERDIR=build/platform/java/error_prone
  1136. ERROR_PRONE_RESOURCE=$ERROR_PRONE_RESOURCE_GLOBAL
  1137. }
  1138. }
  1139. otherwise {
  1140. ERROR_PRONE_VERSION=2.7.1
  1141. ERROR_PRONE_PEERDIR=build/platform/java/error_prone
  1142. ERROR_PRONE_RESOURCE=$ERROR_PRONE_RESOURCE_GLOBAL
  1143. }
  1144. # tag:java-specific
  1145. when ($USE_SYSTEM_UBERJAR) {
  1146. UBERJAR_RESOURCE=$USE_SYSTEM_UBERJAR
  1147. }
  1148. otherwise {
  1149. when ($JDK_REAL_VERSION == "21") {
  1150. UBERJAR_RESOURCE=$UBERJAR21_RESOURCE_GLOBAL
  1151. }
  1152. when ($JDK_REAL_VERSION == "20") {
  1153. UBERJAR_RESOURCE=$UBERJAR20_RESOURCE_GLOBAL
  1154. }
  1155. when ($JDK_REAL_VERSION == "19") {
  1156. UBERJAR_RESOURCE=$UBERJAR18_RESOURCE_GLOBAL
  1157. }
  1158. when ($JDK_REAL_VERSION == "18") {
  1159. UBERJAR_RESOURCE=$UBERJAR18_RESOURCE_GLOBAL
  1160. }
  1161. when ($JDK_REAL_VERSION == "17") {
  1162. UBERJAR_RESOURCE=$UBERJAR17_RESOURCE_GLOBAL
  1163. }
  1164. when ($JDK_REAL_VERSION == "15") {
  1165. UBERJAR_RESOURCE=$UBERJAR15_RESOURCE_GLOBAL
  1166. }
  1167. when ($JDK_REAL_VERSION == "11") {
  1168. UBERJAR_RESOURCE=$UBERJAR11_RESOURCE_GLOBAL
  1169. }
  1170. when ($JDK_REAL_VERSION == "8") {
  1171. UBERJAR_RESOURCE=$UBERJAR8_RESOURCE_GLOBAL
  1172. }
  1173. }
  1174. # tag:java-specific
  1175. when ($JDK_REAL_VERSION == "21") {
  1176. WITH_JDK_RESOURCE=$WITH_JDK21_RESOURCE_GLOBAL
  1177. }
  1178. when ($JDK_REAL_VERSION == "20") {
  1179. WITH_JDK_RESOURCE=$WITH_JDK20_RESOURCE_GLOBAL
  1180. }
  1181. when ($JDK_REAL_VERSION == "19") {
  1182. WITH_JDK_RESOURCE=$WITH_JDK19_RESOURCE_GLOBAL
  1183. }
  1184. when ($JDK_REAL_VERSION == "18") {
  1185. WITH_JDK_RESOURCE=$WITH_JDK18_RESOURCE_GLOBAL
  1186. }
  1187. when ($JDK_REAL_VERSION == "17") {
  1188. WITH_JDK_RESOURCE=$WITH_JDK17_RESOURCE_GLOBAL
  1189. }
  1190. when ($JDK_REAL_VERSION == "15") {
  1191. WITH_JDK_RESOURCE=$WITH_JDK15_RESOURCE_GLOBAL
  1192. }
  1193. when ($JDK_REAL_VERSION == "11") {
  1194. WITH_JDK_RESOURCE=$WITH_JDK11_RESOURCE_GLOBAL
  1195. }
  1196. when ($JDK_REAL_VERSION == "8") {
  1197. WITH_JDK_RESOURCE=$WITH_JDK8_RESOURCE_GLOBAL
  1198. }
  1199. # tag:java-specific
  1200. EXTERNAL_JAVA_JDK_RESOURCE=
  1201. EXTERNAL_JAVA_EXTRA_PEERDIR=
  1202. when ($USE_SYSTEM_JDK) {
  1203. EXTERNAL_JAVA_EXTRA_PEERDIR=
  1204. EXTERNAL_JAVA_JDK_RESOURCE=$USE_SYSTEM_JDK
  1205. }
  1206. elsewhen ($JDK_VERSION == "") {
  1207. EXTERNAL_JAVA_JDK_RESOURCE=$JDK11_RESOURCE_GLOBAL
  1208. EXTERNAL_JAVA_EXTRA_PEERDIR=build/platform/java/jdk/jdk11
  1209. }
  1210. otherwise {
  1211. EXTERNAL_JAVA_JDK_RESOURCE=$JDK_RESOURCE
  1212. }
  1213. COMPILE_JAVA=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/compile_java.py"} --java-bin $EXTERNAL_JAVA_JDK_RESOURCE/bin/java --javac-bin $EXTERNAL_JAVA_JDK_RESOURCE/bin/javac --jar-bin $JDK_RESOURCE/bin/jar --kotlin-compiler $KOTLIN_COMPILER_RESOURCE_GLOBAL/kotlin-compiler.jar $JAVA_VCS_MF_ARG $PACKAGE_PREFIX_ARGS --jar-output $TARGET --srcs-jar-output ${output;suf=-sources.jar:REALPRJNAME} $AUTO_INPUT DELIM $JAVAC_OPTS DELIM $MANAGED_PEERS_CLOSURE DELIM -no-stdlib -module-name $REALPRJNAME -jvm-target ${KOTLIN_JVM_TARGET} ${KOTLINC_OPTS_VALUE} ${kv;hide:"p JV"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"} ${requirements;hide:"cpu:2"}
  1214. ARGS_DELIM="MACRO_CALLS_DELIM"
  1215. SYSTEM_PROPERTIES_VALUE=
  1216. ### @usage: SYSTEM_PROPERTIES([<Key Value>...] [<File Path>...])
  1217. ###
  1218. ### List of Key,Value pairs that will be available to test via System.getProperty().
  1219. ### FILE means that parst should be read from file specifies as Path.
  1220. ###
  1221. ### Documentation: https://wiki.yandex-team.ru/yatool/test/
  1222. macro SYSTEM_PROPERTIES(Args...) {
  1223. SET_APPEND(SYSTEM_PROPERTIES_VALUE $Args)
  1224. }
  1225. # tag:java-specific
  1226. JVM_ARGS_VALUE=
  1227. ### @usage: JVM_ARGS(Args...)
  1228. ###
  1229. ### Arguments to run Java programs in tests.
  1230. ###
  1231. ### Documentation: https://wiki.yandex-team.ru/yatool/test/
  1232. macro JVM_ARGS(Args...) {
  1233. SET_APPEND(JVM_ARGS_VALUE $Args)
  1234. }
  1235. # tag:java-specific
  1236. CHECK_JAVA_DEPS_VALUE=
  1237. ### @usage: CHECK_JAVA_DEPS(<yes|no>)
  1238. ###
  1239. ### Check for different classes with duplicate name in classpath.
  1240. ###
  1241. ### Documentation: https://wiki.yandex-team.ru/yatool/test/
  1242. macro CHECK_JAVA_DEPS(Arg) {
  1243. SET(CHECK_JAVA_DEPS_VALUE $Arg)
  1244. }
  1245. ERROR_PRONE_VALUE=
  1246. ### @usage: USE_ERROR_PRONE()
  1247. ###
  1248. ### Use errorprone instead of javac for .java compilation.
  1249. macro USE_ERROR_PRONE() {
  1250. SET(ERROR_PRONE_VALUE yes)
  1251. }
  1252. # tag:java-specific
  1253. MAKE_UBERJAR_VALUE=
  1254. ### @usage: UBERJAR()
  1255. ###
  1256. ### UBERJAR is a single all-in-one jar-archive that includes all its Java dependencies (reachable PEERDIR).
  1257. ### It also supports shading classes inside the archive by moving them to a different package (similar to the maven-shade-plugin).
  1258. ### Use UBERJAR inside JAVA_PROGRAM module.
  1259. ###
  1260. ### You can use the following macros to configure the archive:
  1261. ### 1. UBERJAR_HIDING_PREFIX prefix for classes to shade (classes remain in their packages by default)
  1262. ### 2. UBERJAR_HIDE_EXCLUDE_PATTERN exclude classes matching this patterns from shading (if enabled).
  1263. ### 3. UBERJAR_PATH_EXCLUDE_PREFIX the prefix for classes that should not get into the jar archive (all classes are placed into the archive by default)
  1264. ### 4. UBERJAR_MANIFEST_TRANSFORMER_MAIN add ManifestResourceTransformer class to uberjar processing and specify main-class
  1265. ### 5. UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE add ManifestResourceTransformer class to uberjar processing and specify some attribute
  1266. ### 6. UBERJAR_APPENDING_TRANSFORMER add AppendingTransformer class to uberjar processing
  1267. ### 7. UBERJAR_SERVICES_RESOURCE_TRANSFORMER add ServicesResourceTransformer class to uberjar processing
  1268. ###
  1269. ### Documentation: https://wiki.yandex-team.ru/yatool/java/
  1270. ###
  1271. ### @see: [JAVA_PROGRAM](#module_JAVA_PROGRAM), [UBERJAR_HIDING_PREFIX](#macro_UBERJAR_HIDING_PREFIX), [UBERJAR_HIDE_EXCLUDE_PATTERN](#macro_UBERJAR_HIDE_EXCLUDE_PATTERN), [UBERJAR_PATH_EXCLUDE_PREFIX](#macro_UBERJAR_PATH_EXCLUDE_PREFIX)
  1272. macro UBERJAR() {
  1273. SET(MAKE_UBERJAR_VALUE yes)
  1274. DISABLE(PASS_PEERS)
  1275. }
  1276. # tag:java-specific
  1277. UBERJAR_PREFIX_VALUE=
  1278. UBERJAR_PREFIX_FLAG=
  1279. ### @usage: UBERJAR_HIDING_PREFIX(Arg)
  1280. ###
  1281. ### Set prefix for classes to shade. All classes in UBERJAR will be moved into package prefixed with Arg.
  1282. ### Classes remain in their packages by default.
  1283. ###
  1284. ### @see: [UBERJAR](#macro_UBERJAR)
  1285. macro UBERJAR_HIDING_PREFIX(Arg) {
  1286. SET(UBERJAR_PREFIX_VALUE $Arg)
  1287. SET(UBERJAR_PREFIX_FLAG ${pre=--shade-prefix :Arg})
  1288. }
  1289. # tag:java-specific
  1290. UBERJAR_HIDE_EXCLUDE_VALUE=
  1291. UBERJAR_HIDE_EXCLUDE_FLAGS=
  1292. ### @usage: UBERJAR_HIDE_EXCLUDE_PATTERN(Args...)
  1293. ###
  1294. ### Exclude classes matching this patterns from shading (if enabled).
  1295. ### Pattern may contain '*' and '**' globs.
  1296. ### Shading is enabled for UBERJAR program using UBERJAR_HIDING_PREFIX macro. If this macro is not specified all classes are shaded.
  1297. ###
  1298. ### @see: [UBERJAR](#macro_UBERJAR), [UBERJAR_HIDING_PREFIX](#macro_UBERJAR_HIDING_PREFIX)
  1299. macro UBERJAR_HIDE_EXCLUDE_PATTERN(Args...) {
  1300. SET_APPEND(UBERJAR_HIDE_EXCLUDE_VALUE $ARGS_DELIM $Args)
  1301. SET_APPEND(UBERJAR_HIDE_EXCLUDE_FLAGS ${pre=--shade-exclude :Args})
  1302. }
  1303. # tag:java-specific
  1304. UBERJAR_PATH_EXCLUDES=
  1305. UBERJAR_PATH_EXCLUDE_VALUE=
  1306. ### @usage: UBERJAR_PATH_EXCLUDE_PREFIX(Args...)
  1307. ###
  1308. ### Exclude classes matching this patterns from UBERJAR.
  1309. ### By default all dependencies of UBERJAR program will lend in a .jar archive.
  1310. ###
  1311. ### @see: [UBERJAR](#macro_UBERJAR)
  1312. macro UBERJAR_PATH_EXCLUDE_PREFIX(Args...) {
  1313. SET_APPEND(UBERJAR_PATH_EXCLUDE_VALUE $ARGS_DELIM $Args)
  1314. SET_APPEND(UBERJAR_PATH_EXCLUDES ${pre=--uber-exclude :Args})
  1315. }
  1316. # tag:java-specific
  1317. UBERJAR_MANIFEST_TRANSFORMER_MAIN_VALUE=
  1318. UBERJAR_MANIFEST_TRANSFORMER_MAIN_FLAG=
  1319. ### @usage: UBERJAR_MANIFEST_TRANSFORMER_MAIN(Main)
  1320. ###
  1321. ### Transform manifest.mf for UBERJAR() java programs, set main-class attribute
  1322. ###
  1323. ### @see: [UBERJAR](#macro_UBERJAR)
  1324. macro UBERJAR_MANIFEST_TRANSFORMER_MAIN(Main) {
  1325. SET(UBERJAR_MANIFEST_TRANSFORMER_MAIN_VALUE $Main)
  1326. SET(UBERJAR_MANIFEST_TRANSFORMER_MAIN_FLAG --manifest-main $Main)
  1327. }
  1328. # tag:java-specific
  1329. UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE_VALUE=
  1330. UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE_FLAGS=
  1331. ### @usage: UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE(Key, Value)
  1332. ###
  1333. ### Transform manifest.mf for UBERJAR() java programs, set attribute
  1334. ###
  1335. ### @see: [UBERJAR](#macro_UBERJAR)
  1336. macro UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE(Key, Value) {
  1337. SET_APPEND(UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE_VALUE $ARGS_DELIM $Key : $Value)
  1338. SET_APPEND(UBERJAR_MANIFEST_TRANSFORMER_ATTRIBUTE_FLAGS --manifest-attribute ${Key}:${Value})
  1339. }
  1340. # tag:java-specific
  1341. UBERJAR_APPENDING_TRANSFORMER_VALUE=
  1342. UBERJAR_APPENDING_TRANSFORMER_FLAGS=
  1343. ### @usage: UBERJAR_APPENDING_TRANSFORMER(Resource)
  1344. ###
  1345. ### Add AppendingTransformer for UBERJAR() java programs
  1346. ###
  1347. ### Parameters:
  1348. ### - Resource - Resource name
  1349. ###
  1350. ### @see: [UBERJAR](#macro_UBERJAR)
  1351. macro UBERJAR_APPENDING_TRANSFORMER(Resources...) {
  1352. SET_APPEND(UBERJAR_APPENDING_TRANSFORMER_VALUE $ARGS_DELIM $Resources)
  1353. SET_APPEND(UBERJAR_APPENDING_TRANSFORMER_FLAGS ${pre=--append-transformer :Resources})
  1354. }
  1355. # tag:java-specific
  1356. UBERJAR_SERVICES_RESOURCE_TRANSFORMER_VALUE=
  1357. UBERJAR_SERVICES_RESOURCE_TRANSFORMER_FLAG=
  1358. ### @usage: UBERJAR_SERVICES_RESOURCE_TRANSFORMER()
  1359. ###
  1360. ### Add ServicesResourceTransformer for UBERJAR() java programs
  1361. ###
  1362. ### @see: [UBERJAR](#macro_UBERJAR)
  1363. macro UBERJAR_SERVICES_RESOURCE_TRANSFORMER() {
  1364. SET(UBERJAR_SERVICES_RESOURCE_TRANSFORMER_VALUE yes)
  1365. SET(UBERJAR_SERVICES_RESOURCE_TRANSFORMER_FLAG --service-transformer)
  1366. }
  1367. # tag:idea-specific
  1368. IDEA_EXCLUDE_DIRS_VALUE=
  1369. ### @usage: IDEA_EXCLUDE_DIRS(<excluded dirs>)
  1370. ###
  1371. ### Exclude specified directories from an idea project generated by ya ide idea
  1372. ### Have no effect on regular build.
  1373. macro IDEA_EXCLUDE_DIRS(Args...) {
  1374. SET_APPEND(IDEA_EXCLUDE_DIRS_VALUE $Args)
  1375. }
  1376. # tag:idea-specific
  1377. IDEA_RESOURCE_DIRS_VALUE=
  1378. ### @usage: IDEA_RESOURCE_DIRS(<additional dirs>)
  1379. ###
  1380. ### Set specified resource directories in an idea project generated by ya ide idea
  1381. ### Have no effect on regular build.
  1382. macro IDEA_RESOURCE_DIRS(Args...) {
  1383. SET_APPEND(IDEA_RESOURCE_DIRS_VALUE $Args)
  1384. }
  1385. # tag:idea-specific
  1386. IDEA_MODULE_NAME_VALUE=
  1387. ### @usage: IDEA_MODULE_NAME(module_name)
  1388. ###
  1389. ### Set module name in an idea project generated by ya ide idea
  1390. ### Have no effect on regular build.
  1391. macro IDEA_MODULE_NAME(Name) {
  1392. SET(IDEA_MODULE_NAME_VALUE $Name)
  1393. }
  1394. # tag:java-specific
  1395. JAVAC_FLAGS_VALUE=
  1396. ### @usage: JAVAC_FLAGS(Args...)
  1397. ###
  1398. ### Set additional Java compilation flags.
  1399. macro JAVAC_FLAGS(Args...) {
  1400. SET_APPEND(JAVAC_OPTS $Args)
  1401. SET_APPEND(JAVAC_FLAGS_VALUE $ARGS_DELIM $Args)
  1402. }
  1403. # tag:java-specific
  1404. ENABLE_PREVIEW_VALUE=
  1405. ### @usage: ENABLE_PREVIEW()
  1406. ###
  1407. ### Enable java preview features.
  1408. macro ENABLE_PREVIEW() {
  1409. SET_APPEND(JVM_ARGS_VALUE --enable-preview)
  1410. SET_APPEND(JAVAC_OPTS --enable-preview --release $JDK_REAL_VERSION)
  1411. SET_APPEND(JAVAC_FLAGS_VALUE --enable-preview --release $JDK_REAL_VERSION)
  1412. SET(ENABLE_PREVIEW_VALUE yes)
  1413. }
  1414. # tag:java-specific
  1415. SAVE_JAVAC_GENERATED_SRCS=
  1416. SAVE_JAVAC_GENERATED_SRCS_DIR=
  1417. SAVE_JAVAC_GENERATED_SRCS_TAR=
  1418. when ($SAVE_JAVAC_GENERATED_SRCS) {
  1419. SAVE_JAVAC_GENERATED_SRCS_DIR=${BINDIR}/__javac_generated_srcs__
  1420. SAVE_JAVAC_GENERATED_SRCS_TAR=${BINDIR}/javac_generated.tar
  1421. JAVAC_FLAGS_VALUE+=-s $SAVE_JAVAC_GENERATED_SRCS_DIR
  1422. }
  1423. # tag:java-specific
  1424. # TODO: MAVEN_GROUP_ID_VALUE is only used by jbuild remove it after YMAKE-45 and YMAKE-46
  1425. MAVEN_GROUP_ID_VALUE=
  1426. MAVEN_EXPORT_GOUP_ID=ru.yandex
  1427. ### @usage: MAVEN_GROUP_ID(group_id_for_maven_export)
  1428. ###
  1429. ### Set maven export group id for JAVA_PROGRAM() and JAVA_LIBRARY().
  1430. ### Have no effect on regular build.
  1431. macro MAVEN_GROUP_ID(Arg, VERSION="no") {
  1432. SET(MAVEN_GROUP_ID_VALUE $Arg)
  1433. SET(MAVEN_EXPORT_GOUP_ID $Arg)
  1434. SET(PUBLISH_MAVEN_VERSION $VERSION)
  1435. }
  1436. # tag:java-specific
  1437. ANNOTATION_PROCESSOR_VALUE=
  1438. ### @usage: ANNOTATION_PROCESSOR(processors...)
  1439. ###
  1440. ### The macro is in development.
  1441. ### Used to specify annotation processors to build JAVA_PROGRAM() and JAVA_LIBRARY().
  1442. macro ANNOTATION_PROCESSOR(Args...) {
  1443. SET_APPEND(ANNOTATION_PROCESSOR_VALUE $ARGS_DELIM $Args)
  1444. }
  1445. EXCLUDE_VALUE=
  1446. ### EXCLUDE(prefixes)
  1447. ###
  1448. ### The macro is in development.
  1449. ### Specifies which libraries should be excluded from the classpath.
  1450. macro EXCLUDE(Args...) {
  1451. SET_APPEND(EXCLUDE_VALUE $ARGS_DELIM $Args)
  1452. }
  1453. # tag:java-specific
  1454. JAVA_SRCS_VALUE=
  1455. ### Fill JAVA_SRCS_VALUE for ya ide idea, skip SKIP_CHECK_SRCDIR option
  1456. macro _IDEA_JAVA_SRCS_VALUE(RESOURCES?"RESOURCES":"", SKIP_CHECK_SRCDIR?"SKIP_CHECK_SRCDIR":"", Args...) {
  1457. # RESOURCES must be at first position, else ya ide idea will fault
  1458. SET_APPEND(JAVA_SRCS_VALUE $ARGS_DELIM $RESOURCES $Args)
  1459. }
  1460. ### @usage: JAVA_SRCS(srcs)
  1461. ###
  1462. ### Specify java source files and resources. A macro can be contained in any of four java modules.
  1463. ### Keywords:
  1464. ### 1. SRCDIR x - specify the directory x is performed relatively to search the source code for these patterns. If there is no SRCDIR, the source will be searched relative to the module directory.
  1465. ### 2. PACKAGE_PREFIX x - use if source paths relative to the SRCDIR does not coincide with the full class names. For example, if all sources of module are in the same package, you can create a directory package/name , and just put the source code in the SRCDIR and specify PACKAGE_PREFIX package.name.
  1466. ###
  1467. ### @example:
  1468. ### - example/ya.make
  1469. ###
  1470. ### JAVA_PROGRAM()
  1471. ### JAVA_SRCS(SRCDIR src/main/java **/*)
  1472. ### END()
  1473. ###
  1474. ### - example/src/main/java/ru/yandex/example/HelloWorld.java
  1475. ###
  1476. ### package ru.yandex.example;
  1477. ### public class HelloWorld {
  1478. ### public static void main(String[] args) {
  1479. ### System.out.println("Hello, World!");
  1480. ### }
  1481. ### }
  1482. ###
  1483. ### Documentation: https://wiki.yandex-team.ru/yatool/java/#javasrcs
  1484. macro JAVA_SRCS(Args...) {
  1485. # TODO Use FULL_JAVA_SRCS
  1486. _IDEA_JAVA_SRCS_VALUE($Args)
  1487. # Fill semantic for non-standard sources/resources
  1488. _SEM_JAR_SOURCE_SET($Args)
  1489. }
  1490. # tag:java-specific
  1491. JAVA_ADD_DLLS_VALUE=no
  1492. macro ADD_DLLS_TO_JAR() {
  1493. SET(JAVA_ADD_DLLS_VALUE yes)
  1494. }
  1495. # tag:java-specific
  1496. MANAGED_PEERS=
  1497. MANAGED_PEERS_CLOSURE=
  1498. RUN_JAVA_PROGRAM_MANAGED=
  1499. MANAGEABLE_PEERS_ROOTS=contrib/java
  1500. HAS_MANAGEABLE_PEERS=no
  1501. PROPAGATES_MANAGEABLE_PEERS=no
  1502. # All items of this list must be PEERS, GHOST PEERS or TOOLS of the test module or module itself.
  1503. # All items of this list must has at least one of HAS_MANAGEABLE_PEERS or PROPAGATES_MANAGEABLE_PEERS flags set yes.
  1504. # This variable is used by JUnit tests but not TestNG.
  1505. TEST_CLASSPATH_VALUE=
  1506. # Calculated and replaced by ymake can be used in DART DATA
  1507. TEST_CLASSPATH_MANAGED=
  1508. # tag:java-specific
  1509. DEPENDENCY_MANAGEMENT_VALUE=
  1510. ### @usage: DEPENDENCY_MANAGEMENT(path/to/lib1 path/to/lib2 ...)
  1511. ###
  1512. ### Lock version of the library from the contrib/java at some point, so that all unversioned PEERDIRs to this library refer to the specified version.
  1513. ###
  1514. ### For example, if the module has PEERDIR (contrib/java/junit/junit), and
  1515. ### 1. specifies DEPENDENCY_MANAGEMENT(contrib/java/junit/junit/4.12),
  1516. ### the PEERDIR is automatically replaced by contrib/java/junit/junit/4.12;
  1517. ### 2. doesn't specify DEPENDENCY_MANAGEMENT, PEERDIR automatically replaced
  1518. ### with the default from contrib/java/junit/junit/ya.make.
  1519. ### These defaults are always there and are supported by maven-import, which puts
  1520. ### there the maximum version available in contrib/java.
  1521. ###
  1522. ### The property is transitive. That is, if module A PEERDIRs module B, and B has PEERDIR(contrib/java/junit/junit), and this junit was replaced by junit-4.12, then junit-4.12 will come to A through B.
  1523. ###
  1524. ### If some module has both DEPENDENCY_MANAGEMENT(contrib/java/junit/junit/4.12) and PERDIR(contrib/java/junit/junit/4.11), the PEERDIR wins.
  1525. ###
  1526. ### Documentation: https://wiki.yandex-team.ru/yatool/java/
  1527. macro DEPENDENCY_MANAGEMENT(Args...) {
  1528. SET_APPEND(DEPENDENCY_MANAGEMENT_VALUE $ARGS_DELIM $Args)
  1529. _GHOST_PEERDIR($Args)
  1530. }
  1531. # tag:java-specific
  1532. WITH_JDK_VALUE=
  1533. ### @usage: WITH_JDK()
  1534. ###
  1535. ### Add directory with JDK to JAVA_PROGRAM output
  1536. macro WITH_JDK() {
  1537. when ($REALPRJNAME == "jdk") {
  1538. _OK=no
  1539. }
  1540. otherwise {
  1541. _PACK_JDK= && ${YMAKE_PYTHON} ${input:"build/scripts/tar_directory.py"} ${output;tared:"jdk.tar"} $WITH_JDK_RESOURCE $WITH_JDK_RESOURCE
  1542. WITH_JDK_VALUE=yes
  1543. }
  1544. ASSERT(_OK [[alt1]]jdk[[rst]] name is prohibited for [[imp]]JAVA_PROGRAM[[rst]] module when [[imp]]WITH_JDK[[rst]] is used, [[imp]]WITH_JDK[[rst]] will be ignored.)
  1545. }
  1546. # tag:kotlin-specific
  1547. WITH_KOTLIN_VALUE=
  1548. ### @usage: WITH_KOTLIN()
  1549. ###
  1550. ### Compile kotlin source code in this java module
  1551. macro WITH_KOTLIN() {
  1552. SET(WITH_KOTLIN_VALUE yes)
  1553. }
  1554. # tag:kotlin-specific
  1555. WITH_KAPT_VALUE=
  1556. ### @usage: WITH_KAPT()
  1557. ###
  1558. ### Use kapt for as annotation processor
  1559. macro WITH_KAPT() {
  1560. SET(WITH_KAPT_VALUE yes)
  1561. }
  1562. # tag:java-specific
  1563. WITH_GROOVY_VALUE=
  1564. ### @usage: WITH_GROOVY()
  1565. ###
  1566. ### Compile groovy source code in this java module
  1567. macro WITH_GROOVY() {
  1568. SET(WITH_GROOVY_VALUE yes)
  1569. }
  1570. # tag:kotlin-specific
  1571. KOTLINC_FLAGS_VALUE=-Xjvm-default=all
  1572. ### @usage: KOTLINC_FLAGS(-flags)
  1573. ###
  1574. ### Set additional Kotlin compilation flags.
  1575. macro KOTLINC_FLAGS(Args...) {
  1576. SET_APPEND(KOTLINC_OPTS_VALUE $Args)
  1577. }
  1578. # tag:kotlin-sppecific
  1579. WITH_KOTLINC_PLUGIN_ALLOPEN=
  1580. macro _WITH_KOTLINC_ALLOPEN(Options...) {
  1581. SET_APPEND(KOTLINC_OPTS_VALUE ${pre=-P plugin\:org.jetbrains.kotlin.allopen\::Options})
  1582. SET(WITH_KOTLINC_PLUGIN_ALLOPEN yes)
  1583. }
  1584. # tag:kotlin-specific
  1585. ### @usage: WITH_KOTLINC_ALLOPEN(-flags)
  1586. ###
  1587. ### Enable allopen kotlin compiler plugin https://kotlinlang.org/docs/all-open-plugin.html
  1588. macro WITH_KOTLINC_ALLOPEN(HEAD, TAIL...) {
  1589. _WITH_KOTLINC_ALLOPEN($HEAD $TAIL)
  1590. }
  1591. # tag:kotlin-specific
  1592. WITH_KOTLINC_PLUGIN_LOMBOK=
  1593. ### @usage: WITH_KOTLINC_LOMBOK(-flags)
  1594. ###
  1595. ### Enable lombok kotlin compiler plugin https://kotlinlang.org/docs/lombok.html
  1596. macro WITH_KOTLINC_LOMBOK(Options...) {
  1597. SET_APPEND(KOTLINC_OPTS_VALUE ${pre=-P plugin\:org.jetbrains.kotlin.lombok\::Options})
  1598. SET(WITH_KOTLINC_PLUGIN_LOMBOK yes)
  1599. }
  1600. # tag:kotlin-specific
  1601. WITH_KOTLINC_PLUGIN_NOARG=
  1602. ### @usage: WITH_KOTLINC_NOARG(-flags)
  1603. ###
  1604. ### Enable noarg kotlin compiler plugin https://kotlinlang.org/docs/no-arg-plugin.html
  1605. macro WITH_KOTLINC_NOARG(Options...) {
  1606. SET_APPEND(KOTLINC_OPTS_VALUE ${pre=-P plugin\:org.jetbrains.kotlin.noarg\::Options})
  1607. SET(WITH_KOTLINC_PLUGIN_NOARG yes)
  1608. }
  1609. # tag:kotlin-specific
  1610. WITH_KOTLINC_PLUGIN_SERIALIZATION=
  1611. ### @usage: WITH_KOTLINC_SERIALIZATION()
  1612. ###
  1613. ### Enable serialization kotlin compiler plugin https://kotlinlang.org/docs/serialization.html
  1614. macro WITH_KOTLINC_SERIALIZATION() {
  1615. SET(WITH_KOTLINC_PLUGIN_SERIALIZATION yes)
  1616. }
  1617. # tag:kotlin-specific
  1618. ### Also search for _KAPT_OPTS and change version there
  1619. KOTLIN_VERSION=1.9.20
  1620. KOTLIN_BOM_FILE=${ARCADIA_ROOT}/contrib/java/org/jetbrains/kotlin/kotlin-bom/1.9.20/ya.dependency_management.inc
  1621. GROOVY_VERSION=3.0.5
  1622. # tag:java-specific
  1623. DIRECT_DEPS_ONLY_VALUE=
  1624. ### @usage: DIRECT_DEPS_ONLY
  1625. ###
  1626. ### Add direct PEERDIR's only in java compile classpath
  1627. macro DIRECT_DEPS_ONLY() {
  1628. SET(DIRECT_DEPS_ONLY_VALUE yes)
  1629. }
  1630. # tag:java-specific
  1631. JAVA_EXTERNAL_DEPENDENCIES_VALUE=
  1632. ### @usage: JAVA_EXTERNAL_DEPENDENCIES(file1 file2 ...)
  1633. ###
  1634. ### Add non-source java external build dependency (like lombok config file)
  1635. macro JAVA_EXTERNAL_DEPENDENCIES(Args...) {
  1636. SET_APPEND(JAVA_EXTERNAL_DEPENDENCIES_VALUE $Args)
  1637. }
  1638. # tag:java-specific
  1639. JAVA_CLASSPATH_CMD_TYPE_VALUE=
  1640. # tag:java-specific
  1641. ### @usage:TEST_JAVA_CLASSPATH_CMD_TYPE(Type)
  1642. ### Available types: MANIFEST(default), COMMAND_FILE, LIST
  1643. ### Method for passing a classpath value to a java command line
  1644. ### MANIFEST via empty jar file with manifest that contains Class-Path attribute
  1645. ### COMMAND_FILE via @command_file
  1646. ### LIST via flat args
  1647. macro TEST_JAVA_CLASSPATH_CMD_TYPE(Type) {
  1648. SET(JAVA_CLASSPATH_CMD_TYPE_VALUE $Type)
  1649. }
  1650. # tag:java-specific
  1651. IGNORE_JAVA_DEPENDENCIES_CONFIGURATION=no
  1652. JAVA_DEPENDENCIES_CONFIGURATION_VALUE=
  1653. # tag:java-specific
  1654. ### @usage JAVA_DEPENDENCIES_CONFIGURATION(Vetos...)
  1655. ### Validate contrib/java dependencies
  1656. ### Valid arguments
  1657. ### FORBID_DIRECT_PEERDIRS - fail when module have direct PEERDIR (with version) (non-transitive)
  1658. ### FORBID_CONFLICT - fail when module have resolved without DEPENDENCY_MANAGEMENT version conflict (transitive)
  1659. ### FORBID_CONFLICT_DM - fail when module have resolved with DEPENDENCY_MANAGEMENT version conflict (transitive)
  1660. ### FORBID_CONFLICT_DM_RECENT - like FORBID_CONFLICT_DM but fail only when dependency have more recent version than specified in DEPENDENCY_MANAGEMENT
  1661. ### REQUIRE_DM - all dependencies must be specified in DEPENDENCY_MANAGEMENT (transitive)
  1662. macro JAVA_DEPENDENCIES_CONFIGURATION(Args...) {
  1663. SET_APPEND(JAVA_DEPENDENCIES_CONFIGURATION_VALUE $Args)
  1664. }
  1665. # tag:java-specific
  1666. # TODO(DEVTOOLS-6901): remove this variable when there are no more references to it in jbuild
  1667. JAVA_FORBIDDEN_LIBRARIES_VALUE=
  1668. # tag:java-specific
  1669. JAR_INCLUDE_FILTER_VALUE=
  1670. JAR_EXCLUDE_FILTER_VALUE=
  1671. # tag:java-specific
  1672. ### @usage:JAR_INCLUDE(Filters...)
  1673. ### Filter .jar file content: keep only matched files
  1674. ### * and ** patterns are supported (like JAVA_SRCS)
  1675. macro JAR_INCLUDE(Filters...) {
  1676. SET_APPEND(JAR_INCLUDE_FILTER_VALUE $Filters)
  1677. }
  1678. # tag:java-specific
  1679. ### @usage:JAR_EXCLUDE(Filters...)
  1680. ### Filter .jar file content: remove matched files
  1681. ### * and ** patterns are supported (like JAVA_SRCS)
  1682. macro JAR_EXCLUDE(Filters...) {
  1683. SET_APPEND(JAR_EXCLUDE_FILTER_VALUE $Filters)
  1684. }
  1685. # tag:java-specific
  1686. _COMPILE_JSRC=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/compile_jsrc.py"} --input $AUTO_INPUT --output $TARGET --prefix $BINDIR ${kv;hide:"p JC"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}
  1687. # tag:java-specific
  1688. COMPILE_JSRC_MF=$_COMPILE_JSRC && $GENERATE_MF
  1689. # tag:java-specific tag:internal
  1690. ### @usage: JSRC_LIBRARY() # internal
  1691. module JSRC_LIBRARY: _BARE_UNIT {
  1692. .CMD=COMPILE_JSRC_MF
  1693. .EXTS=.java
  1694. .PEERDIR_POLICY=as_include
  1695. .FINAL_TARGET=no
  1696. .ALIASES=SRCS=FILES
  1697. PEERDIR_TAGS=JAVA_PROTO JAVA_FBS JAVA_IDL
  1698. MODULE_TYPE=LIBRARY
  1699. SET(MODULE_SUFFIX .jsrc)
  1700. SET(DONT_RESOLVE_INCLUDES yes)
  1701. SET(NEED_PLATFORM_PEERDIRS no)
  1702. SET(MODULE_LANG JAVA)
  1703. NO_RUNTIME()
  1704. }
  1705. # tag:java-specific
  1706. JAVA_PROGRAM_CP_USE_COMMAND_FILE=yes
  1707. when ($JDK_REAL_VERSION == "8") {
  1708. JAVA_PROGRAM_CP_USE_COMMAND_FILE=no
  1709. }
  1710. # tag:kotlin-specific
  1711. KOTLIN_JVM_TARGET=
  1712. when ($JDK_REAL_VERSION == "8") {
  1713. KOTLIN_JVM_TARGET=1.8
  1714. }
  1715. elsewhen ($JDK_REAL_VERSION == "22") {
  1716. # remove when kotlin starts supporting jdk21 bytecode
  1717. # see also devtools/ya/jbuild/gen/actions/idea.py
  1718. KOTLIN_JVM_TARGET=21
  1719. }
  1720. otherwise {
  1721. KOTLIN_JVM_TARGET=$JDK_REAL_VERSION
  1722. }
  1723. # tag:java-specific
  1724. ### @usage: JDK_VERSION(Version)
  1725. ###
  1726. ### Specify JDK version for module
  1727. macro JDK_VERSION(Arg) {
  1728. .SEM=required_jdk $Arg ${output;hide:"JdkVersionFakeProp.java"}
  1729. SET(JDK_REAL_VERSION $Arg)
  1730. _JDK_VERSION_MACRO_CHECK($Arg)
  1731. }
  1732. # tag:java-specific
  1733. ### @usage: DEFAULT_JDK_VERSION(Version)
  1734. ###
  1735. ### Specify JDK version for module, can be overridden by setting the JDK_VERSION variable
  1736. macro DEFAULT_JDK_VERSION(Arg) {
  1737. _SET_FIRST_VALUE(_JDK_VERSION $JDK_VERSION $Arg)
  1738. JDK_VERSION($_JDK_VERSION)
  1739. }
  1740. # tag:java-specific
  1741. # local jdk and tools
  1742. USE_SYSTEM_JDK=
  1743. USE_SYSTEM_UBERJAR=
  1744. USE_SYSTEM_ERROR_PRONE=
  1745. # tag:kotlin-specific
  1746. _USE_KTLINT_OLD=no
  1747. # tag:kotlin-specific
  1748. ### @usage: USE_KTLINT_OLD()
  1749. ### Marks that need use the old version of ktlint
  1750. macro USE_KTLINT_OLD() {
  1751. ENABLE(_USE_KTLINT_OLD)
  1752. }