java.conf 92 KB

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