diff options
| author | dimdim11 <[email protected]> | 2025-06-12 10:58:07 +0300 |
|---|---|---|
| committer | dimdim11 <[email protected]> | 2025-06-12 11:15:23 +0300 |
| commit | bc7ff32a99f4a381014472d8a3b10a1ed957176d (patch) | |
| tree | 3a467b413995d6cd3ba254399e2b1b7df96e6a7e | |
| parent | 27aa95c69693f84383c917b293c2c0ac4a8fcf22 (diff) | |
Refactor source/resource sets semantics to objects with dir, globs, prefix; support single source/resource files
Refactor source/resource sets semantics to objects with dir, globs, prefix; support single source/resource files
commit_hash:e84a3800c76f0b69d8450809bbc482533f26cff9
10 files changed, 105 insertions, 39 deletions
diff --git a/build/conf/java.conf b/build/conf/java.conf index fedb570820f..90606b8552a 100644 --- a/build/conf/java.conf +++ b/build/conf/java.conf @@ -446,12 +446,19 @@ macro _JAVA_SRCS(RESOURCES?"yes":"no", SRCDIR=".", PACKAGE_PREFIX="", EXCLUDE[], _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) } -# tag:java-specific +# tag:java-specific tag:deprecated # Fill semantic jar_source_set/jar_resource_set by JAVA_SRCS() Args _JAR_SOURCE_SET_SEM= macro _SEM_JAR_SOURCE_SET(SRCDIR=".", PACKAGE_PREFIX="", EXCLUDE[], FILES[], RESOURCES?"jar_resource_set":"jar_source_set", SKIP_CHECK_SRCDIR?"SKIP_CHECK_SRCDIR":"", Globs...) { # Now ignore SKIP_CHECK_SRCDIR, EXCLUDE, FILES - SET_APPEND(_JAR_SOURCE_SET_SEM && $RESOURCES ${pre=${SRCDIR}\::Globs} ${pre=&& package_prefix :PACKAGE_PREFIX}) + SET_APPEND(_JAR_SOURCE_SET_SEM && $RESOURCES ${pre=${SRCDIR}\::Globs}) +} + +# tag:java-specific +# Fill semantic source_sets/resource_sets by JAVA_SRCS() Args +macro _SEM_SOURCE_SETS(SRCDIR=".", PACKAGE_PREFIX="", EXCLUDE[], FILES[], RESOURCES?"resource_sets":"source_sets", SKIP_CHECK_SRCDIR?"SKIP_CHECK_SRCDIR":"", Globs...) { + # Now ignore SKIP_CHECK_SRCDIR, EXCLUDE, FILES + SET_APPEND(_JAR_SOURCE_SET_SEM && ${RESOURCES}-ITEM && ${RESOURCES}-dir ${SRCDIR} && ${RESOURCES}-globs ${Globs} && ${RESOURCES}-prefix ${PACKAGE_PREFIX}) } ### Fill JAVA_SRCS to value for ya ide idea and real apply for late globs @@ -459,6 +466,7 @@ macro FULL_JAVA_SRCS(Args...) { _IDEA_JAVA_SRCS_VALUE($Args) _JAVA_SRCS($Args) _SEM_JAR_SOURCE_SET($Args) + _SEM_SOURCE_SETS($Args) } # tag:java-specific @@ -1911,6 +1919,7 @@ macro JAVA_SRCS(Args...) { _IDEA_JAVA_SRCS_VALUE($Args) # Fill semantic for non-standard sources/resources _SEM_JAR_SOURCE_SET($Args) + _SEM_SOURCE_SETS($Args) } ### @usage: JAVA_RESOURCE_TAR(tar_path EXTRACT_ROOT root_dir) diff --git a/build/export_generators/gradle/generator.toml b/build/export_generators/gradle/generator.toml index ab01671a5e3..476200373f4 100644 --- a/build/export_generators/gradle/generator.toml +++ b/build/export_generators/gradle/generator.toml @@ -29,16 +29,11 @@ is_test = true is_extra_target = true [attrs.target] -# DEPRECATED -annotation_processors="list" - required_jdk="str" add_vcs_info_to_mf="bool" junit4_test="flag" junit5_test="flag" app_main_class="str" -jar_source_set="list" -jar_resource_set="list" enable_preview="flag" use_annotation_processor="list" use_errorprone="flag" diff --git a/build/export_generators/ide-gradle/build.gradle.kts.any.jinja b/build/export_generators/ide-gradle/build.gradle.kts.any.jinja index ca90ffeaba4..9f1cfc4c525 100644 --- a/build/export_generators/ide-gradle/build.gradle.kts.any.jinja +++ b/build/export_generators/ide-gradle/build.gradle.kts.any.jinja @@ -2,20 +2,20 @@ {#- Include macroses.jinja then include use_macroses.jinja not work! -#} {#- That is why all common macroses here -#} -{%- macro PatchRoots(arg, depend = false, output = false) -%} +{%- macro PatchRoots(arg, depend = false, output = false, tail = "") -%} {#- Always replace (arcadia_root) === (SOURCE_ROOT in ymake) to $arcadia_root in Gradle -#} {%- if depend -%} {#- Replace (export_root) === (BUILD_ROOT in ymake) to $arcadia_root in Gradle, because prebuilt tools in arcadia, not in build_root -#} -"{{ arg|replace(export_root, "$output_root")|replace(project_root, "$project_root")|replace(arcadia_root, "$arcadia_root") }}" +"{{ arg|replace(export_root, "$output_root")|replace(project_root, "$project_root")|replace(arcadia_root, "$arcadia_root") }}{{ tail }}" {%- elif output and arg[0] != '/' -%} {#- Relative outputs in buildDir -#} -"$buildDir/{{ arg }}" +"$buildDir/{{ arg }}{{ tail }}" {%- elif output -%} {#- Replace (export_root) === (BUILD_ROOT in ymake) to baseBuildDir in Gradle - root of all build folders for modules -#} -"{{ arg|replace(export_root, "$baseBuildDir")|replace(project_root, "$project_root")|replace(arcadia_root, "$output_root")|replace(output_root, "$output_root") }}" +"{{ arg|replace(export_root, "$baseBuildDir")|replace(project_root, "$project_root")|replace(arcadia_root, "$output_root")|replace(output_root, "$output_root") }}{{ tail }}" {%- else -%} {#- Replace (export_root) === (BUILD_ROOT in ymake) to baseBuildDir in Gradle - root of all build folders for modules -#} -"{{ arg|replace(export_root, "$baseBuildDir")|replace(project_root, "$project_root")|replace(arcadia_root, "$arcadia_root")|replace(output_root, "$output_root") }}" +"{{ arg|replace(export_root, "$baseBuildDir")|replace(project_root, "$project_root")|replace(arcadia_root, "$arcadia_root")|replace(output_root, "$output_root") }}{{ tail }}" {%- endif -%} {%- endmacro -%} diff --git a/build/export_generators/ide-gradle/codegen.jinja b/build/export_generators/ide-gradle/codegen.jinja index 31d8c0df04d..f22cd2596be 100644 --- a/build/export_generators/ide-gradle/codegen.jinja +++ b/build/export_generators/ide-gradle/codegen.jinja @@ -37,7 +37,7 @@ tasks.withType<KaptGenerateStubsTask>().configureEach { {%- macro ObjDepends(obj) -%} {%- set taskvar = varprefix + obj['_object_index'] -%} -{%- if obj['_parent_object_index'] -%} +{%- if obj['_parent_object_index'] and obj['_parent_object_index'] in current_target_object_indexes -%} {%- set parent_taskvar = varprefix + obj['_parent_object_index'] %} tasks.getByName("{{ parent_taskvar }}").dependsOn({{ taskvar }}) diff --git a/build/export_generators/ide-gradle/codegen_current_target.jinja b/build/export_generators/ide-gradle/codegen_current_target.jinja index 24bdcdb460e..20d036ec40f 100644 --- a/build/export_generators/ide-gradle/codegen_current_target.jinja +++ b/build/export_generators/ide-gradle/codegen_current_target.jinja @@ -1,5 +1,15 @@ +{%- set current_target_object_indexes = [] -%} + {%- set copy_files = current_target.target_commands|selectattr("macro", "eq", "copy_file") -%} +{%- if copy_files|length -%} +{%- set current_target_object_indexes = current_target_object_indexes + copy_files|map(attribute='_object_index') -%} +{%- endif -%} + + {%- set move_files = current_target.target_commands|selectattr("macro", "eq", "move_file") -%} +{%- if move_files|length -%} +{%- set current_target_object_indexes = current_target_object_indexes + move_files|map(attribute='_object_index') -%} +{%- endif -%} {%- include "[generator]/codegen_run_program.jinja" -%} {%- include "[generator]/codegen_run_java_program.jinja" -%} diff --git a/build/export_generators/ide-gradle/codegen_run_java_program.jinja b/build/export_generators/ide-gradle/codegen_run_java_program.jinja index 0546c4ce819..a70957227e0 100644 --- a/build/export_generators/ide-gradle/codegen_run_java_program.jinja +++ b/build/export_generators/ide-gradle/codegen_run_java_program.jinja @@ -1,4 +1,5 @@ {%- if current_target.runs|length -%} +{%- set current_target_object_indexes = current_target_object_indexes + current_target.runs|map(attribute='_object_index') -%} {%- for run in current_target.runs %} val {{ varprefix }}{{ run['_object_index'] }} = task<JavaExec>("{{ varprefix }}{{ run['_object_index'] }}") { diff --git a/build/export_generators/ide-gradle/codegen_run_program.jinja b/build/export_generators/ide-gradle/codegen_run_program.jinja index f064f636fce..360a1f63548 100644 --- a/build/export_generators/ide-gradle/codegen_run_program.jinja +++ b/build/export_generators/ide-gradle/codegen_run_program.jinja @@ -1,4 +1,5 @@ {%- if current_target.custom_runs|length -%} +{%- set current_target_object_indexes = current_target_object_indexes + current_target.custom_runs|map(attribute='_object_index') -%} {%- for custom_run in current_target.custom_runs %} val {{ varprefix }}{{ custom_run['_object_index'] }} = task<Exec>("{{ varprefix }}{{ custom_run['_object_index'] }}") { diff --git a/build/export_generators/ide-gradle/common_vars.jinja b/build/export_generators/ide-gradle/common_vars.jinja index 321bad97e01..b8cc8d4e13f 100644 --- a/build/export_generators/ide-gradle/common_vars.jinja +++ b/build/export_generators/ide-gradle/common_vars.jinja @@ -37,7 +37,4 @@ {#- JNI -#} {%- set jnis = all_targets|selectattr(consumer)|map(attribute='consumer')|sum|selectattr('type', 'eq', 'dll')|selectattr('jar')|map(attribute='jar')|unique -%} -{#- Package prefix -#} -{%- set package_prefix = package_prefix|select("ne", "")|first -%} - {%- include "[generator]/jdk.jinja" -%} diff --git a/build/export_generators/ide-gradle/generator.toml b/build/export_generators/ide-gradle/generator.toml index ea14e595ba2..594528fce3d 100644 --- a/build/export_generators/ide-gradle/generator.toml +++ b/build/export_generators/ide-gradle/generator.toml @@ -34,21 +34,30 @@ is_extra_target = true [attrs.target] # DEPRECATED annotation_processors="list" +jar_source_set="list" +jar_resource_set="list" required_jdk="str" add_vcs_info_to_mf="bool" junit4_test="flag" junit5_test="flag" app_main_class="str" -jar_source_set="list" -jar_resource_set="list" -package_prefix="list" enable_preview="flag" use_annotation_processor="list" use_errorprone="flag" jdk_version="str" jdk_path="str" +source_sets="list" +source_sets-dir="str" +source_sets-globs="list" +source_sets-prefix="str" + +resource_sets="list" +resource_sets-dir="str" +resource_sets-globs="list" +resource_sets-prefix="str" + publish="flag" publish_group="str" publish_version="str" diff --git a/build/export_generators/ide-gradle/source_sets.jinja b/build/export_generators/ide-gradle/source_sets.jinja index afb52201e77..ba2965d4c20 100644 --- a/build/export_generators/ide-gradle/source_sets.jinja +++ b/build/export_generators/ide-gradle/source_sets.jinja @@ -1,10 +1,29 @@ +{%- macro SomeSet(some_set, module, reldir = "") -%} +{%- set dir = some_set.dir -%} +{%- if (reldir != "") and (dir[0] != "/") -%} +{#- Relative path in tests #} +{%- set dir = reldir + dir -%} +{%- endif -%} +{%- if some_set.globs|join('')|replace('*', '') != some_set.globs|join('') %} + {{ module }}.srcDir({{ PatchRoots(dir) }}) +{%- else -%} +{#- TODO Use single source file from each glob +{%- for glob in some_set.globs %} + {{ module }}.include({{ PatchRoots(dir, false, false, "/" + glob) }}) +{%- endfor -%} +#} + {{ module }}.srcDir({{ PatchRoots(dir) }}) +{%- endif -%} +{%- endmacro -%} + {#- empty string #} sourceSets { {%- set target_jar_source_set = target.jar_source_set|unique -%} {%- set target_jar_resource_set = target.jar_resource_set|unique -%} -{%- if target_jar_source_set|length or target_jar_resource_set|length or proto_template %} +{%- if target_jar_source_set|length or target_jar_resource_set|length or target.source_sets|length or target.resource_sets|length or proto_template %} main { -{%- if target_jar_source_set|length -%} +{#- DEPRECATED vvvvvvvvvvvvvvvv -#} +{%- if target_jar_source_set|length and not(target.source_sets|length) -%} {%- for source_set in target_jar_source_set -%} {%- set srcdir_glob = split(source_set, ':') -%} {%- set srcdir = srcdir_glob[0] %} @@ -12,13 +31,26 @@ sourceSets { {%- endfor -%} {%- endif -%} -{%- if target_jar_resource_set|length -%} +{%- if target_jar_resource_set|length and not(target.resource_sets|length) -%} {%- for resource_set in target_jar_resource_set -%} {%- set resdir_glob = split(resource_set, ':') -%} {%- set resdir = resdir_glob[0] %} resources.srcDir({{ PatchRoots(resdir) }}) {%- endfor -%} {%- endif -%} +{#- DEPRECATED ^^^^^^^^^^^^^^^^ -#} + +{%- if target.source_sets|length -%} +{%- for source_set in target.source_sets -%} +{{ SomeSet(source_set, "java") }} +{%- endfor -%} +{%- endif -%} + +{%- if target.resource_sets|length -%} +{%- for resource_set in target.resource_sets -%} +{{ SomeSet(resource_set, "resources") }} +{%- endfor -%} +{%- endif -%} {%- if proto_template and symlinks_to_generated %} java.srcDir("generated/source/proto/main/java") @@ -41,25 +73,37 @@ sourceSets { {%- if extra_target.test_reldir -%} {%- set reldir = extra_target.test_reldir + "/" -%} {%- endif -%} -{%- for source_set in extra_target.jar_source_set|unique -%} -{%- set srcdir_glob = split(source_set, ':', 2) -%} -{%- if srcdir_glob[0][0] == "/" -%} -{#- Absolute path in glob -#} -{%- set srcdir = srcdir_glob[0] -%} -{%- else -%} -{%- set srcdir = reldir + srcdir_glob[0] -%} -{%- endif %} +{#- DEPRECATED vvvvvvvvvvvvvvvv -#} +{%- if extra_target.jar_source_set|length and not(extra_target.source_sets|length) -%} +{%- for source_set in extra_target.jar_source_set|unique -%} +{%- set srcdir_glob = split(source_set, ':', 2) -%} +{%- if srcdir_glob[0][0] == "/" -%} +{#- Absolute path in glob -#} +{%- set srcdir = srcdir_glob[0] -%} +{%- else -%} +{%- set srcdir = reldir + srcdir_glob[0] -%} +{%- endif %} java.srcDir({{ PatchRoots(srcdir) }}) -{%- endfor -%} -{%- for resource_set in extra_target.jar_resource_set|unique -%} -{%- set resdir_glob = split(resource_set, ':', 2) -%} -{%- if resdir_glob[0][0] == "/" -%} -{#- Absolute path in glob -#} -{%- set resdir = resdir_glob[0] -%} -{%- else -%} -{%- set resdir = reldir + resdir_glob[0] -%} -{%- endif %} +{%- endfor -%} +{%- endif -%} +{%- if extra_target.jar_resource_set|length and not(extra_target.resource_sets|length) -%} +{%- for resource_set in extra_target.jar_resource_set|unique -%} +{%- set resdir_glob = split(resource_set, ':', 2) -%} +{%- if resdir_glob[0][0] == "/" -%} +{#- Absolute path in glob -#} +{%- set resdir = resdir_glob[0] -%} +{%- else -%} +{%- set resdir = reldir + resdir_glob[0] -%} +{%- endif %} resources.srcDir({{ PatchRoots(resdir) }}) +{%- endfor -%} +{%- endif -%} +{#- DEPRECATED ^^^^^^^^^^^^^^^^ -#} +{%- for source_set in extra_target.source_sets -%} +{{ SomeSet(source_set, "java", reldir) }} +{%- endfor -%} +{%- for resource_set in extra_target.resource_sets -%} +{{ SomeSet(resource_set, "resources", reldir) }} {%- endfor -%} {%- endfor %} } |
