Mercurial
diff third_party/tectonic/runtime.bzl @ 247:70f2a3dafc1c
[build] Bundle offline Tectonic runtime
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 03 Aug 2026 20:20:06 -0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/third_party/tectonic/runtime.bzl Mon Aug 03 20:20:06 2026 -0700 @@ -0,0 +1,62 @@ +def _tectonic_runtime_impl(ctx): + output = ctx.actions.declare_directory(ctx.label.name) + commands = [ + "set -e", + "mkdir -p {}/bin {}/cache {}/sysroot/etc/fonts {}/sysroot/usr/share/fontconfig/conf.avail".format( + output.path, + output.path, + output.path, + output.path, + ), + "cp {} {}/bin/tectonic".format(ctx.file.binary.path, output.path), + "cp {} {}/sysroot/etc/fonts/fonts.conf".format( + ctx.file.fontconfig.path, + output.path, + ), + "cp {} {}/LICENSE".format(ctx.file.license.path, output.path), + "cp {} {}/THIRD_PARTY_NOTICES.md".format( + ctx.file.notices.path, + output.path, + ), + "tar -xzf {} -C {}/cache".format( + ctx.file.cache_archive.path, + output.path, + ), + "chmod 0555 {}/bin/tectonic".format(output.path), + "chmod 0444 {}/sysroot/etc/fonts/fonts.conf".format(output.path), + "chmod 0444 {}/LICENSE {}/THIRD_PARTY_NOTICES.md".format( + output.path, + output.path, + ), + ] + commands.append("chmod -R a-w {}/cache".format(output.path)) + + ctx.actions.run_shell( + inputs = [ + ctx.file.binary, + ctx.file.cache_archive, + ctx.file.fontconfig, + ctx.file.license, + ctx.file.notices, + ], + outputs = [output], + command = "\n".join(commands), + progress_message = "Assembling offline Tectonic runtime", + ) + return [ + DefaultInfo( + files = depset([output]), + runfiles = ctx.runfiles(files = [output]), + ), + ] + +tectonic_runtime = rule( + implementation = _tectonic_runtime_impl, + attrs = { + "binary": attr.label(allow_single_file = True, mandatory = True), + "cache_archive": attr.label(allow_single_file = True, mandatory = True), + "fontconfig": attr.label(allow_single_file = True, mandatory = True), + "license": attr.label(allow_single_file = True, mandatory = True), + "notices": attr.label(allow_single_file = True, mandatory = True), + }, +)