diff --git a/CMakeLists.txt b/CMakeLists.txt index 953373b53..44d5b4893 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,8 @@ if(FORCE_COLORED_OUTPUT) endif() endif() +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + include(GNUInstallDirs) if(FORCE_PORTABLE_INSTALL) set(CMAKE_INSTALL_BINDIR ".") diff --git a/cmake/HogMaker.cmake b/cmake/HogMaker.cmake new file mode 100644 index 000000000..945c68d07 --- /dev/null +++ b/cmake/HogMaker.cmake @@ -0,0 +1,51 @@ +# Descent 3 +# Copyright (C) 2024 Descent Developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# - Function making a HOG file based on supplied filelist. +# +# This module provides function MakeHog() used for building HOG files. +# +# MakeHog( +# +# +# [SEARCH_PATH additional_dirs] +# [DEPENDS additional_dependencies] +# ) +# + +function(MakeHog) + set(options) + set(oneValueArgs OUTPUT INPUT_FILE) + set(multiValueArgs SEARCH_PATH DEPENDS) + + cmake_parse_arguments(PARSE_ARGV 0 + "HOG" + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ) + + add_custom_command(OUTPUT "${HOG_OUTPUT}" + COMMAND $ + "${HOG_OUTPUT}" + "${HOG_INPUT_FILE}" + "${HOG_SEARCH_PATH}" + DEPENDS HogMaker ${HOG_INPUT_FILE} ${HOG_DEPENDS} + COMMENT "Generate ${HOG_OUTPUT}" + COMMAND_EXPAND_LISTS + ) +endfunction() diff --git a/netcon/descent3onlineclient/CMakeLists.txt b/netcon/descent3onlineclient/CMakeLists.txt index 2fcdd6971..b7db3edd2 100644 --- a/netcon/descent3onlineclient/CMakeLists.txt +++ b/netcon/descent3onlineclient/CMakeLists.txt @@ -26,14 +26,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set_target_properties(Descent3_Online_TCP_IP PROPERTIES SUFFIX ".dylib") endif() +include(HogMaker) +MakeHog( + OUTPUT "${PROJECT_BINARY_DIR}/Descent3/online/Descent3 Online.d3c" + INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/descent3onlineclient/d3online.d3c.txt" + SEARCH_PATH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" + DEPENDS Descent3_Online_TCP_IP +) add_custom_target(Descent3_Online_TCP_IP_Hog - COMMAND $ - "$/online/Descent3 Online.d3c" - "${CMAKE_SOURCE_DIR}/netcon/descent3onlineclient/d3online.d3c.txt" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" - "$" - - DEPENDS Descent3_Online_TCP_IP HogMaker - COMMENT "Generate 'Descent3 Online.d3c'" + DEPENDS "${PROJECT_BINARY_DIR}/Descent3/online/Descent3 Online.d3c" ) install(FILES "$/online/Descent3 Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) diff --git a/netcon/descent3onlineclient/d3online.d3c.txt b/netcon/descent3onlineclient/d3online.d3c.txt index b9480aff6..6ca42f50d 100644 --- a/netcon/descent3onlineclient/d3online.d3c.txt +++ b/netcon/descent3onlineclient/d3online.d3c.txt @@ -4,4 +4,3 @@ Descent3 Online.dll Descent3 Online.dylib d3online_main.ogf d3online_game.ogf - diff --git a/netcon/lanclient/CMakeLists.txt b/netcon/lanclient/CMakeLists.txt index f6237c666..5bb61d922 100644 --- a/netcon/lanclient/CMakeLists.txt +++ b/netcon/lanclient/CMakeLists.txt @@ -19,14 +19,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set_target_properties(Direct_TCP_IP PROPERTIES SUFFIX ".dylib") endif() +include(HogMaker) +MakeHog( + OUTPUT "${PROJECT_BINARY_DIR}/Descent3/online/Direct TCP~IP.d3c" + INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/lanclient/TCP_IP.d3c.txt" + SEARCH_PATH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" + DEPENDS Direct_TCP_IP +) add_custom_target(Direct_TCP_IP_Hog - COMMAND $ - "$/online/Direct TCP~IP.d3c" - "${CMAKE_SOURCE_DIR}/netcon/lanclient/TCP_IP.d3c.txt" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" - "$" - - DEPENDS Direct_TCP_IP HogMaker - COMMENT "Generate 'Direct TCP~IP.d3c'" + DEPENDS "${PROJECT_BINARY_DIR}/Descent3/online/Direct TCP~IP.d3c" ) install(FILES "$/online/Direct TCP~IP.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) diff --git a/netcon/mtclient/CMakeLists.txt b/netcon/mtclient/CMakeLists.txt index 5a85ad0a3..f46ca34cb 100644 --- a/netcon/mtclient/CMakeLists.txt +++ b/netcon/mtclient/CMakeLists.txt @@ -29,14 +29,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set_target_properties(Parallax_Online PROPERTIES SUFFIX ".dylib") endif() +include(HogMaker) +MakeHog( + OUTPUT "${PROJECT_BINARY_DIR}/Descent3/online/Parallax Online.d3c" + INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/mtclient/Parallax_Online.d3c.txt" + SEARCH_PATH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" + DEPENDS Parallax_Online +) add_custom_target(Parallax_Online_Hog - COMMAND $ - "$/online/Parallax Online.d3c" - "${CMAKE_SOURCE_DIR}/netcon/mtclient/Parallax_Online.d3c.txt" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" - "$" - - DEPENDS Parallax_Online HogMaker - COMMENT "Generate 'Parallax Online.d3c'" + DEPENDS "${PROJECT_BINARY_DIR}/Descent3/online/Parallax Online.d3c" ) install(FILES "$/online/Parallax Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 7c09cc35b..782ccd55f 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -67,12 +67,8 @@ set(SCRIPTS SewerRat testscript TrainingMission - Y2K) - -#add_custom_target(HogDemo-copy -# COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/scripts/data/demohog ${CMAKE_BINARY_DIR}/scripts/data/demohog/ -# COMMENT "Copy script/data/demohog directory" -#) + Y2K +) add_library(dallas STATIC DallasFuncs.cpp osiris_import.cpp osiris_vector.cpp) set_target_properties(dallas PROPERTIES PREFIX "") @@ -102,16 +98,17 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(HOG_NAME "win") endif() +include(HogMaker) +MakeHog( + OUTPUT "${PROJECT_BINARY_DIR}/Descent3/d3-${HOG_NAME}.hog" + INPUT_FILE "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/d3-${HOG_NAME}-fullhog.txt" + SEARCH_PATH "${CMAKE_CURRENT_BINARY_DIR}" + DEPENDS ${SCRIPTS} +) add_custom_target(HogFull - COMMAND $ - "$/d3-${HOG_NAME}.hog" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/d3-${HOG_NAME}-fullhog.txt" - "$" - DEPENDS ${SCRIPTS} HogMaker data/fullhog/d3-${HOG_NAME}-fullhog.txt - COMMENT "Generate fullhog/d3-${HOG_NAME}.hog" + DEPENDS "${PROJECT_BINARY_DIR}/Descent3/d3-${HOG_NAME}.hog" ) -# Place file next to Descent3 executable on installation install(FILES "$/d3-${HOG_NAME}.hog" DESTINATION ${CMAKE_INSTALL_DATADIR}) # FIXME: there may be only one d3-linux.hog, need deal with demo somehow.