aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-19 18:42:54 +0900
committerOphestra <cat@gensokyo.uk>2026-05-19 18:42:54 +0900
commit6e8bfa6c4c963ff6c7d417a1cc703e4504e1fb9d (patch)
treeab6fbdeddaff07226edf4c5e3e81b3aa0fbff41e
parenta770d62b9be4306846b7e1d8c0c94968be175f58 (diff)
internal/rosa/package: migrate cmake
Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/cmake.go110
-rw-r--r--internal/rosa/ninja.go60
-rw-r--r--internal/rosa/package/cmake/bootstrap-test-no-openssl.patch13
-rw-r--r--internal/rosa/package/cmake/disable-broken-tests-musl.patch41
-rw-r--r--internal/rosa/package/cmake/package.az45
-rw-r--r--internal/rosa/state.go31
-rw-r--r--internal/rosa/state_native.go2
7 files changed, 159 insertions, 143 deletions
diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go
index c169b046..bb488abd 100644
--- a/internal/rosa/cmake.go
+++ b/internal/rosa/cmake.go
@@ -4,116 +4,10 @@ import (
"path/filepath"
"slices"
"strings"
-
- "hakurei.app/internal/pkg"
)
-func (t Toolchain) newCMake() (pkg.Artifact, string) {
- const (
- version = "4.3.2"
- checksum = "6QylwRVKletndTSkZTV2YBRwgd_9rUVgav_QW23HpjUgV21AVYZOUOal8tdBDmO7"
- )
- return t.NewPackage("cmake", version, newFromGitHubRelease(
- "Kitware/CMake",
- "v"+version,
- "cmake-"+version+".tar.gz",
- checksum,
- pkg.TarGzip,
- ), &PackageAttr{
- // test suite expects writable source tree
- Writable: true,
-
- // expected to be writable in the copy made during bootstrap
- Chmod: true,
-
- Patches: []KV{
- {"bootstrap-test-no-openssl", `diff --git a/Tests/BootstrapTest.cmake b/Tests/BootstrapTest.cmake
-index 137de78bc1..b4da52e664 100644
---- a/Tests/BootstrapTest.cmake
-+++ b/Tests/BootstrapTest.cmake
-@@ -9,7 +9,7 @@ if(NOT nproc EQUAL 0)
- endif()
- message(STATUS "running bootstrap: ${bootstrap} ${ninja_arg} ${parallel_arg}")
- execute_process(
-- COMMAND ${bootstrap} ${ninja_arg} ${parallel_arg}
-+ COMMAND ${bootstrap} ${ninja_arg} ${parallel_arg} -- -DCMAKE_USE_OPENSSL=OFF
- WORKING_DIRECTORY "${bin_dir}"
- RESULT_VARIABLE result
- )
-`},
-
- {"disable-broken-tests-musl", `diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
-index 2ead810437..f85cbb8b1c 100644
---- a/Tests/CMakeLists.txt
-+++ b/Tests/CMakeLists.txt
-@@ -384,7 +384,6 @@ if(BUILD_TESTING)
- add_subdirectory(CMakeLib)
- endif()
- add_subdirectory(CMakeOnly)
-- add_subdirectory(RunCMake)
-
- add_subdirectory(FindPackageModeMakefileTest)
-
-@@ -528,9 +527,6 @@ if(BUILD_TESTING)
- -DCMake_TEST_CUDA:BOOL=${CMake_TEST_CUDA}
- -DCMake_INSTALL_NAME_TOOL_BUG:BOOL=${CMake_INSTALL_NAME_TOOL_BUG}
- )
-- ADD_TEST_MACRO(ExportImport ExportImport)
-- set_property(TEST ExportImport APPEND
-- PROPERTY LABELS "CUDA")
- ADD_TEST_MACRO(Unset Unset)
- ADD_TEST_MACRO(PolicyScope PolicyScope)
- ADD_TEST_MACRO(EmptyLibrary EmptyLibrary)
-@@ -624,7 +620,6 @@ if(BUILD_TESTING)
- # run test for BundleUtilities on supported platforms/compilers
- if((MSVC OR
- MINGW OR
-- CMAKE_SYSTEM_NAME MATCHES "Linux" OR
- CMAKE_SYSTEM_NAME MATCHES "Darwin")
- AND NOT CMAKE_GENERATOR STREQUAL "Watcom WMake")
-
-@@ -3095,10 +3090,6 @@ if(BUILD_TESTING)
- "${CMake_SOURCE_DIR}/Tests/CTestTestFdSetSize/test.cmake.in"
- "${CMake_BINARY_DIR}/Tests/CTestTestFdSetSize/test.cmake"
- @ONLY ESCAPE_QUOTES)
-- add_test(CTestTestFdSetSize ${CMAKE_CTEST_COMMAND}
-- -S "${CMake_BINARY_DIR}/Tests/CTestTestFdSetSize/test.cmake" -j20 -V --timeout 120
-- --output-log "${CMake_BINARY_DIR}/Tests/CTestTestFdSetSize/testOutput.log"
-- )
-
- if(CMAKE_TESTS_CDASH_SERVER)
- set(regex "^([^:]+)://([^/]+)(.*)$")
-`},
- },
- }, &MakeHelper{
- OmitDefaults: true,
-
- ConfigureName: "/usr/src/cmake/bootstrap",
- Configure: []KV{
- {"prefix", "/system"},
- {"parallel", jobsE},
- {"--"},
- {"-DCMAKE_USE_OPENSSL", "OFF"},
- {"-DCMake_TEST_NO_NETWORK", "ON"},
- },
- Check: []string{
- "CTEST_OUTPUT_ON_FAILURE=1",
- "CTEST_PARALLEL_LEVEL=128",
- "test",
- },
- },
- KernelHeaders,
- ), version
-}
-func init() {
- native.mustRegister(Toolchain.newCMake, &Metadata{
- Name: "cmake",
- Description: "cross-platform, open-source build system",
- Website: "https://cmake.org/",
-
- ID: 306,
- })
-}
+// CMake is the package used by [CMakeHelper].
+var CMake = H("cmake")
// CMakeHelper is the [CMake] build system helper.
type CMakeHelper struct {
diff --git a/internal/rosa/ninja.go b/internal/rosa/ninja.go
index 1040219c..e8984888 100644
--- a/internal/rosa/ninja.go
+++ b/internal/rosa/ninja.go
@@ -2,17 +2,29 @@ package rosa
import "hakurei.app/internal/pkg"
-func (t Toolchain) newNinja() (pkg.Artifact, string) {
+// Ninja is the build system used by [CMakeHelper] and [MesonHelper].
+var Ninja = H("ninja")
+
+func init() {
const (
version = "1.13.2"
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v"
)
- _, python := t.Load(Python)
- _, bash := t.Load(Bash)
- return t.New("ninja-"+version, 0, []pkg.Artifact{
- python,
- bash,
- }, nil, nil, `
+ meta := Metadata{
+ Name: "ninja",
+ Description: "a small build system with a focus on speed",
+ Website: "https://ninja-build.org",
+ Version: version,
+
+ ID: 2089,
+ }
+ native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
+ _, python := t.Load(Python)
+ _, bash := t.Load(Bash)
+ return &meta, t.New(meta.Name+"-"+version, 0, []pkg.Artifact{
+ python,
+ bash,
+ }, nil, nil, `
cd "$(mktemp -d)"
python3 /usr/src/ninja/configure.py \
--verbose \
@@ -24,26 +36,18 @@ python3 /usr/src/ninja/configure.py \
mkdir -p /work/system/bin/
cp ninja /work/system/bin/
`, pkg.Path(AbsUsrSrc.Append("googletest"), false,
- newFromGitHubRelease(
- "google/googletest",
- "v1.16.0",
- "googletest-1.16.0.tar.gz",
- "NjLGvSbgPy_B-y-o1hdanlzEzaYeStFcvFGxpYV3KYlhrWWFRcugYhM3ZMzOA9B_",
- pkg.TarGzip,
- )), pkg.Path(AbsUsrSrc.Append("ninja"), true, t.NewPatchedSource(
- "ninja", version, newFromGitHub(
- "ninja-build/ninja",
- "v"+version,
- checksum,
- ), false,
- ))), version
-}
-func init() {
- native.mustRegister(Toolchain.newNinja, &Metadata{
- Name: "ninja",
- Description: "a small build system with a focus on speed",
- Website: "https://ninja-build.org/",
-
- ID: 2089,
+ newFromGitHubRelease(
+ "google/googletest",
+ "v1.16.0",
+ "googletest-1.16.0.tar.gz",
+ "NjLGvSbgPy_B-y-o1hdanlzEzaYeStFcvFGxpYV3KYlhrWWFRcugYhM3ZMzOA9B_",
+ pkg.TarGzip,
+ )), pkg.Path(AbsUsrSrc.Append("ninja"), true, t.NewPatchedSource(
+ meta.Name, version, newFromGitHub(
+ "ninja-build/ninja",
+ "v"+version,
+ checksum,
+ ), false,
+ )))
})
}
diff --git a/internal/rosa/package/cmake/bootstrap-test-no-openssl.patch b/internal/rosa/package/cmake/bootstrap-test-no-openssl.patch
new file mode 100644
index 00000000..a156fb8e
--- /dev/null
+++ b/internal/rosa/package/cmake/bootstrap-test-no-openssl.patch
@@ -0,0 +1,13 @@
+diff --git a/Tests/BootstrapTest.cmake b/Tests/BootstrapTest.cmake
+index 137de78bc1..b4da52e664 100644
+--- a/Tests/BootstrapTest.cmake
++++ b/Tests/BootstrapTest.cmake
+@@ -9,7 +9,7 @@ if(NOT nproc EQUAL 0)
+ endif()
+ message(STATUS "running bootstrap: ${bootstrap} ${ninja_arg} ${parallel_arg}")
+ execute_process(
+- COMMAND ${bootstrap} ${ninja_arg} ${parallel_arg}
++ COMMAND ${bootstrap} ${ninja_arg} ${parallel_arg} -- -DCMAKE_USE_OPENSSL=OFF
+ WORKING_DIRECTORY "${bin_dir}"
+ RESULT_VARIABLE result
+ )
diff --git a/internal/rosa/package/cmake/disable-broken-tests-musl.patch b/internal/rosa/package/cmake/disable-broken-tests-musl.patch
new file mode 100644
index 00000000..33d9c4fd
--- /dev/null
+++ b/internal/rosa/package/cmake/disable-broken-tests-musl.patch
@@ -0,0 +1,41 @@
+diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
+index 2ead810437..f85cbb8b1c 100644
+--- a/Tests/CMakeLists.txt
++++ b/Tests/CMakeLists.txt
+@@ -384,7 +384,6 @@ if(BUILD_TESTING)
+ add_subdirectory(CMakeLib)
+ endif()
+ add_subdirectory(CMakeOnly)
+- add_subdirectory(RunCMake)
+
+ add_subdirectory(FindPackageModeMakefileTest)
+
+@@ -528,9 +527,6 @@ if(BUILD_TESTING)
+ -DCMake_TEST_CUDA:BOOL=${CMake_TEST_CUDA}
+ -DCMake_INSTALL_NAME_TOOL_BUG:BOOL=${CMake_INSTALL_NAME_TOOL_BUG}
+ )
+- ADD_TEST_MACRO(ExportImport ExportImport)
+- set_property(TEST ExportImport APPEND
+- PROPERTY LABELS "CUDA")
+ ADD_TEST_MACRO(Unset Unset)
+ ADD_TEST_MACRO(PolicyScope PolicyScope)
+ ADD_TEST_MACRO(EmptyLibrary EmptyLibrary)
+@@ -624,7 +620,6 @@ if(BUILD_TESTING)
+ # run test for BundleUtilities on supported platforms/compilers
+ if((MSVC OR
+ MINGW OR
+- CMAKE_SYSTEM_NAME MATCHES "Linux" OR
+ CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ AND NOT CMAKE_GENERATOR STREQUAL "Watcom WMake")
+
+@@ -3095,10 +3090,6 @@ if(BUILD_TESTING)
+ "${CMake_SOURCE_DIR}/Tests/CTestTestFdSetSize/test.cmake.in"
+ "${CMake_BINARY_DIR}/Tests/CTestTestFdSetSize/test.cmake"
+ @ONLY ESCAPE_QUOTES)
+- add_test(CTestTestFdSetSize ${CMAKE_CTEST_COMMAND}
+- -S "${CMake_BINARY_DIR}/Tests/CTestTestFdSetSize/test.cmake" -j20 -V --timeout 120
+- --output-log "${CMake_BINARY_DIR}/Tests/CTestTestFdSetSize/testOutput.log"
+- )
+
+ if(CMAKE_TESTS_CDASH_SERVER)
+ set(regex "^([^:]+)://([^/]+)(.*)$")
diff --git a/internal/rosa/package/cmake/package.az b/internal/rosa/package/cmake/package.az
new file mode 100644
index 00000000..8b3e6d8e
--- /dev/null
+++ b/internal/rosa/package/cmake/package.az
@@ -0,0 +1,45 @@
+package cmake {
+ description = "cross-platform, open-source build system";
+ website = "https://cmake.org";
+ anitya = 306;
+
+ version* = "4.3.2";
+ source = remoteGitHubRelease {
+ suffix = "Kitware/CMake";
+ tag = "v"+version;
+ name = "cmake-"+version+".tar.gz";
+ checksum = "6QylwRVKletndTSkZTV2YBRwgd_9rUVgav_QW23HpjUgV21AVYZOUOal8tdBDmO7";
+ compress = gzip;
+ };
+ patches = [
+ "bootstrap-test-no-openssl.patch",
+ "disable-broken-tests-musl.patch",
+ ];
+
+ // test suite expects writable source tree
+ writable = true;
+
+ // expected to be writable in the copy made during bootstrap
+ chmod = true;
+
+ exec = make {
+ omitDefaults = true;
+
+ configureName = "/usr/src/cmake/bootstrap";
+ configure = {
+ "prefix": "/system";
+ "parallel": jobsE;
+ "--";
+ "-DCMAKE_USE_OPENSSL": "OFF";
+ "-DCMake_TEST_NO_NETWORK": "ON";
+ };
+
+ check = [
+ "CTEST_OUTPUT_ON_FAILURE=1",
+ "CTEST_PARALLEL_LEVEL=128",
+ "test",
+ ];
+ };
+
+ inputs = [ kernel-headers ];
+}
diff --git a/internal/rosa/state.go b/internal/rosa/state.go
index 90da8660..87e27456 100644
--- a/internal/rosa/state.go
+++ b/internal/rosa/state.go
@@ -423,6 +423,12 @@ func (s *S) getFrame() azalea.Frame {
identArch = k(s.arch)
)
+ enumCompress := map[unique.Handle[azalea.Ident]]any{
+ k("uncompressed"): uint32(pkg.TarUncompressed),
+ k("gzip"): uint32(pkg.TarGzip),
+ k("bzip2"): uint32(pkg.TarBzip2),
+ }
+
s.frame.Val = map[unique.Handle[azalea.Ident]]any{
k("linuxArch"): s.linuxArch(),
@@ -492,11 +498,7 @@ func (s *S) getFrame() azalea.Frame {
v = pkg.NewHTTPGetTar(nil, url, mustDecode(checksum), compress)
set = true
return
- }, V: map[unique.Handle[azalea.Ident]]any{
- k("uncompressed"): uint32(pkg.TarUncompressed),
- k("gzip"): uint32(pkg.TarGzip),
- k("bzip2"): uint32(pkg.TarBzip2),
- }},
+ }, V: enumCompress},
k("remoteFile"): {F: func(
args azalea.FArgs,
@@ -601,6 +603,25 @@ func (s *S) getFrame() azalea.Frame {
return
}},
+ k("remoteGitHubRelease"): {F: func(
+ args azalea.FArgs,
+ ) (v any, set bool, err error) {
+ var suffix, tag, name, checksum string
+ var compress uint32
+ if err = args.Apply(map[unique.Handle[azalea.Ident]]any{
+ k("suffix"): &suffix,
+ k("tag"): &tag,
+ k("name"): &name,
+ k("checksum"): &checksum,
+ k("compress"): &compress,
+ }); err != nil {
+ return
+ }
+ v = newFromGitHubRelease(suffix, tag, name, checksum, compress)
+ set = true
+ return
+ }, V: enumCompress},
+
// high-level helpers
k("make"): {F: func(
diff --git a/internal/rosa/state_native.go b/internal/rosa/state_native.go
index 06b8fb38..431b97cd 100644
--- a/internal/rosa/state_native.go
+++ b/internal/rosa/state_native.go
@@ -19,7 +19,6 @@ var (
Binutils = H("binutils")
Bison = H("bison")
Bzip2 = H("bzip2")
- CMake = H("cmake")
Connman = H("connman")
Coreutils = H("coreutils")
Curl = H("curl")
@@ -111,7 +110,6 @@ var (
NSSCACert = H("nss-cacert")
Ncurses = H("ncurses")
Nettle = H("nettle")
- Ninja = H("ninja")
OpenSSL = H("openssl")
P11Kit = H("p11-kit")
PCRE2 = H("pcre2")