Skip to content

Commit a55a020

Browse files
authored
CMake: Move packaging into its own subdirectory. (#745)
This moves all the CPack-related scripts into their own subdirectory. The scripts themselves were slightly updated to support: - multi-config generators - linuxdeploy on hosts other than x86_64 - changing the default install directories
1 parent c27d80e commit a55a020

File tree

5 files changed

+113
-87
lines changed

5 files changed

+113
-87
lines changed

prboom2/CMakeLists.txt

Lines changed: 2 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -80,91 +80,6 @@ install(FILES
8080
DESTINATION "${DSDA_INSTALL_COPYRIGHT_DIR}"
8181
)
8282

83-
if(WIN32)
84-
set(CPACK_GENERATOR ZIP)
85-
elseif(LINUX)
86-
set(CPACK_GENERATOR External)
87-
set(CPACK_EXTERNAL_ENABLE_STAGING YES)
88-
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
89-
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake")
90-
91-
file(GENERATE
92-
OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake"
93-
CONTENT [[
94-
find_program(LINUXDEPLOY_EXECUTABLE
95-
NAMES linuxdeploy linuxdeploy-x86_64.AppImage
96-
PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy)
97-
98-
if(NOT LINUXDEPLOY_EXECUTABLE)
99-
message(STATUS "Downloading linuxdeploy")
100-
set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy)
101-
file(DOWNLOAD
102-
https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
103-
${LINUXDEPLOY_EXECUTABLE}
104-
INACTIVITY_TIMEOUT 10)
105-
execute_process(COMMAND
106-
chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT)
107-
endif()
108-
109-
execute_process(COMMAND
110-
${CMAKE_COMMAND} -E env
111-
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage
112-
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0>
113-
${LINUXDEPLOY_EXECUTABLE}
114-
--appimage-extract-and-run
115-
--appdir=${CPACK_TEMPORARY_DIRECTORY}
116-
--executable=$<TARGET_FILE:dsda-doom>
117-
--desktop-file=${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/applications/dsda-doom.desktop
118-
--icon-file=${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/dsda-doom.svg
119-
--output=appimage)
120-
]])
121-
elseif(APPLE)
122-
set(CPACK_GENERATOR External)
123-
set(CPACK_EXTERNAL_ENABLE_STAGING YES)
124-
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
125-
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/macbundle-generate.cmake")
126-
set(CPACK_SYSTEM_NAME "mac-${CMAKE_SYSTEM_PROCESSOR}")
127-
set(CPACK_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
128-
set(CPACK_BUILD_DIR "${PROJECT_BINARY_DIR}")
129-
130-
file(GENERATE
131-
OUTPUT "${PROJECT_BINARY_DIR}/macbundle-generate.cmake"
132-
CONTENT [[
133-
set(CPACK_OUTPUT_DIR "${CPACK_BUILD_DIR}/${CPACK_PACKAGE_FILE_NAME}")
134-
file(MAKE_DIRECTORY ${CPACK_OUTPUT_DIR})
135-
136-
find_program(DYLIBBUNDLER_EXECUTABLE NAMES dylibbundler)
137-
if(NOT DYLIBBUNDLER_EXECUTABLE)
138-
message(FATAL_ERROR "Missing dylibbundler (brew install dylibbundler)")
139-
endif()
140-
141-
file(COPY_FILE
142-
$<TARGET_FILE:dsda-doom>
143-
${CPACK_OUTPUT_DIR}/dsda-doom)
144-
145-
execute_process(COMMAND
146-
${CMAKE_COMMAND} -E env
147-
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.zip
148-
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0>
149-
${DYLIBBUNDLER_EXECUTABLE}
150-
--bundle-deps
151-
--create-dir
152-
--fix-file ${CPACK_OUTPUT_DIR}/dsda-doom
153-
--install-path @executable_path/libs_${CPACK_SYSTEM_PROCESSOR}
154-
--dest-dir ${CPACK_OUTPUT_DIR}/libs_${CPACK_SYSTEM_PROCESSOR})
155-
156-
file(COPY_FILE
157-
${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/games/doom/dsda-doom.wad
158-
${CPACK_OUTPUT_DIR}/dsda-doom.wad)
159-
file(COPY_FILE
160-
${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/doc/dsda-doom/COPYING
161-
${CPACK_OUTPUT_DIR}/COPYING.txt)
162-
163-
file(CONFIGURE
164-
OUTPUT ${CPACK_OUTPUT_DIR}/Troubleshooting.txt
165-
CONTENT "If you are getting errors like 'libzip.5.5.dylib cant be opened because Apple cannot check it for malicious software.' Run the following command in the dsda-doom folder:\n\nxattr -dr com.apple.quarantine path/to/folder")
166-
167-
execute_process(COMMAND zip -r ${CPACK_PACKAGE_FILE_NAME}.zip ${CPACK_PACKAGE_FILE_NAME})
168-
]])
83+
if(ENABLE_PACKAGING)
84+
add_subdirectory(packaging)
16985
endif()
170-
include(CPack)

prboom2/cmake/DsdaOptions.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ set(DOOMWADDIR "${CMAKE_INSTALL_PREFIX}/${default_wad_dir}" CACHE PATH "Path to
1616
set(DSDA_INSTALL_COPYRIGHT_DIR "${default_copyright_dir}" CACHE STRING "Destination of the copyright file")
1717
set(DSDA_INSTALL_BINDIR "${default_bin_dir}" CACHE STRING "Destination of the dsda-doom binary")
1818

19+
option(ENABLE_PACKAGING "Enable creating CPack packages" ${dsda_is_top_project})
1920
option(STRICT_FIND "Fail configuration if an optional dependency is not found" OFF)
2021
option(SIMPLECHECKS "Enable checks which only impose significant overhead if a posible error is detected" ON)
2122
option(RANGECHECK "Enable internal range checking" OFF)

prboom2/packaging/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
2+
set(CPACK_PACKAGE_VENDOR "DSDA-Doom maintainers")
3+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "This is a successor of prboom+ with extra tooling for demo recording and playback, with a focus on speedrunning and quality of life.")
4+
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
5+
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
6+
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
7+
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
8+
set(CPACK_VERBATIM_VARIABLES YES)
9+
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/COPYING)
10+
11+
if(WIN32)
12+
set(CPACK_GENERATOR ZIP)
13+
elseif(LINUX OR APPLE)
14+
set(CPACK_GENERATOR External TXZ)
15+
set(CPACK_EXTERNAL_ENABLE_STAGING TRUE)
16+
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_SYSTEM_NAME}Generator.cmake")
17+
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
18+
set(CPACK_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
19+
set(CPACK_BIN_DIR "${DSDA_INSTALL_BINDIR}")
20+
set(CPACK_PWAD_DIR "${DSDAPWADDIR}")
21+
set(CPACK_LICENSE_DIR "${DSDA_INSTALL_COPYRIGHT_DIR}")
22+
endif()
23+
24+
include(CPack)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
set(staging_dir "${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}")
2+
set(packaged_dir "${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGE_NAME}")
3+
file(MAKE_DIRECTORY ${packaged_dir})
4+
5+
file(COPY_FILE
6+
${staging_dir}/${CPACK_BIN_DIR}/dsda-doom
7+
${packaged_dir}/dsda-doom
8+
)
9+
10+
file(COPY_FILE
11+
${staging_dir}/${CPACK_PWAD_DIR}/dsda-doom.wad
12+
${packaged_dir}/dsda-doom.wad
13+
)
14+
15+
file(COPY_FILE
16+
${staging_dir}/${CPACK_LICENSE_DIR}/COPYING
17+
${packaged_dir}/COPYING.txt
18+
)
19+
20+
file(WRITE
21+
"${packaged_dir}/Troubleshooting.txt"
22+
"If you are getting errors like 'libzip.5.5.dylib cant be opened because Apple cannot check it for malicious software.'\n"
23+
"Run the following command in the dsda-doom folder:\n\n"
24+
"xattr -dr com.apple.quarantine path/to/folder\n"
25+
)
26+
27+
find_program(DYLIBBUNDLER_EXECUTABLE
28+
NAMES dylibbundler
29+
REQUIRED
30+
)
31+
32+
execute_process(
33+
COMMAND ${DYLIBBUNDLER_EXECUTABLE}
34+
--bundle-deps
35+
--create-dir
36+
--overwrite-files
37+
--fix-file ${packaged_dir}/dsda-doom
38+
--install-path @executable_path/libs
39+
--dest-dir ${packaged_dir}/libs
40+
)
41+
42+
execute_process(
43+
COMMAND zip
44+
-r ${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}.zip
45+
dsda-doom
46+
WORKING_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}
47+
)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
find_program(LINUXDEPLOY_EXECUTABLE
2+
NAMES linuxdeploy linuxdeploy-${CPACK_SYSTEM_PROCESSOR}.AppImage
3+
PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy
4+
)
5+
6+
set(linuxdeploy_prebuilt_archs x86_64 i386 aarch64 armhf)
7+
8+
if(NOT LINUXDEPLOY_EXECUTABLE)
9+
if(NOT CPACK_SYSTEM_PROCESSOR IN_LIST linuxdeploy_prebuilt_archs)
10+
message(FATAL_ERROR "linuxdeploy could not be found, and is not available to download for your system.")
11+
endif()
12+
13+
message(STATUS "Downloading linuxdeploy")
14+
set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy)
15+
file(DOWNLOAD
16+
"https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-${CPACK_SYSTEM_PROCESSOR}.AppImage"
17+
${LINUXDEPLOY_EXECUTABLE}
18+
INACTIVITY_TIMEOUT 10
19+
)
20+
21+
execute_process(
22+
COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE}
23+
COMMAND_ECHO STDOUT
24+
)
25+
endif()
26+
27+
execute_process(
28+
COMMAND ${CMAKE_COMMAND} -E env
29+
LDAI_OUTPUT=${CPACK_PACKAGE_FILE_NAME}-${CPACK_SYSTEM_PROCESSOR}.appimage
30+
LINUXDEPLOY_OUTPUT_VERSION=${CPACK_PACKAGE_VERSION}
31+
NO_STRIP=1
32+
${LINUXDEPLOY_EXECUTABLE}
33+
--appimage-extract-and-run
34+
--appdir=${CPACK_TEMPORARY_DIRECTORY}
35+
--executable=${CPACK_BIN_DIR}/dsda-doom
36+
--desktop-file=${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/applications/dsda-doom.desktop
37+
--icon-file=${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/dsda-doom.svg
38+
--output=appimage
39+
)

0 commit comments

Comments
 (0)