-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
103 lines (88 loc) · 4.22 KB
/
CMakeLists.txt
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Solution configuration
cmake_minimum_required(VERSION 3.21)
project(projects VERSION 2.0.1 LANGUAGES CXX)
set(MOD_ARCHIVE_DIR "" CACHE PATH "Absolute path where to save the mod archive.")
set(MOD_ARCHIVE_FOLDER "" CACHE STRING "Folder name of the mod archive.")
option(ENABLE_MOD_ARCHIVE "Enable mod archive target." ON)
if (NOT IS_DIRECTORY ${CMAKE_INSTALL_PREFIX})
message(FATAL_ERROR "CMAKE_INSTALL_PREFIX either does not exist or is not a directory.")
elseif(NOT IS_ABSOLUTE ${CMAKE_INSTALL_PREFIX})
message(FATAL_ERROR "CMAKE_INSTALL_PREFIX is not an absolute path.")
else()
# Get the mod folder.
cmake_path(GET CMAKE_INSTALL_PREFIX FILENAME MOD_FOLDER)
# Get the game directory.
cmake_path(GET CMAKE_INSTALL_PREFIX PARENT_PATH GAME_DIR)
endif()
# Mod directory is the install directory.
set(MOD_DIR ${CMAKE_INSTALL_PREFIX})
if (ENABLE_MOD_ARCHIVE)
if (NOT IS_DIRECTORY ${MOD_ARCHIVE_DIR})
message(FATAL_ERROR "MOD_ARCHIVE_DIR either does not exist or is not a directory.")
elseif(NOT IS_ABSOLUTE ${MOD_ARCHIVE_DIR})
message(FATAL_ERROR "MOD_ARCHIVE_DIR is not an absolute path.")
endif()
if (MOD_ARCHIVE_FOLDER STREQUAL "")
message(FATAL_ERROR "MOD_ARCHIVE_FOLDER has no value.")
endif()
endif()
# SDK directories definitions
set(CL_DLL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cl_dll)
set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common)
set(DLLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dlls)
set(ENGINE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/engine)
set(EXTERNAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external)
set(GAME_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/game_shared)
set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(PM_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pm_shared)
set(PUBLIC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/public)
set(UTILS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/utils)
set(MOD_FILES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/mod_files)
set(HUNGER_DLLS_FOLDER Hunger)
set(HUNGER_CL_DLL_DIR ${CL_DLL_DIR}/${HUNGER_DLLS_FOLDER})
set(HUNGER_DLLS_DIR ${DLLS_DIR}/${HUNGER_DLLS_FOLDER})
# Mod configuration file
set(MOD_CONFIG_FILE_PATH ${COMMON_DIR}/mod_config.h)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_config.h.in
${MOD_CONFIG_FILE_PATH}
@ONLY
)
add_subdirectory(cl_dll)
add_subdirectory(dlls)
if (ENABLE_MOD_ARCHIVE)
# Archive target definition
set(MOD_ARCHIVE_TEMP_DIR ${MOD_ARCHIVE_DIR}/${MOD_ARCHIVE_FOLDER})
set(MOD_ARCHIVE_MOD_DIR ${MOD_ARCHIVE_TEMP_DIR}/${MOD_FOLDER})
set(MOD_ARCHIVE_COMPRESSED_FILE_NAME ${MOD_ARCHIVE_FOLDER}-${PROJECT_VERSION}.zip)
set(MOD_ARCHIVE_COMPRESSED_FILE_PATH ${MOD_ARCHIVE_DIR}/${MOD_ARCHIVE_COMPRESSED_FILE_NAME})
add_custom_target(mod_archive
COMMAND ${CMAKE_COMMAND} -E echo Creating mod archive...
# Copy Changelog.
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md ${MOD_ARCHIVE_TEMP_DIR}/CHANGELOG.md
# Copy License.
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md ${MOD_ARCHIVE_TEMP_DIR}/LICENSE.md
# Copy Installation instructions.
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/INSTALL.md ${MOD_ARCHIVE_TEMP_DIR}/INSTALL.md
# Move mod files directory to a temporary archive folder.
COMMAND ${CMAKE_COMMAND} -E copy_directory ${MOD_FILES_DIR} ${MOD_ARCHIVE_MOD_DIR}
# Copy client.dll to temporary archive folder.
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:hl_cdll> ${MOD_ARCHIVE_MOD_DIR}/cl_dlls/$<TARGET_FILE_NAME:hl_cdll>
# Copy hl.dll to temporary archive folder.
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:hldll> ${MOD_ARCHIVE_MOD_DIR}/dlls/$<TARGET_FILE_NAME:hldll>
# Compress and create the archive.
COMMAND ${CMAKE_COMMAND} -E chdir ${MOD_ARCHIVE_DIR} tar "cfv" ${MOD_ARCHIVE_COMPRESSED_FILE_NAME} --format=zip ${MOD_ARCHIVE_FOLDER}
# Remove the temporary archive folder.
COMMAND ${CMAKE_COMMAND} -E remove_directory ${MOD_ARCHIVE_TEMP_DIR}
# Print compressed archive file location.
COMMAND ${CMAKE_COMMAND} -E echo Mod archive saved to ${MOD_ARCHIVE_COMPRESSED_FILE_PATH}
VERBATIM
DEPENDS
hl_cdll
hldll
)
endif()
# Installation
install(DIRECTORY mod_files/ DESTINATION .)
install(CODE "execute_process(COMMAND cmd /C \"echo Running mod setup...\")")
install(CODE "execute_process(COMMAND cmd /C \"call SETUP.bat\" WORKING_DIRECTORY \"${MOD_DIR}\")")