Skip to content

Commit 703a8c1

Browse files
authored
Merge branch 'master' into dsda-custom-skill
2 parents f1219d3 + a55a020 commit 703a8c1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+569
-807
lines changed

.github/workflows/continuous_integration.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ jobs:
158158
cmake -S prboom2
159159
-B build
160160
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
161+
-DSTRICT_FIND=ON
161162
${{ matrix.config.extra_options }}
162163
163164
- name: Build

prboom2/CMakeLists.txt

Lines changed: 15 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@ include(DsdaDepsSetup)
77

88
project("dsda-doom" VERSION 0.29.3)
99

10-
# Set a default build type if none was specified
11-
set(default_build_type "RelWithDebInfo")
12-
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
13-
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
14-
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
15-
STRING "Choose the type of build." FORCE)
16-
# Set the possible values of build type for cmake-gui
17-
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
18-
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
10+
set(dsda_is_top_project FALSE)
11+
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
12+
set(dsda_is_top_project TRUE)
13+
endif()
14+
15+
if(dsda_is_top_project)
16+
include(DsdaSanitiser)
17+
endif()
18+
19+
include(DsdaHelpers)
20+
if(dsda_is_top_project)
21+
dsda_set_default_build_config(RelWithDebInfo)
1922
endif()
2023

2124
if(VCPKG_TOOLCHAIN)
@@ -28,77 +31,7 @@ set(PROJECT_STRING "${PROJECT_NAME} ${PROJECT_VERSION}")
2831

2932
include(DsdaOptions)
3033
include(DsdaTargetFeatures)
31-
32-
include(PkgConfigHelper)
33-
34-
set(OpenGL_GL_PREFERENCE LEGACY)
35-
find_package(OpenGL 2.0 REQUIRED)
36-
find_package(libzip REQUIRED)
37-
find_package(SDL2 2.0.7 REQUIRED)
38-
find_package(SDL2_mixer REQUIRED)
39-
find_package(ZLIB REQUIRED)
40-
find_package(SndFile 1.0.29 REQUIRED)
41-
42-
if(NOT TARGET SDL2_mixer::SDL2_mixer)
43-
add_library(SDL2_mixer::SDL2_mixer ALIAS SDL2_mixer::SDL2_mixer-static)
44-
endif()
45-
46-
if(SndFile_VERSION VERSION_GREATER_EQUAL "1.1.0")
47-
set(HAVE_SNDFILE_MPEG TRUE)
48-
endif()
49-
50-
if(WITH_IMAGE)
51-
find_package(SDL2_image)
52-
if(SDL2_image_FOUND)
53-
set(HAVE_LIBSDL2_IMAGE TRUE)
54-
if(NOT TARGET SDL2_image::SDL2_image)
55-
add_library(SDL2_image::SDL2_image ALIAS SDL2_image::SDL2_image-static)
56-
endif()
57-
endif()
58-
endif()
59-
60-
if(WITH_MAD)
61-
find_package(LibMad)
62-
if(LibMad_FOUND)
63-
set(HAVE_LIBMAD TRUE)
64-
endif()
65-
endif()
66-
67-
if(WITH_FLUIDSYNTH)
68-
find_package(FluidSynth)
69-
if(FluidSynth_FOUND)
70-
set(HAVE_LIBFLUIDSYNTH TRUE)
71-
endif()
72-
endif()
73-
74-
if(WITH_XMP)
75-
find_package(libxmp)
76-
if(libxmp_FOUND)
77-
set(HAVE_LIBXMP TRUE)
78-
if(NOT TARGET libxmp::xmp)
79-
if(TARGET libxmp::xmp_shared)
80-
add_library(libxmp::xmp ALIAS libxmp::xmp_shared)
81-
else()
82-
add_library(libxmp::xmp ALIAS libxmp::xmp_static)
83-
endif()
84-
endif()
85-
endif()
86-
endif()
87-
88-
if(WITH_VORBISFILE)
89-
find_package(Vorbis COMPONENTS File)
90-
if(Vorbis_File_FOUND)
91-
set(HAVE_LIBVORBISFILE TRUE)
92-
endif()
93-
endif()
94-
95-
if(WITH_PORTMIDI)
96-
find_package(PortMidi)
97-
if(PortMidi_FOUND)
98-
set(HAVE_LIBPORTMIDI TRUE)
99-
endif()
100-
endif()
101-
34+
include(DsdaDependencies)
10235
include(DsdaConfigHeader)
10336

10437
set(DSDA_OUTPUT_PATH ${CMAKE_BINARY_DIR})
@@ -147,91 +80,6 @@ install(FILES
14780
DESTINATION "${DSDA_INSTALL_COPYRIGHT_DIR}"
14881
)
14982

150-
if(WIN32)
151-
set(CPACK_GENERATOR ZIP)
152-
elseif(LINUX)
153-
set(CPACK_GENERATOR External)
154-
set(CPACK_EXTERNAL_ENABLE_STAGING YES)
155-
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
156-
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake")
157-
158-
file(GENERATE
159-
OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake"
160-
CONTENT [[
161-
find_program(LINUXDEPLOY_EXECUTABLE
162-
NAMES linuxdeploy linuxdeploy-x86_64.AppImage
163-
PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy)
164-
165-
if(NOT LINUXDEPLOY_EXECUTABLE)
166-
message(STATUS "Downloading linuxdeploy")
167-
set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy)
168-
file(DOWNLOAD
169-
https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
170-
${LINUXDEPLOY_EXECUTABLE}
171-
INACTIVITY_TIMEOUT 10)
172-
execute_process(COMMAND
173-
chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT)
174-
endif()
175-
176-
execute_process(COMMAND
177-
${CMAKE_COMMAND} -E env
178-
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage
179-
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0>
180-
${LINUXDEPLOY_EXECUTABLE}
181-
--appimage-extract-and-run
182-
--appdir=${CPACK_TEMPORARY_DIRECTORY}
183-
--executable=$<TARGET_FILE:dsda-doom>
184-
--desktop-file=${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/applications/dsda-doom.desktop
185-
--icon-file=${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/dsda-doom.svg
186-
--output=appimage)
187-
]])
188-
elseif(APPLE)
189-
set(CPACK_GENERATOR External)
190-
set(CPACK_EXTERNAL_ENABLE_STAGING YES)
191-
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
192-
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/macbundle-generate.cmake")
193-
set(CPACK_SYSTEM_NAME "mac-${CMAKE_SYSTEM_PROCESSOR}")
194-
set(CPACK_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
195-
set(CPACK_BUILD_DIR "${PROJECT_BINARY_DIR}")
196-
197-
file(GENERATE
198-
OUTPUT "${PROJECT_BINARY_DIR}/macbundle-generate.cmake"
199-
CONTENT [[
200-
set(CPACK_OUTPUT_DIR "${CPACK_BUILD_DIR}/${CPACK_PACKAGE_FILE_NAME}")
201-
file(MAKE_DIRECTORY ${CPACK_OUTPUT_DIR})
202-
203-
find_program(DYLIBBUNDLER_EXECUTABLE NAMES dylibbundler)
204-
if(NOT DYLIBBUNDLER_EXECUTABLE)
205-
message(FATAL_ERROR "Missing dylibbundler (brew install dylibbundler)")
206-
endif()
207-
208-
file(COPY_FILE
209-
$<TARGET_FILE:dsda-doom>
210-
${CPACK_OUTPUT_DIR}/dsda-doom)
211-
212-
execute_process(COMMAND
213-
${CMAKE_COMMAND} -E env
214-
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.zip
215-
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0>
216-
${DYLIBBUNDLER_EXECUTABLE}
217-
--bundle-deps
218-
--create-dir
219-
--fix-file ${CPACK_OUTPUT_DIR}/dsda-doom
220-
--install-path @executable_path/libs_${CPACK_SYSTEM_PROCESSOR}
221-
--dest-dir ${CPACK_OUTPUT_DIR}/libs_${CPACK_SYSTEM_PROCESSOR})
222-
223-
file(COPY_FILE
224-
${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/games/doom/dsda-doom.wad
225-
${CPACK_OUTPUT_DIR}/dsda-doom.wad)
226-
file(COPY_FILE
227-
${CPACK_TEMPORARY_DIRECTORY}/${CPACK_PACKAGING_INSTALL_PREFIX}/share/doc/dsda-doom/COPYING
228-
${CPACK_OUTPUT_DIR}/COPYING.txt)
229-
230-
file(CONFIGURE
231-
OUTPUT ${CPACK_OUTPUT_DIR}/Troubleshooting.txt
232-
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")
233-
234-
execute_process(COMMAND zip -r ${CPACK_PACKAGE_FILE_NAME}.zip ${CPACK_PACKAGE_FILE_NAME})
235-
]])
83+
if(ENABLE_PACKAGING)
84+
add_subdirectory(packaging)
23685
endif()
237-
include(CPack)
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
include_guard()
2+
3+
if(STRICT_FIND)
4+
set(dsda_strict_keyword)
5+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.1)
6+
set(CMAKE_FIND_REQUIRED ON)
7+
else()
8+
set(dsda_strict_keyword REQUIRED)
9+
endif()
10+
endif()
11+
12+
# TODO: Move away from including this module this way
13+
include(PkgConfigHelper)
14+
15+
add_library(dsda_dependencies INTERFACE IMPORTED)
16+
add_library(dsda::dependencies ALIAS dsda_dependencies)
17+
18+
# Make sure OpenGL.framework is found, XQuartz may show up first and only supports GL 1.4
19+
if(APPLE)
20+
set(find_framework_backup ${CMAKE_FIND_FRAMEWORK})
21+
set(CMAKE_FIND_FRAMEWORK ONLY)
22+
endif()
23+
24+
set(OpenGL_GL_PREFERENCE LEGACY)
25+
find_package(OpenGL 2.0 REQUIRED)
26+
27+
if(APPLE)
28+
set(CMAKE_FIND_FRAMEWORK ${find_framework_backup})
29+
endif()
30+
31+
find_package(SDL2 2.0.12 CONFIG REQUIRED)
32+
find_package(SDL2_mixer REQUIRED)
33+
find_package(SndFile 1.0.29 REQUIRED)
34+
find_package(ZLIB REQUIRED)
35+
find_package(libzip REQUIRED)
36+
37+
if(SndFile_VERSION VERSION_GREATER_EQUAL "1.1.0")
38+
set(HAVE_SNDFILE_MPEG TRUE)
39+
endif()
40+
41+
if(WITH_IMAGE)
42+
find_package(SDL2_image ${dsda_strict_keyword})
43+
if(SDL2_image_FOUND)
44+
set(HAVE_LIBSDL2_IMAGE TRUE)
45+
endif()
46+
endif()
47+
48+
if(WITH_MAD)
49+
find_package(mad ${dsda_strict_keyword})
50+
if(mad_FOUND)
51+
set(HAVE_LIBMAD TRUE)
52+
endif()
53+
endif()
54+
55+
if(WITH_FLUIDSYNTH)
56+
find_package(FluidSynth ${dsda_strict_keyword})
57+
if(FluidSynth_FOUND)
58+
set(HAVE_LIBFLUIDSYNTH TRUE)
59+
endif()
60+
endif()
61+
62+
if(WITH_XMP)
63+
find_package(libxmp ${dsda_strict_keyword})
64+
if(libxmp_FOUND)
65+
set(HAVE_LIBXMP TRUE)
66+
endif()
67+
endif()
68+
69+
if(WITH_VORBISFILE)
70+
find_package(Vorbis COMPONENTS File ${dsda_strict_keyword})
71+
if(Vorbis_File_FOUND)
72+
set(HAVE_LIBVORBISFILE TRUE)
73+
endif()
74+
endif()
75+
76+
if(WITH_PORTMIDI)
77+
find_package(PortMidi ${dsda_strict_keyword})
78+
if(PortMidi_FOUND)
79+
set(HAVE_LIBPORTMIDI TRUE)
80+
endif()
81+
endif()
82+
83+
# Before SDL 2.24.x, all SDL2::* targets were created in autotools builds, even if the underlying library wasn't built.
84+
# So wrap all this in our interface library
85+
add_library(dsda_SDL2 INTERFACE IMPORTED)
86+
add_library(dsda::SDL2 ALIAS dsda_SDL2)
87+
88+
if(TARGET SDL2::SDL2main)
89+
get_target_property(sdl2_main_library SDL2::SDL2main LOCATION)
90+
if(EXISTS ${sdl2_main_library})
91+
target_link_libraries(dsda_SDL2 INTERFACE SDL2::SDL2main)
92+
endif()
93+
endif()
94+
95+
if(TARGET SDL2::SDL2)
96+
get_target_property(sdl2_library SDL2::SDL2 LOCATION)
97+
endif()
98+
if(TARGET SDL2::SDL2-static)
99+
get_target_property(sdl2_static_library SDL2::SDL2-static LOCATION)
100+
endif()
101+
102+
if(EXISTS ${sdl2_library})
103+
target_link_libraries(dsda_SDL2 INTERFACE SDL2::SDL2)
104+
elseif(EXISTS ${sdl2_static_library})
105+
target_link_libraries(dsda_SDL2 INTERFACE SDL2::SDL2-static)
106+
else()
107+
message(FATAL_ERROR "Neither '${sdl2_library}' or '${sdl2_static_library}' exist, your SDL installation may be broken.")
108+
endif()
109+
110+
# TODO: Rework libxmp's find module to avoid this workaround
111+
add_library(dsda_xmp INTERFACE IMPORTED)
112+
add_library(dsda::xmp ALIAS dsda_xmp)
113+
114+
if(HAVE_LIBXMP)
115+
if(TARGET libxmp::xmp)
116+
target_link_libraries(dsda_xmp INTERFACE libxmp::xmp)
117+
else()
118+
target_link_libraries(dsda_xmp
119+
INTERFACE
120+
$<IF:$<TARGET_EXISTS:libxmp::xmp_shared>,libxmp::xmp_shared,libxmp::xmp_static>
121+
)
122+
endif()
123+
endif()
124+
125+
target_link_libraries(dsda_dependencies
126+
INTERFACE
127+
OpenGL::GL
128+
OpenGL::GLU
129+
SndFile::sndfile
130+
libzip::zip
131+
ZLIB::ZLIB
132+
133+
dsda::xmp
134+
$<$<BOOL:${HAVE_LIBMAD}>:mad::mad>
135+
$<$<BOOL:${HAVE_LIBFLUIDSYNTH}>:FluidSynth::libfluidsynth>
136+
$<$<BOOL:${HAVE_LIBVORBISFILE}>:Vorbis::vorbisfile>
137+
$<$<BOOL:${HAVE_LIBPORTMIDI}>:PortMidi::portmidi>
138+
139+
$<$<BOOL:${HAVE_LIBSDL2_IMAGE}>:$<IF:$<TARGET_EXISTS:SDL2_image::SDL2_image>,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static>>
140+
$<IF:$<TARGET_EXISTS:SDL2_mixer::SDL2_mixer>,SDL2_mixer::SDL2_mixer,SDL2_mixer::SDL2_mixer-static>
141+
142+
dsda::SDL2
143+
)
144+
145+
if(WIN32)
146+
target_link_libraries(dsda_dependencies
147+
INTERFACE
148+
winmm
149+
comctl32
150+
)
151+
endif()

prboom2/cmake/DsdaHelpers.cmake

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,24 @@ function(dsda_fail_if_invalid_target tgt)
55
message(FATAL_ERROR "${tgt} is not a valid CMake target.")
66
endif()
77
endfunction()
8+
9+
function(dsda_set_default_build_config build_config)
10+
get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
11+
if(NOT is_multi_config AND NOT CMAKE_BUILD_TYPE)
12+
set(CMAKE_BUILD_TYPE "${build_config}"
13+
CACHE STRING "Build configuration"
14+
FORCE
15+
)
16+
set_property(
17+
CACHE CMAKE_BUILD_TYPE
18+
PROPERTY STRINGS
19+
"Debug" "Release" "MinSizeRel" "RelWithDebInfo"
20+
)
21+
elseif(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
22+
if(build_config IN_LIST CMAKE_CONFIGURATION_TYPES)
23+
set(CMAKE_DEFAULT_BUILD_TYPE ${build_config})
24+
else()
25+
message(AUTHOR_WARNING "${build_config} is not a known config type.")
26+
endif()
27+
endif()
28+
endfunction()

prboom2/cmake/DsdaOptions.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ 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})
20+
option(STRICT_FIND "Fail configuration if an optional dependency is not found" OFF)
1921
option(SIMPLECHECKS "Enable checks which only impose significant overhead if a posible error is detected" ON)
2022
option(RANGECHECK "Enable internal range checking" OFF)
2123

0 commit comments

Comments
 (0)