diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-13 04:09:56 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-13 04:09:56 +0000 |
| commit | 2cd7f7c890803a8dff2a2e9c5e5e24332979d04b (patch) | |
| tree | 777acd2e7599ce3b8feb2d53c08dd679b3ce5c35 /cmake/Release.cmake | |
| parent | 74c67f47c24c2aba8773ecc99272fd0f502e8df2 (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'cmake/Release.cmake')
| -rw-r--r-- | cmake/Release.cmake | 33 |
1 files changed, 33 insertions, 0 deletions
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}") |
