blob: 7ff1d2cd9eef06ae17b4f2e0ce35ceaefb1f4368 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# Read HEAD at packaging time so subsequent commits do not require reconfiguration.
include("${CPSC_SOURCE_DIR}/cmake/FindDependency.cmake")
include("${CPSC_SOURCE_DIR}/cmake/ManualAliases.cmake")
cpsc_find_dependency(PROGRAM GIT_EXECUTABLE NAMES git REQUIRED)
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}")
if(CPSC_WINDOWS)
set(cpsc_archive "${CPSC_BINARY_DIR}/${cpsc_package_name}.zip")
set(cpsc_binary_name cpsc.exe)
set(cpsc_installer install.ps1)
set(cpsc_manual cpsc.html)
set(cpsc_language_extension html)
set(cpsc_tar_flags cf)
set(cpsc_archive_format zip)
else()
set(cpsc_archive "${CPSC_BINARY_DIR}/${cpsc_package_name}.tar.xz")
set(cpsc_binary_name cpsc)
set(cpsc_installer install.sh)
set(cpsc_manual cpsc.1)
set(cpsc_language_extension 7)
set(cpsc_tar_flags cJf)
set(cpsc_archive_format gnutar)
endif()
file(REMOVE_RECURSE "${cpsc_package_dir}")
file(MAKE_DIRECTORY "${cpsc_package_dir}/doc")
configure_file("${CPSC_EXECUTABLE}" "${cpsc_package_dir}/${cpsc_binary_name}" COPYONLY)
file(COPY "${CPSC_SOURCE_DIR}/${cpsc_installer}" "${CPSC_SOURCE_DIR}/LICENSE"
DESTINATION "${cpsc_package_dir}")
file(COPY "${CPSC_BINARY_DIR}/doc/${cpsc_manual}" DESTINATION "${cpsc_package_dir}/doc")
# Package the current source set, preserving categories and ignoring stale outputs.
file(GLOB_RECURSE cpsc_language_sources "${CPSC_SOURCE_DIR}/doc/language/cpsc-*.7.md")
if(NOT cpsc_language_sources)
message(FATAL_ERROR "Language manual sources are missing")
endif()
foreach(source IN LISTS cpsc_language_sources)
file(RELATIVE_PATH relative "${CPSC_SOURCE_DIR}/doc/language" "${source}")
string(REGEX REPLACE "\\.7\\.md$" ".${cpsc_language_extension}" relative "${relative}")
get_filename_component(directory "${relative}" DIRECTORY)
file(COPY "${CPSC_BINARY_DIR}/doc/language/${relative}"
DESTINATION "${cpsc_package_dir}/doc/language/${directory}")
endforeach()
foreach(pair IN LISTS CPSC_MANUAL_ALIASES)
string(REPLACE ":" ";" alias_parts "${pair}")
list(GET alias_parts 0 alias_name)
set(relative "keyword/${alias_name}.${cpsc_language_extension}")
get_filename_component(directory "${relative}" DIRECTORY)
if(NOT EXISTS "${CPSC_BINARY_DIR}/doc/language/${relative}")
message(FATAL_ERROR "Language manual alias is missing: ${relative}")
endif()
file(MAKE_DIRECTORY "${cpsc_package_dir}/doc/language/${directory}")
file(COPY "${CPSC_BINARY_DIR}/doc/language/${relative}"
DESTINATION "${cpsc_package_dir}/doc/language/${directory}")
endforeach()
execute_process(
COMMAND "${CMAKE_COMMAND}" -E tar "${cpsc_tar_flags}" "${cpsc_archive}"
"--format=${cpsc_archive_format}" "${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}")
|