Skip to content

Commit afdaa2a

Browse files
TrihedrafAJenbo
authored andcommitted
mods/hellfire.mpq build = with devilutionx.mpq
1 parent 665e8a1 commit afdaa2a

3 files changed

Lines changed: 59 additions & 30 deletions

File tree

CMake/Mods.cmake

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
include(functions/copy_files)
2+
include(functions/trim_retired_files)
3+
14
if(NOT DEFINED DEVILUTIONX_MODS_OUTPUT_DIRECTORY)
25
set(DEVILUTIONX_MODS_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mods")
36
endif()
@@ -30,32 +33,42 @@ if(NOT UNPACKED_MPQS)
3033
data/inv/objcurs2-widths.txt)
3134
endif()
3235

33-
foreach(asset_file ${hellfire_mod})
34-
set(src "${CMAKE_CURRENT_SOURCE_DIR}/mods/Hellfire/${asset_file}")
35-
set(dst "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire/${asset_file}")
36-
list(APPEND HELLFIRE_MPQ_FILES "${asset_file}")
37-
list(APPEND HELLFIRE_OUTPUT_FILES "${dst}")
38-
add_custom_command(
39-
COMMENT "Copying ${asset_file}"
40-
OUTPUT "${dst}"
41-
DEPENDS "${src}"
42-
COMMAND ${CMAKE_COMMAND} -E copy "${src}" "${dst}"
43-
VERBATIM)
44-
endforeach()
45-
46-
if(BUILD_ASSETS_MPQ)
47-
set(HELLFIRE_MPQ "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire.mpq")
48-
add_custom_command(
49-
COMMENT "Building Hellfire.mpq"
50-
OUTPUT "${HELLFIRE_MPQ}"
51-
COMMAND ${CMAKE_COMMAND} -E remove -f "${HELLFIRE_MPQ}"
52-
COMMAND ${SMPQ} -A -M 1 -C BZIP2 -c "${HELLFIRE_MPQ}" ${HELLFIRE_MPQ_FILES}
53-
WORKING_DIRECTORY "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire"
54-
DEPENDS ${HELLFIRE_OUTPUT_FILES}
55-
VERBATIM)
56-
add_custom_target(hellfire_mpq DEPENDS "${HELLFIRE_MPQ}")
57-
add_dependencies(libdevilutionx hellfire_mpq)
36+
if(APPLE)
37+
foreach(asset_file ${hellfire_mod})
38+
set(src "${CMAKE_CURRENT_SOURCE_DIR}/mods/Hellfire/${asset_file}")
39+
get_filename_component(_asset_dir "${asset_file}" DIRECTORY)
40+
set_source_files_properties("${src}" PROPERTIES
41+
MACOSX_PACKAGE_LOCATION "Resources/mods/Hellfire/${_asset_dir}"
42+
XCODE_EXPLICIT_FILE_TYPE compiled)
43+
target_sources(${BIN_TARGET} PRIVATE "${src}")
44+
endforeach()
5845
else()
59-
add_custom_target(hellfire_copied_mod_file DEPENDS ${HELLFIRE_OUTPUT_FILES})
60-
add_dependencies(libdevilutionx hellfire_copied_mod_file)
46+
copy_files(
47+
FILES ${hellfire_mod}
48+
SRC_PREFIX "mods/Hellfire/"
49+
OUTPUT_DIR "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire"
50+
OUTPUT_VARIABLE HELLFIRE_OUTPUT_FILES)
51+
set(HELLFIRE_MPQ_FILES ${hellfire_mod})
52+
add_trim_target(hellfire_trim_assets
53+
ROOT_FOLDER "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire"
54+
CURRENT_FILES ${HELLFIRE_MPQ_FILES})
55+
56+
if(BUILD_ASSETS_MPQ)
57+
set(HELLFIRE_MPQ "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire.mpq")
58+
add_custom_command(
59+
COMMENT "Building Hellfire.mpq"
60+
OUTPUT "${HELLFIRE_MPQ}"
61+
COMMAND ${CMAKE_COMMAND} -E remove -f "${HELLFIRE_MPQ}"
62+
COMMAND ${SMPQ} -A -M 1 -C BZIP2 -c "${HELLFIRE_MPQ}" ${HELLFIRE_MPQ_FILES}
63+
WORKING_DIRECTORY "${DEVILUTIONX_MODS_OUTPUT_DIRECTORY}/Hellfire"
64+
DEPENDS ${TRIM_COMMAND_BYPRODUCT} ${HELLFIRE_OUTPUT_FILES}
65+
VERBATIM)
66+
add_custom_target(hellfire_mpq DEPENDS "${HELLFIRE_MPQ}")
67+
add_dependencies(hellfire_mpq hellfire_trim_assets)
68+
add_dependencies(libdevilutionx hellfire_mpq)
69+
else()
70+
add_custom_target(hellfire_copied_assets DEPENDS ${HELLFIRE_OUTPUT_FILES})
71+
add_dependencies(hellfire_copied_assets hellfire_trim_assets)
72+
add_dependencies(libdevilutionx hellfire_copied_assets)
73+
endif()
6174
endif()

CMakeLists.txt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ else()
181181
set(SUPPORTS_MPQ ON)
182182
endif()
183183

184-
# By default, devilutionx.mpq is built only if smpq is installed and MPQ support is enabled.
184+
# By default, devilutionx.mpq and mods/Hellfire.mpq are built only if smpq is installed and MPQ support is enabled.
185185
if(SUPPORTS_MPQ AND NOT UNPACKED_MPQS)
186186
if(BUILD_ASSETS_MPQ OR (CPACK STREQUAL "ON" AND (WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Linux")))
187187
find_program(SMPQ smpq REQUIRED)
@@ -193,7 +193,7 @@ if(SUPPORTS_MPQ AND NOT UNPACKED_MPQS)
193193
else()
194194
set(_has_smpq OFF)
195195
endif()
196-
option(BUILD_ASSETS_MPQ "If true, assets are packaged into devilutionx.mpq." ${_has_smpq})
196+
option(BUILD_ASSETS_MPQ "If true, assets are packaged into devilutionx.mpq and mods/Hellfire to Hellfire.mpq." ${_has_smpq})
197197
else()
198198
set(BUILD_ASSETS_MPQS OFF)
199199
endif()
@@ -488,6 +488,7 @@ if(VITA)
488488
NAME ${VITA_APP_NAME}
489489
FILE Packaging/vita/sce_sys sce_sys
490490
FILE ${DEVILUTIONX_MPQ} devilutionx.mpq
491+
FILE ${HELLFIRE_MPQ} mods/Hellfire.mpq
491492
)
492493
else()
493494
vita_create_vpk(devilutionx.vpk ${VITA_TITLEID} devilutionx.self
@@ -505,6 +506,10 @@ if(PS4)
505506
add_custom_command(
506507
TARGET devilutionx_mpq POST_BUILD
507508
COMMAND ${CMAKE_COMMAND} -E copy ${DEVILUTIONX_MPQ} "${PROJECT_SOURCE_DIR}/Packaging/ps4/")
509+
add_custom_command(
510+
TARGET hellfire_mpq POST_BUILD
511+
COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_SOURCE_DIR}/Packaging/ps4/mods"
512+
COMMAND ${CMAKE_COMMAND} -E copy ${HELLFIRE_MPQ} "${PROJECT_SOURCE_DIR}/Packaging/ps4/mods/")
508513
add_self(${BIN_TARGET})
509514
add_pkg(${BIN_TARGET} "${PROJECT_SOURCE_DIR}/Packaging/ps4"
510515
"DVLX00001" "DevilutionX" "${PROJECT_VERSION}")
@@ -593,6 +598,9 @@ if(CPACK AND (APPLE OR BUILD_ASSETS_MPQ OR SRC_DIST))
593598
install(FILES "${DEVILUTIONX_MPQ}"
594599
DESTINATION "."
595600
)
601+
install(FILES "${HELLFIRE_MPQ}"
602+
DESTINATION "mods"
603+
)
596604

597605
foreach(_SDL2_WIN32_DLL_PATH ${SDL2_WIN32_ALL_DLLS} ${WIN32_INSTALL_DLLS})
598606
install(FILES "${_SDL2_WIN32_DLL_PATH}"
@@ -648,6 +656,9 @@ if(CPACK AND (APPLE OR BUILD_ASSETS_MPQ OR SRC_DIST))
648656
install(FILES "${DEVILUTIONX_MPQ}"
649657
DESTINATION "share/diasurgical/${project_name}"
650658
)
659+
install(FILES "${HELLFIRE_MPQ}"
660+
DESTINATION "share/diasurgical/${project_name}/mods"
661+
)
651662
install(FILES "${PROJECT_SOURCE_DIR}/Packaging/resources/icon_flat.png"
652663
DESTINATION "share/icons/hicolor/512x512/apps"
653664
RENAME "${project_name}.png"

tools/make_src_dist.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def main():
9797
configure_args.append('-DDISCORD_INTEGRATION=ON')
9898
cmake(*configure_args)
9999
cmake('--build', _BUILD_DIR, '--target', 'devilutionx_mpq')
100+
cmake('--build', _BUILD_DIR, '--target', 'hellfire_mpq')
100101

101102
if _ARCHIVE_DIR.exists():
102103
shutil.rmtree(_ARCHIVE_DIR)
@@ -116,6 +117,9 @@ def main():
116117
_LOGGER.info(f'Copying devilutionx.mpq...')
117118
paths.dist_dir.mkdir(parents=True)
118119
shutil.copy(_BUILD_DIR.joinpath('devilutionx.mpq'), paths.dist_dir)
120+
_LOGGER.info(f'Copying Hellfire.mpq...')
121+
paths.dist_dir.joinpath('mods').mkdir(exist_ok=True)
122+
shutil.copy(_BUILD_DIR.joinpath('mods', 'Hellfire.mpq'), paths.dist_dir.joinpath('mods'))
119123

120124
for dep in _DEPS + (_DEPS_NOT_VENDORED_BY_DEFAULT if args.fully_vendored else []):
121125
_LOGGER.info(f'Copying {dep}...')
@@ -183,8 +187,9 @@ def write_dist_cmakelists(paths: Paths, version: Version, fully_vendored: bool):
183187
f.write(b'set(GIT_COMMIT_HASH "%s" PARENT_SCOPE)\n' % version.commit_sha.encode('utf-8'))
184188

185189
f.write(b'''
186-
# Pre-generated `devilutionx.mpq` is provided so that distributions do not have to depend on smpq.
190+
# Pre-generated `devilutionx.mpq` and `mods/Hellfire.mpq` are provided so that distributions do not have to depend on smpq.
187191
set(DEVILUTIONX_MPQ "${CMAKE_CURRENT_SOURCE_DIR}/devilutionx.mpq" PARENT_SCOPE)
192+
set(HELLFIRE_MPQ "${CMAKE_CURRENT_SOURCE_DIR}/mods/Hellfire.mpq" PARENT_SCOPE)
188193
189194
# This would ensure that CMake does not attempt to connect to network.
190195
# We do not set this to allow for builds for Windows and Android, which do fetch some

0 commit comments

Comments
 (0)