From 2cd7f7c890803a8dff2a2e9c5e5e24332979d04b Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 13 Oct 2026 04:09:56 +0000 Subject: build: add script-based installation and tar.xz releases Generate the manual on installation and delegate copying to install.sh. Package the compiler, manual, installer and license using the HEAD commit's UTC timestamp and short ID, plus the target system and architecture. Co-Authored-By: Claude Fable 5.1 --- cmake/Install.cmake.in | 18 ++++++++++++++++++ cmake/Release.cmake | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 cmake/Install.cmake.in create mode 100644 cmake/Release.cmake (limited to 'cmake') diff --git a/cmake/Install.cmake.in b/cmake/Install.cmake.in new file mode 100644 index 0000000..68ecb46 --- /dev/null +++ b/cmake/Install.cmake.in @@ -0,0 +1,18 @@ +# The ordinary build does not require Pandoc; generate the manual on installation. +execute_process( + COMMAND "@CMAKE_COMMAND@" --build "@CMAKE_CURRENT_BINARY_DIR@" --target doc + RESULT_VARIABLE cpsc_doc_result +) +if(NOT cpsc_doc_result STREQUAL "0") + message(FATAL_ERROR "Cannot build the manual; make sure Pandoc is installed") +endif() + +execute_process( + COMMAND sh "@CMAKE_CURRENT_SOURCE_DIR@/install.sh" + --source-dir "@CMAKE_CURRENT_BINARY_DIR@" + --prefix "${CMAKE_INSTALL_PREFIX}" + RESULT_VARIABLE cpsc_install_result +) +if(NOT cpsc_install_result STREQUAL "0") + message(FATAL_ERROR "cpsc installation failed (${cpsc_install_result})") +endif() diff --git a/cmake/Release.cmake b/cmake/Release.cmake new file mode 100644 index 0000000..be78088 --- /dev/null +++ b/cmake/Release.cmake @@ -0,0 +1,33 @@ +# Read HEAD at packaging time so subsequent commits do not require reconfiguration. +find_package(Git REQUIRED) +execute_process( + COMMAND "${GIT_EXECUTABLE}" -C "${CPSC_SOURCE_DIR}" log -1 "--format=%ct:%h" + OUTPUT_VARIABLE cpsc_revision + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE cpsc_git_result +) +if(NOT cpsc_git_result STREQUAL "0" OR NOT cpsc_revision MATCHES "^([0-9]+):([0-9a-f]+)$") + message(FATAL_ERROR "Cannot read the HEAD commit for the release version") +endif() +set(ENV{SOURCE_DATE_EPOCH} "${CMAKE_MATCH_1}") +set(cpsc_short_id "${CMAKE_MATCH_2}") +string(TIMESTAMP cpsc_commit_time "%Y-%m-%d-%H-%M-%S" UTC) +set(cpsc_package_name "cpsc-${cpsc_commit_time}-${cpsc_short_id}-${CPSC_PLATFORM}") +set(cpsc_package_dir "${CPSC_BINARY_DIR}/release/${cpsc_package_name}") +set(cpsc_archive "${CPSC_BINARY_DIR}/${cpsc_package_name}.tar.xz") + +file(REMOVE_RECURSE "${cpsc_package_dir}") +file(MAKE_DIRECTORY "${cpsc_package_dir}/doc") +file(COPY "${CPSC_EXECUTABLE}" "${CPSC_SOURCE_DIR}/install.sh" "${CPSC_SOURCE_DIR}/LICENSE" + DESTINATION "${cpsc_package_dir}") +file(COPY "${CPSC_BINARY_DIR}/doc/cpsc.1" DESTINATION "${cpsc_package_dir}/doc") +execute_process( + COMMAND "${CMAKE_COMMAND}" -E tar cJf "${cpsc_archive}" --format=gnutar "${cpsc_package_name}" + WORKING_DIRECTORY "${CPSC_BINARY_DIR}/release" + RESULT_VARIABLE cpsc_tar_result +) +if(NOT cpsc_tar_result STREQUAL "0") + file(REMOVE "${cpsc_archive}") + message(FATAL_ERROR "Cannot create the release archive (${cpsc_tar_result})") +endif() +message(STATUS "Release archive: ${cpsc_archive}") -- cgit v1.3.1-4-g156e