diff options
author | dimdim11 <[email protected]> | 2025-03-27 13:16:38 +0300 |
---|---|---|
committer | dimdim11 <[email protected]> | 2025-03-27 13:29:52 +0300 |
commit | d8eb7eb15e4f23e65ad7a123a24d2fd95f702027 (patch) | |
tree | 674e474c2fa0442dd6b5d970744b9d5354bab674 | |
parent | a001eed697a1e25be94f5c2539f1f9778014fdba (diff) |
Add run custom program tasks
Add run custom program tasks
commit_hash:8dce9bccb976700b7765362da19c1c9b6da64575
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 %} |