summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimdim11 <[email protected]>2025-03-27 13:16:38 +0300
committerdimdim11 <[email protected]>2025-03-27 13:29:52 +0300
commitd8eb7eb15e4f23e65ad7a123a24d2fd95f702027 (patch)
tree674e474c2fa0442dd6b5d970744b9d5354bab674
parenta001eed697a1e25be94f5c2539f1f9778014fdba (diff)
Add run custom program tasks
Add run custom program tasks commit_hash:8dce9bccb976700b7765362da19c1c9b6da64575
-rw-r--r--build/export_generators/ide-gradle/build.gradle.kts.jinja12
-rw-r--r--build/export_generators/ide-gradle/build.gradle.kts.proto.jinja17
-rw-r--r--build/export_generators/ide-gradle/proto_source_sets.jinja16
-rw-r--r--build/export_generators/ide-gradle/proto_vars.jinja1
-rw-r--r--build/export_generators/ide-gradle/run_java_program.jinja50
-rw-r--r--build/export_generators/ide-gradle/run_program.jinja64
-rw-r--r--build/export_generators/ide-gradle/source_sets.jinja4
7 files changed, 143 insertions, 21 deletions
diff --git a/build/export_generators/ide-gradle/build.gradle.kts.jinja b/build/export_generators/ide-gradle/build.gradle.kts.jinja
index 2adebe9cf99..c037f3e7bc8 100644
--- a/build/export_generators/ide-gradle/build.gradle.kts.jinja
+++ b/build/export_generators/ide-gradle/build.gradle.kts.jinja
@@ -1,3 +1,14 @@
+{%- macro PatchRoots(arg, depend = false) -%}
+{#- Always replace (arcadia_root) === (SOURCE_ROOT in ymake) to $project_root in Gradle -#}
+{%- if depend -%}
+{#- Replace (export_root) === (BUILD_ROOT in ymake) to $project_root in Gradle, because prebuilt tools in arcadia, not in build_root -#}
+"{{ arg|replace(export_root, "$project_root")|replace(arcadia_root, "$project_root") }}"
+{%- 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(arcadia_root, "$project_root") }}"
+{%- endif -%}
+{%- endmacro -%}
+
{%- include "[generator]/vars.jinja" -%}
{%- include "[generator]/import.jinja" -%}
{%- include "[generator]/repositories.jinja" -%}
@@ -12,6 +23,7 @@
{%- include "[generator]/source_sets.jinja" -%}
{%- include "[generator]/test.jinja" -%}
{%- include "[generator]/javadoc.jinja" -%}
+{%- include "[generator]/run_program.jinja" -%}
{%- include "[generator]/run_java_program.jinja" -%}
{%- include "[generator]/dependencies.jinja" -%}
{%- include "extra-tests.gradle.kts" ignore missing -%}
diff --git a/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja b/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja
index a83447aa671..ec3465d3166 100644
--- a/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja
+++ b/build/export_generators/ide-gradle/build.gradle.kts.proto.jinja
@@ -1,3 +1,18 @@
+{%- macro PatchRoots(arg, depend = false) -%}
+{#- Always replace (arcadia_root) === (SOURCE_ROOT in ymake) to $project_root in Gradle -#}
+{%- if depend -%}
+{#- Replace (export_root) === (BUILD_ROOT in ymake) to $project_root in Gradle, because prebuilt tools in arcadia, not in build_root -#}
+"{{ arg|replace(export_root, "$project_root")|replace(arcadia_root, "$project_root") }}"
+{%- 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(arcadia_root, "$project_root") }}"
+{%- endif -%}
+{%- endmacro -%}
+
+{%- macro PatchGeneratedProto(arg) -%}
+"{{ arg|replace(export_root, "$mainExtractedIncludeProtosDir")|replace(arcadia_root, "$mainExtractedIncludeProtosDir") }}"
+{%- endmacro -%}
+
{%- include "[generator]/proto_vars.jinja" -%}
{%- include "[generator]/proto_import.jinja" -%}
{%- include "[generator]/repositories.jinja" -%}
@@ -10,6 +25,8 @@
{%- include "[generator]/proto_source_sets.jinja" -%}
{%- include "[generator]/protobuf.jinja" -%}
{%- include "[generator]/proto_prepare.jinja" -%}
+{%- include "[generator]/run_program.jinja" -%}
+{%- include "[generator]/run_java_program.jinja" -%}
{%- include "[generator]/javadoc.jinja" -%}
{%- include "[generator]/proto_dependencies.jinja" -%}
{%- include "[generator]/debug.jinja" ignore missing -%}
diff --git a/build/export_generators/ide-gradle/proto_source_sets.jinja b/build/export_generators/ide-gradle/proto_source_sets.jinja
index 7c7814d940e..db7c467f643 100644
--- a/build/export_generators/ide-gradle/proto_source_sets.jinja
+++ b/build/export_generators/ide-gradle/proto_source_sets.jinja
@@ -1,6 +1,15 @@
{#- empty string #}
sourceSets {
main {
+{%- if target.jar_source_set|length -%}
+{%- for source_set in target.jar_source_set -%}
+{%- set srcdir_glob = split(source_set, ':') -%}
+{%- set out = srcdir_glob[0] -%}
+{%- if out != 'src/main/java' %}
+ java.srcDir({{ PatchRoots(out) }})
+{%- endif -%}
+{%- endfor -%}
+{%- endif %}
java.srcDir("$buildDir/generated/source/proto/main/java")
{%- if target.proto_grpc %}
java.srcDir("$buildDir/generated/source/proto/main/grpc")
@@ -14,13 +23,6 @@ sourceSets {
}
}
-{%- if target.jar_source_set is defined -%}
-{%- for source_set in target.jar_source_set -%}
-{%- set srcdir_glob = split(source_set, ':') %}
-sourceSets.main.java.srcDirs += "{{ srcdir_glob[0] }}"
-{% endfor -%}
-{%- endif %}
-
tasks.withType<Jar>() {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
diff --git a/build/export_generators/ide-gradle/proto_vars.jinja b/build/export_generators/ide-gradle/proto_vars.jinja
index 3ef6275d879..3f357ce243a 100644
--- a/build/export_generators/ide-gradle/proto_vars.jinja
+++ b/build/export_generators/ide-gradle/proto_vars.jinja
@@ -2,5 +2,6 @@
{%- set libraries = target.consumer|selectattr('type', 'eq', 'library') -%}
{%- set with_kotlin = target.with_kotlin -%}
{%- set kotlin_version = target.kotlin_version -%}
+{%- set proto_template = true -%}
{%- include "[generator]/jdk.jinja" -%}
diff --git a/build/export_generators/ide-gradle/run_java_program.jinja b/build/export_generators/ide-gradle/run_java_program.jinja
index f28ef430cc6..2d526e46251 100644
--- a/build/export_generators/ide-gradle/run_java_program.jinja
+++ b/build/export_generators/ide-gradle/run_java_program.jinja
@@ -4,6 +4,11 @@
val runJav{{ loop.index }} = task<JavaExec>("runJavaProgram{{ loop.index }}") {
group = "build"
description = "Code generation by run java program"
+
+{%- if run.cwd %}
+ workingDir = file({{ PatchRoots(run.cwd) }})
+{%- endif -%}
+
{%- set classpaths = run.classpath|reject('eq', '@.cplst') -%}
{%- if classpaths|length -%}
{% for classpath in classpaths -%}
@@ -20,40 +25,61 @@ val runJav{{ loop.index }} = task<JavaExec>("runJavaProgram{{ loop.index }}") {
args = listOf(
{%- for arg in run.args -%}
{%- if not loop.first %}
- "{{ arg }}",
+{%- if proto_template and (run.out_dir|select("eq", arg)|length or run.out|select("eq", arg)|length) %}
+ {{ PatchGeneratedProto(arg) }},
+{%- else -%}
+ {{ PatchRoots(arg) }},
+{%- endif -%}
{%- endif -%}
{%- endfor %}
)
{% endif -%}
-{%- if run.in_dir -%}
-{%- for in_dir in run.in_dir %}
- inputs.files(fileTree("{{ in_dir }}"))
+{%- if run.in_dir|length -%}
+{%- for in_dir in run.in_dir|unique %}
+ inputs.files(fileTree({{ PatchRoots(in_dir) }}))
{% endfor -%}
{%- endif -%}
-{%- if run.in -%}
-{%- for in_file in run.in %}
- inputs.files("{{ in_file }}")
+{%- if run.in|length -%}
+{%- for in_file in run.in|unique %}
+ inputs.files({{ PatchRoots(in_file) }})
+{% endfor -%}
+{%- endif -%}
+
+{%- if run.in_noparse|length -%}
+{%- for in_file in run.in_noparse|unique %}
+ inputs.files({{ PatchRoots(in_file) }})
{% endfor -%}
{%- endif -%}
{%- if run.out_dir|length -%}
{%- for out_dir in run.out_dir|unique %}
- outputs.dir("{{ out_dir }}")
+ outputs.dir({{ PatchRoots(out_dir) }})
{%- endfor -%}
{%- endif -%}
+
+{%- if run.out|length -%}
+{%- for out in run.out|unique %}
+ outputs.files({{ PatchRoots(out) }})
+{%- endfor -%}
+{%- endif -%}
+
{#-
- Не использованы аттрибуты
- run-out="list"
- run-cwd="str"
+ Не использованы атрибуты
run-in_dirs_inputs="list"
- run-in_noparse="list"
run-tool="list"
#}
}
+{%- if proto_template %}
+
+tasks.getByName("prepareMainProtos").dependsOn(runJav{{ loop.index }})
+tasks.getByName("extractMainLibrariesProtos").dependsOn(runJav{{ loop.index }})
+{% else %}
+
tasks.getByName("sourcesJar").dependsOn(runJav{{ loop.index }})
+{% endif -%}
tasks.compileJava.configure {
dependsOn(runJav{{ loop.index }})
diff --git a/build/export_generators/ide-gradle/run_program.jinja b/build/export_generators/ide-gradle/run_program.jinja
new file mode 100644
index 00000000000..147ae6c1657
--- /dev/null
+++ b/build/export_generators/ide-gradle/run_program.jinja
@@ -0,0 +1,64 @@
+{%- if target.custom_runs|length -%}
+{%- for custom_run in target.custom_runs %}
+
+val runProg{{ loop.index }} = task<Exec>("runProgram{{ loop.index }}") {
+ group = "build"
+ description = "Code generation by run custom program"
+
+{%- if custom_run.cwd %}
+ workingDir = file({{ PatchRoots(custom_run.cwd) }})
+{%- endif %}
+
+ commandLine(
+{%- for arg in custom_run.command -%}
+{%- if custom_run.depends|select("eq", arg)|length -%}
+{{ PatchRoots(arg, true) }}
+{%- elif proto_template -%}
+{#- generated proto put to prepared proto dir -#}
+{{ PatchGeneratedProto(arg) }}
+{%- else -%}
+{{ PatchRoots(arg) }}
+{%- endif -%}
+{%- if not loop.last %}, {% endif -%}
+{%- endfor -%})
+
+{%- if custom_run.depends|length -%}
+{%- for depend in custom_run.depends|unique %}
+ inputs.files({{ PatchRoots(depend, true) }})
+{% endfor -%}
+{%- endif -%}
+
+{%- if custom_run.outputs|length -%}
+{%- for out in custom_run.outputs|unique %}
+{%- if proto_template %}
+ outputs.files({{ PatchGeneratedProto(out) }})
+{%- else %}
+ outputs.files({{ PatchRoots(out) }})
+{%- endif -%}
+{%- endfor -%}
+{%- endif -%}
+{#-
+ Не использованы атрибуты
+ custom_run-env="list"
+#}
+}
+
+{%- if proto_template %}
+
+tasks.getByName("extractMainLibrariesProtos").dependsOn(runProg{{ loop.index }})
+{% else %}
+
+tasks.getByName("sourcesJar").dependsOn(runProg{{ loop.index }})
+{% endif -%}
+
+tasks.compileJava.configure {
+ dependsOn(runProg{{ loop.index }})
+}
+{%- if with_kotlin %}
+
+tasks.compileKotlin.configure {
+ dependsOn(runProg{{ loop.index }})
+}
+{%- endif %}
+{% endfor -%}
+{% endif -%}
diff --git a/build/export_generators/ide-gradle/source_sets.jinja b/build/export_generators/ide-gradle/source_sets.jinja
index 952332fac60..009341c6dd5 100644
--- a/build/export_generators/ide-gradle/source_sets.jinja
+++ b/build/export_generators/ide-gradle/source_sets.jinja
@@ -14,7 +14,7 @@ sourceSets {
{%- set srcdir_glob = split(source_set, ':') -%}
{%- set out = srcdir_glob[0] -%}
{%- if out != 'src/main/java' %}
- java.srcDir("{{ out }}")
+ java.srcDir({{ PatchRoots(out) }})
{%- endif -%}
{%- endfor -%}
{%- endif %}
@@ -45,7 +45,7 @@ sourceSets {
{%- set srcdir_glob = split(source_set, ':') -%}
{%- set out = srcdir_glob[0] -%}
{%- if out != 'src/test/java' %}
- java.srcDir("{{ srcdir_glob[0] }}")
+ java.srcDir({{ PatchRoots(srcdir_glob[0]) }})
{%- endif -%}
{%- endfor -%}
{%- endif %}