summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimdim11 <[email protected]>2025-06-12 10:58:07 +0300
committerdimdim11 <[email protected]>2025-06-12 11:15:23 +0300
commitbc7ff32a99f4a381014472d8a3b10a1ed957176d (patch)
tree3a467b413995d6cd3ba254399e2b1b7df96e6a7e
parent27aa95c69693f84383c917b293c2c0ac4a8fcf22 (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
-rw-r--r--build/conf/java.conf13
-rw-r--r--build/export_generators/gradle/generator.toml5
-rw-r--r--build/export_generators/ide-gradle/build.gradle.kts.any.jinja10
-rw-r--r--build/export_generators/ide-gradle/codegen.jinja2
-rw-r--r--build/export_generators/ide-gradle/codegen_current_target.jinja10
-rw-r--r--build/export_generators/ide-gradle/codegen_run_java_program.jinja1
-rw-r--r--build/export_generators/ide-gradle/codegen_run_program.jinja1
-rw-r--r--build/export_generators/ide-gradle/common_vars.jinja3
-rw-r--r--build/export_generators/ide-gradle/generator.toml15
-rw-r--r--build/export_generators/ide-gradle/source_sets.jinja84
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 %}
}