From 6e8bfa6c4c963ff6c7d417a1cc703e4504e1fb9d Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 19 May 2026 18:42:54 +0900 Subject: [PATCH] internal/rosa/package: migrate cmake Signed-off-by: Ophestra --- internal/rosa/cmake.go | 110 +----------------- internal/rosa/ninja.go | 60 +++++----- .../cmake/bootstrap-test-no-openssl.patch | 13 +++ .../cmake/disable-broken-tests-musl.patch | 41 +++++++ internal/rosa/package/cmake/package.az | 45 +++++++ internal/rosa/state.go | 31 ++++- internal/rosa/state_native.go | 2 - 7 files changed, 159 insertions(+), 143 deletions(-) create mode 100644 internal/rosa/package/cmake/bootstrap-test-no-openssl.patch create mode 100644 internal/rosa/package/cmake/disable-broken-tests-musl.patch create mode 100644 internal/rosa/package/cmake/package.az 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")