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/Release.cmake | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 cmake/Release.cmake (limited to 'cmake/Release.cmake') 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