jolt 0.9.172__py3-none-any.whl → 0.9.435__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. jolt/__init__.py +80 -7
  2. jolt/__main__.py +9 -1
  3. jolt/bin/fstree-darwin-x86_64 +0 -0
  4. jolt/bin/fstree-linux-x86_64 +0 -0
  5. jolt/cache.py +596 -252
  6. jolt/chroot.py +36 -11
  7. jolt/cli.py +143 -130
  8. jolt/common_pb2.py +45 -45
  9. jolt/config.py +76 -40
  10. jolt/error.py +19 -4
  11. jolt/filesystem.py +2 -6
  12. jolt/graph.py +400 -82
  13. jolt/influence.py +110 -3
  14. jolt/loader.py +338 -174
  15. jolt/log.py +127 -31
  16. jolt/manifest.py +13 -46
  17. jolt/options.py +35 -11
  18. jolt/pkgs/abseil.py +42 -0
  19. jolt/pkgs/asio.py +25 -0
  20. jolt/pkgs/autoconf.py +41 -0
  21. jolt/pkgs/automake.py +41 -0
  22. jolt/pkgs/b2.py +31 -0
  23. jolt/pkgs/boost.py +111 -0
  24. jolt/pkgs/boringssl.py +32 -0
  25. jolt/pkgs/busybox.py +39 -0
  26. jolt/pkgs/bzip2.py +43 -0
  27. jolt/pkgs/cares.py +29 -0
  28. jolt/pkgs/catch2.py +36 -0
  29. jolt/pkgs/cbindgen.py +17 -0
  30. jolt/pkgs/cista.py +19 -0
  31. jolt/pkgs/clang.py +44 -0
  32. jolt/pkgs/cli11.py +24 -0
  33. jolt/pkgs/cmake.py +48 -0
  34. jolt/pkgs/cpython.py +196 -0
  35. jolt/pkgs/crun.py +29 -0
  36. jolt/pkgs/curl.py +38 -0
  37. jolt/pkgs/dbus.py +18 -0
  38. jolt/pkgs/double_conversion.py +24 -0
  39. jolt/pkgs/fastfloat.py +21 -0
  40. jolt/pkgs/ffmpeg.py +28 -0
  41. jolt/pkgs/flatbuffers.py +29 -0
  42. jolt/pkgs/fmt.py +27 -0
  43. jolt/pkgs/fstree.py +20 -0
  44. jolt/pkgs/gflags.py +18 -0
  45. jolt/pkgs/glib.py +18 -0
  46. jolt/pkgs/glog.py +25 -0
  47. jolt/pkgs/glslang.py +21 -0
  48. jolt/pkgs/golang.py +16 -11
  49. jolt/pkgs/googlebenchmark.py +18 -0
  50. jolt/pkgs/googletest.py +46 -0
  51. jolt/pkgs/gperf.py +15 -0
  52. jolt/pkgs/grpc.py +73 -0
  53. jolt/pkgs/hdf5.py +19 -0
  54. jolt/pkgs/help2man.py +14 -0
  55. jolt/pkgs/inja.py +28 -0
  56. jolt/pkgs/jsoncpp.py +31 -0
  57. jolt/pkgs/libarchive.py +43 -0
  58. jolt/pkgs/libcap.py +44 -0
  59. jolt/pkgs/libdrm.py +44 -0
  60. jolt/pkgs/libedit.py +42 -0
  61. jolt/pkgs/libevent.py +31 -0
  62. jolt/pkgs/libexpat.py +27 -0
  63. jolt/pkgs/libfastjson.py +21 -0
  64. jolt/pkgs/libffi.py +16 -0
  65. jolt/pkgs/libglvnd.py +30 -0
  66. jolt/pkgs/libogg.py +28 -0
  67. jolt/pkgs/libpciaccess.py +18 -0
  68. jolt/pkgs/libseccomp.py +21 -0
  69. jolt/pkgs/libtirpc.py +24 -0
  70. jolt/pkgs/libtool.py +42 -0
  71. jolt/pkgs/libunwind.py +35 -0
  72. jolt/pkgs/libva.py +18 -0
  73. jolt/pkgs/libvorbis.py +33 -0
  74. jolt/pkgs/libxml2.py +35 -0
  75. jolt/pkgs/libxslt.py +17 -0
  76. jolt/pkgs/libyajl.py +16 -0
  77. jolt/pkgs/llvm.py +81 -0
  78. jolt/pkgs/lua.py +54 -0
  79. jolt/pkgs/lz4.py +26 -0
  80. jolt/pkgs/m4.py +14 -0
  81. jolt/pkgs/make.py +17 -0
  82. jolt/pkgs/mesa.py +81 -0
  83. jolt/pkgs/meson.py +17 -0
  84. jolt/pkgs/mstch.py +28 -0
  85. jolt/pkgs/mysql.py +60 -0
  86. jolt/pkgs/nasm.py +49 -0
  87. jolt/pkgs/ncurses.py +30 -0
  88. jolt/pkgs/ng_log.py +25 -0
  89. jolt/pkgs/ninja.py +45 -0
  90. jolt/pkgs/nlohmann_json.py +25 -0
  91. jolt/pkgs/nodejs.py +19 -11
  92. jolt/pkgs/opencv.py +24 -0
  93. jolt/pkgs/openjdk.py +26 -0
  94. jolt/pkgs/openssl.py +103 -0
  95. jolt/pkgs/paho.py +76 -0
  96. jolt/pkgs/patchelf.py +16 -0
  97. jolt/pkgs/perl.py +42 -0
  98. jolt/pkgs/pkgconfig.py +64 -0
  99. jolt/pkgs/poco.py +39 -0
  100. jolt/pkgs/protobuf.py +77 -0
  101. jolt/pkgs/pugixml.py +27 -0
  102. jolt/pkgs/python.py +19 -0
  103. jolt/pkgs/qt.py +35 -0
  104. jolt/pkgs/rapidjson.py +26 -0
  105. jolt/pkgs/rapidyaml.py +28 -0
  106. jolt/pkgs/re2.py +30 -0
  107. jolt/pkgs/re2c.py +17 -0
  108. jolt/pkgs/readline.py +15 -0
  109. jolt/pkgs/rust.py +41 -0
  110. jolt/pkgs/sdl.py +28 -0
  111. jolt/pkgs/simdjson.py +27 -0
  112. jolt/pkgs/soci.py +46 -0
  113. jolt/pkgs/spdlog.py +29 -0
  114. jolt/pkgs/spirv_llvm.py +21 -0
  115. jolt/pkgs/spirv_tools.py +24 -0
  116. jolt/pkgs/sqlite.py +83 -0
  117. jolt/pkgs/ssl.py +12 -0
  118. jolt/pkgs/texinfo.py +15 -0
  119. jolt/pkgs/tomlplusplus.py +22 -0
  120. jolt/pkgs/wayland.py +26 -0
  121. jolt/pkgs/x11.py +58 -0
  122. jolt/pkgs/xerces_c.py +20 -0
  123. jolt/pkgs/xorg.py +360 -0
  124. jolt/pkgs/xz.py +29 -0
  125. jolt/pkgs/yamlcpp.py +30 -0
  126. jolt/pkgs/zeromq.py +47 -0
  127. jolt/pkgs/zlib.py +87 -0
  128. jolt/pkgs/zstd.py +33 -0
  129. jolt/plugins/alias.py +3 -0
  130. jolt/plugins/allure.py +2 -2
  131. jolt/plugins/autotools.py +66 -0
  132. jolt/plugins/cache.py +1 -1
  133. jolt/plugins/cmake.py +74 -6
  134. jolt/plugins/conan.py +238 -0
  135. jolt/plugins/cxxinfo.py +7 -0
  136. jolt/plugins/docker.py +76 -19
  137. jolt/plugins/email.xslt +141 -118
  138. jolt/plugins/environ.py +11 -0
  139. jolt/plugins/fetch.py +141 -0
  140. jolt/plugins/gdb.py +33 -14
  141. jolt/plugins/gerrit.py +0 -13
  142. jolt/plugins/git.py +248 -66
  143. jolt/plugins/googletest.py +1 -1
  144. jolt/plugins/http.py +1 -1
  145. jolt/plugins/libtool.py +63 -0
  146. jolt/plugins/linux.py +990 -0
  147. jolt/plugins/logstash.py +4 -4
  148. jolt/plugins/meson.py +61 -0
  149. jolt/plugins/ninja-compdb.py +96 -28
  150. jolt/plugins/ninja.py +424 -150
  151. jolt/plugins/paths.py +11 -1
  152. jolt/plugins/pkgconfig.py +219 -0
  153. jolt/plugins/podman.py +131 -87
  154. jolt/plugins/python.py +137 -0
  155. jolt/plugins/remote_execution/administration_pb2.py +27 -19
  156. jolt/plugins/remote_execution/log_pb2.py +12 -12
  157. jolt/plugins/remote_execution/scheduler_pb2.py +23 -23
  158. jolt/plugins/remote_execution/worker_pb2.py +19 -19
  159. jolt/plugins/report.py +7 -2
  160. jolt/plugins/rust.py +25 -0
  161. jolt/plugins/scheduler.py +135 -86
  162. jolt/plugins/selfdeploy/setup.py +6 -6
  163. jolt/plugins/selfdeploy.py +49 -31
  164. jolt/plugins/strings.py +35 -22
  165. jolt/plugins/symlinks.py +11 -4
  166. jolt/plugins/telemetry.py +1 -2
  167. jolt/plugins/timeline.py +13 -3
  168. jolt/scheduler.py +467 -165
  169. jolt/tasks.py +427 -111
  170. jolt/templates/timeline.html.template +44 -47
  171. jolt/timer.py +22 -0
  172. jolt/tools.py +527 -188
  173. jolt/utils.py +183 -3
  174. jolt/version.py +1 -1
  175. jolt/xmldom.py +12 -2
  176. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/METADATA +97 -41
  177. jolt-0.9.435.dist-info/RECORD +207 -0
  178. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/WHEEL +1 -1
  179. jolt/plugins/amqp.py +0 -855
  180. jolt/plugins/debian.py +0 -338
  181. jolt/plugins/repo.py +0 -253
  182. jolt/plugins/snap.py +0 -122
  183. jolt-0.9.172.dist-info/RECORD +0 -92
  184. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/entry_points.txt +0 -0
  185. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/top_level.txt +0 -0
jolt/pkgs/boost.py ADDED
@@ -0,0 +1,111 @@
1
+ import os
2
+ from jolt import attributes, Alias, BooleanParameter, Download, IntParameter, Parameter
3
+ from jolt.pkgs import cpython
4
+ from jolt.plugins import git
5
+ from jolt.tasks import Task, TaskRegistry
6
+ from jolt.error import raise_task_error_if
7
+
8
+
9
+ @attributes.common_metadata()
10
+ @attributes.requires("requires_git")
11
+ @attributes.requires("requires_python_{python[on,off]}")
12
+ @attributes.system
13
+ class Boost(Task):
14
+ name = "boost"
15
+ version = Parameter("1.90.0", help="Boost version.")
16
+ shared = BooleanParameter(False, help="Build shared libraries")
17
+ python = BooleanParameter(False, help="Build Boost.Python")
18
+ bits = IntParameter(64, values=[32, 64], help="Boost address-model")
19
+ requires_git = ["git:url=https://github.com/boostorg/boost.git,path={buildroot}/git-boost,rev=boost-{version},submodules=true"]
20
+ requires_python_on = ["cpython"]
21
+
22
+ def write_user_config(self, deps, tools):
23
+ content = ""
24
+
25
+ if self.python:
26
+ py_exe = tools.which("python3")
27
+ raise_task_error_if(
28
+ py_exe is None, self,
29
+ "Boost.Python requested, but no Python interpreter found in PATH.",
30
+ )
31
+
32
+ # Find the dependency where the Python interpreter is located
33
+ py_dep = None
34
+ py_prefix = os.path.dirname(os.path.dirname(py_exe))
35
+ for _, dep in deps.items():
36
+ if dep.path == py_prefix:
37
+ py_dep = dep
38
+ break
39
+
40
+ raise_task_error_if(
41
+ py_dep is None, self,
42
+ "Boost.Python requested, but the Python dependency could not be found.",
43
+ )
44
+
45
+ py_version = str(py_dep.strings.version_major)
46
+ content += f"using python : {py_version} : {py_prefix}/bin/python{py_version} : {py_prefix}/include/python{py_version} : {py_prefix}/lib ;\n"
47
+
48
+ tools.write_file(
49
+ self.userconfigfile,
50
+ content,
51
+ )
52
+
53
+ def clean(self, tools):
54
+ self.builddir = tools.builddir("build", incremental=True)
55
+ self.installdir = tools.builddir("install")
56
+ tools.rmtree(self.builddir)
57
+ tools.rmtree(self.installdir)
58
+
59
+ def run(self, deps, tools):
60
+ self.builddir = tools.builddir("build", incremental=True)
61
+ self.installdir = tools.builddir("install")
62
+ self.userconfigfile = tools.expand_path("{builddir}/user-config.jam")
63
+ self.write_user_config(deps, tools)
64
+
65
+ without_libs = []
66
+ if not self.python:
67
+ without_libs.append("python")
68
+
69
+ bootstrap_cmd = []
70
+ if without_libs:
71
+ bootstrap_cmd = ["--without-libraries={}".format(",".join(without_libs))]
72
+
73
+ b2_cmd = [
74
+ "install",
75
+ "address-model={bits}",
76
+ "link={shared[shared,static]}",
77
+ "--prefix={installdir}",
78
+ "--build-dir={builddir}",
79
+ "--user-config={userconfigfile}",
80
+ "-j{}".format(tools.cpu_count()),
81
+ ]
82
+
83
+ with tools.cwd("{git[boost]}"):
84
+ if self.system == "windows":
85
+ bootstrap_cmd = [".\\bootstrap.bat", "msvc"] + bootstrap_cmd
86
+ b2_cmd = [".\\b2"] + b2_cmd
87
+ else:
88
+ bootstrap_cmd = ["./bootstrap.sh"] + bootstrap_cmd
89
+ b2_cmd = ["./b2"] + b2_cmd
90
+
91
+ tools.run(" ".join(bootstrap_cmd))
92
+ tools.run(" ".join(b2_cmd))
93
+
94
+ def publish(self, artifact, tools):
95
+ with tools.cwd(self.installdir):
96
+ artifact.collect("*", symlinks=True)
97
+ artifact.cxxinfo.incpaths.append("include")
98
+ artifact.cxxinfo.libpaths.append("lib")
99
+
100
+ with tools.cwd(self.installdir, "lib"):
101
+ for lib in tools.glob("libboost_*.a"):
102
+ name, _ = os.path.splitext(os.path.basename(lib))
103
+ artifact.cxxinfo.libraries.append(name[3:])
104
+
105
+ arch = tools.getenv("VSCMD_ARG_TGT_ARCH", "x64")
106
+ for lib in tools.glob(f"lib*-mt-{arch}-*.lib"):
107
+ name, _ = os.path.splitext(lib)
108
+ artifact.cxxinfo.libraries.append(name)
109
+
110
+
111
+ TaskRegistry.get().add_task_class(Boost)
jolt/pkgs/boringssl.py ADDED
@@ -0,0 +1,32 @@
1
+ from jolt import attributes, BooleanParameter, Parameter
2
+ from jolt.pkgs import nasm
3
+ from jolt.plugins import cmake, git
4
+ from jolt.tasks import TaskRegistry
5
+
6
+
7
+ @attributes.requires("requires_git")
8
+ @attributes.requires("requires_nasm_{system}")
9
+ @attributes.common_metadata()
10
+ @attributes.system
11
+ @cmake.requires()
12
+ @cmake.use_ninja()
13
+ class BoringSSL(cmake.CMake):
14
+ name = "boringssl"
15
+ version = Parameter("0.20251124.0", help="boringssl version.")
16
+ shared = BooleanParameter(False, help="Build shared libraries.")
17
+ requires_git = ["git:url=https://github.com/google/boringssl.git,rev={version}"]
18
+ requires_nasm_windows = ["nasm"]
19
+ srcdir = "{git[boringssl]}"
20
+ options = [
21
+ "BUILD_SHARED_LIBS={shared[ON,OFF]}",
22
+ ]
23
+
24
+ def publish(self, artifact, tools):
25
+ super().publish(artifact, tools)
26
+ artifact.cxxinfo.incpaths.append("include")
27
+ artifact.cxxinfo.libpaths.append("lib")
28
+ artifact.cxxinfo.libraries.append("ssl")
29
+ artifact.cxxinfo.libraries.append("crypto")
30
+
31
+
32
+ TaskRegistry.get().add_task_class(BoringSSL)
jolt/pkgs/busybox.py ADDED
@@ -0,0 +1,39 @@
1
+ from jolt import attributes, influence, Parameter, Task
2
+ from jolt.plugins import git
3
+ from jolt.tasks import TaskRegistry
4
+
5
+
6
+ @attributes.requires("requires_git")
7
+ class BusyBox(Task):
8
+ name = "busybox"
9
+ defconfig = Parameter(required=False, help="BusyBox defconfig file.")
10
+ version = Parameter("1.37.0", help="BusyBox version.")
11
+ requires_git = ["git:url=git://busybox.net/busybox.git,rev={version_tag}"]
12
+ srcdir = "{git[busybox]}"
13
+
14
+ @property
15
+ def version_tag(self):
16
+ return str(self.version).replace(".", "_")
17
+
18
+ @property
19
+ def defconfig_arg(self):
20
+ if self.defconfig:
21
+ return f"{self.defconfig}_defconfig"
22
+ return "defconfig"
23
+
24
+ def run(self, deps, tools):
25
+ self.outdir = tools.builddir()
26
+ self.installdir = tools.builddir("install")
27
+
28
+ with tools.cwd(self.srcdir):
29
+ tools.run("make O={outdir} {defconfig_arg}")
30
+ tools.run("make O={outdir} -j{}", tools.cpu_count())
31
+ tools.run("make O={outdir} install DESTDIR={installdir}")
32
+
33
+ def publish(self, artifact, tools):
34
+ artifact.environ.PATH.append("bin")
35
+ with tools.cwd(self.installdir):
36
+ artifact.collect("*", symlinks=True)
37
+
38
+
39
+ TaskRegistry.get().add_task_class(BusyBox)
jolt/pkgs/bzip2.py ADDED
@@ -0,0 +1,43 @@
1
+ from jolt import attributes, BooleanParameter, Parameter
2
+ from jolt.tasks import TaskRegistry
3
+ from jolt.plugins import fetch, ninja
4
+
5
+
6
+ @attributes.requires("requires_src")
7
+ @attributes.system
8
+ @ninja.attributes.cflags("cflags_linux_pic_{pic[on,off]}")
9
+ class LibBzip2(ninja.CXXLibrary):
10
+ name = "libbzip2"
11
+ binary = "bzip2"
12
+ version = Parameter("1.0.8", help="bzip2 version.")
13
+ pic = BooleanParameter(True, help="Build position independent code")
14
+ shared = BooleanParameter(False, help="Build shared libraries")
15
+ cstd = 90
16
+ cflags_darwin_pic_on = ["-fPIC"]
17
+ cflags_linux_pic_on = ["-fPIC"]
18
+ incremental = False
19
+ requires_src = ["fetch:alias=src,url=https://sourceware.org/pub/bzip2/bzip2-{version}.tar.gz"]
20
+ source_influence = False
21
+ sources = [
22
+ "{fetch[src]}/bzip2-{version}/blocksort.c",
23
+ "{fetch[src]}/bzip2-{version}/bzlib.c",
24
+ "{fetch[src]}/bzip2-{version}/bzlib.h",
25
+ "{fetch[src]}/bzip2-{version}/compress.c",
26
+ "{fetch[src]}/bzip2-{version}/crctable.c",
27
+ "{fetch[src]}/bzip2-{version}/decompress.c",
28
+ "{fetch[src]}/bzip2-{version}/huffman.c",
29
+ "{fetch[src]}/bzip2-{version}/randtable.c",
30
+ ]
31
+
32
+ def publish(self, artifact, tools):
33
+ super().publish(artifact, tools)
34
+ artifact.cxxinfo.incpaths.append("include")
35
+ artifact.cxxinfo.libpaths.append("lib")
36
+ artifact.cxxinfo.libraries.append("bz2")
37
+ artifact.environ.CMAKE_PREFIX_PATH.append(".")
38
+
39
+ with tools.cwd("{fetch[src]}/bzip2-{version}"):
40
+ artifact.collect("bzlib.h", "include/")
41
+
42
+
43
+ TaskRegistry.get().add_task_class(LibBzip2)
jolt/pkgs/cares.py ADDED
@@ -0,0 +1,29 @@
1
+ from jolt import attributes, BooleanParameter, Parameter
2
+ from jolt.pkgs import cmake
3
+ from jolt.plugins import git, cmake
4
+ from jolt.tasks import TaskRegistry
5
+
6
+
7
+ @attributes.requires("requires_git")
8
+ @cmake.requires()
9
+ @cmake.use_ninja()
10
+ class CAres(cmake.CMake):
11
+ name = "c-ares"
12
+ version = Parameter("1.34.6", help="c-ares version.")
13
+ shared = BooleanParameter(False, help="Build shared libraries.")
14
+ requires_git = ["git:url=https://github.com/c-ares/c-ares.git,rev=v{version}"]
15
+ srcdir = "{git[c-ares]}"
16
+ options = [
17
+ "CARES_SHARED={shared[ON,OFF]}",
18
+ "CARES_STATIC={shared[OFF,ON]}",
19
+ "CARES_BUILD_TESTS=OFF",
20
+ ]
21
+
22
+ def publish(self, artifact, tools):
23
+ super().publish(artifact, tools)
24
+ artifact.cxxinfo.incpaths.append("include")
25
+ artifact.cxxinfo.libpaths.append("lib")
26
+ artifact.cxxinfo.libraries.append("cares")
27
+
28
+
29
+ TaskRegistry.get().add_task_class(CAres)
jolt/pkgs/catch2.py ADDED
@@ -0,0 +1,36 @@
1
+ from jolt import attributes, BooleanParameter, Parameter, Task
2
+ from jolt.pkgs import cmake
3
+ from jolt.plugins import git, cmake
4
+ from jolt.tasks import TaskRegistry
5
+
6
+
7
+ @attributes.requires("requires_git")
8
+ @cmake.requires()
9
+ @cmake.use_ninja()
10
+ class Catch2(cmake.CMake):
11
+ name = "catch2"
12
+ version = Parameter("3.11.0", help="catch2 version.")
13
+ shared = BooleanParameter(False, help="Build shared libraries.")
14
+ requires_git = ["git:url=https://github.com/catchorg/Catch2.git,rev=v{version}"]
15
+ srcdir = "{git[Catch2]}"
16
+ options = [
17
+ "BUILD_SHARED_LIBS={shared[ON,OFF]}",
18
+ ]
19
+
20
+ def publish(self, artifact, tools):
21
+ super().publish(artifact, tools)
22
+ artifact.cxxinfo.incpaths.append("include")
23
+ artifact.cxxinfo.libpaths.append("lib")
24
+ artifact.cxxinfo.libraries.append("Catch2")
25
+
26
+
27
+ class Catch2Main(Task):
28
+ name = "catch2/main"
29
+ extends = "catch2"
30
+
31
+ def publish(self, artifact, tools):
32
+ artifact.cxxinfo.libraries.append("Catch2Main")
33
+
34
+
35
+ TaskRegistry.get().add_task_class(Catch2)
36
+ TaskRegistry.get().add_task_class(Catch2Main)
jolt/pkgs/cbindgen.py ADDED
@@ -0,0 +1,17 @@
1
+ from jolt import attributes
2
+ from jolt.pkgs import rust
3
+ from jolt.plugins import rust
4
+ from jolt.tasks import TaskRegistry
5
+
6
+
7
+ @attributes.requires("requires_git")
8
+ @attributes.requires("requires_rust")
9
+ class CBindgen(rust.Rust):
10
+ name = "cbindgen"
11
+ version = "0.29.2"
12
+ requires_git = ["git:url=https://github.com/mozilla/cbindgen.git,rev=v{version},hash=true"]
13
+ requires_rust = ["rust"]
14
+ srcdir = "{git[cbindgen]}"
15
+
16
+
17
+ TaskRegistry.get().add_task_class(CBindgen)
jolt/pkgs/cista.py ADDED
@@ -0,0 +1,19 @@
1
+ from jolt import attributes, Parameter, Task
2
+ from jolt.plugins import git
3
+ from jolt.tasks import TaskRegistry
4
+
5
+
6
+ @attributes.requires("requires_git")
7
+ class Cista(Task):
8
+ name = "cista"
9
+ version = Parameter("0.16", help="Cista version.")
10
+ requires_git = ["git:url=https://github.com/felixguendling/cista.git,rev=v{version}"]
11
+ srcdir = "{git[cista]}"
12
+
13
+ def publish(self, artifact, tools):
14
+ with tools.cwd(self.srcdir):
15
+ artifact.collect("include/")
16
+ artifact.cxxinfo.incpaths.append("include")
17
+
18
+
19
+ TaskRegistry.get().add_task_class(Cista)
jolt/pkgs/clang.py ADDED
@@ -0,0 +1,44 @@
1
+ from jolt import attributes, Parameter, Task
2
+ from jolt.pkgs import llvm
3
+ from jolt.tasks import TaskRegistry
4
+
5
+
6
+ @attributes.requires("requires_llvm")
7
+ class Clang(Task):
8
+ name = "clang"
9
+ version = Parameter(llvm.VERSION, help="Clang version.")
10
+
11
+ requires_llvm = ["llvm:version={version}"]
12
+
13
+ def publish(self, artifact, tools):
14
+ artifact.environ.LLVM_TOOL_clang = "clang"
15
+ artifact.environ.LLVM_TOOL_clangpp = "clang++"
16
+ artifact.environ.AR = "llvm-ar"
17
+ artifact.environ.CC = "clang"
18
+ artifact.environ.CXX = "clang++"
19
+ artifact.environ.LD = "clang++"
20
+ artifact.environ.NM = "llvm-nm"
21
+ artifact.environ.OBJCOPY = "llvm-objcopy"
22
+ artifact.environ.OBJDUMP = "llvm-objdump"
23
+ artifact.environ.PATH.append("bin")
24
+ artifact.environ.RANLIB = "llvm-ranlib"
25
+ artifact.environ.STRIP = "llvm-strip"
26
+
27
+
28
+ class ClangFormat(llvm.LLVMFromSrc):
29
+ name = "clang-format"
30
+ projects = ["clang", "clang-tools-extra"]
31
+ targets = []
32
+ install = ["install-clang-format"]
33
+
34
+
35
+ class ClangTidy(llvm.LLVMFromSrc):
36
+ name = "clang-tidy"
37
+ projects = ["clang", "clang-tools-extra"]
38
+ targets = []
39
+ install = ["install-clang-tidy"]
40
+
41
+
42
+ TaskRegistry.get().add_task_class(Clang)
43
+ TaskRegistry.get().add_task_class(ClangFormat)
44
+ TaskRegistry.get().add_task_class(ClangTidy)
jolt/pkgs/cli11.py ADDED
@@ -0,0 +1,24 @@
1
+ from jolt import attributes, Parameter
2
+ from jolt.plugins import cmake, fetch
3
+ from jolt.tasks import TaskRegistry
4
+
5
+
6
+ @attributes.requires("requires_src")
7
+ @cmake.requires()
8
+ @cmake.use_ninja()
9
+ class CLI11(cmake.CMake):
10
+ name = "cli11"
11
+ version = Parameter("2.6.1", help="CLI11 version.")
12
+ requires_src = ["fetch:alias=src,url=https://github.com/CLIUtils/CLI11/archive/refs/tags/v{version}.tar.gz"]
13
+ srcdir = "{fetch[src]}/CLI11-{version}"
14
+ options = [
15
+ "CLI11_BUILD_EXAMPLES=OFF",
16
+ "CLI11_BUILD_TESTS=OFF",
17
+ ]
18
+
19
+ def publish(self, artifact, tools):
20
+ super().publish(artifact, tools)
21
+ artifact.cxxinfo.incpaths.append("include")
22
+
23
+
24
+ TaskRegistry.get().add_task_class(CLI11)
jolt/pkgs/cmake.py ADDED
@@ -0,0 +1,48 @@
1
+ from jolt import attributes, Alias, Download, Parameter
2
+ from jolt.tasks import TaskRegistry
3
+
4
+
5
+ @attributes.arch
6
+ @attributes.system
7
+ @attributes.common_metadata()
8
+ class CMakeBin(Download):
9
+ name = "cmake/bin"
10
+ version = Parameter("4.2.1", help="CMake version.")
11
+ url = ["https://github.com/Kitware/CMake/releases/download/v{version}/cmake-{version}-{cmake_system}-{cmake_arch}{cmake_ext}"]
12
+ collect = [{"files": "*", "cwd": "cmake-{version}-{cmake_system}-{cmake_arch}{cmake_contents}"}]
13
+
14
+ @property
15
+ def cmake_arch(self):
16
+ if self.system == "darwin":
17
+ return "universal"
18
+ if self.arch == "amd64":
19
+ return "x86_64"
20
+ return self.arch
21
+
22
+ @property
23
+ def cmake_ext(self):
24
+ if self.system == "windows":
25
+ return ".zip"
26
+ return ".tar.gz"
27
+
28
+ @property
29
+ def cmake_system(self):
30
+ if self.system == "darwin":
31
+ return "macos"
32
+ return self.system
33
+
34
+ @property
35
+ def cmake_contents(self):
36
+ if self.system == "darwin":
37
+ return "/CMake.app/Contents"
38
+ return ""
39
+
40
+
41
+ class CMake(Alias):
42
+ name = "cmake"
43
+ version = Parameter("4.2.1", help="CMake version.")
44
+ requires = ["cmake/bin:version={version}"]
45
+
46
+
47
+ TaskRegistry.get().add_task_class(CMake)
48
+ TaskRegistry.get().add_task_class(CMakeBin)
jolt/pkgs/cpython.py ADDED
@@ -0,0 +1,196 @@
1
+ from jolt import attributes, Alias, BooleanParameter, Parameter, Task
2
+ from jolt.pkgs import libffi, sqlite, ssl, zlib, zstd, xz
3
+ from jolt.plugins import autotools, git, pkgconfig
4
+ from jolt.tasks import TaskRegistry
5
+
6
+
7
+ def _unpack_adjust_scripts(artifact, tools):
8
+ bindir = "Scripts" if artifact.strings.system == "windows" else "bin"
9
+
10
+ with tools.cwd(artifact.path, bindir):
11
+ # Adjust paths in scripts
12
+ for script in tools.glob("*"):
13
+ # Ignore python executables
14
+ if script.startswith("python"):
15
+ continue
16
+ tools.replace_in_file(script, artifact.strings.install_prefix, artifact.final_path)
17
+
18
+ artifact.strings.install_prefix = artifact.final_path
19
+
20
+
21
+ @attributes.requires("requires_git")
22
+ @attributes.requires("requires_libffi_{libffi[on,off]}")
23
+ @attributes.requires("requires_sqlite_{sqlite[on,off]}")
24
+ @attributes.requires("requires_ssl_{ssl[on,off]}")
25
+ @attributes.requires("requires_zlib_{zlib[on,off]}")
26
+ @attributes.requires("requires_zstd_{zstd[on,off]}")
27
+ @attributes.requires("requires_xz_{xz[on,off]}")
28
+ @pkgconfig.requires()
29
+ class CPythonPosix(autotools.Autotools):
30
+ """ Builds and publishes CPython libraries and headers. """
31
+
32
+ name = "cpython/posix"
33
+ version = Parameter("3.14.2", help="CPython version.")
34
+ libffi = BooleanParameter(True, help="Enable libffi support")
35
+ sqlite = BooleanParameter(True, help="Enable SQLite support")
36
+ ssl = BooleanParameter(True, help="Enable SSL support")
37
+ zlib = BooleanParameter(True, help="Enable zlib support")
38
+ zstd = BooleanParameter(True, help="Enable zstd support")
39
+ xz = BooleanParameter(True, help="Enable xz support")
40
+ requires_git = ["git:url=https://github.com/python/cpython.git,rev=v{version}"]
41
+ requires_libffi_on = ["libffi"]
42
+ requires_sqlite_on = ["sqlite"]
43
+ requires_ssl_on = ["virtual/ssl"]
44
+ requires_zlib_on = ["virtual/zlib"]
45
+ requires_zstd_on = ["zstd"]
46
+ requires_xz_on = ["xz:pic=true"]
47
+ srcdir = "{git[cpython]}"
48
+ options = [
49
+ "--enable-optimizations",
50
+ "--with-ensurepip=install",
51
+ ]
52
+
53
+ @property
54
+ def version_major(self):
55
+ ver = str(self.version).split(".")
56
+ return f"{ver[0]}.{ver[1]}"
57
+
58
+ def publish(self, artifact, tools):
59
+ super().publish(artifact, tools)
60
+ artifact.strings.version = str(self.version)
61
+ artifact.strings.version_major = str(self.version_major)
62
+
63
+ def unpack(self, artifact, tools):
64
+ super().unpack(artifact, tools)
65
+ _unpack_adjust_scripts(artifact, tools)
66
+
67
+
68
+ @attributes.requires("requires_git")
69
+ @attributes.requires("requires_ssl_{ssl[on,off]}")
70
+ @attributes.common_metadata()
71
+ class CPythonWin32(Task):
72
+ """ Builds and publishes CPython libraries and headers. """
73
+
74
+ name = "cpython/win32"
75
+ version = Parameter("3.14.2", help="CPython version.")
76
+ ssl = BooleanParameter(True, help="Enable SSL support")
77
+ requires_git = ["git:url=https://github.com/python/cpython.git,rev=v{version}"]
78
+ requires_ssl_on = ["virtual/ssl"]
79
+ srcdir = "{git[cpython]}"
80
+
81
+ @property
82
+ def version_major(self):
83
+ ver = str(self.version).split(".")
84
+ return f"{ver[0]}.{ver[1]}"
85
+
86
+ @property
87
+ def version_major_compact(self):
88
+ ver = str(self.version).split(".")
89
+ return f"{ver[0]}{ver[1]}"
90
+
91
+ def run(self, deps, tools):
92
+ with tools.cwd(self.srcdir, "PCbuild"):
93
+ tools.run("build.bat")
94
+
95
+ def publish(self, artifact, tools):
96
+ artifact.environ.CMAKE_PREFIX_PATH.append(".")
97
+ artifact.strings.version = str(self.version)
98
+ artifact.strings.version_major = str(self.version_major)
99
+ with tools.cwd(self.srcdir):
100
+ artifact.collect("Include", "include")
101
+ artifact.collect("Lib", "lib")
102
+ with tools.cwd(self.srcdir, "PCbuild", "amd64"):
103
+ artifact.collect("python.exe", "bin/python3.exe")
104
+ artifact.collect("python.exe", "bin/python{version_major}.exe")
105
+ artifact.collect("*.dll", "bin/")
106
+ artifact.collect("*.lib", "lib/")
107
+ with tools.tmpdir() as tmp, tools.cwd(tmp):
108
+ tools.write_file(
109
+ "python3.pc",
110
+ """
111
+ # See: man pkg-config
112
+ prefix=${{pcfiledir}}/../..
113
+ exec_prefix=${{prefix}}/bin
114
+ libdir=${{prefix}}/lib
115
+ includedir=${{prefix}}/include
116
+
117
+ Name: Python
118
+ Description: Build a C extension for Python
119
+ Version: {version}-{identity}
120
+ Libs: -L${{libdir}} -lpython3
121
+ Cflags: -I${{includedir}}
122
+ """)
123
+ tools.write_file(
124
+ "python3-embed.pc",
125
+ """
126
+ # See: man pkg-config
127
+ prefix=${{pcfiledir}}/../..
128
+ exec_prefix=${{prefix}}/bin
129
+ libdir=${{prefix}}/lib
130
+ includedir=${{prefix}}/include
131
+
132
+ Name: Python
133
+ Description: Embed Python into an application
134
+ Version: {version}-{identity}
135
+ Libs: -L${{libdir}} -lpython{version_major_compact}
136
+ Cflags: -I${{includedir}}
137
+ """)
138
+ artifact.collect("*.pc", "lib/pkgconfig/")
139
+
140
+ def unpack(self, artifact, tools):
141
+ super().unpack(artifact, tools)
142
+ _unpack_adjust_scripts(artifact, tools)
143
+
144
+
145
+ @attributes.requires("requires_{system}")
146
+ @attributes.system
147
+ class CPython(Alias):
148
+ """ Alias for CPython """
149
+ name = "cpython"
150
+ version = Parameter("3.14.2", help="CPython version.")
151
+ requires_darwin = ["cpython/posix:version={version}"]
152
+ requires_linux = requires_darwin
153
+ requires_windows = ["cpython/win32:version={version}"]
154
+
155
+
156
+ @pkgconfig.to_cxxinfo("python3-embed")
157
+ @attributes.common_metadata()
158
+ @attributes.system
159
+ @pkgconfig.requires()
160
+ class CPythonEmbed(Task):
161
+ name = "cpython/embed"
162
+ requires = ["cpython"]
163
+ selfsustained = True
164
+
165
+ def run(self, deps, tools):
166
+ name = "cpython/win32" if self.system == "windows" else "cpython/posix"
167
+ self.cpython = deps[name]
168
+
169
+ def publish(self, artifact, tools):
170
+ with tools.cwd(self.cpython.path):
171
+ artifact.collect("*", symlinks=True)
172
+
173
+
174
+ @pkgconfig.to_cxxinfo("python3")
175
+ @attributes.common_metadata()
176
+ @attributes.system
177
+ @pkgconfig.requires()
178
+ class CPythonExtend(Task):
179
+ name = "cpython/extend"
180
+ requires = ["cpython"]
181
+ selfsustained = True
182
+
183
+ def run(self, deps, tools):
184
+ name = "cpython/win32" if self.system == "windows" else "cpython/posix"
185
+ self.cpython = deps[name]
186
+
187
+ def publish(self, artifact, tools):
188
+ with tools.cwd(self.cpython.path):
189
+ artifact.collect("*", symlinks=True)
190
+
191
+
192
+ TaskRegistry.get().add_task_class(CPythonPosix)
193
+ TaskRegistry.get().add_task_class(CPythonWin32)
194
+ TaskRegistry.get().add_task_class(CPython)
195
+ TaskRegistry.get().add_task_class(CPythonEmbed)
196
+ TaskRegistry.get().add_task_class(CPythonExtend)
jolt/pkgs/crun.py ADDED
@@ -0,0 +1,29 @@
1
+ from jolt import attributes, BooleanParameter, Parameter
2
+ from jolt.pkgs import libcap
3
+ from jolt.plugins import git, autotools, pkgconfig
4
+ from jolt.tasks import TaskRegistry
5
+
6
+
7
+ @attributes.requires("requires_git")
8
+ @attributes.requires("requires_libcap_{caps[on,off]}")
9
+ @autotools.requires()
10
+ @pkgconfig.requires()
11
+ class CRun(autotools.Autotools):
12
+ name = "crun"
13
+ version = Parameter("1.26", help="crun version.")
14
+ caps = BooleanParameter(False, help="Enable capabilities support.")
15
+ systemd = BooleanParameter(False, help="Enable systemd support.")
16
+ requires_git = ["git:url=https://github.com/containers/crun.git,rev={version},submodules=true"]
17
+ requires_caps_on = ["libcap"]
18
+ srcdir = "{git[crun]}"
19
+ options = [
20
+ # Unable to get ./configure to pick these up from pkg-config
21
+ "--disable-criu",
22
+ "--disable-seccomp",
23
+ "--enable-embedded-yajl",
24
+ "{caps[,--disable-caps]}",
25
+ "{systemd[,--disable-systemd]}",
26
+ ]
27
+
28
+
29
+ TaskRegistry.get().add_task_class(CRun)