add quick and dirty cmake buildsystem
This commit is contained in:
parent
99703d8129
commit
87f2b3589d
|
@ -0,0 +1,269 @@
|
|||
# ----------------------------------
|
||||
# Options affecting listfile parsing
|
||||
# ----------------------------------
|
||||
with section("parse"):
|
||||
|
||||
# Specify structure for custom cmake functions
|
||||
additional_commands = {
|
||||
'nx_generate_export_header': {
|
||||
'flags': ['DEFINE_NO_DEPRECATED'],
|
||||
'kwargs': {
|
||||
'BASE_NAME': '*',
|
||||
'CUSTOM_CONTENT_FROM_VARIABLE': '*',
|
||||
'DEFINE_SYMBOL': '*',
|
||||
'DEPRECATED_MACRO_NAME': '*',
|
||||
'EXPORT_FILE_NAME': '*',
|
||||
'EXPORT_MACRO_CNAME': '*',
|
||||
'EXPORT_MACRO_NAME': '*',
|
||||
'INCLUDE_GUARD_NAME': '*',
|
||||
'NO_DEPRECATED_MACRO_NAME': '*',
|
||||
'NO_EXPORT_MACRO_NAME': '*',
|
||||
'PREFIX_NAME': '*',
|
||||
'STATIC_DEFINE': '*'
|
||||
}
|
||||
},
|
||||
'nx_generate_version_header': {
|
||||
'flags': ['QUERY_GIT'],
|
||||
'kwargs': {
|
||||
'BASE_NAME': '*',
|
||||
'CUSTOM_CONTENT_FROM_VARIABLE': '*',
|
||||
'INCLUDE_GUARD_NAME': '*',
|
||||
'PREFIX_NAME': '*',
|
||||
'VERSION_FILE_NAME': '*',
|
||||
'VERSION_MACRO_NAME': '*'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Override configurations per-command where available
|
||||
override_spec = {}
|
||||
|
||||
# Specify variable tags.
|
||||
vartags = []
|
||||
|
||||
# Specify property tags.
|
||||
proptags = []
|
||||
|
||||
# -----------------------------
|
||||
# Options affecting formatting.
|
||||
# -----------------------------
|
||||
with section("format"):
|
||||
|
||||
# Disable formatting entirely, making cmake-format a no-op
|
||||
disable = False
|
||||
|
||||
# How wide to allow formatted cmake files
|
||||
line_width = 140
|
||||
|
||||
# How many spaces to tab for indent
|
||||
tab_size = 4
|
||||
|
||||
# If true, lines are indented using tab characters (utf-8 0x09) instead of
|
||||
# <tab_size> space characters (utf-8 0x20). In cases where the layout would
|
||||
# require a fractional tab character, the behavior of the fractional
|
||||
# indentation is governed by <fractional_tab_policy>
|
||||
use_tabchars = True
|
||||
|
||||
# If <use_tabchars> is True, then the value of this variable indicates how
|
||||
# fractional indentions are handled during whitespace replacement. If set to
|
||||
# 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set
|
||||
# to `round-up` fractional indentation is replaced with a single tab character
|
||||
# (utf-8 0x09) effectively shifting the column to the next tabstop
|
||||
fractional_tab_policy = 'round-up'
|
||||
|
||||
# If an argument group contains more than this many sub-groups (parg or kwarg
|
||||
# groups) then force it to a vertical layout.
|
||||
max_subgroups_hwrap = 2
|
||||
|
||||
# If a positional argument group contains more than this many arguments, then
|
||||
# force it to a vertical layout.
|
||||
max_pargs_hwrap = 6
|
||||
|
||||
# If a cmdline positional group consumes more than this many lines without
|
||||
# nesting, then invalidate the layout (and nest)
|
||||
max_rows_cmdline = 2
|
||||
|
||||
# If true, separate flow control names from their parentheses with a space
|
||||
separate_ctrl_name_with_space = False
|
||||
|
||||
# If true, separate function names from parentheses with a space
|
||||
separate_fn_name_with_space = False
|
||||
|
||||
# If a statement is wrapped to more than one line, than dangle the closing
|
||||
# parenthesis on its own line.
|
||||
dangle_parens = False
|
||||
|
||||
# If the trailing parenthesis must be 'dangled' on its on line, then align it
|
||||
# to this reference: `prefix`: the start of the statement, `prefix-indent`:
|
||||
# the start of the statement, plus one indentation level, `child`: align to
|
||||
# the column of the arguments
|
||||
dangle_align = 'prefix'
|
||||
|
||||
# If the statement spelling length (including space and parenthesis) is
|
||||
# smaller than this amount, then force reject nested layouts.
|
||||
min_prefix_chars = 4
|
||||
|
||||
# If the statement spelling length (including space and parenthesis) is larger
|
||||
# than the tab width by more than this amount, then force reject un-nested
|
||||
# layouts.
|
||||
max_prefix_chars = 10
|
||||
|
||||
# If a candidate layout is wrapped horizontally but it exceeds this many
|
||||
# lines, then reject the layout.
|
||||
max_lines_hwrap = 2
|
||||
|
||||
# What style line endings to use in the output.
|
||||
line_ending = 'unix'
|
||||
|
||||
# Format command names consistently as 'lower' or 'upper' case
|
||||
command_case = 'canonical'
|
||||
|
||||
# Format keywords consistently as 'lower' or 'upper' case
|
||||
keyword_case = 'unchanged'
|
||||
|
||||
# A list of command names which should always be wrapped
|
||||
always_wrap = []
|
||||
|
||||
# If true, the argument lists which are known to be sortable will be sorted
|
||||
# lexicographicall
|
||||
enable_sort = True
|
||||
|
||||
# If true, the parsers may infer whether or not an argument list is sortable
|
||||
# (without annotation).
|
||||
autosort = False
|
||||
|
||||
# By default, if cmake-format cannot successfully fit everything into the
|
||||
# desired linewidth it will apply the last, most agressive attempt that it
|
||||
# made. If this flag is True, however, cmake-format will print error, exit
|
||||
# with non-zero status code, and write-out nothing
|
||||
require_valid_layout = False
|
||||
|
||||
# A dictionary mapping layout nodes to a list of wrap decisions. See the
|
||||
# documentation for more information.
|
||||
layout_passes = {}
|
||||
|
||||
# ------------------------------------------------
|
||||
# Options affecting comment reflow and formatting.
|
||||
# ------------------------------------------------
|
||||
with section("markup"):
|
||||
|
||||
# What character to use for bulleted lists
|
||||
bullet_char = '*'
|
||||
|
||||
# What character to use as punctuation after numerals in an enumerated list
|
||||
enum_char = '.'
|
||||
|
||||
# If comment markup is enabled, don't reflow the first comment block in each
|
||||
# listfile. Use this to preserve formatting of your copyright/license
|
||||
# statements.
|
||||
first_comment_is_literal = True
|
||||
|
||||
# If comment markup is enabled, don't reflow any comment block which matches
|
||||
# this (regex) pattern. Default is `None` (disabled).
|
||||
literal_comment_pattern = None
|
||||
|
||||
# Regular expression to match preformat fences in comments default=
|
||||
# ``r'^\s*([`~]{3}[`~]*)(.*)$'``
|
||||
fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
|
||||
|
||||
# Regular expression to match rulers in comments default=
|
||||
# ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
|
||||
ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
|
||||
|
||||
# If a comment line matches starts with this pattern then it is explicitly a
|
||||
# trailing comment for the preceeding argument. Default is '#<'
|
||||
explicit_trailing_pattern = '#<'
|
||||
|
||||
# If a comment line starts with at least this many consecutive hash
|
||||
# characters, then don't lstrip() them off. This allows for lazy hash rulers
|
||||
# where the first hash char is not separated by space
|
||||
hashruler_min_length = 10
|
||||
|
||||
# If true, then insert a space between the first hash char and remaining hash
|
||||
# chars in a hash ruler, and normalize its length to fill the column
|
||||
canonicalize_hashrulers = True
|
||||
|
||||
# enable comment markup parsing and reflow
|
||||
enable_markup = True
|
||||
|
||||
# ----------------------------
|
||||
# Options affecting the linter
|
||||
# ----------------------------
|
||||
with section("lint"):
|
||||
|
||||
# a list of lint codes to disable
|
||||
disabled_codes = []
|
||||
|
||||
# regular expression pattern describing valid function names
|
||||
function_pattern = '[0-9a-z_]+'
|
||||
|
||||
# regular expression pattern describing valid macro names
|
||||
macro_pattern = '[0-9A-Z_]+'
|
||||
|
||||
# regular expression pattern describing valid names for variables with global
|
||||
# (cache) scope
|
||||
global_var_pattern = '[A-Z][0-9A-Z_]+'
|
||||
|
||||
# regular expression pattern describing valid names for variables with global
|
||||
# scope (but internal semantic)
|
||||
internal_var_pattern = '_[A-Z][0-9A-Z_]+'
|
||||
|
||||
# regular expression pattern describing valid names for variables with local
|
||||
# scope
|
||||
local_var_pattern = '[a-z][a-z0-9_]+'
|
||||
|
||||
# regular expression pattern describing valid names for privatedirectory
|
||||
# variables
|
||||
private_var_pattern = '_[0-9a-z_]+'
|
||||
|
||||
# regular expression pattern describing valid names for public directory
|
||||
# variables
|
||||
public_var_pattern = '[A-Z][0-9A-Z_]+'
|
||||
|
||||
# regular expression pattern describing valid names for function/macro
|
||||
# arguments and loop variables.
|
||||
argument_var_pattern = '[a-z][a-z0-9_]+'
|
||||
|
||||
# regular expression pattern describing valid names for keywords used in
|
||||
# functions or macros
|
||||
keyword_pattern = '[A-Z][0-9A-Z_]+'
|
||||
|
||||
# In the heuristic for C0201, how many conditionals to match within a loop in
|
||||
# before considering the loop a parser.
|
||||
max_conditionals_custom_parser = 2
|
||||
|
||||
# Require at least this many newlines between statements
|
||||
min_statement_spacing = 1
|
||||
|
||||
# Require no more than this many newlines between statements
|
||||
max_statement_spacing = 2
|
||||
max_returns = 6
|
||||
max_branches = 12
|
||||
max_arguments = 5
|
||||
max_localvars = 15
|
||||
max_statements = 50
|
||||
|
||||
# -------------------------------
|
||||
# Options affecting file encoding
|
||||
# -------------------------------
|
||||
with section("encode"):
|
||||
|
||||
# If true, emit the unicode byte-order mark (BOM) at the start of the file
|
||||
emit_byteorder_mark = False
|
||||
|
||||
# Specify the encoding of the input file. Defaults to utf-8
|
||||
input_encoding = 'utf-8'
|
||||
|
||||
# Specify the encoding of the output file. Defaults to utf-8. Note that cmake
|
||||
# only claims to support utf-8 so be careful when using anything else
|
||||
output_encoding = 'utf-8'
|
||||
|
||||
# -------------------------------------
|
||||
# Miscellaneous configurations options.
|
||||
# -------------------------------------
|
||||
with section("misc"):
|
||||
|
||||
# A dictionary containing any per-command configuration overrides. Currently
|
||||
# only `command_case` is supported.
|
||||
per_command = {}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
.vs/*
|
||||
build*/*
|
||||
*.kate-swp
|
|
@ -0,0 +1,367 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
project(
|
||||
KyuII
|
||||
VERSION 3.21
|
||||
LANGUAGES C)
|
||||
|
||||
# Policies
|
||||
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.14")
|
||||
cmake_policy(SET CMP0087 NEW)
|
||||
endif()
|
||||
|
||||
# CMake Includes
|
||||
|
||||
include(CMakeDependentOption)
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "")
|
||||
|
||||
# Project Includes
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools")
|
||||
include(NXGenerateExportHeader)
|
||||
include(NXGenerateVersionHeader)
|
||||
include(NXGetRuntimeDependencies)
|
||||
|
||||
# Platform-Specifics
|
||||
|
||||
option(KYUII_BUILD_UNIMPLEMENTED "Build Unimplemented Components" OFF)
|
||||
|
||||
set(KYUII_PLATFORM_CD OFF)
|
||||
set(KYUII_PLATFORM_COMMON OFF)
|
||||
set(KYUII_PLATFORM_IN OFF)
|
||||
set(KYUII_PLATFORM_NET OFF)
|
||||
set(KYUII_PLATFORM_SND OFF)
|
||||
set(KYUII_PLATFORM_SYS OFF)
|
||||
set(KYUII_PLATFORM_SYS_DYN OFF)
|
||||
set(KYUII_PLATFORM_VID OFF)
|
||||
set(KYUII_PLATFORM_VID_DYN OFF)
|
||||
|
||||
if(WIN32)
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/conproc.c" "${CMAKE_CURRENT_SOURCE_DIR}/win32/q2.rc")
|
||||
list(APPEND KYUII_ENGINE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/win32/conproc.h" "${CMAKE_CURRENT_SOURCE_DIR}/win32/resource.h")
|
||||
|
||||
set(KYUII_PLATFORM_CD ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/cd_win.c")
|
||||
|
||||
set(KYUII_PLATFORM_COMMON ON)
|
||||
list(APPEND KYUII_COMMON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/q_shwin.c")
|
||||
list(APPEND KYUII_COMMON_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/win32/winquake.h")
|
||||
list(APPEND KYUII_COMMON_LIBS "Winmm")
|
||||
|
||||
set(KYUII_PLATFORM_IN ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/in_win.c")
|
||||
|
||||
set(KYUII_PLATFORM_NET ON)
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/net_wins.c")
|
||||
list(APPEND KYUII_ENGINE_LIBS "Ws2_32")
|
||||
|
||||
set(KYUII_PLATFORM_SND ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/snd_win.c")
|
||||
|
||||
set(KYUII_PLATFORM_SYS ON)
|
||||
set(KYUII_PLATFORM_SYS_DYN ON)
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/sys_win.c")
|
||||
|
||||
set(KYUII_PLATFORM_VID ON)
|
||||
set(KYUII_PLATFORM_VID_DYN ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/vid_dll.c" "${CMAKE_CURRENT_SOURCE_DIR}/win32/vid_menu.c")
|
||||
elseif(UNIX)
|
||||
set(KYUII_PLATFORM_CD ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/cd_linux.c")
|
||||
|
||||
set(KYUII_PLATFORM_COMMON ON)
|
||||
list(APPEND KYUII_COMMON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/glob.c" "${CMAKE_CURRENT_SOURCE_DIR}/linux/q_shlinux.c")
|
||||
list(APPEND KYUII_COMMON_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/linux/glob.h")
|
||||
|
||||
set(KYUII_PLATFORM_IN ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/in_linux.c")
|
||||
|
||||
set(KYUII_PLATFORM_NET ON)
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/net_udp.c")
|
||||
|
||||
set(KYUII_PLATFORM_SND ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/snd_linux.c")
|
||||
|
||||
set(KYUII_PLATFORM_SYS ON)
|
||||
set(KYUII_PLATFORM_SYS_DYN ON)
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/sys_linux.c")
|
||||
|
||||
set(KYUII_PLATFORM_VID ON)
|
||||
set(KYUII_PLATFORM_VID_DYN ON)
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/vid_menu.c" "${CMAKE_CURRENT_SOURCE_DIR}/linux/vid_so.c")
|
||||
else()
|
||||
set(KYUII_PLATFORM_CD ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/cd_null.c")
|
||||
|
||||
set(KYUII_PLATFORM_COMMON ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_COMMON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/q_shnull.c")
|
||||
|
||||
set(KYUII_PLATFORM_IN ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/in_null.c")
|
||||
|
||||
set(KYUII_PLATFORM_NET ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/net_null.c")
|
||||
|
||||
set(KYUII_PLATFORM_SND ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/snddma_null.c")
|
||||
|
||||
set(KYUII_PLATFORM_SYS ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/sys_null.c")
|
||||
|
||||
set(KYUII_PLATFORM_VID ${KYUII_BUILD_UNIMPLEMENTED})
|
||||
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/vid_null.c")
|
||||
endif()
|
||||
|
||||
# Shared Functions - Engine, Game, Refresh
|
||||
|
||||
nx_generate_version_header(${PROJECT_NAME} QUERY_GIT)
|
||||
|
||||
list(APPEND KYUII_SHARED_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/game/q_shared.c")
|
||||
list(APPEND KYUII_SHARED_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/game/q_shared.h" "${CMAKE_CURRENT_BINARY_DIR}/kyuii_version.h")
|
||||
|
||||
add_library(Shared INTERFACE)
|
||||
target_compile_definitions(Shared INTERFACE C_ONLY)
|
||||
target_include_directories(Shared INTERFACE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
if(UNIX)
|
||||
target_compile_definitions(Shared INTERFACE stricmp=strcasecmp)
|
||||
target_link_libraries(Shared INTERFACE m)
|
||||
endif()
|
||||
target_sources(Shared INTERFACE ${KYUII_SHARED_SOURCE})
|
||||
add_library(KyuII::Shared ALIAS Shared)
|
||||
|
||||
# Common Functions - Engine, Refresh
|
||||
|
||||
add_library(Common INTERFACE)
|
||||
target_link_libraries(Common INTERFACE KyuII::Shared ${KYUII_COMMON_LIBS})
|
||||
target_sources(Common INTERFACE ${KYUII_COMMON_SOURCE})
|
||||
add_library(KyuII::Common ALIAS Common)
|
||||
|
||||
# Game API - Engine, Game
|
||||
|
||||
set(gameapi_VERSION 3.21)
|
||||
nx_generate_version_header(gameapi)
|
||||
nx_generate_export_header(gameapi STATIC_DEFINE GAME_HARD_LINKED)
|
||||
|
||||
list(APPEND KYUII_GAMEAPI_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/game/m_flash.c")
|
||||
list(APPEND KYUII_GAMEAPI_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/game/game.h" "${CMAKE_CURRENT_BINARY_DIR}/gameapi_export.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/gameapi_version.h")
|
||||
|
||||
add_library(GameAPI INTERFACE)
|
||||
target_link_libraries(GameAPI INTERFACE KyuII::Shared)
|
||||
target_sources(GameAPI INTERFACE ${KYUII_GAMEAPI_SOURCE})
|
||||
add_library(KyuII::GameAPI ALIAS GameAPI)
|
||||
|
||||
# Refresh API - Engine, Refresh
|
||||
|
||||
set(refapi_VERSION 3.21)
|
||||
nx_generate_version_header(refapi)
|
||||
nx_generate_export_header(refapi STATIC_DEFINE REF_HARD_LINKED)
|
||||
|
||||
list(APPEND KYUII_REFAPI_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/client/ref.h" "${CMAKE_CURRENT_BINARY_DIR}/refapi_export.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/refapi_version.h")
|
||||
|
||||
add_library(RefAPI INTERFACE)
|
||||
target_link_libraries(RefAPI INTERFACE KyuII::Common)
|
||||
target_sources(RefAPI INTERFACE ${KYUII_REFAPI_SOURCE})
|
||||
add_library(KyuII::RefAPI ALIAS RefAPI)
|
||||
|
||||
# Game Libraries
|
||||
|
||||
cmake_dependent_option(KYUII_USE_DYNAMIC_GAME "Use Dynamic Game Modules" ON "KYUII_PLATFORM_SYS_DYN" OFF)
|
||||
set(KYUII_DEFAULT_GAME ON)
|
||||
|
||||
cmake_dependent_option(KYUII_BUILD_GAMEQ2 "Build Quake II Game Module" ON "KYUII_DEFAULT_GAME" OFF)
|
||||
if(KYUII_BUILD_GAMEQ2 AND NOT KYUII_USE_DYNAMIC_GAME)
|
||||
set(KYUII_DEFAULT_GAME OFF)
|
||||
endif()
|
||||
|
||||
cmake_dependent_option(KYUII_BUILD_GAMECTF "Build CTF Game Module" ON "KYUII_DEFAULT_GAME" OFF)
|
||||
if(KYUII_BUILD_GAMECTF AND NOT KYUII_USE_DYNAMIC_GAME)
|
||||
set(KYUII_DEFAULT_GAME OFF)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_GAMEQ2)
|
||||
add_subdirectory(game)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_GAMECTF)
|
||||
add_subdirectory(ctf)
|
||||
endif()
|
||||
|
||||
# Refresh Libraries
|
||||
|
||||
find_package(OpenGL)
|
||||
|
||||
cmake_dependent_option(KYUII_USE_DYNAMIC_REFRESH "Use Dynamic Refresh Modules" ON "KYUII_PLATFORM_VID_DYN" OFF)
|
||||
set(KYUII_DEFAULT_REFRESH ON)
|
||||
|
||||
cmake_dependent_option(KYUII_BUILD_REFGL "Build OpenGL Refresh Module" ${OPENGL_FOUND} "KYUII_DEFAULT_REFRESH" OFF)
|
||||
if(KYUII_BUILD_REFGL AND NOT KYUII_USE_DYNAMIC_REFRESH)
|
||||
set(KYUII_DEFAULT_REFRESH OFF)
|
||||
endif()
|
||||
|
||||
cmake_dependent_option(KYUII_BUILD_REFSOFT "Build Software Refresh Module" ON "KYUII_DEFAULT_REFRESH" OFF)
|
||||
if(KYUII_BUILD_REFSOFT AND NOT KYUII_USE_DYNAMIC_REFRESH)
|
||||
set(KYUII_DEFAULT_REFRESH OFF)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_REFGL)
|
||||
add_subdirectory(ref_gl)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_REFSOFT)
|
||||
add_subdirectory(ref_soft)
|
||||
endif()
|
||||
|
||||
# Common Engine
|
||||
|
||||
set(KYUII_DEDICATED_ONLY OFF)
|
||||
set(KYUII_NETCLIENT_ONLY OFF)
|
||||
|
||||
if(NOT KYUII_PLATFORM_VID_DYN AND NOT TARGET KyuII::RefHL)
|
||||
set(KYUII_DEDICATED_ONLY ON)
|
||||
endif()
|
||||
|
||||
if(NOT KYUII_PLATFORM_SYS_DYN AND NOT TARGET KyuII::GameHL)
|
||||
set(KYUII_NETCLIENT_ONLY ON)
|
||||
endif()
|
||||
|
||||
cmake_dependent_option(KYUII_BUILD_KYUNET "Build Dedicated Client" ${KYUII_NETCLIENT_ONLY}
|
||||
"NOT KYUII_DEDICATED_ONLY;KYUII_PLATFORM_SYS;KYUII_PLATFORM_COMMON;KYUII_PLATFORM_NET;KYUII_PLATFORM_IN" OFF)
|
||||
cmake_dependent_option(KYUII_BUILD_KYUNODE "Build Dedicated Server" ON
|
||||
"NOT KYUII_NETCLIENT_ONLY;KYUII_PLATFORM_SYS;KYUII_PLATFORM_COMMON;KYUII_PLATFORM_NET" OFF)
|
||||
cmake_dependent_option(KYUII_BUILD_KYUII "Build Full Engine" ON
|
||||
"NOT KYUII_DEDICATED_ONLY;NOT KYUII_NETCLIENT_ONLY;KYUII_PLATFORM_SYS;KYUII_PLATFORM_COMMON;KYUII_PLATFORM_IN" OFF)
|
||||
|
||||
list(
|
||||
APPEND
|
||||
KYUII_ENGINE_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/cmd.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/cmodel.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/common.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/crc.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/cvar.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/files.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/md4.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/net_chan.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/pmove.c")
|
||||
list(APPEND KYUII_ENGINE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/qcommon/crc.h" "${CMAKE_CURRENT_SOURCE_DIR}/qcommon/qcommon.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/qfiles.h")
|
||||
|
||||
list(
|
||||
APPEND
|
||||
KYUII_SERVER_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_ccmds.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_ents.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_game.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_init.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_main.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_send.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_user.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_world.c")
|
||||
list(APPEND KYUII_SERVER_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/server/server.h")
|
||||
list(APPEND KYUII_SERVER_NULL "${CMAKE_CURRENT_SOURCE_DIR}/server/sv_null.c")
|
||||
|
||||
list(
|
||||
APPEND
|
||||
KYUII_CLIENT_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_cin.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_ents.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_fx.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_input.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_inv.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_main.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_newfx.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_parse.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_pred.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_scrn.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_tent.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_view.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/console.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/keys.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/menu.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/qmenu.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_dma.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_mem.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_mix.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/x86.c")
|
||||
list(
|
||||
APPEND
|
||||
KYUII_CLIENT_HEADER
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/adivtab.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/anorms.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/asm_i386.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/block16.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/block8.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/cdaudio.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/client.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/console.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/input.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/keys.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/qmenu.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/screen.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_loc.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/sound.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/client/vid.h")
|
||||
list(APPEND KYUII_CLIENT_NULL "${CMAKE_CURRENT_SOURCE_DIR}/null/cd_null.c" "${CMAKE_CURRENT_SOURCE_DIR}/null/cl_null.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/null/in_null.c" "${CMAKE_CURRENT_SOURCE_DIR}/null/snddma_null.c")
|
||||
|
||||
if(KYUII_USE_DYNAMIC_GAME OR KYUII_USE_DYNAMIC_REFRESH)
|
||||
list(APPEND KYUII_ENGINE_LIBS ${CMAKE_DL_LIBS})
|
||||
endif()
|
||||
|
||||
if(KYUII_USE_DYNAMIC_GAME)
|
||||
list(APPEND KYUII_SERVER_LIBS KyuII::GameAPI)
|
||||
else()
|
||||
list(APPEND KYUII_SERVER_LIBS KyuII::GameHL)
|
||||
endif()
|
||||
|
||||
if(KYUII_USE_DYNAMIC_REFRESH)
|
||||
list(APPEND KYUII_CLIENT_LIBS KyuII::RefAPI)
|
||||
else()
|
||||
list(APPEND KYUII_CLIENT_LIBS KyuII::RefHL)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_KYUII)
|
||||
add_executable(KyuII WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_CLIENT_SOURCE} ${KYUII_SERVER_SOURCE})
|
||||
target_link_libraries(KyuII PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_CLIENT_LIBS} ${KYUII_SERVER_LIBS})
|
||||
install(TARGETS KyuII RUNTIME DESTINATION kyuii)
|
||||
nx_add_runtime_executable(KyuII)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_KYUNODE)
|
||||
add_executable(KyuNode WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_CLIENT_NULL} ${KYUII_SERVER_SOURCE})
|
||||
target_compile_definitions(KyuNode PRIVATE DEDICATED_ONLY)
|
||||
target_link_libraries(KyuNode PRIVATE ${KYUII_ENGINE_LIBS} KyuII::Common ${KYUII_SERVER_LIBS})
|
||||
install(TARGETS KyuNode RUNTIME DESTINATION kyuii)
|
||||
nx_add_runtime_executable(KyuNode)
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_KYUNET)
|
||||
add_executable(KyuNet WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_CLIENT_SOURCE} ${KYUII_SERVER_NULL})
|
||||
target_compile_definitions(KyuNet PRIVATE NETCLIENT_ONLY)
|
||||
target_link_libraries(KyuNet PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_CLIENT_LIBS} KyuII::GameAPI)
|
||||
install(TARGETS KyuNet RUNTIME DESTINATION kyuii)
|
||||
nx_add_runtime_executable(KyuNet)
|
||||
endif()
|
||||
|
||||
nx_get_runtime_dependencies()
|
||||
nx_scope_project()
|
|
@ -0,0 +1,103 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
project(
|
||||
KyuII-GameCTF
|
||||
VERSION 3.21
|
||||
LANGUAGES C)
|
||||
|
||||
if(NOT TARGET KyuII::Shared)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No Shared Functions Found")
|
||||
endif()
|
||||
if(NOT TARGET KyuII::GameAPI)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No GameAPI Functions Found")
|
||||
endif()
|
||||
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "")
|
||||
|
||||
if(NOT DEFINED KYUII_BUILD_GAMECTF)
|
||||
option(KYUII_BUILD_GAMECTF "Build CTF Game Module" ON)
|
||||
endif()
|
||||
if(NOT DEFINED KYUII_USE_DYNAMIC_GAME)
|
||||
option(KYUII_USE_DYNAMIC_GAME "Use Dynamic Game Modules" ON)
|
||||
endif()
|
||||
|
||||
set(KYUII_GAMECTF_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_ai.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_chase.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_cmds.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_combat.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_ctf.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_func.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_items.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_main.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_misc.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_monster.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_phys.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_save.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_spawn.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_svcmds.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_target.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_trigger.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_utils.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_weapon.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_move.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_client.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_hud.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_menu.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_trail.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_view.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_weapon.c")
|
||||
set(KYUII_GAMECTF_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/g_ctf.h" "${CMAKE_CURRENT_SOURCE_DIR}/g_local.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_player.h" "${CMAKE_CURRENT_SOURCE_DIR}/p_menu.h")
|
||||
|
||||
if(NOT DEFINED KYUII_GAME_MODULE_NAME)
|
||||
if(WIN32)
|
||||
set(KYUII_GAME_MODULE_NAME "gamex86")
|
||||
elseif(UNIX)
|
||||
set(KYUII_GAME_MODULE_NAME "gamei386")
|
||||
else()
|
||||
set(KYUII_GAME_MODULE_NAME "game")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_GAMECTF)
|
||||
if(KYUII_USE_DYNAMIC_GAME)
|
||||
add_library(GameCTF MODULE ${KYUII_GAMECTF_SOURCE})
|
||||
set_target_properties(GameCTF PROPERTIES DEFINE_SYMBOL GAMEAPI_EXPORTS OUTPUT_NAME ${KYUII_GAME_MODULE_NAME})
|
||||
target_compile_definitions(GameCTF PRIVATE GAMEVERSION="${PROJECT_NAME}-${PROJECT_VERSION}")
|
||||
target_link_libraries(GameCTF PRIVATE KyuII::GameAPI)
|
||||
install(
|
||||
TARGETS GameCTF
|
||||
RUNTIME DESTINATION kyuii/ctf
|
||||
LIBRARY DESTINATION kyuii/ctf)
|
||||
nx_add_runtime_library(GameCTF)
|
||||
endif()
|
||||
|
||||
add_library(GameCTF_HL INTERFACE)
|
||||
target_compile_definitions(GameCTF_HL INTERFACE GAME_HARD_LINKED GAMEVERSION="${PROJECT_NAME}-${PROJECT_VERSION}")
|
||||
target_link_libraries(GameCTF_HL INTERFACE KyuII::GameAPI)
|
||||
target_sources(GameCTF_HL INTERFACE ${KYUII_GAMECTF_SOURCE})
|
||||
|
||||
if(NOT TARGET KyuII::GameHL)
|
||||
add_library(KyuII::GameHL ALIAS GameCTF_HL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
nx_scope_project()
|
|
@ -0,0 +1,151 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
project(
|
||||
KyuII-GameQ2
|
||||
VERSION 3.21
|
||||
LANGUAGES C)
|
||||
|
||||
if(NOT TARGET KyuII::Shared)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No Shared Functions Found")
|
||||
endif()
|
||||
if(NOT TARGET KyuII::GameAPI)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No GameAPI Functions Found")
|
||||
endif()
|
||||
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "")
|
||||
|
||||
if(NOT DEFINED KYUII_BUILD_GAMEQ2)
|
||||
option(KYUII_BUILD_GAMEQ2 "Build Quake II Game Module" ON)
|
||||
endif()
|
||||
if(NOT DEFINED KYUII_USE_DYNAMIC_GAME)
|
||||
option(KYUII_USE_DYNAMIC_GAME "Use Dynamic Game Modules" ON)
|
||||
endif()
|
||||
|
||||
set(KYUII_GAMEQ2_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_ai.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_chase.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_cmds.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_combat.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_func.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_items.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_main.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_misc.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_monster.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_phys.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_save.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_spawn.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_svcmds.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_target.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_trigger.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_turret.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_utils.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_weapon.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_actor.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_berserk.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss2.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss3.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss31.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss32.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_brain.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_chick.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_flipper.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_float.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_flyer.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_gladiator.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_gunner.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_hover.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_infantry.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_insane.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_medic.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_move.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_mutant.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_parasite.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_soldier.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_supertank.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_tank.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_client.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_hud.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_trail.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_view.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/p_weapon.c")
|
||||
set(KYUII_GAMEQ2_HEADER
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/g_local.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_actor.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_berserk.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss2.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss31.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_boss32.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_brain.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_chick.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_flipper.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_float.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_flyer.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_gladiator.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_gunner.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_hover.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_infantry.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_insane.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_medic.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_mutant.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_parasite.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_player.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_rider.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_soldier.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_supertank.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/m_tank.h")
|
||||
|
||||
if(NOT DEFINED KYUII_GAME_MODULE_NAME)
|
||||
if(WIN32)
|
||||
set(KYUII_GAME_MODULE_NAME "gamex86")
|
||||
elseif(UNIX)
|
||||
set(KYUII_GAME_MODULE_NAME "gamei386")
|
||||
else()
|
||||
set(KYUII_GAME_MODULE_NAME "game")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_GAMEQ2)
|
||||
if(KYUII_USE_DYNAMIC_GAME)
|
||||
add_library(GameQ2 MODULE ${KYUII_GAMEQ2_SOURCE})
|
||||
set_target_properties(
|
||||
GameQ2
|
||||
PROPERTIES DEFINE_SYMBOL GAMEAPI_EXPORTS
|
||||
OUTPUT_NAME ${KYUII_GAME_MODULE_NAME}
|
||||
VERSION ${PROJECT_VERSION})
|
||||
target_compile_definitions(GameQ2 PRIVATE GAMEVERSION="${PROJECT_NAME}-${PROJECT_VERSION}")
|
||||
target_link_libraries(GameQ2 PRIVATE KyuII::GameAPI)
|
||||
install(
|
||||
TARGETS GameQ2
|
||||
RUNTIME DESTINATION kyuii/baseq2
|
||||
LIBRARY DESTINATION kyuii/baseq2)
|
||||
nx_add_runtime_library(GameQ2)
|
||||
endif()
|
||||
|
||||
add_library(GameQ2_HL INTERFACE)
|
||||
target_compile_definitions(GameQ2_HL INTERFACE GAME_HARD_LINKED GAMEVERSION="${PROJECT_NAME}-${PROJECT_VERSION}")
|
||||
target_link_libraries(GameQ2_HL INTERFACE KyuII::GameAPI)
|
||||
target_sources(GameQ2_HL INTERFACE ${KYUII_GAMEQ2_SOURCE})
|
||||
|
||||
if(NOT TARGET KyuII::GameHL)
|
||||
add_library(KyuII::GameHL ALIAS GameQ2_HL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
nx_scope_project()
|
|
@ -0,0 +1,91 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
project(
|
||||
KyuII-RefGL
|
||||
VERSION 3.21
|
||||
LANGUAGES C)
|
||||
|
||||
if(NOT TARGET KyuII::Shared)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No Shared Functions Found")
|
||||
endif()
|
||||
if(NOT TARGET KyuII::RefAPI)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No RefAPI Functions Found")
|
||||
endif()
|
||||
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "")
|
||||
|
||||
if(NOT DEFINED KYUII_BUILD_REFGL)
|
||||
option(KYUII_BUILD_REFGL "Build OpenGL Refresh Module" ON)
|
||||
endif()
|
||||
if(NOT DEFINED KYUII_USE_DYNAMIC_REFRESH)
|
||||
option(KYUII_USE_DYNAMIC_REFRESH "Use Dynamic Refresh Modules" ON)
|
||||
endif()
|
||||
|
||||
set(KYUII_REFGL_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_draw.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_image.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_light.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_mesh.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_model.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_rmain.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_rmisc.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_rsurf.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_warp.c")
|
||||
set(KYUII_REFGL_HEADER
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/anorms.h" "${CMAKE_CURRENT_SOURCE_DIR}/anormtab.h" "${CMAKE_CURRENT_SOURCE_DIR}/gl_local.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/gl_model.h" "${CMAKE_CURRENT_SOURCE_DIR}/qgl.h" "${CMAKE_CURRENT_SOURCE_DIR}/warpsin.h")
|
||||
|
||||
if(WIN32)
|
||||
list(APPEND KYUII_REFGL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../win32/glw_imp.c" "${CMAKE_CURRENT_SOURCE_DIR}/../win32/qgl_win.c")
|
||||
list(APPEND KYUII_REFGL_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/../win32/glw_win.h")
|
||||
elseif(UNIX)
|
||||
list(APPEND KYUII_REFGL_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../linux/gl_glx.c" "${CMAKE_CURRENT_SOURCE_DIR}/../linux/qgl_linux.c")
|
||||
list(APPEND KYUII_REFGL_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/../linux/glw_linux.h")
|
||||
list(APPEND KYUII_REFGL_LIBS Xxf86vm Xxf86dga Xext X11)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED KYUII_REFGL_MODULE_NAME)
|
||||
if(UNIX AND NOT WIN32)
|
||||
set(KYUII_REFGL_MODULE_NAME "ref_glx")
|
||||
else()
|
||||
set(KYUII_REFGL_MODULE_NAME "ref_gl")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_REFGL)
|
||||
if(KYUII_USE_DYNAMIC_REFRESH)
|
||||
add_library(RefGL MODULE ${KYUII_REFGL_SOURCE})
|
||||
set_target_properties(RefGL PROPERTIES DEFINE_SYMBOL REFAPI_EXPORTS OUTPUT_NAME ${KYUII_REFGL_MODULE_NAME})
|
||||
target_link_libraries(RefGL PRIVATE KyuII::RefAPI ${KYUII_REFGL_LIBS} ${CMAKE_DL_LIBS})
|
||||
install(
|
||||
TARGETS RefGL
|
||||
RUNTIME DESTINATION kyuii
|
||||
LIBRARY DESTINATION kyuii)
|
||||
nx_add_runtime_library(RefGL)
|
||||
elseif(NOT TARGET KyuII::RefHL)
|
||||
add_library(RefHL INTERFACE)
|
||||
target_compile_definitions(RefHL INTERFACE REF_HARD_LINKED)
|
||||
target_link_libraries(RefHL INTERFACE KyuII::RefAPI ${KYUII_REFGL_LIBS} ${CMAKE_DL_LIBS})
|
||||
target_sources(RefHL INTERFACE ${KYUII_REFGL_SOURCE})
|
||||
add_library(KyuII::RefHL ALIAS RefHL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
nx_scope_project()
|
|
@ -0,0 +1,105 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
project(
|
||||
KyuII-RefSoft
|
||||
VERSION 3.21
|
||||
LANGUAGES C)
|
||||
|
||||
if(NOT TARGET KyuII::Shared)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No Shared Functions Found")
|
||||
endif()
|
||||
if(NOT TARGET KyuII::RefAPI)
|
||||
message(FATAL_ERROR "${PROJECT_NAME}: No RefAPI Functions Found")
|
||||
endif()
|
||||
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "")
|
||||
|
||||
if(NOT DEFINED KYUII_BUILD_REFSOFT)
|
||||
option(KYUII_BUILD_REFSOFT "Build Software Refresh Module" ON)
|
||||
endif()
|
||||
if(NOT DEFINED KYUII_USE_DYNAMIC_REFRESH)
|
||||
option(KYUII_USE_DYNAMIC_REFRESH "Use Dynamic Refresh Modules" ON)
|
||||
endif()
|
||||
|
||||
set(KYUII_REFSOFT_SOURCE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_aclip.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_alias.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_bsp.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_draw.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_edge.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_image.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_light.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_main.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_misc.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_model.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_part.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_poly.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_polyse.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_rast.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_scan.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_sprite.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_surf.c")
|
||||
set(KYUII_REFSOFT_HEADER
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/adivtab.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/anorms.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/asm_draw.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/d_ifacea.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_local.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/r_model.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/rand1k.h")
|
||||
|
||||
if(WIN32)
|
||||
list(APPEND KYUII_REFSOFT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../win32/rw_ddraw.c" "${CMAKE_CURRENT_SOURCE_DIR}/../win32/rw_dib.c"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../win32/rw_imp.c")
|
||||
list(APPEND KYUII_REFSOFT_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/../win32/rw_win.h")
|
||||
elseif(UNIX)
|
||||
list(APPEND KYUII_REFSOFT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../linux/rw_x11.c")
|
||||
list(APPEND KYUII_REFSOFT_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/../linux/rw_linux.h")
|
||||
list(APPEND KYUII_REFSOFT_LIBS Xxf86dga Xext X11)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED KYUII_REFSOFT_MODULE_NAME)
|
||||
if(UNIX AND NOT WIN32)
|
||||
set(KYUII_REFSOFT_MODULE_NAME "ref_softx")
|
||||
else()
|
||||
set(KYUII_REFSOFT_MODULE_NAME "ref_soft")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(KYUII_BUILD_REFSOFT)
|
||||
if(KYUII_USE_DYNAMIC_REFRESH)
|
||||
add_library(RefSoft MODULE ${KYUII_REFSOFT_SOURCE})
|
||||
set_target_properties(RefSoft PROPERTIES DEFINE_SYMBOL REFAPI_EXPORTS OUTPUT_NAME ${KYUII_REFSOFT_MODULE_NAME})
|
||||
target_link_libraries(RefSoft PRIVATE KyuII::RefAPI ${KYUII_REFSOFT_LIBS})
|
||||
install(
|
||||
TARGETS RefSoft
|
||||
RUNTIME DESTINATION kyuii
|
||||
LIBRARY DESTINATION kyuii)
|
||||
nx_add_runtime_library(RefSoft)
|
||||
elseif(NOT TARGET KyuII::RefHL)
|
||||
add_library(RefHL INTERFACE)
|
||||
target_compile_definitions(RefHL INTERFACE REF_HARD_LINKED)
|
||||
target_link_libraries(RefHL INTERFACE KyuII::RefAPI ${KYUII_REFSOFT_LIBS})
|
||||
target_sources(RefHL INTERFACE ${KYUII_REFSOFT_SOURCE})
|
||||
add_library(KyuII::RefHL ALIAS RefHL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
nx_scope_project()
|
|
@ -0,0 +1,154 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
# Copyright © 2020 Andrew Hardin
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the “Software”), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
# -------------------------------
|
||||
# Adapted from Andrew Hardin's cmake-git-version-tracking script. https://github.com/andrew-hardin/cmake-git-version-tracking
|
||||
# -------------------------------
|
||||
|
||||
if(NOT DEFINED GIT_EXECUTABLE)
|
||||
find_program(GIT_EXECUTABLE NAMES git)
|
||||
endif()
|
||||
|
||||
set(NX_GITWATCH_FILE "${CMAKE_CURRENT_LIST_FILE}")
|
||||
set(NX_GITWATCH_VARS "GIT_RETRIEVED_STATE" "GIT_BRANCH_NAME" "GIT_COMMIT_HASH" "GIT_IS_DIRTY" "GIT_COMMIT_DATE" "GIT_COMMIT_TIME")
|
||||
|
||||
macro(_nx_git_command)
|
||||
set(nGitResult 255)
|
||||
set(sGitOutput "")
|
||||
|
||||
if(GIT_EXECUTABLE)
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" ${ARGV}
|
||||
WORKING_DIRECTORY "${sWorkingDirectory}"
|
||||
RESULT_VARIABLE nGitResult
|
||||
OUTPUT_VARIABLE sGitOutput
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif()
|
||||
|
||||
if(NOT nGitResult EQUAL 0)
|
||||
set(ENV{GIT_RETRIEVED_STATE} "false")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(nx_git_update sWorkingDirectory)
|
||||
set(ENV{GIT_RETRIEVED_STATE} "true")
|
||||
|
||||
_nx_git_command(rev-parse --abbrev-ref HEAD)
|
||||
if(NOT nGitResult EQUAL 0 OR sGitOutput STREQUAL "")
|
||||
set(ENV{GIT_BRANCH_NAME} "unknown")
|
||||
else()
|
||||
set(ENV{GIT_BRANCH_NAME} "${sGitOutput}")
|
||||
endif()
|
||||
|
||||
_nx_git_command(log -1 --format=%h)
|
||||
if(NOT nGitResult EQUAL 0 OR sGitOutput STREQUAL "")
|
||||
set(ENV{GIT_COMMIT_HASH} "unknown")
|
||||
else()
|
||||
set(ENV{GIT_COMMIT_HASH} "${sGitOutput}")
|
||||
endif()
|
||||
|
||||
_nx_git_command(log -1 --format=%cd --date=format:%Y%m%d)
|
||||
if(NOT nGitResult EQUAL 0 OR sGitOutput STREQUAL "")
|
||||
set(ENV{GIT_COMMIT_DATE} "unknown")
|
||||
else()
|
||||
set(ENV{GIT_COMMIT_DATE} "${sGitOutput}")
|
||||
endif()
|
||||
|
||||
_nx_git_command(log -1 --format=%cd --date=format:%H%M%S)
|
||||
if(NOT nGitResult EQUAL 0 OR sGitOutput STREQUAL "")
|
||||
set(ENV{GIT_COMMIT_TIME} "unknown")
|
||||
else()
|
||||
set(ENV{GIT_COMMIT_TIME} "${sGitOutput}")
|
||||
endif()
|
||||
|
||||
_nx_git_command(status --porcelain -uno)
|
||||
if(NOT nGitResult EQUAL 0 OR sGitOutput STREQUAL "")
|
||||
set(ENV{GIT_IS_DIRTY} "false")
|
||||
else()
|
||||
set(ENV{GIT_IS_DIRTY} "true")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(nx_git_watcher)
|
||||
if(NOT DEFINED _NX_GIT_INTERNAL)
|
||||
return()
|
||||
endif()
|
||||
|
||||
nx_git_update("${NX_GIT_SOURCE_DIR}")
|
||||
|
||||
if(EXISTS "${NX_GIT_FILE_INPUT}")
|
||||
file(READ "${NX_GIT_FILE_INPUT}" sGitInput)
|
||||
string(SHA256 sGitState "${sGitInput}")
|
||||
endif()
|
||||
|
||||
foreach(vGitWatch ${NX_GITWATCH_VARS})
|
||||
string(SHA256 sGitState "${sGitState}$ENV{${vGitWatch}}")
|
||||
endforeach()
|
||||
|
||||
set(bGitChanged ON)
|
||||
if(EXISTS "${NX_GIT_FILE_STATE}")
|
||||
file(READ "${NX_GIT_FILE_STATE}" sGitPrevious)
|
||||
if(sGitPrevious STREQUAL "${sGitState}")
|
||||
set(bGitChanged OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(bGitChanged)
|
||||
file(WRITE "${NX_GIT_FILE_STATE}" "${sGitState}")
|
||||
endif()
|
||||
|
||||
if(bGitChanged OR NOT EXISTS "${NX_GIT_FILE_OUTPUT}")
|
||||
foreach(vGitWatch ${NX_GITWATCH_VARS})
|
||||
set(NX_${vGitWatch} $ENV{${vGitWatch}})
|
||||
endforeach()
|
||||
configure_file("${NX_GIT_FILE_INPUT}" "${NX_GIT_FILE_OUTPUT}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(nx_git_check)
|
||||
nx_git_update("${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
foreach(vGitWatch ${NX_GITWATCH_VARS})
|
||||
set(NX_${vGitWatch}
|
||||
$ENV{${vGitWatch}}
|
||||
PARENT_SCOPE)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(nx_git_configure sGitInput sGitOutput)
|
||||
get_filename_component(sGitTarget "${sGitInput}" NAME)
|
||||
string(MAKE_C_IDENTIFIER "${sGitTarget}" sGitTarget)
|
||||
add_custom_target(
|
||||
${sGitTarget} ALL
|
||||
BYPRODUCTS "${sGitOutput}"
|
||||
DEPENDS "${sGitInput}"
|
||||
COMMENT "[GitWatcher] Retrieving Git State"
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -D_NX_GIT_INTERNAL=ON -DGIT_EXECUTABLE=${GIT_EXECUTABLE} -DNX_GIT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
-DNX_GIT_FILE_INPUT=${sGitInput} -DNX_GIT_FILE_OUTPUT="${sGitOutput}"
|
||||
-DNX_GIT_FILE_STATE="${CMAKE_CURRENT_BINARY_DIR}/git.state" -P "${NX_GITWATCH_FILE}")
|
||||
configure_file("${sGitInput}" "${sGitOutput}")
|
||||
endfunction()
|
||||
|
||||
nx_git_watcher()
|
|
@ -0,0 +1,144 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
include(NXIncludeGuard)
|
||||
include(NXScopePropagate)
|
||||
|
||||
nx_include_guard()
|
||||
|
||||
# ===================================================================
|
||||
|
||||
set(NXGenerateExportHeader_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
function(nx_generate_export_header sBaseName)
|
||||
nx_scope_initialize()
|
||||
|
||||
string(TOUPPER "${sBaseName}" sBaseName)
|
||||
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
|
||||
list(APPEND _NX_PROPAGATE_LOCAL "${sBaseName}_SHARED_DEFINE" "${sBaseName}_STATIC_DEFINE")
|
||||
|
||||
set(GEH_BASE_NAME ${sBaseName})
|
||||
set(GEH_DEFINE_NO_DEPRECATED 0)
|
||||
|
||||
unset(GEH_CUSTOM_CONTENT)
|
||||
unset(GEH_CUSTOM_CONTENT_FROM_VARIABLE)
|
||||
unset(GEH_DEPRECATED_MACRO_NAME)
|
||||
unset(GEH_EXPORT_FILE_NAME)
|
||||
unset(GEH_EXPORT_MACRO_NAME)
|
||||
unset(GEH_EXPORT_MACRO_CNAME)
|
||||
unset(GEH_INCLUDE_GUARD_NAME)
|
||||
unset(GEH_NO_DEPRECATED_MACRO_NAME)
|
||||
unset(GEH_NO_EXPORT_MACRO_NAME)
|
||||
unset(GEH_PREFIX_NAME)
|
||||
unset(GEH_STATIC_DEFINE)
|
||||
unset(GEH_DEFINE_SYMBOL)
|
||||
|
||||
set(lsParseModes
|
||||
BASE_NAME
|
||||
EXPORT_MACRO_NAME
|
||||
EXPORT_MACRO_CNAME
|
||||
EXPORT_FILE_NAME
|
||||
DEPRECATED_MACRO_NAME
|
||||
NO_EXPORT_MACRO_NAME
|
||||
INCLUDE_GUARD_NAME
|
||||
STATIC_DEFINE
|
||||
NO_DEPRECATED_MACRO_NAME
|
||||
PREFIX_NAME
|
||||
CUSTOM_CONTENT_FROM_VARIABLE
|
||||
DEFINE_SYMBOL)
|
||||
set(lsParseToggles DEFINE_NO_DEPRECATED)
|
||||
set(sParseMode "EXPORT_FILE_NAME")
|
||||
|
||||
foreach(sArgument ${ARGN})
|
||||
if("${sArgument}" IN_LIST lsParseModes)
|
||||
set(sParseMode "${sArgument}")
|
||||
elseif("${sArgument}" IN_LIST lsParseToggles)
|
||||
set(GEH_${sArgument} 1)
|
||||
else()
|
||||
set(GEH_${sParseMode} "${sArgument}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT DEFINED GEH_EXPORT_FILE_NAME)
|
||||
string(TOLOWER "${GEH_BASE_NAME}_export.h" GEH_EXPORT_FILE_NAME)
|
||||
endif()
|
||||
if(NOT DEFINED GEH_INCLUDE_GUARD_NAME)
|
||||
get_filename_component(GEH_INCLUDE_GUARD_NAME "${GEH_EXPORT_FILE_NAME}" NAME)
|
||||
string(TOUPPER "${CMAKE_PROJECT_NAME}" GEH_INCLUDE_GUARD_PREFIX)
|
||||
string(TOUPPER "${GEH_INCLUDE_GUARD_NAME}" GEH_INCLUDE_GUARD_NAME)
|
||||
if(NOT GEH_INCLUDE_GUARD_NAME MATCHES "^${GEH_INCLUDE_GUARD_PREFIX}")
|
||||
set(GEH_INCLUDE_GUARD_NAME "${GEH_INCLUDE_GUARD_PREFIX}_${GEH_INCLUDE_GUARD_NAME}")
|
||||
endif()
|
||||
string(MAKE_C_IDENTIFIER "${GEH_INCLUDE_GUARD_NAME}" GEH_INCLUDE_GUARD_NAME)
|
||||
set(GEH_INCLUDE_GUARD_NAME "${GEH_PREFIX_NAME}${GEH_INCLUDE_GUARD_NAME}")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED GEH_STATIC_DEFINE)
|
||||
if(DEFINED ${sBaseName}_STATIC_DEFINE)
|
||||
set(GEH_STATIC_DEFINE "${${sBaseName}_STATIC_DEFINE}")
|
||||
else()
|
||||
set(GEH_STATIC_DEFINE "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_STATIC_DEFINE")
|
||||
endif()
|
||||
endif()
|
||||
if(NOT DEFINED ${sBaseName}_STATIC_DEFINE)
|
||||
set(${sBaseName}_STATIC_DEFINE "${GEH_STATIC_DEFINE}")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED GEH_DEFINE_SYMBOL)
|
||||
if(DEFINED ${sBaseName}_SHARED_DEFINE)
|
||||
set(GEH_DEFINE_SYMBOL "${${sBaseName}_SHARED_DEFINE}")
|
||||
else()
|
||||
set(GEH_DEFINE_SYMBOL "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_EXPORTS")
|
||||
endif()
|
||||
endif()
|
||||
if(NOT DEFINED ${sBaseName}_SHARED_DEFINE)
|
||||
set(${sBaseName}_SHARED_DEFINE "${GEH_DEFINE_SYMBOL}")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED GEH_EXPORT_MACRO_NAME)
|
||||
set(GEH_EXPORT_MACRO_NAME "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_EXPORT")
|
||||
endif()
|
||||
if(NOT DEFINED GEH_EXPORT_MACRO_CNAME)
|
||||
set(GEH_EXPORT_MACRO_CNAME "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_CEXPORT")
|
||||
endif()
|
||||
if(NOT DEFINED GEH_NO_EXPORT_MACRO_NAME)
|
||||
set(GEH_NO_EXPORT_MACRO_NAME "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_NO_EXPORT")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED GEH_DEPRECATED_MACRO_NAME)
|
||||
set(GEH_DEPRECATED_MACRO_NAME "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_DEPRECATED")
|
||||
endif()
|
||||
if(NOT DEFINED GEH_NO_DEPRECATED_MACRO_NAME)
|
||||
set(GEH_NO_DEPRECATED_MACRO_NAME "${GEH_PREFIX_NAME}${GEH_BASE_NAME}_NO_DEPRECATED")
|
||||
endif()
|
||||
|
||||
if(DEFINED GEH_CUSTOM_CONTENT_FROM_VARIABLE)
|
||||
if(DEFINED ${GEH_CUSTOM_CONTENT_FROM_VARIABLE})
|
||||
set(GEH_CUSTOM_CONTENT "${${GEH_CUSTOM_CONTENT_FROM_VARIABLE}}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED _CURRENT_YEAR)
|
||||
string(TIMESTAMP _CURRENT_YEAR "%Y")
|
||||
string(TIMESTAMP _CURRENT_DATE "%Y%m%d")
|
||||
endif()
|
||||
|
||||
configure_file("${NXGenerateExportHeader_DIRECTORY}/NXGenerateExportHeader.configure" "${GEH_EXPORT_FILE_NAME}")
|
||||
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
|
@ -0,0 +1,84 @@
|
|||
/*-------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © @_CURRENT_YEAR@ Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -----------------------------*/
|
||||
|
||||
#ifndef @GEH_INCLUDE_GUARD_NAME@
|
||||
#define @GEH_INCLUDE_GUARD_NAME@
|
||||
|
||||
#ifndef @GEH_STATIC_DEFINE@
|
||||
# ifndef @GEH_EXPORT_MACRO_NAME@
|
||||
# if defined( _WIN32 )
|
||||
# ifdef @GEH_DEFINE_SYMBOL@
|
||||
# define @GEH_EXPORT_MACRO_NAME@ __declspec( dllexport )
|
||||
# else
|
||||
# define @GEH_EXPORT_MACRO_NAME@ __declspec( dllimport )
|
||||
# endif
|
||||
# elif defined( __GNUC__ ) || defined( __clang__ )
|
||||
# ifdef @GEH_DEFINE_SYMBOL@
|
||||
# define @GEH_EXPORT_MACRO_NAME@ __attribute__( ( visibility( "default" ) ) )
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# ifndef @GEH_NO_EXPORT_MACRO_NAME@
|
||||
# if !defined( _WIN32 ) && ( defined( __GNUC__ ) || defined( __clang__ ) )
|
||||
# ifdef @GEH_DEFINE_SYMBOL@
|
||||
# define @GEH_NO_EXPORT_MACRO_NAME@ __attribute__( ( visibility( "hidden" ) ) )
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef @GEH_EXPORT_MACRO_NAME@
|
||||
# define @GEH_EXPORT_MACRO_NAME@
|
||||
#endif
|
||||
#ifndef @GEH_EXPORT_MACRO_CNAME@
|
||||
# ifdef __cplusplus
|
||||
# define @GEH_EXPORT_MACRO_CNAME@ extern "C" @GEH_EXPORT_MACRO_NAME@
|
||||
# else
|
||||
# define @GEH_EXPORT_MACRO_CNAME@ extern @GEH_EXPORT_MACRO_NAME@
|
||||
# endif
|
||||
#endif
|
||||
#ifndef @GEH_NO_EXPORT_MACRO_NAME@
|
||||
# define @GEH_NO_EXPORT_MACRO_NAME@
|
||||
#endif
|
||||
|
||||
#ifndef @GEH_DEPRECATED_MACRO_NAME@
|
||||
# if defined( __cplusplus ) && ( __cplusplus >= 201402L )
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@ [[deprecated]]
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@_MSG( msg ) [[deprecated( msg )]]
|
||||
# elif defined( _MSC_VER )
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@ __declspec( deprecated )
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@_MSG( msg ) __declspec( deprecated( msg ) )
|
||||
# elif defined( __GNUC__ ) || defined( __clang__ )
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@ __attribute__( ( __deprecated__ ) )
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@_MSG( msg ) __attribute__( ( __deprecated__( msg ) ) )
|
||||
# elif defined( __cplusplus ) && ( __cplusplus >= 201103L )
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@ [[deprecated]]
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@_MSG( msg ) [[deprecated( msg )]]
|
||||
# else
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@
|
||||
# define @GEH_DEPRECATED_MACRO_NAME@_MSG( msg )
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GEH_DEFINE_NO_DEPRECATED@ /* DEFINE_NO_DEPRECATED */
|
||||
# ifndef @GEH_NO_DEPRECATED_MACRO_NAME@
|
||||
# define @GEH_NO_DEPRECATED_MACRO_NAME@
|
||||
# endif
|
||||
#endif
|
||||
@GEH_CUSTOM_CONTENT@
|
||||
#endif
|
|
@ -0,0 +1,133 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
include(NXIncludeGuard)
|
||||
include(NXScopePropagate)
|
||||
|
||||
nx_include_guard()
|
||||
|
||||
# ===================================================================
|
||||
|
||||
set(NXGenerateVersionHeader_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
function(nx_generate_version_header sBaseName)
|
||||
nx_scope_initialize()
|
||||
|
||||
if(DEFINED ${sBaseName}_VERSION)
|
||||
set(GVH_VERSION ${${sBaseName}_VERSION})
|
||||
elseif(DEFINED PROJECT_VERSION)
|
||||
set(GVH_VERSION ${PROJECT_VERSION})
|
||||
else()
|
||||
set(GVH_VERSION "0.0.0")
|
||||
endif()
|
||||
|
||||
string(REPLACE "." ";" lsVersionComponents "${GVH_VERSION}")
|
||||
list(LENGTH lsVersionComponents nVersionComponents)
|
||||
|
||||
if(nVersionComponents GREATER 0 AND NOT DEFINED sProjectAPIMAJOR)
|
||||
list(GET lsVersionComponents 0 GVH_VERSION_MAJOR)
|
||||
else()
|
||||
set(GVH_VERSION_MAJOR 0)
|
||||
endif()
|
||||
if(nVersionComponents GREATER 1 AND NOT DEFINED sProjectAPIMINOR)
|
||||
list(GET lsVersionComponents 1 GVH_VERSION_MINOR)
|
||||
else()
|
||||
set(GVH_VERSION_MINOR 0)
|
||||
endif()
|
||||
if(nVersionComponents GREATER 2 AND NOT DEFINED sProjectAPIPATCH)
|
||||
list(GET lsVersionComponents 2 GVH_VERSION_PATCH)
|
||||
else()
|
||||
set(GVH_VERSION_PATCH 0)
|
||||
endif()
|
||||
|
||||
set(GVH_VERSION_HEX "${GVH_VERSION_MAJOR}*65536 + ${GVH_VERSION_MINOR}*256 + ${GVH_VERSION_PATCH}")
|
||||
if(CMAKE_VERSION VERSION_LESS 3.13)
|
||||
math(EXPR GVH_VERSION_HEX "${GVH_VERSION_HEX}")
|
||||
else()
|
||||
math(EXPR GVH_VERSION_HEX "${GVH_VERSION_HEX}" OUTPUT_FORMAT HEXADECIMAL)
|
||||
endif()
|
||||
|
||||
string(TOUPPER "${sBaseName}" sBaseName)
|
||||
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
|
||||
|
||||
set(GVH_BASE_NAME ${sBaseName})
|
||||
set(GVH_QUERY_GIT 0)
|
||||
|
||||
unset(GVH_CUSTOM_CONTENT)
|
||||
unset(GVH_CUSTOM_CONTENT_FROM_VARIABLE)
|
||||
unset(GVH_INCLUDE_GUARD_NAME)
|
||||
unset(GVH_PREFIX_NAME)
|
||||
unset(GVH_VERSION_FILE_NAME)
|
||||
unset(GVH_VERSION_MACRO_NAME)
|
||||
|
||||
set(lsParseModes BASE_NAME VERSION_MACRO_NAME VERSION_FILE_NAME INCLUDE_GUARD_NAME PREFIX_NAME CUSTOM_CONTENT_FROM_VARIABLE)
|
||||
set(lsParseToggles QUERY_GIT)
|
||||
set(sParseMode "VERSION_FILE_NAME")
|
||||
|
||||
foreach(sArgument ${ARGN})
|
||||
if("${sArgument}" IN_LIST lsParseModes)
|
||||
set(sParseMode "${sArgument}")
|
||||
elseif("${sArgument}" IN_LIST lsParseToggles)
|
||||
set(GVH_${sArgument} 1)
|
||||
else()
|
||||
set(GVH_${sParseMode} "${sArgument}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT DEFINED GVH_VERSION_FILE_NAME)
|
||||
string(TOLOWER "${GVH_BASE_NAME}_version.h" GVH_VERSION_FILE_NAME)
|
||||
endif()
|
||||
if(NOT DEFINED GVH_INCLUDE_GUARD_NAME)
|
||||
get_filename_component(GVH_INCLUDE_GUARD_NAME "${GVH_VERSION_FILE_NAME}" NAME)
|
||||
string(TOUPPER "${CMAKE_PROJECT_NAME}" GVH_INCLUDE_GUARD_PREFIX)
|
||||
string(TOUPPER "${GVH_INCLUDE_GUARD_NAME}" GVH_INCLUDE_GUARD_NAME)
|
||||
if(NOT GVH_INCLUDE_GUARD_NAME MATCHES "^${GVH_INCLUDE_GUARD_PREFIX}")
|
||||
set(GVH_INCLUDE_GUARD_NAME "${GVH_INCLUDE_GUARD_PREFIX}_${GVH_INCLUDE_GUARD_NAME}")
|
||||
endif()
|
||||
string(MAKE_C_IDENTIFIER "${GVH_INCLUDE_GUARD_NAME}" GVH_INCLUDE_GUARD_NAME)
|
||||
set(GVH_INCLUDE_GUARD_NAME "${GVH_PREFIX_NAME}${GVH_INCLUDE_GUARD_NAME}")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED GVH_VERSION_MACRO_NAME)
|
||||
set(GVH_VERSION_MACRO_NAME "${GVH_PREFIX_NAME}${GVH_BASE_NAME}_VERSION")
|
||||
endif()
|
||||
|
||||
if(DEFINED GVH_CUSTOM_CONTENT_FROM_VARIABLE)
|
||||
if(DEFINED ${GVH_CUSTOM_CONTENT_FROM_VARIABLE})
|
||||
set(GVH_CUSTOM_CONTENT "${${GVH_CUSTOM_CONTENT_FROM_VARIABLE}}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED _CURRENT_YEAR)
|
||||
string(TIMESTAMP _CURRENT_YEAR "%Y")
|
||||
string(TIMESTAMP _CURRENT_DATE "%Y%m%d")
|
||||
endif()
|
||||
|
||||
if(GVH_QUERY_GIT)
|
||||
if(NOT DEFINED NX_GIT_WATCH_VARS)
|
||||
include(GitWatch)
|
||||
endif()
|
||||
configure_file("${NXGenerateVersionHeader_DIRECTORY}/NXGenerateVersionHeaderGit.configure" "${GVH_VERSION_FILE_NAME}.configure"
|
||||
@ONLY)
|
||||
nx_git_configure("${CMAKE_CURRENT_BINARY_DIR}/${GVH_VERSION_FILE_NAME}.configure" "${GVH_VERSION_FILE_NAME}")
|
||||
else()
|
||||
configure_file("${NXGenerateVersionHeader_DIRECTORY}/NXGenerateVersionHeader.configure" "${GVH_VERSION_FILE_NAME}")
|
||||
endif()
|
||||
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
|
@ -0,0 +1,29 @@
|
|||
/*-------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © @_CURRENT_YEAR@ Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -----------------------------*/
|
||||
|
||||
#ifndef @GVH_INCLUDE_GUARD_NAME@
|
||||
#define @GVH_INCLUDE_GUARD_NAME@
|
||||
|
||||
#define @GVH_VERSION_MACRO_NAME@_MM @GVH_VERSION_MAJOR@.@GVH_VERSION_MINOR@
|
||||
#define @GVH_VERSION_MACRO_NAME@_STRING "@GVH_VERSION@"
|
||||
#define @GVH_VERSION_MACRO_NAME@_MAJOR @GVH_VERSION_MAJOR@
|
||||
#define @GVH_VERSION_MACRO_NAME@_MINOR @GVH_VERSION_MINOR@
|
||||
#define @GVH_VERSION_MACRO_NAME@_PATCH @GVH_VERSION_PATCH@
|
||||
#define @GVH_VERSION_MACRO_NAME@ @GVH_VERSION_HEX@
|
||||
@GVH_CUSTOM_CONTENT@
|
||||
#endif
|
|
@ -0,0 +1,44 @@
|
|||
/*-------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © @_CURRENT_YEAR@ Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -----------------------------*/
|
||||
|
||||
#ifndef @GVH_INCLUDE_GUARD_NAME@
|
||||
#define @GVH_INCLUDE_GUARD_NAME@
|
||||
|
||||
#define @GVH_VERSION_MACRO_NAME@_MM @GVH_VERSION_MAJOR@.@GVH_VERSION_MINOR@
|
||||
#define @GVH_VERSION_MACRO_NAME@_STRING "@GVH_VERSION@"
|
||||
#define @GVH_VERSION_MACRO_NAME@_MAJOR @GVH_VERSION_MAJOR@
|
||||
#define @GVH_VERSION_MACRO_NAME@_MINOR @GVH_VERSION_MINOR@
|
||||
#define @GVH_VERSION_MACRO_NAME@_PATCH @GVH_VERSION_PATCH@
|
||||
#define @GVH_VERSION_MACRO_NAME@ @GVH_VERSION_HEX@
|
||||
|
||||
#ifdef NX_GIT_RETRIEVED_STATE
|
||||
# undef NX_GIT_RETRIEVED_STATE
|
||||
#endif
|
||||
#@__placeholder__@cmakedefine NX_GIT_RETRIEVED_STATE
|
||||
|
||||
#ifdef NX_GIT_RETRIEVED_STATE
|
||||
# define @GVH_VERSION_MACRO_NAME@_FULL "@GVH_VERSION@+git${NX_GIT_COMMIT_HASH}"
|
||||
# define @GVH_VERSION_MACRO_NAME@_BRANCH "${NX_GIT_BRANCH_NAME}"
|
||||
# define @GVH_VERSION_MACRO_NAME@_COMMIT "${NX_GIT_COMMIT_HASH}"
|
||||
# define @GVH_VERSION_MACRO_NAME@_TIMESTAMP "${NX_GIT_COMMIT_DATE}${NX_GIT_COMMIT_TIME}"
|
||||
# define @GVH_VERSION_MACRO_NAME@_DIRTY ${NX_GIT_IS_DIRTY}
|
||||
#else
|
||||
# define @GVH_VERSION_MACRO_NAME@_FULL "@GVH_VERSION@"
|
||||
#endif
|
||||
@GVH_CUSTOM_CONTENT@
|
||||
#endif
|
|
@ -0,0 +1,87 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
include(NXIncludeGuard)
|
||||
include(NXScopePropagate)
|
||||
|
||||
nx_include_guard()
|
||||
|
||||
# ===================================================================
|
||||
|
||||
set(NXGetRuntimeDependencies_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
function(nx_add_runtime_executable sTargetName)
|
||||
nx_scope_initialize()
|
||||
|
||||
if(TARGET ${sTargetName})
|
||||
list(APPEND _NX_PROPAGATE_GLOBAL "_NX_GATHER_EXECUTABLES")
|
||||
list(APPEND _NX_PROPAGATE_SORT "_NX_GATHER_EXECUTABLES")
|
||||
list(APPEND _NX_GATHER_EXECUTABLES "${sTargetName}")
|
||||
endif()
|
||||
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
||||
|
||||
function(nx_add_runtime_library sTargetName)
|
||||
nx_scope_initialize()
|
||||
|
||||
if(TARGET ${sTargetName})
|
||||
list(APPEND _NX_PROPAGATE_GLOBAL "_NX_GATHER_LIBRARIES")
|
||||
list(APPEND _NX_PROPAGATE_SORT "_NX_GATHER_LIBRARIES")
|
||||
list(APPEND _NX_GATHER_LIBRARIES "${sTargetName}")
|
||||
endif()
|
||||
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
||||
|
||||
function(nx_get_runtime_dependencies)
|
||||
nx_scope_initialize()
|
||||
|
||||
if(WIN32 AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.16")
|
||||
unset(GRD_TARGET_LIST)
|
||||
unset(GRD_SYSTEM_LIST)
|
||||
|
||||
if(DEFINED _NX_GATHER_EXECUTABLES)
|
||||
set(GRD_TARGET_LIST "${GRD_TARGET_LIST}EXECUTABLES ")
|
||||
foreach(sTargetName ${_NX_GATHER_EXECUTABLES})
|
||||
set(GRD_TARGET_LIST "${GRD_TARGET_LIST}$<TARGET_FILE:${sTargetName}> ")
|
||||
endforeach()
|
||||
endif()
|
||||
if(DEFINED _NX_GATHER_LIBRARIES)
|
||||
set(GRD_TARGET_LIST "${GRD_TARGET_LIST}LIBRARIES ")
|
||||
foreach(sTargetName ${_NX_GATHER_LIBRARIES})
|
||||
set(GRD_TARGET_LIST "${GRD_TARGET_LIST}$<TARGET_FILE:${sTargetName}> ")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
foreach(sPathName ${CMAKE_SYSTEM_LIBRARY_PATH} ${CMAKE_MINGW_SYSTEM_LIBRARY_PATH})
|
||||
set(GRD_SYSTEM_LIST "${GRD_SYSTEM_LIST}\"${sPathName}\" ")
|
||||
endforeach()
|
||||
|
||||
if(NOT DEFINED _CURRENT_YEAR)
|
||||
string(TIMESTAMP _CURRENT_YEAR "%Y")
|
||||
string(TIMESTAMP _CURRENT_DATE "%Y%m%d")
|
||||
endif()
|
||||
|
||||
configure_file("${NXGetRuntimeDependencies_DIRECTORY}/NXGetRuntimeDependencies.configure" "_NXGetRuntimeDependencies.cmake" @ONLY)
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
include(_NXGetRuntimeDependencies)
|
||||
endif()
|
||||
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
|
@ -0,0 +1,36 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © @_CURRENT_YEAR@ Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
install(CODE [[
|
||||
message(STATUS "Dependency Locations: @CMAKE_SYSTEM_LIBRARY_PATH@;@CMAKE_MINGW_SYSTEM_LIBRARY_PATH@;$ENV{MINGW_RUNTIME_PATH}")
|
||||
file(GET_RUNTIME_DEPENDENCIES
|
||||
RESOLVED_DEPENDENCIES_VAR _NX_DEPS_RESOLVED
|
||||
UNRESOLVED_DEPENDENCIES_VAR _NX_DEPS_UNRESOLVED
|
||||
@GRD_TARGET_LIST@
|
||||
DIRECTORIES @GRD_SYSTEM_LIST@$ENV{MINGW_RUNTIME_PATH}
|
||||
PRE_EXCLUDE_REGEXES "api-ms-.*" "ext-ms-.*"
|
||||
POST_EXCLUDE_REGEXES ".*system32/.*\\.dll"
|
||||
)
|
||||
foreach(_dep ${_NX_DEPS_RESOLVED})
|
||||
message(STATUS " [x] Resolved: ${_dep}")
|
||||
file(INSTALL ${_dep} DESTINATION ${CMAKE_INSTALL_PREFIX}/kyuii)
|
||||
endforeach()
|
||||
foreach(_dep ${_NX_DEPS_UNRESOLVED})
|
||||
message(STATUS " [ ] Not Found: ${_dep}")
|
||||
endforeach()
|
||||
]])
|
|
@ -0,0 +1,44 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
macro(nx_include_guard)
|
||||
get_filename_component(vIncludeGuard "${CMAKE_CURRENT_LIST_FILE}" NAME)
|
||||
string(TOUPPER "${vIncludeGuard}_INCLUDE_GUARD" vIncludeGuard)
|
||||
string(MAKE_C_IDENTIFIER "${vIncludeGuard}" vIncludeGuard)
|
||||
|
||||
if(DEFINED ${vIncludeGuard})
|
||||
return()
|
||||
endif()
|
||||
if(DEFINED _NX_SCOPE)
|
||||
list(APPEND _NX_PROPAGATE_SET "${vIncludeGuard}")
|
||||
endif()
|
||||
set(${vIncludeGuard} ON)
|
||||
endmacro()
|
||||
|
||||
macro(nx_function_guard sFunctionName)
|
||||
string(TOUPPER "${sFunctionName}_FUNCTION_GUARD" vFunctionGuard)
|
||||
string(MAKE_C_IDENTIFIER "${vFunctionGuard}" vFunctionGuard)
|
||||
|
||||
if(DEFINED ${vFunctionGuard})
|
||||
return()
|
||||
endif()
|
||||
if(DEFINED _NX_SCOPE)
|
||||
list(APPEND _NX_PROPAGATE_SET "${vFunctionGuard}")
|
||||
endif()
|
||||
set(${vFunctionGuard} ON)
|
||||
endmacro()
|
|
@ -0,0 +1,106 @@
|
|||
# -------------------------------
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
# -------------------------------
|
||||
|
||||
macro(nx_scope_initialize)
|
||||
if(NOT DEFINED _NX_SCOPE)
|
||||
set(_NX_SCOPE ON)
|
||||
else()
|
||||
set(_NX_PROPAGATE ON)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(nx_scope_propagate)
|
||||
if(DEFINED _NX_PROPAGATE_SORT AND _NX_PROPAGATE_SORT)
|
||||
list(REMOVE_DUPLICATES _NX_PROPAGATE_SORT)
|
||||
endif()
|
||||
|
||||
foreach(vPropagate "_NX_PROPAGATE_RESET" "_NX_PROPAGATE_GLOBAL" "_NX_PROPAGATE_SET" "_NX_PROPAGATE_LOCAL" ${_NX_PROPAGATE_SORT})
|
||||
if(DEFINED ${vPropagate} AND ${vPropagate})
|
||||
list(SORT ${vPropagate})
|
||||
list(REMOVE_DUPLICATES ${vPropagate})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach(vPropagate "_NX_PROPAGATE_RESET" "_NX_PROPAGATE_GLOBAL" "_NX_PROPAGATE_SORT" ${_NX_PROPAGATE_GLOBAL} ${_NX_PROPAGATE_SET}
|
||||
${_NX_PROPAGATE_LOCAL})
|
||||
if(DEFINED ${vPropagate})
|
||||
set(${vPropagate}
|
||||
"${${vPropagate}}"
|
||||
PARENT_SCOPE)
|
||||
else()
|
||||
unset(${vPropagate} PARENT_SCOPE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(DEFINED _NX_PROPAGATE)
|
||||
set(_NX_PROPAGATE_SET
|
||||
"${_NX_PROPAGATE_SET}"
|
||||
PARENT_SCOPE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(nx_scope_project)
|
||||
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL "${CMAKE_SOURCE_DIR}")
|
||||
foreach(vPropagate "_NX_PROPAGATE_RESET" "_NX_PROPAGATE_GLOBAL")
|
||||
if(DEFINED ${vPropagate} AND ${vPropagate})
|
||||
list(SORT ${vPropagate})
|
||||
list(REMOVE_DUPLICATES ${vPropagate})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach(vPropagate "_NX_PROPAGATE_RESET" "_NX_PROPAGATE_GLOBAL" ${_NX_PROPAGATE_GLOBAL})
|
||||
if(DEFINED ${vPropagate})
|
||||
set(${vPropagate}
|
||||
"${${vPropagate}}"
|
||||
PARENT_SCOPE)
|
||||
else()
|
||||
unset(${vPropagate} PARENT_SCOPE)
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(nx_set_global vName sValue)
|
||||
nx_scope_initialize()
|
||||
list(APPEND _NX_PROPAGATE_GLOBAL "${vName}")
|
||||
set(${vName} "${sValue}")
|
||||
message(STATUS "SET: ${vName} to '${sValue}'")
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
||||
|
||||
function(nx_append_global vName sValue)
|
||||
nx_scope_initialize()
|
||||
list(APPEND _NX_PROPAGATE_GLOBAL "${vName}")
|
||||
list(APPEND _NX_PROPAGATE_SORT "${vName}")
|
||||
list(APPEND ${vName} "${sValue}")
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
||||
|
||||
function(nx_set_project vName sValue)
|
||||
nx_scope_initialize()
|
||||
list(APPEND _NX_PROPAGATE_SET "${vName}")
|
||||
set(${vName} "${sValue}")
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
||||
|
||||
function(nx_set_local vName sValue)
|
||||
nx_scope_initialize()
|
||||
list(APPEND _NX_PROPAGATE_LOCAL "${vName}")
|
||||
set(${vName} "${sValue}")
|
||||
nx_scope_propagate()
|
||||
endfunction()
|
Loading…
Reference in New Issue