From ee1a5b607e3377e8d3cd93be44ce9bd1b5f0de60 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Fri, 22 Nov 2024 03:39:11 -0800 Subject: [PATCH] Add CMake package --- packages/cmake/brioche.lock | 9 ++++ packages/cmake/project.bri | 62 ++++++++++++++++++++++ packages/cmake/testbigendian-brioche.patch | 26 +++++++++ 3 files changed, 97 insertions(+) create mode 100644 packages/cmake/brioche.lock create mode 100644 packages/cmake/project.bri create mode 100644 packages/cmake/testbigendian-brioche.patch diff --git a/packages/cmake/brioche.lock b/packages/cmake/brioche.lock new file mode 100644 index 0000000..832bdc2 --- /dev/null +++ b/packages/cmake/brioche.lock @@ -0,0 +1,9 @@ +{ + "dependencies": {}, + "downloads": { + "https://github.com/Kitware/CMake/releases/download/v3.31.0/cmake-3.31.0.tar.gz": { + "type": "sha256", + "value": "300b71db6d69dcc1ab7c5aae61cbc1aa2778a3e00cbd918bc720203e311468c3" + } + } +} diff --git a/packages/cmake/project.bri b/packages/cmake/project.bri new file mode 100644 index 0000000..adc32c3 --- /dev/null +++ b/packages/cmake/project.bri @@ -0,0 +1,62 @@ +import * as std from "std"; +import openssl from "openssl"; +import curl from "curl"; + +export const project = { + name: "cmake", + version: "3.31.0", +}; + +const source = (() => { + let source = Brioche.download( + `https://github.com/Kitware/CMake/releases/download/v${project.version}/cmake-${project.version}.tar.gz`, + ) + .unarchive("tar", "gzip") + .peel(); + + source = std + .process({ + command: "patch", + args: [ + "-p1", + "-i", + Brioche.includeFile("testbigendian-brioche.patch"), + "-d", + std.outputPath, + ], + outputScaffold: source, + dependencies: [std.tools()], + }) + .toDirectory(); + + return source; +})(); + +export default function (): std.Recipe { + let cmake = std.runBash` + ./bootstrap \\ + --prefix=/ \\ + --system-curl \\ + --parallel=16 \\ + -- \\ + --trace-expand + make + make install DESTDIR="$BRIOCHE_OUTPUT" + ` + .workDir(source) + .dependencies(std.toolchain(), openssl(), curl()) + .env({ + OPENSSL_ROOT_DIR: openssl(), + ZLIB_ROOT: std.toolchain(), + CURL_ROOT: curl(), + }) + .toDirectory(); + + cmake = std.setEnv(cmake, { + CPATH: { append: [{ path: "include" }] }, + LIBRARY_PATH: { append: [{ path: "lib" }] }, + PKG_CONFIG_PATH: { append: [{ path: "lib/pkgconfig" }] }, + }); + + return std.withRunnableLink(cmake, "bin/cmake"); +} diff --git a/packages/cmake/testbigendian-brioche.patch b/packages/cmake/testbigendian-brioche.patch new file mode 100644 index 0000000..25e4a6a --- /dev/null +++ b/packages/cmake/testbigendian-brioche.patch @@ -0,0 +1,26 @@ +diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake +index 03c8588fb7..c2de891665 100644 +--- a/Modules/TestBigEndian.cmake ++++ b/Modules/TestBigEndian.cmake +@@ -85,10 +85,21 @@ macro(__TEST_BIG_ENDIAN_LEGACY_IMPL VARIABLE) + file(READ "${CMAKE_ROOT}/Modules/TestEndianess.c.in" TEST_ENDIANESS_FILE_CONTENT) + string(CONFIGURE "${TEST_ENDIANESS_FILE_CONTENT}" TEST_ENDIANESS_FILE_CONTENT @ONLY) + ++ # (Patched) Disable Brioche autopack so endianness check works ++ if(DEFINED ENV{BRIOCHE_LD_AUTOPACK}) ++ set(old_brioche_ld_autopack $ENV{BRIOCHE_LD_AUTOPACK}) ++ endif() ++ set(ENV{BRIOCHE_LD_AUTOPACK} "false") ++ + try_compile(HAVE_${VARIABLE} + SOURCE_FROM_VAR "${_test_file}" TEST_ENDIANESS_FILE_CONTENT + COPY_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin" ) + ++ if(DEFINED old_brioche_ld_autopack) ++ set(ENV{BRIOCHE_LD_AUTOPACK} ${old_brioche_ld_autopack}) ++ endif() ++ unset(old_brioche_ld_autopack) ++ + if(HAVE_${VARIABLE}) + + cmake_policy(PUSH)