This commit is contained in:
Daniel Wolf 2020-04-19 16:47:36 -04:00
parent 0a3a0e6f71
commit 0ad8c1c97a
No known key found for this signature in database
GPG Key ID: E8FEA551AA478F9A
52 changed files with 6448 additions and 6088 deletions

141
.cmake-format Normal file
View File

@ -0,0 +1,141 @@
# --------------------------
# General Formatting Options
# --------------------------
# How wide to allow formatted cmake files
line_width = 200
# How many spaces to tab for indent
tab_size = 4
# 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 positinal argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 6
# 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 it's own line.
dangle_parens = False
# If the trailing parenthesis must be 'dangled' on it's 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'
min_prefix_chars = 4
# If the statement spelling length (including space and parenthesis is larger
# than the tab width by more than this amoung, 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'
# Specify structure for custom cmake functions
additional_commands = {
"foo": {
"flags": [
"BAR",
"BAZ"
],
"kwargs": {
"HEADERS": "*",
"SOURCES": "*",
"DEPENDS": "*"
}
}
}
# 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
# 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
# A dictionary containing any per-command configuration overrides. Currently
# only `command_case` is supported.
per_command = {}
# A dictionary mapping layout nodes to a list of wrap decisions. See the
# documentation for more information.
layout_passes = {}
# --------------------------
# Comment Formatting Options
# --------------------------
# What character to use for bulleted lists
bullet_char = '*'
# What character to use as punctuation after numerals in an enumerated list
enum_char = '.'
# enable comment markup parsing and reflow
enable_markup = False
# 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 true, then insert a space between the first hash char and remaining hash
# chars in a hash ruler, and normalize it's length to fill the column
canonicalize_hashrulers = True
# ---------------------------------
# Miscellaneous Options
# ---------------------------------
# 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'

View File

@ -1,383 +1,48 @@
---
kind: pipeline
type: docker
name: ubuntu
name: default
platform:
os: linux
arch: amd64
steps:
- name: build-x86_64
- name: build-lin
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-x86_64 && cd build-x86_64
- mkdir build-lin && cd build-lin
- CC=gcc CXX=g++ cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
- cmake --build . --parallel
- ./test-hello
- ls -la | grep hello
- name: build-x86_64-llvm
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-x86_64-llvm && cd build-x86_64-llvm
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/lib/clang/toolchain.cmake ..
- cmake --build . --parallel
- ./test-hello
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-aarch64
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-aarch64 && cd build-aarch64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/aarch64-linux-gnu/toolchain.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-powerpc64le
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-powerpc64le && cd build-powerpc64le
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/powerpc64le-linux-gnu/toolchain.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-riscv64
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-riscv64 && cd build-riscv64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/riscv64-linux-gnu/toolchain.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-s390x
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-s390x && cd build-s390x
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/s390x-linux-gnu/toolchain.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-i386
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-i386 && cd build-i386
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/i686-linux-gnu/toolchain.cmake ..
- cmake --build . --parallel
- ./test-hello
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-arm
image: nephatrine/nxbuilder:linux
commands:
- mkdir build-arm && cd build-arm
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/arm-linux-gnueabihf/toolchain.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
---
kind: pipeline
type: docker
name: freebsd
platform:
os: linux
arch: amd64
steps:
- name: build-x86_64
image: nephatrine/nxbuilder:unix
commands:
- mkdir build-x86_64 && cd build-x86_64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/freebsd/cross-tools-llvm/toolchain-x86_64.cmake ..
- cmake --build . --parallel
- file ./test-hello
- ls -la | grep hello
- name: build-i386
image: nephatrine/nxbuilder:unix
commands:
- mkdir build-i386 && cd build-i386
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/freebsd/cross-tools-llvm/toolchain-aarch64.cmake ..
- cmake --build . --parallel
- file ./test-hello
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-aarch64
image: nephatrine/nxbuilder:unix
commands:
- mkdir build-aarch64 && cd build-aarch64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/freebsd/cross-tools-llvm/toolchain-i386.cmake ..
- cmake --build . --parallel
- file ./test-hello
- ls -la | grep hello
depends_on:
- build-x86_64
---
kind: pipeline
type: docker
name: macosx
platform:
os: linux
arch: amd64
steps:
- name: build-x86_64
image: nephatrine/nxbuilder:osx
commands:
- mkdir build-x86_64 && cd build-x86_64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/darwin/cross-tools-llvm/toolchain-x86_64.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
- x86_64-apple-darwin15-otool -D libHello.dylib
- x86_64-apple-darwin15-otool -L test-hello
- name: build-x86_64h
image: nephatrine/nxbuilder:osx
commands:
- mkdir build-x86_64h && cd build-x86_64h
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/darwin/cross-tools-llvm/toolchain-x86_64h.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-i386
image: nephatrine/nxbuilder:osx
commands:
- mkdir build-i386 && cd build-i386
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/darwin/cross-tools-llvm/toolchain-i386.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64
---
kind: pipeline
type: docker
name: mingw
platform:
os: linux
arch: amd64
steps:
- name: build-x86_64
- cmake --build . --parallel --target package
- name: build-win
image: nephatrine/nxbuilder:mingw
commands:
- mkdir build-x86_64 && cd build-x86_64
- mkdir build-win && cd build-win
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/x86_64-w64-mingw32/toolchain.cmake ..
- cmake --build . --parallel
- WINEPATH=$WINEPREFIX/drive_c/x86_64-w64-mingw32/bin/gcc wine64 ./test-hello.exe
- ls -la | grep hello
- name: build-i686
image: nephatrine/nxbuilder:mingw
commands:
- mkdir build-i686 && cd build-i686
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/usr/i686-w64-mingw32/toolchain.cmake ..
- cmake --build . --parallel
- WINEPATH=$WINEPREFIX/drive_c/i686-w64-mingw32/bin/gcc wine ./test-hello.exe
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-x86_64-llvm
image: nephatrine/nxbuilder:mingw
commands:
- mkdir build-x86_64-llvm && cd build-x86_64-llvm
- echo $PATH
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/windows/cross-tools-llvm/toolchain-x86_64.cmake -DCMAKE_CXX_FLAGS_INIT="-stdlib=libc++" ..
- cmake --build . --parallel
- WINEPATH=$WINEPREFIX/drive_c/x86_64-w64-mingw32/bin wine64 ./test-hello.exe
- ls -la | grep hello
depends_on:
- build-x86_64
- name: build-i686-llvm
image: nephatrine/nxbuilder:mingw
commands:
- mkdir build-i686-llvm && cd build-i686-llvm
- echo $PATH
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/windows/cross-tools-llvm/toolchain-i686.cmake ..
- cmake --build . --parallel
- WINEPATH=$WINEPREFIX/drive_c/i686-w64-mingw32/bin wine ./test-hello.exe
- ls -la | grep hello
depends_on:
- build-x86_64-llvm
- name: build-aarch64-llvm
image: nephatrine/nxbuilder:mingw
commands:
- mkdir build-aarch64-llvm && cd build-aarch64-llvm
- echo $PATH
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/windows/cross-tools-llvm/toolchain-aarch64.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64-llvm
- name: build-x86_64-msvc
image: pdr.nephatrine.net/nephatrine/nxbuilder:nodist
commands:
- mkdir build-x86_64-msvc && cd build-x86_64-msvc
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/windows/cross-tools-llvm/toolchain-x86_64-msvc.cmake ..
- cmake --build . --parallel
- wine64 ./test-hello.exe
- ls -la | grep hello
depends_on:
- build-x86_64-llvm
- name: build-i686-msvc
image: pdr.nephatrine.net/nephatrine/nxbuilder:nodist
commands:
- mkdir build-i686-msvc && cd build-i686-msvc
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/windows/cross-tools-llvm/toolchain-i686-msvc.cmake ..
- cmake --build . --parallel
- wine ./test-hello.exe
- ls -la | grep hello
depends_on:
- build-x86_64-msvc
- name: build-aarch64-msvc
image: pdr.nephatrine.net/nephatrine/nxbuilder:nodist
commands:
- mkdir build-aarch64-msvc && cd build-aarch64-msvc
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/windows/cross-tools-llvm/toolchain-aarch64-msvc.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-x86_64-msvc
- cmake --build . --parallel --target package
---
kind: pipeline
type: docker
name: haiku
platform:
os: linux
arch: amd64
name: after
steps:
- name: build-x86_64
image: nephatrine/nxbuilder:beos
commands:
- mkdir build-x86_64 && cd build-x86_64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/haiku/cross-tools-x86_64/toolchain.cmake ..
- cmake --build . --parallel
- ls -la | grep hello
- name: notify
image: appleboy/drone-discord
settings:
avatar_url: https://files.nephatrine.net/Images/Buttons/Drone.png
message: "Automated build of **{{repo.name}}:{{commit.branch}}** has returned [{{build.status}}]({{build.link}})."
username: DroneCI
webhook_id:
from_secret: webhook-id
webhook_token:
from_secret: webhook-token
---
kind: pipeline
type: docker
name: droid
depends_on:
- default
platform:
os: linux
arch: amd64
steps:
- name: build-aarch64
image: nephatrine/nxbuilder:android
commands:
- mkdir build-aarch64 && cd build-aarch64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/toolchain.cmake -DANDROID_ABI=arm64-v8a ..
- cmake --build . --parallel
- ls -la | grep hello
- name: build-arm
image: nephatrine/nxbuilder:android
commands:
- mkdir build-arm && cd build-arm
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/toolchain.cmake -DANDROID_ABI=armeabi-v7a ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-aarch64
- name: build-x86_64
image: nephatrine/nxbuilder:android
commands:
- mkdir build-x86_64 && cd build-x86_64
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/toolchain.cmake -DANDROID_ABI=x86_64 ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-aarch64
- name: build-i686
image: nephatrine/nxbuilder:android
commands:
- mkdir build-i686 && cd build-i686
- cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/toolchain.cmake -DANDROID_ABI=x86 ..
- cmake --build . --parallel
- ls -la | grep hello
depends_on:
- build-aarch64
---
kind: pipeline
type: exec
name: openindiana
platform:
os: solaris
arch: amd64
steps:
- name: build-x86_64
commands:
- mkdir build-x86_64 && cd build-x86_64
- CFLAGS="-m64" CXXFLAGS="-m64" cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
- cmake --build . --parallel
- ./test-hello
- file ./test-hello
- name: build-i386
commands:
- mkdir build-i386 && cd build-i386
- CFLAGS="-m32" CXXFLAGS="-m32" cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
- cmake --build . --parallel
- ./test-hello
- file ./test-hello
depends_on:
- build-x86_64
---
kind: pipeline
type: exec
name: windows
platform:
os: windows
arch: amd64
steps:
- name: build-x64
commands:
- mkdir build-x64
- cd build-x64
- cmake -G "Visual Studio 16 2019" -A "x64" ..
- cmake --build . --config RelWithDebInfo --parallel
- ./RelWithDebInfo/test-hello.exe
- name: build-x86
commands:
- mkdir build-x86
- cd build-x86
- cmake -G "Visual Studio 16 2019" -A "Win32" ..
- cmake --build . --config RelWithDebInfo --parallel
- ./RelWithDebInfo/test-hello.exe
depends_on:
- build-x64
- name: build-arm
commands:
- mkdir build-arm
- cd build-arm
- cmake -G "Visual Studio 16 2019" -A "ARM" ..
- cmake --build . --config RelWithDebInfo --parallel
depends_on:
- build-x64
- name: build-arm64
commands:
- mkdir build-arm64
- cd build-arm64
- cmake -G "Visual Studio 16 2019" -A "ARM64" ..
- cmake --build . --config RelWithDebInfo --parallel
depends_on:
- build-x64
trigger:
status:
- success
- failure

5
.gitignore vendored
View File

@ -1,2 +1,3 @@
build*/*
*.kate-swp
.vs/*
.vscode/*
build*/*

13
CHANGELOG.md Normal file
View File

@ -0,0 +1,13 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Utilities for creating documentation, more package formats, and test cases.
## [0.1.0] - 2020-03-22
### Added
- Initial Commit

View File

@ -18,350 +18,49 @@
cmake_minimum_required(VERSION 3.9)
project(
HelloWorld
VERSION "0.1.0.0"
DESCRIPTION "Example Source Project"
LANGUAGES CXX)
set(BUILD_ALL_LIBS ON)
#
# If code changes, increment revision.
# If functions added/removed/changed, increment current and zero revision.
# If functions added, increment age.
# If functions removed/changed, zero age.
#
NXBuild
VERSION "0.1.0"
DESCRIPTION "CMake Helper Functions"
LANGUAGES NONE)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(NXClient)
include(NXBuild)
nx_project_version(
VERSION
"${${PROJECT_NAME}_VERSION}"
COMPATIBILITY
"SameMajorVersion"
LIBTOOL
"1:0:1"
PACKAGING
1)
set(NXBUILD_PATH_INTERNAL "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(NXBUILD_PATH_DATADIR "${CMAKE_CURRENT_SOURCE_DIR}/data")
set(NXBUILD_PATH_HELPER "${CMAKE_CURRENT_SOURCE_DIR}/tools")
set(NXBUILD_PATH_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/data")
file(RELATIVE_PATH NXBUILD_PATH_DATADIR_REL "/${NX_INSTALL_PATH_CMAKE}" "/${NX_INSTALL_PATH_DEVRES}")
file(RELATIVE_PATH NXBUILD_PATH_HELPER_REL "/${NX_INSTALL_PATH_CMAKE}" "/${NX_INSTALL_PATH_DEVBIN}")
configure_file("${NXBUILD_PATH_INTERNAL}/NXPaths.cmake.configure" "${CMAKE_CURRENT_BINARY_DIR}/NXPaths.cmake"
@ONLY)
# find_package(Dia MODULE)
# find_package(Doxygen OPTIONAL_COMPONENTS doxygen MODULE)
# find_package(GLOBAL OPTIONAL_COMPONENTS htags MODULE)
# find_package(Graphviz OPTIONAL_COMPONENTS dot MODULE)
# find_package(HTMLHelp OPTIONAL_COMPONENTS hhc MODULE)
# find_package(LaTeX OPTIONAL_COMPONENTS latex pdflatex makeindex MODULE)
# find_package(Mscgen MODULE)
# find_package(Perl OPTIONAL_COMPONENTS perl MODULE)
# find_package(Python 3 OPTIONAL_COMPONENTS jinja2 pygments MODULE)
# find_package(m.css OPTIONAL_COMPONENTS doxygen.py MODULE)
# find_package(node.js OPTIONAL_COMPONENTS moxygen MODULE)
nx_add_files(CMAKE
"${NXBUILD_PATH_INTERNAL}/GitWatch.cmake"
"${NXBUILD_PATH_INTERNAL}/NXBuild.cmake"
"${NXBUILD_PATH_INTERNAL}/NXCheck.cmake"
"${NXBUILD_PATH_INTERNAL}/NXClient.cmake"
"${NXBUILD_PATH_INTERNAL}/NXFormat.cmake"
"${NXBUILD_PATH_INTERNAL}/NXGenerate.cmake"
"${NXBUILD_PATH_INTERNAL}/NXInstall.cmake"
"${NXBUILD_PATH_INTERNAL}/NXPackage.cmake"
"${NXBUILD_PATH_INTERNAL}/NXTarget.cmake"
"${NXBUILD_PATH_INTERNAL}/NXTest.cmake"
"${NXBUILD_PATH_INTERNAL}/SourceCopy.cmake"
"${NXBUILD_PATH_INTERNAL}/cmake_uninstall.cmake.configure"
"${CMAKE_CURRENT_BINARY_DIR}/NXPaths.cmake")
include(CMakePackageConfigHelpers)
nx_add_files(DEVRES
"${NXBUILD_PATH_DATADIR}/GenerateExportHeader.h.configure"
"${NXBUILD_PATH_DATADIR}/GenerateVCSHeader.h.configure"
"${NXBUILD_PATH_DATADIR}/GenerateVersionHeader.h.configure")
nx_add_library(${NX_PROJECT_NAME_IDENTIFIER}_TARGETS Hello LIBRARY
SOURCE src/hello.cpp include/hello.hpp
INCLUDES PUBLIC EXPORT_HEADER VERSION_HEADER include
STRIP_PATHS src)
nx_cmake_format("${NXBUILD_PATH_INTERNAL}/NXPaths.cmake.configure")
nx_install()
nx_package()
set(HELLOASAN_STATIC_DEFINE "${HELLO_STATIC_DEFINE}")
set(HELLOASAN_SHARED_DEFINE "${HELLO_SHARED_DEFINE}")
nx_add_library(${NX_PROJECT_NAME_IDENTIFIER}_TARGETS HelloASAN LIBRARY
PACKAGE Hello TEST
SOURCE src/hello.cpp include/hello.hpp
INCLUDES PUBLIC include
LDFLAGS PUBLIC -fsanitize=address
CXXFLAGS PUBLIC REQUIRES -fsanitize=address)
set(HELLOTSAN_STATIC_DEFINE "${HELLO_STATIC_DEFINE}")
set(HELLOTSAN_SHARED_DEFINE "${HELLO_SHARED_DEFINE}")
nx_add_library(${NX_PROJECT_NAME_IDENTIFIER}_TARGETS HelloTSAN LIBRARY
PACKAGE Hello TEST
SOURCE src/hello.cpp include/hello.hpp
INCLUDES PUBLIC include
LDFLAGS PUBLIC -fsanitize=thread
CXXFLAGS PUBLIC REQUIRES -fsanitize=thread)
foreach(sTargetName ${${NX_PROJECT_NAME_IDENTIFIER}_TARGETS})
nx_add_executable(${NX_PROJECT_NAME_IDENTIFIER}_TESTS test-${sTargetName} TEST
SOURCE src/main.cpp
DEPENDS ${sTargetName})
foreach(sVar ${_NX_PROPOGATE_GLOBAL})
if(DEFINED ${sVar})
message(STATUS "${sVar}: ${${sVar}}")
endif()
endforeach()
foreach(sGroup ${NX_LIST_COMPONENT_GROUPS})
unset(sExport)
if(DEFINED NX_COMPONENT_${sGroup}_EXPORT)
set(sExport "EXPORT" "${NX_COMPONENT_${sGroup}_EXPORT}")
endif()
foreach(sTargetType "APPLICATION" "EXECUTABLE" "MODULE" "SHARED" "STATIC" "HEADERS" "SOURCE" "EXPORT")
set(sPath${sTargetType} "${NX_INSTALL_PATH_${sTargetType}}")
string(REPLACE "/${NX_PROJECT_NAME}-" "/${NX_COMPONENT_${sGroup}_NAME}-" sPath${sTargetType} "${sPath${sTargetType}}")
if(NOT NX_PROJECT_NAME STREQUAL "${NX_PROJECT_NAME_WORKSPACE}")
string(REPLACE "/${NX_PROJECT_NAME}/" "/${NX_COMPONENT_${sGroup}_NAME}/" sPath${sTargetType} "${sPath${sTargetType}}")
endif()
endforeach()
if(DEFINED NX_COMPONENT_${sGroup}_APPLICATION AND NX_COMPONENT_${sGroup}_APPLICATION)
set(sComponent "app")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_APPLICATION})
install(
TARGETS "${sTarget}"
COMPONENT "${sComponent}" ${sExport}
RUNTIME DESTINATION "${sPathAPPLICATION}")
endforeach()
endif()
if(DEFINED NX_DEBUG_${sGroup}_APPLICATION AND NX_DEBUG_${sGroup}_APPLICATION)
set(sComponent "dbg")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_DEBUG_${sGroup}_APPLICATION})
install(
FILES "${sTarget}"
DESTINATION "${sPathAPPLICATION}/.debug"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_CONSOLE AND NX_COMPONENT_${sGroup}_CONSOLE)
set(sComponent "bin")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_CONSOLE})
install(
TARGETS "${sTarget}"
COMPONENT "${sComponent}" ${sExport}
RUNTIME DESTINATION "${sPathEXECUTABLE}")
endforeach()
endif()
if(DEFINED NX_DEBUG_${sGroup}_CONSOLE AND NX_DEBUG_${sGroup}_CONSOLE)
set(sComponent "dbg")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_DEBUG_${sGroup}_CONSOLE})
install(
FILES "${sTarget}"
DESTINATION "${sPathEXECUTABLE}/.debug"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_MODULE AND NX_COMPONENT_${sGroup}_MODULE)
set(sComponent "mod")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_MODULE})
install(
TARGETS "${sTarget}"
COMPONENT "${sComponent}" ${sExport}
RUNTIME DESTINATION "${sPathMODULE}"
LIBRARY DESTINATION "${sPathMODULE}")
endforeach()
endif()
if(DEFINED NX_DEBUG_${sGroup}_MODULE AND NX_DEBUG_${sGroup}_MODULE)
set(sComponent "dbg")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_DEBUG_${sGroup}_MODULE})
install(
FILES "${sTarget}"
DESTINATION "${sPathMODULE}/.debug"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_SHARED AND NX_COMPONENT_${sGroup}_SHARED)
set(sComponent "lib")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_SHARED})
install(
TARGETS "${sTarget}"
COMPONENT "${sComponent}" ${sExport}
RUNTIME DESTINATION "${sPathSHARED}"
LIBRARY DESTINATION "${sPathSHARED}"
ARCHIVE DESTINATION "${sPathSTATIC}")
endforeach()
endif()
if(DEFINED NX_DEBUG_${sGroup}_SHARED AND NX_DEBUG_${sGroup}_SHARED)
set(sComponent "dbg")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_DEBUG_${sGroup}_SHARED})
install(
FILES "${sTarget}"
DESTINATION "${sPathSHARED}/.debug"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_STATIC AND NX_COMPONENT_${sGroup}_STATIC)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_STATIC})
install(
TARGETS "${sTarget}"
COMPONENT "${sComponent}" ${sExport}
ARCHIVE DESTINATION "${sPathSTATIC}"
OBJECTS DESTINATION "${sPathSTATIC}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_HEADERS AND NX_COMPONENT_${sGroup}_HEADERS)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_HEADERS})
install(
DIRECTORY "${sTarget}"
DESTINATION "${sPathHEADERS}"
COMPONENT "${sComponent}"
OPTIONAL
PATTERN "*.configure" EXCLUDE
PATTERN "*.dox" EXCLUDE)
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_SOURCE AND NX_COMPONENT_${sGroup}_SOURCE)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_SOURCE})
set(sDestination "#${sTarget}")
set(bDone OFF)
foreach(sStripPath ${NX_COMPONENT_${sGroup}_STRIP})
if(NOT bDone AND sTarget MATCHES "^${sStripPath}/")
string(REPLACE "#${sStripPath}/" "" sDestination "${sDestination}")
set(bDone ON)
endif()
endforeach()
string(REPLACE "#" "" sDestination "${sDestination}")
get_filename_component(sPath2 "${sPathSOURCE}/${sDestination}" DIRECTORY)
install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/${sTarget}"
DESTINATION "${sPath2}"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_BUILD AND NX_COMPONENT_${sGroup}_BUILD)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_BUILD})
set(sDestination "${sTarget}")
set(bDone OFF)
foreach(sStripPath ${NX_COMPONENT_${sGroup}_STRIP} ${NX_COMPONENT_${sGroup}_STRIP2})
if(NOT bDone AND sDestination MATCHES "^${sStripPath}/")
string(REPLACE "#${sStripPath}/" "" sDestination "#${sDestination}")
set(bDone ON)
endif()
endforeach()
get_filename_component(sPath2 "${sPathSOURCE}/${sDestination}" DIRECTORY)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${sTarget}"
DESTINATION "${sPath2}"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_EXPORT AND NX_COMPONENT_${sGroup}_EXPORT)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
foreach(sTarget ${NX_COMPONENT_${sGroup}_EXPORT})
export(EXPORT "${sTarget}" NAMESPACE "${NX_PROJECT_NAME_WORKSPACE}::"
FILE "${sTarget}${NX_CMAKE_SUFFIX_BUILD}Config.cmake")
export(PACKAGE "${sTarget}${NX_CMAKE_SUFFIX_BUILD}")
unset(sExportVersion)
if(DEFINED NX_PROJECT_API_VERSION)
set(sExportCompatibility "AnyNewerVersion")
if(DEFINED NX_PROJECT_API_COMPATIBILITY)
set(sExportVersion "-${NX_PROJECT_API_COMPATIBILITY}")
if(NX_PROJECT_API_COMPATIBILITY STREQUAL "${NX_PROJECT_API_VERSION}")
set(sExportCompatibility "ExactVersion")
elseif(NX_PROJECT_API_COMPATIBILITY STREQUAL "${NX_PROJECT_API_MAJOR}")
set(sExportCompatibility "SameMajorVersion")
elseif(NX_PROJECT_API_COMPATIBILITY STREQUAL "${NX_PROJECT_API_MAJOR}.${NX_PROJECT_API_MINOR}")
set(sExportCompatibility "SameMinorVersion")
else()
set(sExportCompatibility "ExactVersion")
endif()
endif()
if(NX_TARGET_ARCHITECTURE_NONE AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${NX_CMAKE_SUFFIX_BUILD}ConfigVersion.cmake"
VERSION "${NX_PROJECT_API_VERSION}" COMPATIBILITY "${sExportCompatibility}" ARCH_INDEPENDENT)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${NX_CMAKE_SUFFIX_INSTALL}ConfigVersion.cmake"
VERSION "${NX_PROJECT_API_VERSION}" COMPATIBILITY "${sExportCompatibility}" ARCH_INDEPENDENT)
else()
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${NX_CMAKE_SUFFIX_BUILD}ConfigVersion.cmake"
VERSION "${NX_PROJECT_API_VERSION}" COMPATIBILITY "${sExportCompatibility}")
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${NX_CMAKE_SUFFIX_INSTALL}ConfigVersion.cmake"
VERSION "${NX_PROJECT_API_VERSION}" COMPATIBILITY "${sExportCompatibility}")
endif()
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${NX_CMAKE_SUFFIX_INSTALL}ConfigVersion.cmake"
DESTINATION "${sPathEXPORT}/${sTarget}${NX_CMAKE_SUFFIX_INSTALL}${sExportVersion}"
COMPONENT "${sComponent}")
endif()
install(EXPORT "${sTarget}" NAMESPACE "${NX_PROJECT_NAME_WORKSPACE}::"
FILE "${sTarget}${NX_CMAKE_SUFFIX_INSTALL}Config.cmake"
DESTINATION "${sPathEXPORT}/${sTarget}${NX_CMAKE_SUFFIX_INSTALL}${sExportVersion}"
COMPONENT "${sExportComponent}")
endforeach()
endif()
endforeach()
nx_clang_format()
nx_source_group()
if(NOT TARGET uninstall)
if(EXISTS "${NXBUILD_PATH_RESOURCES}/Uninstall.cmake.configure")
configure_file("${NXBUILD_PATH_RESOURCES}/Uninstall.cmake.configure" "${CMAKE_CURRENT_BINARY_DIR}/Uninstall.cmake"
@ONLY)
endif()
if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/Uninstall.cmake")
add_custom_target(uninstall
COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/Uninstall.cmake")
endif()
endif()

8
LICENSE.md Normal file
View File

@ -0,0 +1,8 @@
ISC License
===========
_Copyright © 2020 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.

View File

@ -1,3 +1,7 @@
= Ham
= NXBuild
[![Build Status](https://ci.nephatrine.net/api/badges/nephatrine/drone-test/status.svg)](https://ci.nephatrine.net/nephatrine/drone-test)
[![Build Status](https://ci.nephatrine.net/api/badges/nephatrine/nxbuild/status.svg?ref=refs/heads/master)](https://ci.nephatrine.net/nephatrine/nxbuild)
This is a set of CMake helper modules collecting frequently-used functions in one place.
This is intended purely for my own internal use and needs so I'm not sure anyone else will find anything here useful.

View File

@ -1,812 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(CheckLinkerFlagNX)
include(GenerateExportHeaderNX)
include(GenerateVersionHeaderNX)
include(GenerateVCSHeaderNX)
include(TargetCompileDefinitionsNX)
include(TargetCompileFeaturesNX)
include(TargetCompileOptionsNX)
include(TargetIncludeDirectoriesNX)
include(TargetLinkLibrariesNX)
include(TargetLinkOptionsNX)
include(TargetSourcesNX)
function(nx_add_executable_application vTargetList sTargetName)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${vTargetList}")
if(NX_TARGET_PLATFORM_DARWIN)
set(CMAKE_INSTALL_RPATH "@executable_path/${NX_INSTALL_RPATH_APPLICATION}")
else()
set(CMAKE_INSTALL_RPATH "$ORIGIN/${NX_INSTALL_RPATH_APPLICATION}")
endif()
unset(lsDefinesPRIVATE)
unset(lsDefinesPUBLIC)
unset(lsDefinesINTERFACE)
unset(lsNXFlagsPRIVATE)
unset(lsNXFlagsPUBLIC)
unset(lsNXFlagsINTERFACE)
unset(lsIncludePRIVATE)
unset(lsIncludePUBLIC)
unset(lsIncludeINTERFACE)
unset(lsLDFlagsPRIVATE)
unset(lsLDFlagsPUBLIC)
unset(lsLDFlagsINTERFACE)
unset(lsLibsPRIVATE)
unset(lsLibsPUBLIC)
unset(lsLibsINTERFACE)
unset(lsSourcePRIVATE)
unset(lsSourcePUBLIC)
unset(lsSourceINTERFACE)
unset(lsFeaturesPRIVATE)
unset(lsFeaturesPUBLIC)
unset(lsFeaturesINTERFACE)
unset(sCMakeConfig)
unset(sGroupName)
unset(lsStripPaths)
set(bExportCreate OFF)
set(bTestCase OFF)
set(bRequireMode OFF)
set(lsParseModes "CFLAGS" "CXXFLAGS" "DEFINES" "DEPENDS" "INCLUDES" "LDFLAGS" "FEATURES" "GROUP" "PACKAGE" "SOURCE" "STRIP_PATHS")
set(lsVisibilityModes "PRIVATE" "PUBLIC" "INTERFACE")
set(sParseMode "SOURCE")
set(sVisibilityMode "PRIVATE")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
set(sVisibilityMode "PRIVATE")
set(bRequireMode OFF)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT sArgument STREQUAL "PRIVATE")
set(bExportCreate ON)
endif()
set(sVisibilityMode "${sArgument}")
set(bRequireMode OFF)
elseif(sArgument STREQUAL "TEST")
set(bTestCase ON)
elseif(sArgument STREQUAL "REQUIRES")
set(bRequireMode ON)
elseif(sParseMode STREQUAL "GROUP")
if(DEFINED sGroupName)
message(AUTHOR_WARNING "nx_add_executable_application: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sGroupName "${sArgument}")
endif()
elseif(sParseMode STREQUAL "CFLAGS")
set(bHasFlag OFF)
nx_test_compiler_flags(
LIST_VARIABLE lsNXFlags${sVisibilityMode}
C_VARIABLE NXBUILD_COMPILER_FLAGS_C_G
BOOLEAN_VARIABLE bHasFlag
CHECK "${sArgument}")
if(bRequireMode)
if(NOT bHasFlag)
return()
endif()
set(bRequireMode OFF)
endif()
elseif(sParseMode STREQUAL "CXXFLAGS")
set(bHasFlag OFF)
nx_test_compiler_flags(
LIST_VARIABLE lsNXFlags${sVisibilityMode}
CXX_VARIABLE NXBUILD_COMPILER_FLAGS_CXX_G
BOOLEAN_VARIABLE bHasFlag
CHECK "${sArgument}")
if(bRequireMode)
if(NOT bHasFlag)
return()
endif()
set(bRequireMode OFF)
endif()
elseif(sParseMode STREQUAL "DEFINES")
list(APPEND lsDefines${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "DEPENDS")
list(APPEND lsLibs${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "FEATURES")
list(APPEND lsFeatures${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "INCLUDES")
list(APPEND lsInclude${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "LDFLAGS")
set(bHasFlag OFF)
nx_test_linker_flags(
LIST_VARIABLE lsLDFlags${sVisibilityMode}
RAW_VARIABLE NXBUILD_LINKER_FLAGS_G
BOOLEAN_VARIABLE bHasFlag
CHECK "${sArgument}")
if(bRequireMode)
if(NOT bHasFlag)
return()
endif()
set(bRequireMode OFF)
endif()
elseif(sParseMode STREQUAL "SOURCE")
list(APPEND lsSource${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "PACKAGE")
if(DEFINED sCMakeConfig)
message(AUTHOR_WARNING "nx_add_executable_application: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sCMakeConfig "${sArgument}")
endif()
elseif(sParseMode STREQUAL "STRIP_PATHS")
list(APPEND lsStripPaths "${sArgument}")
endif()
endforeach()
if(NX_TARGET_PLATFORM_WINDOWS)
foreach(sFlagSet NXBUILD_LINKER_FLAGS_EXE NXBUILD_LINKER_FLAGS_G_EXE
NXBUILD_LINKER_FLAGS_0_EXE NXBUILD_LINKER_FLAGS_1_EXE
NXBUILD_LINKER_FLAGS_2_EXE NXBUILD_LINKER_FLAGS_3_EXE)
foreach(sLinkFlag ${${sFlagSet}})
if(${sLinkFlag} MATCHES "mainCRTStartup")
list(REMOVE_ITEM ${sFlagSet} "${sLinkFlag}")
string(REPLACE "mainCRTStartup" "WinMainCRTStartup" sLinkFlag "${sLinkFlag}")
list(APPEND ${sFlagSet} "${sLinkFlag}")
endif()
endforeach()
endforeach()
endif()
if(NOT DEFINED sCMakeConfig)
if(DEFINED sGroupName)
set(sCMakeConfig "${sGroupName}")
else()
set(sCMakeConfig "${sTargetName}")
endif()
endif()
if(NOT DEFINED sGroupName)
set(sGroupName "${sCMakeConfig}")
endif()
string(TOUPPER "${sGroupName}" sGroupName)
string(MAKE_C_IDENTIFIER "${sGroupName}" sGroupName)
string(TOUPPER "${sTargetName}" sTargetUpper)
string(TOLOWER "${sTargetName}" sTargetLower)
string(MAKE_C_IDENTIFIER "${sTargetUpper}" sTargetUpper)
unset(sAppendName)
if(DEFINED NX_PROJECT_API_COMPATIBILITY)
list(APPEND sAppendName "${NX_PROJECT_API_COMPATIBILITY}")
endif()
if(DEFINED sAppendName)
string(REPLACE ";" "-" sAppendName "-${sAppendName}")
string(REPLACE "-_" "_" sAppendName "${sAppendName}")
endif()
if(NOT bTestCase)
set(sTargetName "${sTargetName}${sAppendName}")
endif()
if(NOT DEFINED ${sTargetUpper}_SHARED_DEFINE)
list(APPEND _NX_PROPOGATE_LOCAL "${sTargetUpper}_SHARED_DEFINE")
set(${sTargetUpper}_SHARED_DEFINE "BUILDING_${sTargetUpper}")
endif()
if(NOT DEFINED ${sTargetUpper}_STATIC_DEFINE)
list(APPEND _NX_PROPOGATE_LOCAL "${sTargetUpper}_STATIC_DEFINE")
set(${sTargetUpper}_STATIC_DEFINE "STATIC_${sTargetUpper}")
endif()
list(APPEND lsDefinesPRIVATE "${${sTargetUpper}_SHARED_DEFINE}")
if(bTestCase)
list(APPEND lsDefinesPRIVATE "_TEST")
unset(sGroupName)
endif()
if(TARGET "${sTargetLower}")
set(sTargetLower "${sTargetLower}_application")
endif()
list(APPEND ${vTargetList} "${sTargetLower}")
list(APPEND lsDefinesPRIVATE "_APPLICATION")
if(DEFINED NX_TARGET_PLATFORM_WINDOWS)
list(APPEND lsDefinesPRIVATE "_UNICODE" "UNICODE")
endif()
add_executable("${sTargetLower}")
set_target_properties("${sTargetLower}" PROPERTIES
DEFINE_SYMBOL "${${sTargetUpper}_SHARED_DEFINE}"
OUTPUT_NAME "${sTargetName}"
MACOSX_BUNDLE FALSE
WIN32_EXECUTABLE TRUE)
nx_target_compile_definitions("${sTargetLower}"
PRIVATE ${NXBUILD_COMPILER_DEFINITIONS} ${lsDefinesPRIVATE}
PUBLIC ${lsDefinesPUBLIC}
INTERFACE ${lsDefinesINTERFACE})
nx_target_compile_features("${sTargetLower}"
PRIVATE ${lsFeaturesPRIVATE}
PUBLIC ${lsFeaturesPUBLIC}
INTERFACE ${lsFeaturesINTERFACE})
nx_target_compile_options("${sTargetLower}"
PRIVATE ${NXBUILD_COMPILER_FLAGS} ${NXBUILD_COMPILER_FLAGS_EXE} ${lsNXFlagsPRIVATE}
PUBLIC ${lsNXFlagsPUBLIC}
INTERFACE ${lsNXFlagsINTERFACE})
nx_target_include_directories("${sTargetLower}"
GROUP ${sGroupName} GENDIR "${sCMakeConfig}.gendir"
PRIVATE ${lsIncludePRIVATE}
PUBLIC ${lsIncludePUBLIC}
INTERFACE ${lsIncludeINTERFACE})
nx_target_link_libraries("${sTargetLower}"
PRIVATE ${lsLibsPRIVATE}
PUBLIC ${lsLibsPUBLIC}
INTERFACE ${lsLibsINTERFACE})
nx_target_link_options("${sTargetLower}"
PRIVATE ${NXBUILD_LINKER_FLAGS} ${NXBUILD_LINKER_FLAGS_EXE} ${lsLDFlagsPRIVATE}
PUBLIC ${lsLDFlagsPUBLIC}
INTERFACE ${lsLDFlagsINTERFACE})
nx_target_sources("${sTargetLower}" STRIP_PATHS ${lsStripPaths}
GROUP ${sGroupName} GENDIR "${sCMakeConfig}.gendir"
PRIVATE ${lsSourcePRIVATE}
PUBLIC ${lsSourcePUBLIC}
INTERFACE ${lsSourceINTERFACE})
get_target_property(sTargetFilename ${sTargetLower} OUTPUT_NAME)
if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_BUILD_TYPE)
string(TOUPPER "${CMAKE_BUILD_TYPE}_POSTFIX" sPostfixProperty)
get_target_property(sPropertyPostfix ${sTargetLower} ${sPostfixProperty})
if(sPropertyPostfix)
set(sTargetFilename "${sTargetFilename}${sPropertyPostfix}")
endif()
endif()
set(sTargetFilename "${CMAKE_EXECUTABLE_PREFIX}${sTargetFilename}${CMAKE_EXECUTABLE_SUFFIX}")
if(DEFINED NX_TARGET_CONFIGURATION_RELEASE AND NOT bTestCase)
if(DEFINED CMAKE_OBJCOPY AND EXISTS "${CMAKE_OBJCOPY}")
add_custom_command(TARGET ${sTargetLower} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $<TARGET_FILE:${sTargetLower}> $<TARGET_FILE:${sTargetLower}>.debug
COMMAND ${CMAKE_OBJCOPY} --strip-debug $<TARGET_FILE:${sTargetLower}>
COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink $<TARGET_FILE:${sTargetLower}>.debug $<TARGET_FILE:${sTargetLower}>
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${sTargetFilename}.debug"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "[objcopy] Saving Debug Symbols")
if(DEFINED sGroupName)
list(APPEND _NX_PROPOGATE_SET "NX_DEBUG_${sGroupName}_APPLICATION")
list(APPEND _NX_PROPOGATE_SORT "NX_DEBUG_${sGroupName}_APPLICATION")
list(APPEND NX_DEBUG_${sGroupName}_APPLICATION "${CMAKE_CURRENT_BINARY_DIR}/${sTargetFilename}.debug")
endif()
endif()
endif()
if(DEFINED sGroupName)
list(APPEND _NX_PROPOGATE_SET "NX_LIST_COMPONENT_GROUPS" "NX_COMPONENT_${sGroupName}_APPLICATION")
list(APPEND _NX_PROPOGATE_SORT "NX_LIST_COMPONENT_GROUPS" "NX_COMPONENT_${sGroupName}_APPLICATION")
list(APPEND NX_LIST_COMPONENT_GROUPS ${sGroupName})
list(APPEND NX_COMPONENT_${sGroupName}_APPLICATION "${sTargetLower}")
if(NOT DEFINED NX_COMPONENT_${sGroupName}_NAME)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroupName}_NAME")
set(NX_COMPONENT_${sGroupName}_NAME "${sCMakeConfig}")
endif()
if(NOT DEFINED NX_COMPONENT_${sGroupName}_EXPORT AND bExportCreate)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroupName}_EXPORT")
set(NX_COMPONENT_${sGroupName}_EXPORT "${sCMakeConfig}")
endif()
endif()
_nx_function_prop()
endfunction()
function(nx_add_executable_console vTargetList sTargetName)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${vTargetList}")
if(NX_TARGET_PLATFORM_DARWIN)
set(CMAKE_INSTALL_RPATH "@executable_path/${NX_INSTALL_RPATH_EXECUTABLE}")
else()
set(CMAKE_INSTALL_RPATH "$ORIGIN/${NX_INSTALL_RPATH_EXECUTABLE}")
endif()
unset(lsDefinesPRIVATE)
unset(lsDefinesPUBLIC)
unset(lsDefinesINTERFACE)
unset(lsNXFlagsPRIVATE)
unset(lsNXFlagsPUBLIC)
unset(lsNXFlagsINTERFACE)
unset(lsIncludePRIVATE)
unset(lsIncludePUBLIC)
unset(lsIncludeINTERFACE)
unset(lsLDFlagsPRIVATE)
unset(lsLDFlagsPUBLIC)
unset(lsLDFlagsINTERFACE)
unset(lsLibsPRIVATE)
unset(lsLibsPUBLIC)
unset(lsLibsINTERFACE)
unset(lsSourcePRIVATE)
unset(lsSourcePUBLIC)
unset(lsSourceINTERFACE)
unset(lsFeaturesPRIVATE)
unset(lsFeaturesPUBLIC)
unset(lsFeaturesINTERFACE)
unset(sCMakeConfig)
unset(sGroupName)
unset(lsStripPaths)
set(bExportCreate OFF)
set(bTestCase OFF)
set(bRequireMode OFF)
set(lsParseModes "CFLAGS" "CXXFLAGS" "DEFINES" "DEPENDS" "INCLUDES" "LDFLAGS" "FEATURES" "GROUP" "PACKAGE" "SOURCE" "STRIP_PATHS")
set(lsVisibilityModes "PRIVATE" "PUBLIC" "INTERFACE")
set(sParseMode "SOURCE")
set(sVisibilityMode "PRIVATE")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
set(sVisibilityMode "PRIVATE")
set(bRequireMode OFF)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT sArgument STREQUAL "PRIVATE")
set(bExportCreate ON)
endif()
set(sVisibilityMode "${sArgument}")
set(bRequireMode OFF)
elseif(sArgument STREQUAL "TEST")
set(bTestCase ON)
elseif(sArgument STREQUAL "REQUIRES")
set(bRequireMode ON)
elseif(sParseMode STREQUAL "GROUP")
if(DEFINED sGroupName)
message(AUTHOR_WARNING "nx_add_executable_console: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sGroupName "${sArgument}")
endif()
elseif(sParseMode STREQUAL "CFLAGS")
set(bHasFlag OFF)
nx_test_compiler_flags(
LIST_VARIABLE lsNXFlags${sVisibilityMode}
C_VARIABLE NXBUILD_COMPILER_FLAGS_C_G
BOOLEAN_VARIABLE bHasFlag
CHECK "${sArgument}")
if(bRequireMode)
if(NOT bHasFlag)
return()
endif()
set(bRequireMode OFF)
endif()
elseif(sParseMode STREQUAL "CXXFLAGS")
set(bHasFlag OFF)
nx_test_compiler_flags(
LIST_VARIABLE lsNXFlags${sVisibilityMode}
CXX_VARIABLE NXBUILD_COMPILER_FLAGS_CXX_G
BOOLEAN_VARIABLE bHasFlag
CHECK "${sArgument}")
if(bRequireMode)
if(NOT bHasFlag)
return()
endif()
set(bRequireMode OFF)
endif()
elseif(sParseMode STREQUAL "DEFINES")
list(APPEND lsDefines${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "DEPENDS")
list(APPEND lsLibs${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "FEATURES")
list(APPEND lsFeatures${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "INCLUDES")
list(APPEND lsInclude${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "LDFLAGS")
set(bHasFlag OFF)
nx_test_linker_flags(
LIST_VARIABLE lsLDFlags${sVisibilityMode}
RAW_VARIABLE NXBUILD_LINKER_FLAGS_G
BOOLEAN_VARIABLE bHasFlag
CHECK "${sArgument}")
if(bRequireMode)
if(NOT bHasFlag)
return()
endif()
set(bRequireMode OFF)
endif()
elseif(sParseMode STREQUAL "SOURCE")
list(APPEND lsSource${sVisibilityMode} "${sArgument}")
elseif(sParseMode STREQUAL "PACKAGE")
if(DEFINED sCMakeConfig)
message(AUTHOR_WARNING "nx_add_executable_console: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sCMakeConfig "${sArgument}")
endif()
elseif(sParseMode STREQUAL "STRIP_PATHS")
list(APPEND lsStripPaths "${sArgument}")
endif()
endforeach()
if(NOT DEFINED sCMakeConfig)
if(DEFINED sGroupName)
set(sCMakeConfig "${sGroupName}")
else()
set(sCMakeConfig "${sTargetName}")
endif()
endif()
if(NOT DEFINED sGroupName)
set(sGroupName "${sCMakeConfig}")
endif()
string(TOUPPER "${sGroupName}" sGroupName)
string(MAKE_C_IDENTIFIER "${sGroupName}" sGroupName)
string(TOUPPER "${sTargetName}" sTargetUpper)
string(TOLOWER "${sTargetName}" sTargetLower)
string(MAKE_C_IDENTIFIER "${sTargetUpper}" sTargetUpper)
if(NX_INSTALL_FORCE_LOWERCASE)
string(TOLOWER "${sTargetName}" sTargetName)
endif()
if(NOT DEFINED ${sTargetUpper}_SHARED_DEFINE)
list(APPEND _NX_PROPOGATE_LOCAL "${sTargetUpper}_SHARED_DEFINE")
set(${sTargetUpper}_SHARED_DEFINE "BUILDING_${sTargetUpper}")
endif()
if(NOT DEFINED ${sTargetUpper}_STATIC_DEFINE)
list(APPEND _NX_PROPOGATE_LOCAL "${sTargetUpper}_STATIC_DEFINE")
set(${sTargetUpper}_STATIC_DEFINE "STATIC_${sTargetUpper}")
endif()
list(APPEND lsDefinesPRIVATE "${${sTargetUpper}_SHARED_DEFINE}")
if(bTestCase)
list(APPEND lsDefinesPRIVATE "_TEST")
unset(sGroupName)
endif()
if(TARGET "${sTargetLower}")
set(sTargetLower "${sTargetLower}_executable")
endif()
list(APPEND ${vTargetList} "${sTargetLower}")
list(APPEND lsDefinesPRIVATE "_CONSOLE")
if(DEFINED NX_TARGET_PLATFORM_WINDOWS)
list(APPEND lsDefinesPRIVATE "_UNICODE" "UNICODE")
endif()
add_executable("${sTargetLower}")
set_target_properties("${sTargetLower}" PROPERTIES
DEFINE_SYMBOL "${${sTargetUpper}_SHARED_DEFINE}"
OUTPUT_NAME "${sTargetName}"
MACOSX_BUNDLE FALSE
WIN32_EXECUTABLE FALSE)
nx_target_compile_definitions("${sTargetLower}"
PRIVATE ${NXBUILD_COMPILER_DEFINITIONS} ${lsDefinesPRIVATE}
PUBLIC ${lsDefinesPUBLIC}
INTERFACE ${lsDefinesINTERFACE})
nx_target_compile_features("${sTargetLower}"
PRIVATE ${lsFeaturesPRIVATE}
PUBLIC ${lsFeaturesPUBLIC}
INTERFACE ${lsFeaturesINTERFACE})
nx_target_compile_options("${sTargetLower}"
PRIVATE ${NXBUILD_COMPILER_FLAGS} ${NXBUILD_COMPILER_FLAGS_EXE} ${lsNXFlagsPRIVATE}
PUBLIC ${lsNXFlagsPUBLIC}
INTERFACE ${lsNXFlagsINTERFACE})
nx_target_include_directories("${sTargetLower}"
GROUP ${sGroupName} GENDIR "${sCMakeConfig}.gendir"
PRIVATE ${lsIncludePRIVATE}
PUBLIC ${lsIncludePUBLIC}
INTERFACE ${lsIncludeINTERFACE})
nx_target_link_libraries("${sTargetLower}"
PRIVATE ${lsLibsPRIVATE}
PUBLIC ${lsLibsPUBLIC}
INTERFACE ${lsLibsINTERFACE})
nx_target_link_options("${sTargetLower}"
PRIVATE ${NXBUILD_LINKER_FLAGS} ${NXBUILD_LINKER_FLAGS_EXE} ${lsLDFlagsPRIVATE}
PUBLIC ${lsLDFlagsPUBLIC}
INTERFACE ${lsLDFlagsINTERFACE})
nx_target_sources("${sTargetLower}" STRIP_PATHS ${lsStripPaths}
GROUP ${sGroupName} GENDIR "${sCMakeConfig}.gendir"
PRIVATE ${lsSourcePRIVATE}
PUBLIC ${lsSourcePUBLIC}
INTERFACE ${lsSourceINTERFACE})
get_target_property(sTargetFilename ${sTargetLower} OUTPUT_NAME)
if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_BUILD_TYPE)
string(TOUPPER "${CMAKE_BUILD_TYPE}_POSTFIX" sPostfixProperty)
get_target_property(sPropertyPostfix ${sTargetLower} ${sPostfixProperty})
if(sPropertyPostfix)
set(sTargetFilename "${sTargetFilename}${sPropertyPostfix}")
endif()
endif()
set(sTargetFilename "${CMAKE_EXECUTABLE_PREFIX}${sTargetFilename}${CMAKE_EXECUTABLE_SUFFIX}")
if(DEFINED NX_TARGET_CONFIGURATION_RELEASE AND NOT bTestCase)
if(DEFINED CMAKE_OBJCOPY AND EXISTS "${CMAKE_OBJCOPY}")
add_custom_command(TARGET ${sTargetLower} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $<TARGET_FILE:${sTargetLower}> $<TARGET_FILE:${sTargetLower}>.debug
COMMAND ${CMAKE_OBJCOPY} --strip-debug $<TARGET_FILE:${sTargetLower}>
COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink $<TARGET_FILE:${sTargetLower}>.debug $<TARGET_FILE:${sTargetLower}>
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${sTargetFilename}.debug"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "[objcopy] Saving Debug Symbols")
if(DEFINED sGroupName)
list(APPEND _NX_PROPOGATE_SET "NX_DEBUG_${sGroupName}_CONSOLE")
list(APPEND _NX_PROPOGATE_SORT "NX_DEBUG_${sGroupName}_CONSOLE")
list(APPEND NX_DEBUG_${sGroupName}_CONSOLE "${CMAKE_CURRENT_BINARY_DIR}/${sTargetFilename}.debug")
endif()
endif()
endif()
if(DEFINED sGroupName)
list(APPEND _NX_PROPOGATE_SET "NX_LIST_COMPONENT_GROUPS" "NX_COMPONENT_${sGroupName}_CONSOLE")
list(APPEND _NX_PROPOGATE_SORT "NX_LIST_COMPONENT_GROUPS" "NX_COMPONENT_${sGroupName}_CONSOLE")
list(APPEND NX_LIST_COMPONENT_GROUPS ${sGroupName})
list(APPEND NX_COMPONENT_${sGroupName}_CONSOLE "${sTargetLower}")
if(NOT DEFINED NX_COMPONENT_${sGroupName}_NAME)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroupName}_NAME")
set(NX_COMPONENT_${sGroupName}_NAME "${sCMakeConfig}")
endif()
if(NOT DEFINED NX_COMPONENT_${sGroupName}_EXPORT AND bExportCreate)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroupName}_EXPORT")
set(NX_COMPONENT_${sGroupName}_EXPORT "${sCMakeConfig}")
endif()
endif()
_nx_function_prop()
endfunction()
function(nx_add_executable vTargetList sTargetName sTypeOptional)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${vTargetList}")
set(lsTagsApplication "APPLICATION" "GUI" "WIN32_EXECUTABLE")
set(lsTagsConsole "CONSOLE" "EXECUTABLE")
if("${sTypeOptional}" IN_LIST lsTagsApplication)
set(sTargetType "APPLICATION")
unset(sTypeOptional)
elseif("${sTypeOptional}" IN_LIST lsTagsConsole)
set(sTargetType "CONSOLE")
unset(sTypeOptional)
else()
set(sTargetType "CONSOLE")
endif()
unset(sCMakeConfig)
unset(sGroupName)
unset(lsPassArgs)
unset(sGenerateExport)
unset(sGenerateVersion)
set(lsParseModes "CFLAGS" "CXXFLAGS" "DEFINES" "DEPENDS" "INCLUDES" "LDFLAGS" "FEATURES" "GROUP" "PACKAGE" "SOURCE" "STRIP_PATHS")
set(lsVisibilityModes "PRIVATE" "PUBLIC" "INTERFACE")
set(sParseMode "SOURCE")
set(sVisibilityMode "PRIVATE")
foreach(sArgument ${sTypeOptional} ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
list(APPEND lsPassArgs "${sArgument}")
set(sParseMode "${sArgument}")
set(sVisibilityMode "PRIVATE")
elseif("${sArgument}" IN_LIST lsVisibilityModes)
list(APPEND lsPassArgs "${sArgument}")
set(sVisibilityMode "${sArgument}")
elseif(sArgument STREQUAL "EXPORT_HEADER")
if(sParseMode STREQUAL "INCLUDES")
set(sParseMode "${sArgument}")
elseif(sParseMode STREQUAL "VERSION_HEADER")
set(sParseMode "COMBINED_HEADER")
else()
message(AUTHOR_WARNING "nx_add_executable: Ignoring '${sArgument}' Outside INCLUDES")
endif()
elseif(sArgument STREQUAL "VERSION_HEADER")
if(sParseMode STREQUAL "INCLUDES")
set(sParseMode "${sArgument}")
elseif(sParseMode STREQUAL "EXPORT_HEADER")
set(sParseMode "COMBINED_HEADER")
else()
message(AUTHOR_WARNING "nx_add_executable: Ignoring '${sArgument}' Outside INCLUDES")
endif()
elseif(sArgument STREQUAL "TEST")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "GROUP")
if(DEFINED sGroupName)
message(AUTHOR_WARNING "nx_add_executable: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sGroupName "${sArgument}")
endif()
elseif(sParseMode STREQUAL "CFLAGS")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "CXXFLAGS")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "DEFINES")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "DEPENDS")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "FEATURES")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "INCLUDES")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "COMBINED_HEADER")
if(DEFINED sGenerateExport OR DEFINED sGenerateVersion)
message(AUTHOR_WARNING "nx_add_executable: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sGenerateExport "${sArgument}")
set(sGenerateVersion "${sArgument}")
endif()
list(APPEND lsPassArgs "${sArgument}")
list(APPEND lsInclude${sVisibilityMode} "${sArgument}")
set(sParseMode "INCLUDES")
elseif(sParseMode STREQUAL "EXPORT_HEADER")
if(DEFINED sGenerateExport)
message(AUTHOR_WARNING "nx_add_executable: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sGenerateExport "${sArgument}")
endif()
list(APPEND lsPassArgs "${sArgument}")
list(APPEND lsInclude${sVisibilityMode} "${sArgument}")
set(sParseMode "INCLUDES")
elseif(sParseMode STREQUAL "VERSION_HEADER")
if(DEFINED sGenerateVersion)
message(AUTHOR_WARNING "nx_add_executable: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sGenerateVersion "${sArgument}")
endif()
list(APPEND lsPassArgs "${sArgument}")
list(APPEND lsInclude${sVisibilityMode} "${sArgument}")
set(sParseMode "INCLUDES")
elseif(sParseMode STREQUAL "LDFLAGS")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "SOURCE")
list(APPEND lsPassArgs "${sArgument}")
elseif(sParseMode STREQUAL "PACKAGE")
if(DEFINED sCMakeConfig)
message(AUTHOR_WARNING "nx_add_executable: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sCMakeConfig "${sArgument}")
endif()
elseif(sParseMode STREQUAL "STRIP_PATHS")
list(APPEND lsPassArgs "${sArgument}")
endif()
endforeach()
if(NOT DEFINED sCMakeConfig)
if(DEFINED sGroupName)
set(sCMakeConfig "${sGroupName}")
else()
set(sCMakeConfig "${sTargetName}")
endif()
endif()
list(APPEND lsPassArgs "PACKAGE" "${sCMakeConfig}")
if(NOT DEFINED sGroupName)
set(sGroupName "${sCMakeConfig}")
endif()
string(TOUPPER "${sGroupName}" sGroupName)
string(MAKE_C_IDENTIFIER "${sGroupName}" sGroupName)
list(APPEND lsPassArgs "GROUP" "${sGroupName}")
string(TOUPPER "${sTargetName}" sTargetUpper)
string(TOLOWER "${sTargetName}" sTargetLower)
string(MAKE_C_IDENTIFIER "${sTargetUpper}" sTargetUpper)
if(DEFINED sGenerateExport)
get_filename_component(sGenerateExport "${sGenerateExport}" ABSOLUTE)
file(RELATIVE_PATH sGenerateRelative "${CMAKE_CURRENT_BINARY_DIR}" "${sGenerateExport}")
string(SUBSTRING "${sGenerateRelative}" 0 2 sGenerateTest)
if(sGenerateTest STREQUAL "..")
file(RELATIVE_PATH sGenerateRelative "${CMAKE_CURRENT_SOURCE_DIR}" "${sGenerateExport}")
string(SUBSTRING "${sGenerateRelative}" 0 2 sGenerateTest)
if(sGenerateTest STREQUAL "..")
message(FATAL_ERROR "nx_add_executable: Invalid External EXPORT_HEADER ('${sGenerateExport}'")
else()
set(sGenerateExport "${sGenerateRelative}")
endif()
else()
set(sGenerateExport "${sGenerateRelative}")
endif()
set(sBuildName "${sCMakeConfig}.gendir/")
set(sExportHeader "${sGenerateExport}/${sTargetLower}_export.h")
list(APPEND _NX_PROPOGATE_LOCAL "${sTargetUpper}_SHARED_DEFINE" "${sTargetUpper}_STATIC_DEFINE")
set(${sTargetUpper}_SHARED_DEFINE "BUILDING_${sTargetUpper}")
set(${sTargetUpper}_STATIC_DEFINE "STATIC_${sTargetUpper}")
list(APPEND lsPassArgs "SOURCE" "${CMAKE_CURRENT_BINARY_DIR}/${sExportHeader}")
nx_create_build_path("${sExportHeader}" GENDIR "${sBuildName}")
nx_generate_export_header("${sTargetName}"
EXPORT_FILE_NAME "${sBuildName}${sExportHeader}"
STATIC_DEFINE "STATIC_${sTargetUpper}"
DEFINE_SYMBOL "BUILDING_${sTargetUpper}")
endif()
if(DEFINED sGenerateVersion)
get_filename_component(sGenerateVersion "${sGenerateVersion}" ABSOLUTE)
file(RELATIVE_PATH sGenerateRelative "${CMAKE_CURRENT_BINARY_DIR}" "${sGenerateVersion}")
string(SUBSTRING "${sGenerateRelative}" 0 2 sGenerateTest)
if(sGenerateTest STREQUAL "..")
file(RELATIVE_PATH sGenerateRelative "${CMAKE_CURRENT_SOURCE_DIR}" "${sGenerateVersion}")
string(SUBSTRING "${sGenerateRelative}" 0 2 sGenerateTest)
if(sGenerateTest STREQUAL "..")
message(FATAL_ERROR "nx_add_executable: Invalid External VERSION_HEADER ('${sGenerateVersion}'")
else()
set(sGenerateVersion "${sGenerateRelative}")
endif()
else()
set(sGenerateVersion "${sGenerateRelative}")
endif()
set(sBuildName "${sCMakeConfig}.gendir/")
set(sGitHeader "${sGenerateVersion}/${sTargetLower}_git.h")
set(sVersionHeader "${sGenerateVersion}/${sTargetLower}_version.h")
unset(sCustomContent)
nx_create_build_path("${sVersionHeader}" GENDIR "${sBuildName}")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git")
list(APPEND lsPassArgs "SOURCE" "${CMAKE_CURRENT_BINARY_DIR}/${sGitHeader}")
nx_generate_vcs_header("${sTargetName}"
GIT_FILE_NAME "${sBuildName}${sGitHeader}")
set(sCustomContent "${sCustomContent}#include \"${sTargetLower}_git.h\"")
endif()
if(DEFINED sCustomContent)
set(sCustomContent "\n${sCustomContent}\n")
endif()
list(APPEND lsPassArgs "SOURCE" "${CMAKE_CURRENT_BINARY_DIR}/${sVersionHeader}")
nx_generate_version_header("${sTargetName}"
VERSION_FILE_NAME "${sBuildName}${sVersionHeader}"
CUSTOM_CONTENT_FROM_VARIABLE sCustomContent)
endif()
if(sTargetType STREQUAL "APPLICATION")
nx_add_executable_application(${vTargetList} "${sTargetName}" ${lsPassArgs})
elseif(sTargetType STREQUAL "CONSOLE")
nx_add_executable_console(${vTargetList} "${sTargetName}" ${lsPassArgs})
else()
message(FATAL_ERROR "nx_add_executable: Invalid Target Type ('${sTargetType}')")
endif()
_nx_function_prop()
endfunction()

File diff suppressed because it is too large Load Diff

View File

@ -1,163 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(CheckCompilerFlagNX)
function(nx_check_linker_flag sFlag vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL ${vResult})
if("x${CMAKE_TRY_COMPILE_TARGET_TYPE}" STREQUAL "xSTATIC_LIBRARY")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${sFlag}")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${sFlag}")
endif()
nx_check_compiler_flag("" ${vResult})
_nx_function_prop()
endfunction()
function(nx_test_linker_flags)
_nx_function_init()
nxb_set_check_flags()
unset(vBOOLEAN_VARIABLE)
unset(vRAW_VARIABLE)
unset(vLIST_VARIABLE)
unset(lsGenExpressions)
unset(lsCheckFlags)
set(bSetType OFF)
set(lsParseModes "BOOLEAN_VARIABLE" "CHECK" "GENEXPR" "LIST_VARIABLE" "RAW_VARIABLE")
set(sParseMode "LIST_VARIABLE")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
elseif(sParseMode STREQUAL "GENEXPR")
list(APPEND lsGenExpressions "${sArgument}")
foreach(sConfig "Release" "Debug" "RelWithDebInfo" "MinSizeRel")
if(sGeneratorExpression MATCHES "${sConfig}")
set(CMAKE_TRY_COMPILE_CONFIGURATION "${sConfig}")
if(sConfig STREQUAL "${CMAKE_BUILD_TYPE}")
unset(sGeneratorExpression)
endif()
endif()
endforeach()
elseif(sParseMode MATCHES "BOOLEAN_VARIABLE|LIST_VARIABLE|RAW_VARIABLE")
if(DEFINED v${sParseMode})
message(AUTHOR_WARNING "nx_test_linker_flags: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(v${sParseMode} "${sArgument}")
if(sArgument MATCHES "_0$|_0_|_DEBUG$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "Debug")
elseif(sArgument MATCHES "_1$|_1_|_MINSIZEREL$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "MinSizeRel")
elseif(sArgument MATCHES "_2$|_2_|_RELWITHDEBINFO$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "RelWithDebInfo")
elseif(sArgument MATCHES "_3$|_3_|_RELEASE$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "Release")
endif()
if(NOT bSetType)
if(sArgument MATCHES "_EXE$|_EXE_")
set(bSetType ON)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_EXE}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_EXE}")
elseif(sArgument MATCHES "_MOD$|_MODULE_")
set(bSetType ON)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_MOD}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_MOD}")
elseif(sArgument MATCHES "_DLL$|_SHARED_")
set(bSetType ON)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_DLL}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_DLL}")
elseif(sArgument MATCHES "_LIB$|_STATIC_")
set(bSetType ON)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_LIB}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_LIB}")
endif()
endif()
endif()
set(sParseMode "CHECK")
else()
list(APPEND lsCheckFlags "${sArgument}")
endif()
endforeach()
set(bSkipChecks OFF)
if(DEFINED CMAKE_TRY_COMPILE_CONFIGURATION)
if(NX_TARGET_CONFIGURATION_MULTI AND NOT "${CMAKE_TRY_COMPILE_CONFIGURATION}" IN_LIST CMAKE_CONFIGURATION_TYPES)
set(bSkipChecks ON)
elseif(NOT NX_TARGET_CONFIGURATION_MULTI AND NOT CMAKE_TRY_COMPILE_CONFIGURATION STREQUAL "${CMAKE_BUILD_TYPE}")
set(bSkipChecks ON)
endif()
endif()
if(NOT bSkipChecks)
list(APPEND _NX_PROPOGATE_LOCAL ${vLIST_VARIABLE} ${vRAW_VARIABLE} ${vBOOLEAN_VARIABLE})
list(APPEND _NX_PROPOGATE_SORT ${vLIST_VARIABLE} ${vRAW_VARIABLE} ${vBOOLEAN_VARIABLE})
unset(sGenExpression)
if(DEFINED lsGenExpressions)
list(LENGTH lsGenExpressions nGenExpressions)
if(nGenExpressions GREATER 1)
string(REPLACE ";" "," sGenExpression "$<AND:${lsGenExpressions}>")
else()
set(sGenExpression "${lsGenExpressions}")
endif()
endif()
foreach(sFlag ${lsCheckFlags})
nx_parse_link_options("${sFlag}" sFlagParsed)
string(TOUPPER "HAS_LDFLAG${sFlagParsed}" vResult)
string(MAKE_C_IDENTIFIER ${vResult} vResult)
nx_check_linker_flag("${sFlagParsed}" ${vResult})
if(${vResult})
if(DEFINED vLIST_VARIABLE)
if(DEFINED sGenExpression)
list(APPEND ${vLIST_VARIABLE} "$<${sGenExpression}:${sFlag}>")
else()
list(APPEND ${vLIST_VARIABLE} "${sFlag}")
endif()
endif()
if(DEFINED vBOOLEAN_VARIABLE)
set(${vBOOLEAN_VARIABLE} ON)
endif()
if(DEFINED vRAW_VARIABLE)
list(APPEND ${vRAW_VARIABLE} "${sFlagParsed}")
endif()
if("x${CMAKE_TRY_COMPILE_TARGET_TYPE}" STREQUAL "xSTATIC_LIBRARY")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${sFlagParsed}")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${sFlagParsed}")
endif()
endif()
endforeach()
endif()
_nx_function_prop()
endfunction()

View File

@ -1,41 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
if(NX_PROJECT_LANGUAGE_C)
include(CheckCSourceCompiles)
endif()
if(NX_PROJECT_LANGUAGE_CXX)
include(CheckCXXSourceCompiles)
endif()
include(NXClient)
function(nx_check_source_compiles sCode vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL ${vResult})
if(NX_PROJECT_LANGUAGE_CXX)
check_cxx_source_compiles("${sCode}" ${vResult} ${ARGN})
elseif(NX_PROJECT_LANGUAGE_C)
check_c_source_compiles("${sCode}" ${vResult} ${ARGN})
endif()
_nx_function_prop()
endfunction()

View File

@ -1,64 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2020 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.
# -------------------------------
_nx_include_guard()
include(CMakeDependentOption)
include(NXClient)
function(nx_clang_format)
_nx_function_guard(nx_clang_format)
_nx_function_init()
unset(lsSourceFiles)
foreach(sGroup ${NX_LIST_COMPONENT_GROUPS})
if(DEFINED NX_LIST_${sGroup}_SOURCE)
list(APPEND lsSourceFiles ${NX_LIST_${sGroup}_SOURCE})
endif()
endforeach()
find_program(CLANG_FORMAT_EXECUTABLE NAMES clang-format)
set(bFormatRules OFF)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.clang-format")
set(sFormatRules "${CMAKE_CURRENT_SOURCE_DIR}/.clang-format")
set(bFormatRules ON)
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.clang-format")
if("x${ARGN}" STREQUAL "x")
set(sFormatRules "${CMAKE_CURRENT_SOURCE_DIR}/../.clang-format")
set(bFormatRules ON)
endif()
endif()
cmake_dependent_option(CREATE_TARGET_FORMAT "Create 'format' Target" ${bFormatRules} "CLANG_FORMAT_EXECUTABLE" OFF)
if(CREATE_TARGET_FORMAT AND DEFINED lsSourceFiles)
list(REMOVE_DUPLICATES lsSourceFiles)
if(DEFINED sFormatRules)
file(COPY "${sFormatRules}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
endif()
add_custom_target(
"format" ${ARGN}
COMMAND "${CLANG_FORMAT_EXECUTABLE}" -fallback-style=none -style=file -i ${lsSourceFiles}
DEPENDS ${lsSourceFiles} ${sFormatRules}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "[clang-format] Formatting Source Files"
VERBATIM)
endif()
endfunction()

View File

@ -1,68 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_create_build_path)
_nx_function_init()
unset(sBuildName)
set(lsParseModes "GENDIR" "PATHS")
set(sParseMode "PATHS")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
elseif(sParseMode STREQUAL "GENDIR")
if(DEFINED sBuildName)
message(AUTHOR_WARNING "nx_create_build_path: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sBuildName "${sArgument}/")
string(REPLACE "//" "/" sBuildName "${sBuildName}")
endif()
else()
if(NOT IS_DIRECTORY "${sDirName}")
get_filename_component(sArgument "${sArgument}" DIRECTORY)
endif()
list(APPEND lsDirNames "${sArgument}")
endif()
endforeach()
if(DEFINED sBuildName)
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}_folder.dox")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}_folder.dox"
"//! @dir ${sBuildName}\n" "//! Generated Files. These files are dynamically-generated.\n")
endif()
endif()
foreach(sDirName ${lsDirNames})
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}${sDirName}/_folder.dox")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}${sDirName}")
file(
WRITE "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}${sDirName}/_folder.dox"
"//! @dir ${sBuildName}${sDirName}\n"
"//! Generated Files. These files are dynamically-generated from the source '${sDirName}' directory.\n")
endif()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,125 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2020 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_generate_export_header sBaseName)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${sBaseName}_SHARED_DEFINE" "${sBaseName}_STATIC_DEFINE")
string(TOUPPER "${sBaseName}" sBaseName)
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
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_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_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 "${GEH_INCLUDE_GUARD_NAME}" GEH_INCLUDE_GUARD_NAME)
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_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()
configure_file("${NXBUILD_PATH_RESOURCES}/GenerateExportHeader.h.configure" "${GEH_EXPORT_FILE_NAME}")
_nx_function_prop()
endfunction()

View File

@ -1,104 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2020 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_generate_vcs_header sBaseName)
string(TOUPPER "${sBaseName}" sBaseName)
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
unset(VCS_BASE_NAME)
unset(VCS_CUSTOM_CONTENT)
unset(VCS_CUSTOM_CONTENT_FROM_VARIABLE)
unset(VCS_INCLUDE_GUARD_NAME)
unset(VCS_PREFIX_NAME)
unset(VCS_ANY_FILE_NAME)
unset(VCS_GIT_FILE_NAME)
unset(VCS_GIT_MACRO_NAME)
set(lsParseModes BASE_NAME GIT_MACRO_NAME GIT_FILE_NAME INCLUDE_GUARD_NAME PREFIX_NAME CUSTOM_CONTENT_FROM_VARIABLE)
set(sParseMode "VERSION_FILE_NAME")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
else()
set(VCS_${sParseMode} "${sArgument}")
endif()
endforeach()
if(NOT DEFINED VCS_BASE_NAME)
set(VCS_BASE_NAME "${sBaseName}")
endif()
if(NOT DEFINED VCS_ANY_FILE_NAME)
string(TOLOWER "${VCS_BASE_NAME}_vcs.h" VCS_ANY_FILE_NAME)
endif()
if(DEFINED NX_GIT_WATCH_VARS AND NOT DEFINED VCS_GIT_FILE_NAME)
string(TOLOWER "${VCS_BASE_NAME}_git.h" VCS_GIT_FILE_NAME)
endif()
if(NOT DEFINED VCS_GIT_MACRO_NAME)
set(VCS_GIT_MACRO_NAME "${VCS_PREFIX_NAME}${VCS_BASE_NAME}_GIT")
endif()
if(NOT DEFINED VCS_INCLUDE_GUARD_NAME)
if(DEFINED VCS_GIT_FILE_NAME)
get_filename_component(VCS_INCLUDE_GUARD_NAME "${VCS_GIT_FILE_NAME}" NAME)
else()
get_filename_component(VCS_INCLUDE_GUARD_NAME "${VCS_ANY_FILE_NAME}" NAME)
endif()
string(TOUPPER "${VCS_INCLUDE_GUARD_NAME}" VCS_INCLUDE_GUARD_NAME)
string(MAKE_C_IDENTIFIER "${VCS_INCLUDE_GUARD_NAME}" VCS_INCLUDE_GUARD_NAME)
set(VCS_INCLUDE_GUARD_NAME "${VCS_PREFIX_NAME}${VCS_INCLUDE_GUARD_NAME}")
endif()
if(DEFINED VCS_CUSTOM_CONTENT_FROM_VARIABLE)
if(DEFINED ${VCS_CUSTOM_CONTENT_FROM_VARIABLE})
set(VCS_CUSTOM_CONTENT "${${VCS_CUSTOM_CONTENT_FROM_VARIABLE}}")
endif()
endif()
if(DEFINED NX_PROJECT_PACKAGING_VERSION)
set(NX_PROJECT_VERSION_TAG ${NX_PROJECT_PACKAGING_VERSION} ${NX_PROJECT_VERSION_TAG})
endif()
if(DEFINED NX_PROJECT_VERSION_TAG)
string(REPLACE ";" "." NX_PROJECT_VERSION_TAG "-${NX_PROJECT_VERSION_TAG}")
endif()
if(NOT DEFINED NX_PROJECT_VERSION_BUILD AND DEFINED VCS_GIT_FILE_NAME)
list(APPEND NX_PROJECT_VERSION_BUILD "git" "\${NX_GIT_COMMIT_HASH}")
endif()
if(DEFINED NX_PROJECT_VERSION_BUILD)
string(REPLACE ";" "." NX_PROJECT_VERSION_BUILD "+${NX_PROJECT_VERSION_BUILD}")
endif()
set(NX_PROJECT_VERSION_FULL "${NX_PROJECT_API_VERSION}${NX_PROJECT_VERSION_TAG}${NX_PROJECT_VERSION_BUILD}")
if(DEFINED VCS_GIT_FILE_NAME)
if(NOT DEFINED NX_GIT_WATCH_VARS)
include(GitWatcher)
endif()
get_filename_component(sIntermediate "${VCS_GIT_FILE_NAME}" NAME)
configure_file("${NXBUILD_PATH_RESOURCES}/GitWatcher.h.configure"
"${CMAKE_CURRENT_BINARY_DIR}/${sIntermediate}.configure" @ONLY)
nx_git_configure("${CMAKE_CURRENT_BINARY_DIR}/${sIntermediate}.configure" "${VCS_GIT_FILE_NAME}")
else()
message(AUTHOR_WARNING "nx_generate_vcs_header: No VCS System Specified")
endif()
endfunction()

View File

@ -1,99 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2020 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_generate_version_header sBaseName)
if(NOT DEFINED NX_PROJECT_API_MAJOR)
set(NX_PROJECT_API_MAJOR 0)
endif()
if(NOT DEFINED NX_PROJECT_API_MINOR)
set(NX_PROJECT_API_MINOR 0)
endif()
if(NOT DEFINED NX_PROJECT_API_PATCH)
set(NX_PROJECT_API_PATCH 0)
endif()
set(NX_PROJECT_API_HEX "${NX_PROJECT_API_MAJOR}*65536 + ${NX_PROJECT_API_MINOR}*256 + ${NX_PROJECT_API_PATCH}")
if(CMAKE_VERSION VERSION_LESS 3.13)
math(EXPR NX_PROJECT_API_HEX "${NX_PROJECT_API_HEX}")
else()
math(EXPR NX_PROJECT_API_HEX "${NX_PROJECT_API_HEX}" OUTPUT_FORMAT HEXADECIMAL)
endif()
set(NX_PROJECT_VERSION_TAG ${NX_PROJECT_PACKAGING_VERSION} ${NX_PROJECT_API_PRERELEASE} ${NX_PROJECT_VERSION_TAG})
if(DEFINED NX_PROJECT_VERSION_TAG AND NX_PROJECT_VERSION_TAG)
string(REPLACE ";" "." NX_PROJECT_VERSION_TAG "-${NX_PROJECT_VERSION_TAG}")
endif()
if(DEFINED NX_PROJECT_VERSION_BUILD AND NX_PROJECT_VERSION_BUILD)
string(REPLACE ";" "." NX_PROJECT_VERSION_BUILD "+${NX_PROJECT_VERSION_BUILD}")
endif()
set(NX_PROJECT_VERSION_FULL "${NX_PROJECT_API_VERSION}${NX_PROJECT_VERSION_TAG}${NX_PROJECT_VERSION_BUILD}")
string(TOUPPER "${sBaseName}" sBaseName)
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
unset(GVH_BASE_NAME)
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(sParseMode "VERSION_FILE_NAME")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
else()
set(GVH_${sParseMode} "${sArgument}")
endif()
endforeach()
if(NOT DEFINED GVH_BASE_NAME)
set(GVH_BASE_NAME "${sBaseName}")
endif()
if(NOT DEFINED GVH_VERSION_FILE_NAME)
string(TOLOWER "${GVH_BASE_NAME}_version.h" GVH_VERSION_FILE_NAME)
endif()
if(NOT DEFINED GVH_VERSION_MACRO_NAME)
set(GVH_VERSION_MACRO_NAME "${GVH_PREFIX_NAME}${GVH_BASE_NAME}_VERSION")
endif()
if(NOT DEFINED GVH_INCLUDE_GUARD_NAME)
get_filename_component(GVH_INCLUDE_GUARD_NAME "${GVH_VERSION_FILE_NAME}" NAME)
string(TOUPPER "${GVH_INCLUDE_GUARD_NAME}" GVH_INCLUDE_GUARD_NAME)
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(DEFINED GVH_CUSTOM_CONTENT_FROM_VARIABLE)
if(DEFINED ${GVH_CUSTOM_CONTENT_FROM_VARIABLE})
set(GVH_CUSTOM_CONTENT "${${GVH_CUSTOM_CONTENT_FROM_VARIABLE}}")
endif()
endif()
configure_file("${NXBUILD_PATH_RESOURCES}/GenerateVersionHeader.h.configure" "${GVH_VERSION_FILE_NAME}")
endfunction()

View File

@ -32,8 +32,8 @@ if(NOT DEFINED GIT_EXECUTABLE)
find_program(GIT_EXECUTABLE NAMES git)
endif()
set(NX_GIT_WATCH_VARS "GIT_RETRIEVED_STATE" "GIT_BRANCH_NAME" "GIT_COMMIT_HASH" "GIT_IS_DIRTY")
set(NX_GIT_WATCH_FILE "${CMAKE_CURRENT_LIST_FILE}")
set(NX_GITWATCH_FILE "${CMAKE_CURRENT_LIST_FILE}")
set(NX_GITWATCH_VARS "GIT_RETRIEVED_STATE" "GIT_BRANCH_NAME" "GIT_COMMIT_HASH" "GIT_IS_DIRTY")
macro(_nx_git_command)
set(nGitResult 255)
@ -90,7 +90,7 @@ function(nx_git_watcher)
string(SHA256 sGitState "${sGitInput}")
endif()
foreach(vGitWatch ${NX_GIT_WATCH_VARS})
foreach(vGitWatch ${NX_GITWATCH_VARS})
string(SHA256 sGitState "${sGitState}$ENV{${vGitWatch}}")
endforeach()
@ -99,7 +99,6 @@ function(nx_git_watcher)
file(READ "${NX_GIT_FILE_STATE}" sGitPrevious)
if(sGitPrevious STREQUAL "${sGitState}")
set(bGitChanged OFF)
return()
endif()
endif()
@ -108,7 +107,7 @@ function(nx_git_watcher)
endif()
if(bGitChanged OR NOT EXISTS "${NX_GIT_FILE_OUTPUT}")
foreach(vGitWatch ${NX_GIT_WATCH_VARS})
foreach(vGitWatch ${NX_GITWATCH_VARS})
set(NX_${vGitWatch} $ENV{${vGitWatch}})
endforeach()
configure_file("${NX_GIT_FILE_INPUT}" "${NX_GIT_FILE_OUTPUT}")
@ -117,7 +116,7 @@ endfunction()
function(nx_git_check)
nx_git_update("${CMAKE_CURRENT_SOURCE_DIR}")
foreach(vGitWatch ${NX_GIT_WATCH_VARS})
foreach(vGitWatch ${NX_GITWATCH_VARS})
set(NX_${vGitWatch}
$ENV{${vGitWatch}}
PARENT_SCOPE)
@ -134,12 +133,8 @@ function(nx_git_configure sGitInput sGitOutput)
${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_GIT_WATCH_FILE}")
if(NOT EXISTS "${sGitOutput}")
nx_git_check()
configure_file("${sGitInput}" "${sGitOutput}")
endif()
"${NX_GITWATCH_FILE}")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${sGitInput}")
endfunction()
nx_git_watcher()

View File

@ -20,169 +20,12 @@ include(NXClient)
_nx_include_guard()
set(NXBUILD_PATH_CMAKE "${CMAKE_CURRENT_LIST_DIR}")
cmake_policy(PUSH)
cmake_policy(VERSION 3.9)
# ===================================================================
# Global Defaults
# ===================================================================
# Installation Paths
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF)
set(CMAKE_INSTALL_NAME_DIR "@rpath")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON)
set(CMAKE_SKIP_BUILD_RPATH OFF)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX
"${NX_INSTALL_PATH_DRIVE}${NX_INSTALL_PATH_BASE}"
CACHE PATH "" FORCE)
endif()
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${NX_INSTALL_PATH_SHARED}")
if(NOT DEFINED CMAKE_STAGING_PREFIX)
if(DEFINED CMAKE_SYSROOT AND DEFINED NX_INSTALL_PATH_DRIVE)
set(CMAKE_STAGING_PREFIX
"${CMAKE_SYSROOT}${NX_INSTALL_PATH_BASE}"
CACHE PATH "" FORCE)
elseif(DEFINED NX_INSTALL_PATH_STAGING)
set(CMAKE_STAGING_PREFIX
"${NX_INSTALL_PATH_STAGING}"
CACHE PATH "" FORCE)
endif()
endif()
# Target Names
set(CMAKE_SHARED_MODULE_PREFIX "")
set(CMAKE_DEBUG_POSTFIX ".d")
set(CMAKE_MINSIZEREL_POSTFIX ".n")
set(CMAKE_RELWITHDEBINFO_POSTFIX "")
set(CMAKE_RELEASE_POSTFIX ".x")
if("x${CMAKE_STATIC_LIBRARY_SUFFIX}" STREQUAL "x${CMAKE_IMPORT_LIBRARY_SUFFIX}")
set(CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif()
if(NX_TARGET_PLATFORM_DARWIN)
set(CMAKE_SHARED_MODULE_SUFFIX ".bundle")
endif()
# CMake Options
if(NX_HOST_COMPILER_CLANG)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
endif()
if(NX_TARGET_PLATFORM_WINDOWS)
if(NX_TARGET_ARCHITECTURE_X86_64 OR NX_TARGET_ARCHITECTURE_I686)
if(NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR AND NOT NX_TARGET_PLATFORM_NATIVE)
find_program(CMAKE_CROSSCOMPILING_EMULATOR NAMES "wine64" "wine")
endif()
endif()
endif()
if(NOT DEFINED CMAKE_EXPORT_PACKAGE_REGISTRY)
if(NOT DEFINED CMAKE_EXPORT_NO_PACKAGE_REGISTRY OR NOT CMAKE_EXPORT_NO_PACKAGE_REGISTRY)
set(CMAKE_EXPORT_PACKAGE_REGISTRY ON)
endif()
endif()
# Build Options
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(NX_PROJECT_LANGUAGE_C)
set(CMAKE_C_VISIBILITY_PRESET "hidden")
if(NOT DEFINED CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED OFF)
endif()
endif()
if(NX_PROJECT_LANGUAGE_CXX)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_VISIBILITY_PRESET "hidden")
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
if(NX_HOST_COMPILER_CLANG)
# if(NX_COMPILER_CLANG_VERSION VERSION_GREATER_EQUAL 9.0 AND CMAKE_VERSION VERSION_GREATER 3.11)
# set(CMAKE_CXX_STANDARD 20)
# elseif(NX_COMPILER_CLANG_VERSION VERSION_GREATER_EQUAL 5.0)
# set(CMAKE_CXX_STANDARD 17)
# elseif(NX_COMPILER_CLANG_VERSION VERSION_GREATER_EQUAL 3.4)
# set(CMAKE_CXX_STANDARD 14)
# elseif(NX_COMPILER_CLANG_VERSION VERSION_GREATER_EQUAL 3.3)
set(CMAKE_CXX_STANDARD 11)
# endif()
endif()
if(NX_HOST_COMPILER_GNU)
# if(NX_COMPILER_GNU_VERSION VERSION_GREATER_EQUAL 9.0 AND CMAKE_VERSION VERSION_GREATER 3.11)
# set(CMAKE_CXX_STANDARD 20)
# elseif(NX_COMPILER_GNU_VERSION VERSION_GREATER_EQUAL 7.0)
# set(CMAKE_CXX_STANDARD 17)
# elseif(NX_COMPILER_GNU_VERSION VERSION_GREATER_EQUAL 5.0)
# set(CMAKE_CXX_STANDARD 14)
# elseif(NX_COMPILER_GNU_VERSION VERSION_GREATER_EQUAL 4.8)
set(CMAKE_CXX_STANDARD 11)
# endif()
endif()
if(NX_HOST_COMPILER_MSVC)
# if(NX_COMPILER_MSVC_VERSION VERSION_GREATER_EQUAL 19.22 AND CMAKE_VERSION VERSION_GREATER 3.11)
# set(CMAKE_CXX_STANDARD 20)
# elseif(NX_COMPILER_MSVC_VERSION VERSION_GREATER_EQUAL 19.14)
# set(CMAKE_CXX_STANDARD 17)
# elseif(NX_COMPILER_MSVC_VERSION VERSION_GREATER_EQUAL 19.10)
# set(CMAKE_CXX_STANDARD 14)
# elseif(NX_COMPILER_MSVC_VERSION VERSION_GREATER_EQUAL 19.0)
set(CMAKE_CXX_STANDARD 11)
# endif()
endif()
endif()
endif()
# ===================================================================
# Dependencies
# ===================================================================
include(AddExecutableNX)
include(AddLibraryNX)
include(CheckSourceCompilesNX)
include(CheckSourceRunsNX)
include(SourceGroupNX)
include(ClangFormatNX)
# -----------
# EXTRA FLAGS
# -----------
# ===================================================================
# Helper Macros
# ===================================================================
if(DEFINED CMAKE_CROSSCOMPILING_EMULATOR AND NOT CMAKE_CROSSCOMPILING_EMULATOR STREQUAL "")
nx_check_source_runs("int main(int /*unused*/, char * /*unused*/ []) {return 0;}" _NX_TEST_POSSIBLE)
elseif(NX_TARGET_ARCHITECTURE_NATIVE AND NX_TARGET_PLATFORM_NATIVE)
set(_NX_TEST_POSSIBLE ON)
else()
set(_NX_TEST_POSSIBLE OFF)
endif()
include(NXFormat)
include(NXInstall)
include(NXPackage)
include(NXTest)
cmake_policy(POP)

View File

@ -16,16 +16,21 @@
# PERFORMANCE OF THIS SOFTWARE.
# -------------------------------
include(NXClient)
_nx_include_guard()
if(NX_PROJECT_LANGUAGE_C)
include(CheckCCompilerFlag)
endif()
if(NX_PROJECT_LANGUAGE_CXX)
include(CheckCXXCompilerFlag)
include(CheckCSourceCompiles)
include(CheckCSourceRuns)
endif()
include(NXClient)
if(NX_PROJECT_LANGUAGE_CXX)
include(CheckCXXCompilerFlag)
include(CheckCXXSourceCompiles)
include(CheckCXXSourceRuns)
endif()
function(nx_check_compiler_flag sFlag vResult)
_nx_function_init()
@ -42,6 +47,95 @@ function(nx_check_compiler_flag sFlag vResult)
_nx_function_prop()
endfunction()
function(nx_check_linker_flag sFlag vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL ${vResult})
if("x${CMAKE_TRY_COMPILE_TARGET_TYPE}" STREQUAL "xSTATIC_LIBRARY")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${sFlag}")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${sFlag}")
endif()
nx_check_compiler_flag("" ${vResult})
_nx_function_prop()
endfunction()
function(nx_check_source_compiles sCode vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL ${vResult})
if(NX_PROJECT_LANGUAGE_CXX)
check_cxx_source_compiles("${sCode}" ${vResult} ${ARGN})
elseif(NX_PROJECT_LANGUAGE_C)
check_c_source_compiles("${sCode}" ${vResult} ${ARGN})
endif()
_nx_function_prop()
endfunction()
function(nx_check_source_runs sCode vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL ${vResult})
if(NX_PROJECT_LANGUAGE_CXX)
check_cxx_source_runs("${sCode}" ${vResult})
elseif(NX_PROJECT_LANGUAGE_C)
check_c_source_runs("${sCode}" ${vResult})
endif()
_nx_function_prop()
endfunction()
function(nx_parse_link_options lsFlags vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${vResult}")
unset(${vResult})
unset(sLinkerFlag)
unset(sLinkerSep)
if(NX_PROJECT_LANGUAGE_CXX AND DEFINED CMAKE_CXX_LINKER_WRAPPER_FLAG)
string(REPLACE ";" " " sLinkerFlag "${CMAKE_CXX_LINKER_WRAPPER_FLAG}")
if(DEFINED CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP AND CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP)
set(sLinkerSep "${CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP}")
endif()
elseif(NX_PROJECT_LANGUAGE_C AND DEFINED CMAKE_C_LINKER_WRAPPER_FLAG)
string(REPLACE ";" " " sLinkerFlag "${CMAKE_C_LINKER_WRAPPER_FLAG}")
if(DEFINED CMAKE_C_LINKER_WRAPPER_FLAG_SEP AND CMAKE_C_LINKER_WRAPPER_FLAG_SEP)
set(sLinkerSep "${CMAKE_C_LINKER_WRAPPER_FLAG_SEP}")
endif()
elseif(NX_HOST_COMPILER_CLANG)
set(sLinkerFlag "-Xlinker ")
elseif(NX_HOST_COMPILER_GNU)
set(sLinkerFlag "-Wl,")
set(sLinkerSep ",")
endif()
if(DEFINED sLinkerFlag)
string(REPLACE " " " " sLinkerFlag "${sLinkerFlag}")
endif()
foreach(sFlag ${lsFlags})
if(sFlag MATCHES "LINKER:")
string(REPLACE "LINKER:" "" sFlag "${sFlag}")
string(REPLACE "," ";" sFlag "${sFlag}")
if(DEFINED sLinkerSep)
string(REPLACE ";" "${sLinkerSep}" sFlag "${sFlag}")
list(APPEND ${vResult} "${sLinkerFlag}${sFlag}")
else()
foreach(sFlag2 ${sFlag})
list(APPEND ${vResult} "${sLinkerFlag}${sFlag2}")
endforeach()
endif()
else()
list(APPEND ${vResult} "${sFlag}")
endif()
endforeach()
_nx_function_prop()
endfunction()
macro(nxb_set_check_flags)
if(DEFINED CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_TRY_COMPILE_CONFIGURATION "${CMAKE_BUILD_TYPE}")
@ -327,3 +421,132 @@ function(nx_test_compiler_flags)
_nx_function_prop()
endfunction()
function(nx_test_linker_flags)
_nx_function_init()
nxb_set_check_flags()
unset(vBOOLEAN_VARIABLE)
unset(vRAW_VARIABLE)
unset(vLIST_VARIABLE)
unset(lsGenExpressions)
unset(lsCheckFlags)
set(bSetType OFF)
set(lsParseModes "BOOLEAN_VARIABLE" "CHECK" "GENEXPR" "LIST_VARIABLE" "RAW_VARIABLE")
set(sParseMode "LIST_VARIABLE")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
elseif(sParseMode STREQUAL "GENEXPR")
list(APPEND lsGenExpressions "${sArgument}")
foreach(sConfig "Release" "Debug" "RelWithDebInfo" "MinSizeRel")
if(sGeneratorExpression MATCHES "${sConfig}")
set(CMAKE_TRY_COMPILE_CONFIGURATION "${sConfig}")
if(sConfig STREQUAL "${CMAKE_BUILD_TYPE}")
unset(sGeneratorExpression)
endif()
endif()
endforeach()
elseif(sParseMode MATCHES "BOOLEAN_VARIABLE|LIST_VARIABLE|RAW_VARIABLE")
if(DEFINED v${sParseMode})
message(AUTHOR_WARNING "nx_test_linker_flags: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(v${sParseMode} "${sArgument}")
if(sArgument MATCHES "_0$|_0_|_DEBUG$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "Debug")
elseif(sArgument MATCHES "_1$|_1_|_MINSIZEREL$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "MinSizeRel")
elseif(sArgument MATCHES "_2$|_2_|_RELWITHDEBINFO$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "RelWithDebInfo")
elseif(sArgument MATCHES "_3$|_3_|_RELEASE$")
set(CMAKE_TRY_COMPILE_CONFIGURATION "Release")
endif()
if(NOT bSetType)
if(sArgument MATCHES "_EXE$|_EXE_")
set(bSetType ON)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_EXE}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_EXE}")
elseif(sArgument MATCHES "_MOD$|_MODULE_")
set(bSetType ON)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_MOD}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_MOD}")
elseif(sArgument MATCHES "_DLL$|_SHARED_")
set(bSetType ON)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_DLL}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_DLL}")
elseif(sArgument MATCHES "_LIB$|_STATIC_")
set(bSetType ON)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
string(REPLACE ";" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NXBUILD_COMPILER_FLAGS_C_G_LIB}")
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NXBUILD_COMPILER_FLAGS_CXX_G_LIB}")
endif()
endif()
endif()
set(sParseMode "CHECK")
else()
list(APPEND lsCheckFlags "${sArgument}")
endif()
endforeach()
set(bSkipChecks OFF)
if(DEFINED CMAKE_TRY_COMPILE_CONFIGURATION)
if(NX_TARGET_CONFIGURATION_MULTI AND NOT "${CMAKE_TRY_COMPILE_CONFIGURATION}" IN_LIST CMAKE_CONFIGURATION_TYPES)
set(bSkipChecks ON)
elseif(NOT NX_TARGET_CONFIGURATION_MULTI AND NOT CMAKE_TRY_COMPILE_CONFIGURATION STREQUAL "${CMAKE_BUILD_TYPE}")
set(bSkipChecks ON)
endif()
endif()
if(NOT bSkipChecks)
list(APPEND _NX_PROPOGATE_LOCAL ${vLIST_VARIABLE} ${vRAW_VARIABLE} ${vBOOLEAN_VARIABLE})
list(APPEND _NX_PROPOGATE_SORT ${vLIST_VARIABLE} ${vRAW_VARIABLE} ${vBOOLEAN_VARIABLE})
unset(sGenExpression)
if(DEFINED lsGenExpressions)
list(LENGTH lsGenExpressions nGenExpressions)
if(nGenExpressions GREATER 1)
string(REPLACE ";" "," sGenExpression "$<AND:${lsGenExpressions}>")
else()
set(sGenExpression "${lsGenExpressions}")
endif()
endif()
foreach(sFlag ${lsCheckFlags})
nx_parse_link_options("${sFlag}" sFlagParsed)
string(TOUPPER "HAS_LDFLAG${sFlagParsed}" vResult)
string(MAKE_C_IDENTIFIER "${vResult}" vResult)
string(REPLACE " " "_" vResult "${vResult}")
nx_check_linker_flag("${sFlagParsed}" ${vResult})
if(${vResult})
if(DEFINED vLIST_VARIABLE)
if(DEFINED sGenExpression)
list(APPEND ${vLIST_VARIABLE} "$<${sGenExpression}:${sFlag}>")
else()
list(APPEND ${vLIST_VARIABLE} "${sFlag}")
endif()
endif()
if(DEFINED vBOOLEAN_VARIABLE)
set(${vBOOLEAN_VARIABLE} ON)
endif()
if(DEFINED vRAW_VARIABLE)
list(APPEND ${vRAW_VARIABLE} "${sFlagParsed}")
endif()
if("x${CMAKE_TRY_COMPILE_TARGET_TYPE}" STREQUAL "xSTATIC_LIBRARY")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${sFlagParsed}")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${sFlagParsed}")
endif()
endif()
endforeach()
endif()
_nx_function_prop()
endfunction()

File diff suppressed because it is too large Load Diff

162
cmake/NXFormat.cmake Normal file
View File

@ -0,0 +1,162 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2020 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(NXClient)
_nx_include_guard()
include(CMakeDependentOption)
function(nx_clang_format)
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL "${CMAKE_SOURCE_DIR}")
return()
endif()
_nx_function_guard(nx_clang_format)
_nx_function_init()
unset(sAll)
unset(lsSourceFiles)
foreach(sSourceFile ${ARGN})
if(sSourceFile STREQUAL "ALL")
set(sAll "ALL")
else()
list(APPEND lsSourceFiles "${sSourceFile}")
endif()
endforeach()
foreach(sGroup ${NX_LIST_GROUPS})
foreach(sSourceFile ${${sGroup}_FILES_SOURCE} ${${sGroup}_FILES_HEADERS} ${${sGroup}_FILES_PRIVATE})
if(sSourceFile MATCHES ".c$|.cc$|.cpp$|.cxx$|.h$|.hh$|.hpp$|.hxx$|.in$")
list(APPEND lsSourceFiles "${sSourceFile}")
endif()
endforeach()
endforeach()
if(DEFINED lsSourceFiles AND lsSourceFiles)
list(REMOVE_DUPLICATES lsSourceFiles)
endif()
find_program(CLANG_FORMAT_EXECUTABLE NAMES clang-format)
set(bFormatRules OFF)
unset(sFormatRules)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.clang-format")
set(sFormatRules "${CMAKE_CURRENT_SOURCE_DIR}/.clang-format")
set(bFormatRules ON)
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.clang-format")
if("x${ARGN}" STREQUAL "x")
set(sFormatRules "${CMAKE_CURRENT_SOURCE_DIR}/../.clang-format")
set(bFormatRules ON)
endif()
endif()
cmake_dependent_option(CREATE_TARGET_FORMAT_CLANG "Create C/C++ 'format' Target" ${bFormatRules} "CLANG_FORMAT_EXECUTABLE" OFF)
set(sFormatArgs "-fallback-style=none" "-style=file" "-i")
set(sFormatTarget "format")
if(TARGET ${sFormatTarget})
set(sFormatTarget "format-clang")
endif()
if(CREATE_TARGET_FORMAT_CLANG AND DEFINED lsSourceFiles)
list(REMOVE_DUPLICATES lsSourceFiles)
if(DEFINED sFormatRules)
file(COPY "${sFormatRules}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
endif()
add_custom_target(
${sFormatTarget} ${sAll}
COMMAND "${CLANG_FORMAT_EXECUTABLE}" ${sFormatArgs} ${lsSourceFiles}
DEPENDS ${lsSourceFiles} ${sFormatRules}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "[clang-format] Formatting Source Files"
VERBATIM)
if(NOT sFormatTarget STREQUAL "format")
add_dependencies(format ${sFormatTarget})
endif()
endif()
endfunction()
function(nx_cmake_format)
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL "${CMAKE_SOURCE_DIR}")
return()
endif()
_nx_function_guard(nx_cmake_format)
_nx_function_init()
unset(sAll)
unset(lsSourceFiles)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt")
list(APPEND lsSourceFiles "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt")
endif()
foreach(sSourceFile ${ARGN})
if(sSourceFile STREQUAL "ALL")
set(sAll "ALL")
else()
list(APPEND lsSourceFiles "${sSourceFile}")
endif()
endforeach()
foreach(sGroup ${NX_LIST_GROUPS})
foreach(sSourceFile ${${sGroup}_FILES_CMAKE})
if(sSourceFile MATCHES ".cmake$")
list(APPEND lsSourceFiles "${sSourceFile}")
endif()
endforeach()
endforeach()
if(DEFINED lsSourceFiles AND lsSourceFiles)
list(REMOVE_DUPLICATES lsSourceFiles)
endif()
find_program(CMAKE_FORMAT_EXECUTABLE NAMES cmake-format)
set(bFormatRules OFF)
unset(sFormatRules)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.cmake-format")
set(sFormatRules "${CMAKE_CURRENT_SOURCE_DIR}/.cmake-format")
set(bFormatRules ON)
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.cmake-format")
if("x${ARGN}" STREQUAL "x")
set(sFormatRules "${CMAKE_CURRENT_SOURCE_DIR}/../.cmake-format")
set(bFormatRules ON)
endif()
endif()
cmake_dependent_option(CREATE_TARGET_FORMAT_CMAKE "Create CMake 'format' Target" ${bFormatRules}
"CMAKE_FORMAT_EXECUTABLE" OFF)
set(sFormatArgs "-i")
set(sFormatTarget "format")
if(TARGET ${sFormatTarget})
set(sFormatTarget "format-cmake")
endif()
if(CREATE_TARGET_FORMAT_CMAKE AND DEFINED lsSourceFiles)
list(REMOVE_DUPLICATES lsSourceFiles)
if(DEFINED sFormatRules)
file(COPY "${sFormatRules}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
set(sFormatArgs "--config" "${sFormatRules}" ${sFormatArgs})
endif()
add_custom_target(
${sFormatTarget} ${sAll}
COMMAND "${CMAKE_FORMAT_EXECUTABLE}" ${sFormatArgs} ${lsSourceFiles}
DEPENDS ${lsSourceFiles} ${sFormatRules}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "[cmake-format] Formatting Source Files"
VERBATIM)
if(NOT sFormatTarget STREQUAL "format")
add_dependencies(format ${sFormatTarget})
endif()
endif()
endfunction()

294
cmake/NXGenerate.cmake Normal file
View File

@ -0,0 +1,294 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2020 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(NXClient)
_nx_include_guard()
function(nx_generate_export_header sBaseName)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${sBaseName}_SHARED_DEFINE" "${sBaseName}_STATIC_DEFINE")
string(TOUPPER "${sBaseName}" sBaseName)
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
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_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_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 "${GEH_INCLUDE_GUARD_NAME}" GEH_INCLUDE_GUARD_NAME)
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_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()
configure_file("${NXBUILD_PATH_DATADIR}/GenerateExportHeader.h.configure" "${GEH_EXPORT_FILE_NAME}")
_nx_function_prop()
endfunction()
function(nx_generate_vcs_header sBaseName)
_nx_function_init()
string(TOUPPER "${sBaseName}" sBaseName)
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
unset(VCS_BASE_NAME)
unset(VCS_CUSTOM_CONTENT)
unset(VCS_CUSTOM_CONTENT_FROM_VARIABLE)
unset(VCS_INCLUDE_GUARD_NAME)
unset(VCS_PREFIX_NAME)
unset(VCS_ANY_FILE_NAME)
unset(VCS_GIT_FILE_NAME)
unset(VCS_GIT_MACRO_NAME)
set(lsParseModes BASE_NAME GIT_MACRO_NAME GIT_FILE_NAME INCLUDE_GUARD_NAME PREFIX_NAME CUSTOM_CONTENT_FROM_VARIABLE)
set(sParseMode "VERSION_FILE_NAME")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
else()
set(VCS_${sParseMode} "${sArgument}")
endif()
endforeach()
if(NOT DEFINED VCS_BASE_NAME)
set(VCS_BASE_NAME "${sBaseName}")
endif()
if(NOT DEFINED VCS_ANY_FILE_NAME)
string(TOLOWER "${VCS_BASE_NAME}_vcs.h" VCS_ANY_FILE_NAME)
endif()
if(DEFINED NX_GIT_WATCH_VARS AND NOT DEFINED VCS_GIT_FILE_NAME)
string(TOLOWER "${VCS_BASE_NAME}_git.h" VCS_GIT_FILE_NAME)
endif()
if(NOT DEFINED VCS_GIT_MACRO_NAME)
set(VCS_GIT_MACRO_NAME "${VCS_PREFIX_NAME}${VCS_BASE_NAME}_GIT")
endif()
if(NOT DEFINED VCS_INCLUDE_GUARD_NAME)
if(DEFINED VCS_GIT_FILE_NAME)
get_filename_component(VCS_INCLUDE_GUARD_NAME "${VCS_GIT_FILE_NAME}" NAME)
else()
get_filename_component(VCS_INCLUDE_GUARD_NAME "${VCS_ANY_FILE_NAME}" NAME)
endif()
string(TOUPPER "${VCS_INCLUDE_GUARD_NAME}" VCS_INCLUDE_GUARD_NAME)
string(MAKE_C_IDENTIFIER "${VCS_INCLUDE_GUARD_NAME}" VCS_INCLUDE_GUARD_NAME)
set(VCS_INCLUDE_GUARD_NAME "${VCS_PREFIX_NAME}${VCS_INCLUDE_GUARD_NAME}")
endif()
if(DEFINED VCS_CUSTOM_CONTENT_FROM_VARIABLE)
if(DEFINED ${VCS_CUSTOM_CONTENT_FROM_VARIABLE})
set(VCS_CUSTOM_CONTENT "${${VCS_CUSTOM_CONTENT_FROM_VARIABLE}}")
endif()
endif()
if(DEFINED NX_PROJECT_PACKAGING_VERSION)
set(NX_PROJECT_VERSION_TAG ${NX_PROJECT_PACKAGING_VERSION} ${NX_PROJECT_VERSION_TAG})
endif()
if(DEFINED NX_PROJECT_VERSION_TAG)
string(REPLACE ";" "." NX_PROJECT_VERSION_TAG "-${NX_PROJECT_VERSION_TAG}")
endif()
if(NOT DEFINED NX_PROJECT_VERSION_BUILD AND DEFINED VCS_GIT_FILE_NAME)
list(APPEND NX_PROJECT_VERSION_BUILD "git" "\${NX_GIT_COMMIT_HASH}")
endif()
if(DEFINED NX_PROJECT_VERSION_BUILD)
string(REPLACE ";" "." NX_PROJECT_VERSION_BUILD "+${NX_PROJECT_VERSION_BUILD}")
endif()
set(NX_PROJECT_VERSION_FULL "${NX_PROJECT_API_VERSION}${NX_PROJECT_VERSION_TAG}${NX_PROJECT_VERSION_BUILD}")
if(DEFINED VCS_GIT_FILE_NAME)
if(NOT DEFINED NX_GIT_WATCH_VARS)
include(GitWatch)
endif()
get_filename_component(sIntermediate "${VCS_GIT_FILE_NAME}" NAME)
configure_file("${NXBUILD_PATH_DATADIR}/GenerateVCSHeader.h.configure"
"${CMAKE_CURRENT_BINARY_DIR}/${sIntermediate}.configure" @ONLY)
nx_git_configure("${CMAKE_CURRENT_BINARY_DIR}/${sIntermediate}.configure" "${VCS_GIT_FILE_NAME}")
else()
message(AUTHOR_WARNING "nx_generate_vcs_header: No VCS System Specified")
endif()
_nx_function_prop()
endfunction()
function(nx_generate_version_header sBaseName)
_nx_function_init()
if(NOT DEFINED NX_PROJECT_API_MAJOR)
set(NX_PROJECT_API_MAJOR 0)
endif()
if(NOT DEFINED NX_PROJECT_API_MINOR)
set(NX_PROJECT_API_MINOR 0)
endif()
if(NOT DEFINED NX_PROJECT_API_PATCH)
set(NX_PROJECT_API_PATCH 0)
endif()
set(NX_PROJECT_API_HEX "${NX_PROJECT_API_MAJOR}*65536 + ${NX_PROJECT_API_MINOR}*256 + ${NX_PROJECT_API_PATCH}")
if(CMAKE_VERSION VERSION_LESS 3.13)
math(EXPR NX_PROJECT_API_HEX "${NX_PROJECT_API_HEX}")
else()
math(EXPR NX_PROJECT_API_HEX "${NX_PROJECT_API_HEX}" OUTPUT_FORMAT HEXADECIMAL)
endif()
set(NX_PROJECT_VERSION_TAG ${NX_PROJECT_PACKAGING_VERSION} ${NX_PROJECT_API_PRERELEASE} ${NX_PROJECT_VERSION_TAG})
if(DEFINED NX_PROJECT_VERSION_TAG AND NX_PROJECT_VERSION_TAG)
string(REPLACE ";" "." NX_PROJECT_VERSION_TAG "-${NX_PROJECT_VERSION_TAG}")
endif()
if(DEFINED NX_PROJECT_VERSION_BUILD AND NX_PROJECT_VERSION_BUILD)
string(REPLACE ";" "." NX_PROJECT_VERSION_BUILD "+${NX_PROJECT_VERSION_BUILD}")
endif()
set(NX_PROJECT_VERSION_FULL "${NX_PROJECT_API_VERSION}${NX_PROJECT_VERSION_TAG}${NX_PROJECT_VERSION_BUILD}")
string(TOUPPER "${sBaseName}" sBaseName)
string(MAKE_C_IDENTIFIER "${sBaseName}" sBaseName)
unset(GVH_BASE_NAME)
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(sParseMode "VERSION_FILE_NAME")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
else()
set(GVH_${sParseMode} "${sArgument}")
endif()
endforeach()
if(NOT DEFINED GVH_BASE_NAME)
set(GVH_BASE_NAME "${sBaseName}")
endif()
if(NOT DEFINED GVH_VERSION_FILE_NAME)
string(TOLOWER "${GVH_BASE_NAME}_version.h" GVH_VERSION_FILE_NAME)
endif()
if(NOT DEFINED GVH_VERSION_MACRO_NAME)
set(GVH_VERSION_MACRO_NAME "${GVH_PREFIX_NAME}${GVH_BASE_NAME}_VERSION")
endif()
if(NOT DEFINED GVH_INCLUDE_GUARD_NAME)
get_filename_component(GVH_INCLUDE_GUARD_NAME "${GVH_VERSION_FILE_NAME}" NAME)
string(TOUPPER "${GVH_INCLUDE_GUARD_NAME}" GVH_INCLUDE_GUARD_NAME)
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(DEFINED GVH_CUSTOM_CONTENT_FROM_VARIABLE)
if(DEFINED ${GVH_CUSTOM_CONTENT_FROM_VARIABLE})
set(GVH_CUSTOM_CONTENT "${${GVH_CUSTOM_CONTENT_FROM_VARIABLE}}")
endif()
endif()
configure_file("${NXBUILD_PATH_DATADIR}/GenerateVersionHeader.h.configure" "${GVH_VERSION_FILE_NAME}")
_nx_function_prop()
endfunction()

583
cmake/NXInstall.cmake Normal file
View File

@ -0,0 +1,583 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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(NXClient)
_nx_include_guard()
include(CMakePackageConfigHelpers)
if(NOT NX_INSTALL_SCHEME STREQUAL "GNU")
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX
"${NX_INSTALL_PATH_DRIVE}${NX_INSTALL_PATH_BASE}"
CACHE PATH "" FORCE)
endif()
if(NOT DEFINED CMAKE_STAGING_PREFIX)
if(DEFINED CMAKE_SYSROOT)
if(DEFINED NX_INSTALL_PATH_DRIVE)
set(CMAKE_STAGING_PREFIX
"${CMAKE_SYSROOT}${NX_INSTALL_PATH_BASE}"
CACHE PATH "" FORCE)
endif()
elseif(NOT NX_TARGET_PLATFORM_NATIVE)
set(CMAKE_STAGING_PREFIX
"${NX_STAGING_PATH_DRIVE}${NX_STAGING_PATH_BASE}"
CACHE PATH "" FORCE)
endif()
endif()
if(NOT DEFINED CMAKE_EXPORT_PACKAGE_REGISTRY AND (NOT DEFINED CMAKE_EXPORT_NO_PACKAGE_REGISTRY OR NOT CMAKE_EXPORT_NO_PACKAGE_REGISTRY))
set(CMAKE_EXPORT_PACKAGE_REGISTRY ON)
endif()
endif()
function(nx_install)
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL "${CMAKE_SOURCE_DIR}")
return()
endif()
_nx_function_init()
list(APPEND _NX_PROPOGATE_GLOBAL "NX_LIST_COMPONENTS")
list(APPEND _NX_PROPOGATE_SORT "NX_LIST_COMPONENTS")
foreach(sGroup ${NX_LIST_GROUPS})
list(APPEND _NX_PROPOGATE_GLOBAL "${sGroup}_COMPONENTS")
list(APPEND _NX_PROPOGATE_SORT "${sGroup}_COMPONENTS")
unset(sExport)
if(DEFINED ${sGroup}_TARGETS_EXPORT)
set(sExport "EXPORT" "${${sGroup}_TARGETS_EXPORT}")
endif()
if(DEFINED ${sGroup}_TARGETS_APPLICATION OR DEFINED ${sGroup}_TARGETS_DAEMON OR DEFINED ${sGroup}_TARGETS_EXECUTABLE)
set(sTargetType "LIBDEPS")
set(sComponentBase "lib")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_PATH_${sTargetType})
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
endif()
endif()
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-dev" sComponentDev)
set(sTargetType "APPLICATION")
set(sComponentBase "app")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_TARGETS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
else()
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}" NAMELINK_COMPONENT "${sComponentDev}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
endif()
endforeach()
endif()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
set(sTargetType "DAEMON")
set(sComponentBase "srv")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_TARGETS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
else()
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}" NAMELINK_COMPONENT "${sComponentDev}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
endif()
endforeach()
endif()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
set(sTargetType "EXECUTABLE")
set(sComponentBase "bin")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_TARGETS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
else()
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}" NAMELINK_COMPONENT "${sComponentDev}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
endif()
endforeach()
endif()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
set(sTargetType "MODULE")
set(sComponentBase "mod")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_TARGETS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
ARCHIVE DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponentDev}"
OBJECTS DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponentDev}")
else()
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}" NAMELINK_COMPONENT "${sComponentDev}"
ARCHIVE DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponentDev}"
OBJECTS DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponentDev}")
endif()
endforeach()
endif()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
set(sTargetType "SHARED")
set(sComponentBase "lib")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_TARGETS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
else()
install(TARGETS "${sTarget}" ${sExport}
RUNTIME DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}"
LIBRARY DESTINATION "${${sGroup}_PATH_${sTargetType}}" COMPONENT "${sComponent}" NAMELINK_COMPONENT "${sComponentDev}"
ARCHIVE DESTINATION "${${sGroup}_PATH_STATIC}" COMPONENT "${sComponentDev}")
endif()
endforeach()
endif()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
set(sComponentBase "dbg")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
foreach(sTargetType "APPLICATION" "DAEMON" "EXECUTABLE" "MODULE" "SHARED")
if(DEFINED ${sGroup}_FILES_${sTargetType}_DEBUG)
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_FILES_${sTargetType}_DEBUG})
set(sDestination "${${sGroup}_PATH_${sTargetType}_DEBUG}")
if(sTarget MATCHES ".debug$")
set(sDestination "${${sGroup}_PATH_${sTargetType}}/.debug")
elseif(sTarget MATCHES ".pdb$")
set(sDestination "${${sGroup}_PATH_${sTargetType}}")
endif()
install(
FILES ${${sGroup}_FILES_${sTargetType}_DEBUG} COMPONENT "${sComponent}"
DESTINATION "${sDestination}")
endforeach()
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType}_DEBUG)
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}_DEBUG})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}_DEBUG}")
endforeach()
endif()
endforeach()
set(sTargetType "STATIC")
set(sComponentBase "dev")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_TARGETS_${sTargetType} AND DEFINED sExport)
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
install(TARGETS "${sTarget}" COMPONENT "${sComponent}" ${sExport}
ARCHIVE DESTINATION "${${sGroup}_PATH_${sTargetType}}"
OBJECTS DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
foreach(sTargetType "CMAKE" "DEVBIN" "DEVDOC" "DEVRES")
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
endforeach()
foreach(sTargetType "HEADERS" "SOURCE")
if(DEFINED ${sGroup}_FILES_${sTargetType} AND DEFINED sExport)
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_FILES_${sTargetType}})
set(bHandled OFF)
foreach(sBaseDir ${${sGroup}_PUBLIC_${sTargetType}})
file(RELATIVE_PATH sBaseRel "${sBaseDir}" "${sTarget}")
string(SUBSTRING "${sBaseRel}" 0 2 sBaseTest)
if(NOT sBaseTest STREQUAL "..")
get_filename_component(sBaseRel "${sBaseRel}" DIRECTORY)
install(
FILES "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}/${sBaseRel}")
set(bHandled ON)
endif()
endforeach()
if(NOT bHandled)
install(
FILES "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
endforeach()
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
endforeach()
set(sTargetType "DOCUMENTATION")
set(sComponentBase "doc")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
set(sComponentBase "dat")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
foreach(sTargetType "CONFIGURATION" "MODRES" "RESOURCES")
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetType}}")
endforeach()
endif()
endforeach()
set(sTargetType "EXPORT")
set(sComponentBase "dev")
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-${sComponentBase}" sComponent)
if(NOT DEFINED ${sGroup}_TARGETS_BINARY)
set(sTargetPath "NOARCH")
else()
set(sTargetPath "EXPORT")
endif()
foreach(sTarget ${${sGroup}_TARGETS_${sTargetType}})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
unset(sExportArchitecture)
if(NOT DEFINED ${sGroup}_TARGETS_BINARY AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
set(sExportArchitecture "${ARCH_INDEPENDENT}")
endif()
unset(sExportVersion)
set(sExportCompatibility "AnyNewerVersion")
if(DEFINED ${sGroup}_API_COMPATIBILITY)
if("${${sGroup}_API_COMPATIBILITY}" STREQUAL "${${sGroup}_API_MAJOR}.${${sGroup}_API_MINOR}.${${sGroup}_API_PATCH}")
set(sExportCompatibility "ExactVersion")
elseif("${${sGroup}_API_COMPATIBILITY}" STREQUAL "${${sGroup}_API_MAJOR}.${${sGroup}_API_MINOR}")
set(sExportCompatibility "SameMinorVersion")
elseif("${${sGroup}_API_COMPATIBILITY}" STREQUAL "${${sGroup}_API_MAJOR}")
set(sExportCompatibility "SameMajorVersion")
endif()
set(sExportVersion "-${${sGroup}_API_COMPATIBILITY}")
endif()
if(DEFINED sExportVersion)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${${sGroup}_CMAKE_BUILD}ConfigVersion.cmake"
VERSION "${${sGroup}_API_VERSION}" COMPATIBILITY "${sExportCompatibility}" ${sExportArchitecture})
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${${sGroup}_CMAKE_INSTALL}ConfigVersion.cmake"
VERSION "${${sGroup}_API_VERSION}" COMPATIBILITY "${sExportCompatibility}" ${sExportArchitecture})
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${sTarget}${${sGroup}_CMAKE_INSTALL}ConfigVersion.cmake"
DESTINATION "${${sGroup}_PATH_${sTargetPath}}/${sTarget}${${sGroup}_CMAKE_INSTALL}${sExportVersion}"
COMPONENT "${sComponent}")
endif()
export(
EXPORT "${sTarget}" NAMESPACE "${${sGroup}_NAME_WORKSPACE}::"
FILE "${sTarget}${${sGroup}_CMAKE_BUILD}Config.cmake")
export(PACKAGE "${sTarget}${${sGroup}_CMAKE_BUILD}")
install(
EXPORT "${sTarget}" NAMESPACE "${${sGroup}_NAME_WORKSPACE}::"
FILE "${sTarget}${${sGroup}_CMAKE_INSTALL}Config.cmake" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetPath}}/${sTarget}${${sGroup}_CMAKE_INSTALL}${sExportVersion}")
endforeach()
if(DEFINED ${sGroup}_FILES_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
install(
FILES ${${sGroup}_FILES_${sTargetType}} COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetPath}}")
endif()
if(DEFINED ${sGroup}_DIRS_${sTargetType})
list(APPEND ${sGroup}_COMPONENTS "${sComponentBase}")
list(APPEND NX_LIST_COMPONENTS "${sComponent}")
foreach(sTarget ${${sGroup}_DIRS_${sTargetType}})
install(
DIRECTORY "${sTarget}" COMPONENT "${sComponent}"
DESTINATION "${${sGroup}_PATH_${sTargetPath}}")
endforeach()
endif()
endforeach()
foreach(sGroup ${NX_LIST_COMPONENT_GROUPS})
if(DEFINED NX_COMPONENT_${sGroup}_SOURCE AND NX_COMPONENT_${sGroup}_SOURCE)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
list(APPEND NX_LIST_COMPONENT_NAMES "${sComponent}")
list(APPEND NX_LIST_COMPONENT_LIBRARIES "${sComponent}")
foreach(sTarget ${NX_COMPONENT_${sGroup}_SOURCE})
set(sDestination "#${sTarget}")
set(bDone OFF)
foreach(sStripPath ${NX_COMPONENT_${sGroup}_STRIP})
if(NOT bDone AND sTarget MATCHES "^${sStripPath}/")
string(REPLACE "#${sStripPath}/" "" sDestination "${sDestination}")
set(bDone ON)
endif()
endforeach()
string(REPLACE "#" "" sDestination "${sDestination}")
get_filename_component(sPath2 "${${sGroup}_PATH_SOURCE}/${sDestination}" DIRECTORY)
install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/${sTarget}"
DESTINATION "${sPath2}"
COMPONENT "${sComponent}")
endforeach()
endif()
if(DEFINED NX_COMPONENT_${sGroup}_BUILD AND NX_COMPONENT_${sGroup}_BUILD)
set(sComponent "dev")
if(DEFINED NX_COMPONENT_${sGroup}_NAME)
set(sComponent "${NX_COMPONENT_${sGroup}_NAME}_${sComponent}")
endif()
list(APPEND NX_LIST_COMPONENT_NAMES "${sComponent}")
list(APPEND NX_LIST_COMPONENT_LIBRARIES "${sComponent}")
foreach(sTarget ${NX_COMPONENT_${sGroup}_BUILD})
set(sDestination "${sTarget}")
set(bDone OFF)
foreach(sStripPath ${NX_COMPONENT_${sGroup}_STRIP} ${NX_COMPONENT_${sGroup}_STRIP2})
if(NOT bDone AND sDestination MATCHES "^${sStripPath}/")
string(REPLACE "#${sStripPath}/" "" sDestination "#${sDestination}")
set(bDone ON)
endif()
endforeach()
get_filename_component(sPath2 "${${sGroup}_PATH_SOURCE}/${sDestination}" DIRECTORY)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${sTarget}"
DESTINATION "${sPath2}"
COMPONENT "${sComponent}")
endforeach()
endif()
endforeach()
if(NOT TARGET uninstall AND CMAKE_CURRENT_BINARY_DIR STREQUAL "${CMAKE_BINARY_DIR}")
if(EXISTS "${NXBUILD_PATH_INTERNAL}/cmake_uninstall.cmake.configure")
configure_file("${NXBUILD_PATH_INTERNAL}/cmake_uninstall.cmake.configure"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" @ONLY)
endif()
if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
add_custom_target(uninstall COMMAND "${CMAKE_COMMAND}" -P
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
endif()
endif()
_nx_function_prop()
endfunction()

745
cmake/NXPackage.cmake Normal file
View File

@ -0,0 +1,745 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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(NXClient)
_nx_include_guard()
include(CMakeDependentOption)
function(_nx_component_name sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
if(NOT DEFINED CPACK_${sComponentUpper}PACKAGE_NAME AND DEFINED ${sGroup}_NAME)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_NAME")
set(CPACK_${sComponentUpper}PACKAGE_NAME "${${sGroup}_NAME}")
endif()
if(DEFINED sComponentPrefix)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponent)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}${sComponent}_PACKAGE_NAME")
endforeach()
unset(sWorkspacePrefix)
if(NOT "x${sGroup}_NAME_PROJECT" STREQUAL "x${sGroup}_NAME")
set(sWorkspacePrefix "${${sGroup}_NAME_WORKSPACE}-")
endif()
set(CPACK_${sComponentUpper}APP_PACKAGE_NAME "${${sGroup}_NAME}-application")
set(CPACK_${sComponentUpper}SRV_PACKAGE_NAME "${${sGroup}_NAME}-daemon")
set(CPACK_${sComponentUpper}BIN_PACKAGE_NAME "${${sGroup}_NAME}-tools")
set(CPACK_${sComponentUpper}MOD_PACKAGE_NAME "${${sGroup}_NAME}-plugins")
set(CPACK_${sComponentUpper}LIB_PACKAGE_NAME "${${sGroup}_NAME}-libs")
set(CPACK_${sComponentUpper}DEV_PACKAGE_NAME "${${sGroup}_NAME}-dev")
set(CPACK_${sComponentUpper}DAT_PACKAGE_NAME "${${sGroup}_NAME}-common")
set(CPACK_${sComponentUpper}DOC_PACKAGE_NAME "${${sGroup}_NAME}-docs")
set(CPACK_${sComponentUpper}DBG_PACKAGE_NAME "${${sGroup}_NAME}-dbg")
if("${sComponentPrefix}app" IN_LIST NX_LIST_COMPONENTS)
set(CPACK_${sComponentUpper}APP_PACKAGE_NAME "${${sGroup}_NAME}")
elseif("${sComponentPrefix}srv" IN_LIST NX_LIST_COMPONENTS)
set(CPACK_${sComponentUpper}SRV_PACKAGE_NAME "${${sGroup}_NAME}")
elseif("${sComponentPrefix}lib" IN_LIST NX_LIST_COMPONENTS OR DEFINED ${sGroup}_TARGETS_STATIC)
set(CPACK_${sComponentUpper}BIN_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}-tools")
set(CPACK_${sComponentUpper}MOD_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}-plugins")
set(CPACK_${sComponentUpper}LIB_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}")
set(CPACK_${sComponentUpper}DEV_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}-dev")
set(CPACK_${sComponentUpper}DAT_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}-common")
set(CPACK_${sComponentUpper}DOC_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}-docs")
set(CPACK_${sComponentUpper}DBG_PACKAGE_NAME "${sWorkspacePrefix}lib${${sGroup}_NAME_PROJECT}-dbg")
elseif("${sComponentPrefix}bin" IN_LIST NX_LIST_COMPONENTS)
set(CPACK_${sComponentUpper}BIN_PACKAGE_NAME "${${sGroup}_NAME}")
elseif("${sComponentPrefix}mod" IN_LIST NX_LIST_COMPONENTS)
set(CPACK_${sComponentUpper}MOD_PACKAGE_NAME "${${sGroup}_NAME}")
elseif("${sComponentPrefix}dev" IN_LIST NX_LIST_COMPONENTS)
set(CPACK_${sComponentUpper}DEV_PACKAGE_NAME "${${sGroup}_NAME}")
elseif("${sComponentPrefix}dat" IN_LIST NX_LIST_COMPONENTS)
set(CPACK_${sComponentUpper}DAT_PACKAGE_NAME "${${sGroup}_NAME}")
endif()
endif()
_nx_function_prop()
endfunction()
function(_nx_component_version sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
if(NOT DEFINED CPACK_${sComponentUpper}PACKAGE_VERSION_MAJOR AND DEFINED ${sGroup}_API_MAJOR)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_VERSION_MAJOR" "CPACK_${sComponentUpper}PACKAGE_VERSION_MINOR" "CPACK_${sComponentUpper}PACKAGE_VERSION_PATCH")
set(CPACK_${sComponentUpper}PACKAGE_VERSION_MAJOR "${${sGroup}_API_MAJOR}")
set(CPACK_${sComponentUpper}PACKAGE_VERSION_MINOR "${${sGroup}_API_MINOR}")
set(CPACK_${sComponentUpper}PACKAGE_VERSION_PATCH "${${sGroup}_API_PATCH}")
endif()
if(DEFINED CPACK_${sComponentUpper}PACKAGE_VERSION_MAJOR)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_VERSION")
set(CPACK_${sComponentUpper}PACKAGE_VERSION "${CPACK_${sComponentUpper}PACKAGE_VERSION_MAJOR}")
if(DEFINED CPACK_${sComponentUpper}PACKAGE_VERSION_MINOR)
set(CPACK_${sComponentUpper}PACKAGE_VERSION "${CPACK_${sComponentUpper}PACKAGE_VERSION}.${CPACK_${sComponentUpper}PACKAGE_VERSION_MINOR}")
if(DEFINED CPACK_${sComponentUpper}PACKAGE_VERSION_PATCH)
set(CPACK_${sComponentUpper}PACKAGE_VERSION "${CPACK_${sComponentUpper}PACKAGE_VERSION}.${CPACK_${sComponentUpper}PACKAGE_VERSION_PATCH}")
endif()
endif()
endif()
unset(sPrerelease)
unset(sVCSVersion)
if(DEFINED CPACK_${sComponentUpper}PACKAGE_VERSION)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_VERSION_FULL")
set(CPACK_${sComponentUpper}PACKAGE_VERSION_FULL "${CPACK_${sComponentUpper}PACKAGE_VERSION}")
if(DEFINED ${sGroup}_API_PRERELEASE)
set(sPrerelease "${${sGroup}_API_PRERELEASE}")
elseif(CPACK_${sComponentUpper}PACKAGE_VERSION VERSION_LESS 1.0)
set(sPrerelease "unstable")
endif()
if(DEFINED sPrerelease)
set(CPACK_${sComponentUpper}PACKAGE_VERSION_FULL "${CPACK_${sComponentUpper}PACKAGE_VERSION_FULL}-${sPrerelease}")
endif()
if(DEFINED ${sGroup}_GIT_HASH)
if(DEFINED ${sGroup}_GIT_BRANCH AND NOT "x${${sGroup}_GIT_BRANCH}" STREQUAL "xmaster")
set(sVCSVersion "${${sGroup}_GIT_BRANCH}.${${sGroup}_GIT_HASH}")
else()
set(sVCSVersion "git.${${sGroup}_GIT_HASH}")
endif()
endif()
if(DEFINED sVCSVersion)
set(CPACK_${sComponentUpper}PACKAGE_VERSION_FULL "${CPACK_${sComponentUpper}PACKAGE_VERSION_FULL}+${sVCSVersion}")
endif()
endif()
_nx_function_prop()
endfunction()
function(_nx_component_description sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
if(NOT DEFINED CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY AND DEFINED ${sGroup}_DESC_SUMMARY)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY")
set(CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY "${${sGroup}_DESC_SUMMARY}")
endif()
if(NOT DEFINED CPACK_${sComponentUpper}PACKAGE_DESCRIPTION AND NOT DEFINED CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_FILE AND DEFINED CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_DESCRIPTION")
set(CPACK_${sComponentUpper}PACKAGE_DESCRIPTION ${CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY})
endif()
if(NOT DEFINED CPACK_${sComponentUpper}PACKAGE_HOMEPAGE_URL)
if(DEFINED ${sGroup}_URL_HOME)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_HOMEPAGE_URL")
set(CPACK_${sComponentUpper}PACKAGE_HOMEPAGE_URL "${${sGroup}_URL_HOME}")
elseif(DEFINED ${sGroup}_URL_SUPPORT)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_HOMEPAGE_URL")
set(CPACK_${sComponentUpper}PACKAGE_HOMEPAGE_URL "${${sGroup}_URL_SUPPORT}")
endif()
endif()
if(DEFINED sComponentPrefix)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponent)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}${sComponent}_PACKAGE_DESCRIPTION_SUMMARY")
endforeach()
unset(sGroupDesc)
if(DEFINED CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY)
set(sGroupDesc "${CPACK_${sComponentUpper}PACKAGE_DESCRIPTION_SUMMARY} ")
endif()
set(CPACK_${sComponentUpper}APP_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Application")
set(CPACK_${sComponentUpper}SRV_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Daemon")
set(CPACK_${sComponentUpper}BIN_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Tools")
set(CPACK_${sComponentUpper}MOD_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Module")
set(CPACK_${sComponentUpper}LIB_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Runtime")
set(CPACK_${sComponentUpper}DEV_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- SDK")
set(CPACK_${sComponentUpper}DAT_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Data")
set(CPACK_${sComponentUpper}DOC_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Documentation")
set(CPACK_${sComponentUpper}DBG_PACKAGE_DESCRIPTION_SUMMARY "${sGroupDesc}- Symbols")
endif()
_nx_function_prop()
endfunction()
function(_nx_component_architecture sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
set(bHasBinary OFF)
if(DEFINED ${sGroup}_TARGETS_APPLICATION)
set(bHasBinary ON)
endif()
if(DEFINED ${sGroup}_TARGETS_DAEMON)
set(bHasBinary ON)
endif()
if(DEFINED ${sGroup}_TARGETS_EXECUTABLE)
set(bHasBinary ON)
endif()
if(DEFINED ${sGroup}_TARGETS_MODULE)
set(bHasBinary ON)
endif()
if(DEFINED ${sGroup}_TARGETS_SHARED)
set(bHasBinary ON)
endif()
if(DEFINED ${sGroup}_TARGETS_STATIC)
set(bHasBinary ON)
endif()
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE")
if(NOT bHasBinary)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE "Generic")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "noarch")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "all")
set(CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE "neutral")
else()
set(CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE "${NX_TARGET_ARCHITECTURE_NAME}")
if(NX_TARGET_ARCHITECTURE_GENERIC)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "noarch")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "all")
set(CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE "neutral")
elseif(DEFINED NX_TARGET_ABI_NAME OR DEFINED NX_TARGET_ABI_C_CODE OR DEFINED NX_TARGET_ABI_CXX_CODE)
if(NX_TARGET_ABI_NAME STREQUAL "x32")
list(APPEND _NX_PROPOGATE_SET "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "${NX_TARGET_ABI_NAME}")
endif()
elseif(NX_TARGET_ARCHITECTURE_AMD64)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "x86_64")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "amd64")
set(CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE "x64")
elseif(NX_TARGET_ARCHITECTURE_ARM64)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "aarch64")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "arm64")
set(CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE "arm64")
elseif(NX_TARGET_ARCHITECTURE_ARMV7)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "armv7hl")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "armhf")
set(CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE "arm")
elseif(NX_TARGET_ARCHITECTURE_IA32)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "i686")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "i386")
set(CPACK_MSIX_${sComponentUpper}PACKAGE_ARCHITECTURE "x86")
elseif(NX_TARGET_ARCHITECTURE_PPC64LE)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "powerpc64le")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "ppc64el")
elseif(NX_TARGET_ARCHITECTURE_RISCV64)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "riscv64")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "riscv64")
elseif(NX_TARGET_ARCHITECTURE_ZARCH)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE" "CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE "s390x")
set(CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE "s390x")
endif()
endif()
if(DEFINED sComponentPrefix)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponent)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE")
set(CPACK_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE "${CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE}")
if(DEFINED CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE)
list(APPEND _NX_PROPOGATE_SET "CPACK_RPM_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE")
set(CPACK_RPM_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE "${CPACK_RPM_${sComponentUpper}PACKAGE_ARCHITECTURE}")
endif()
if(DEFINED CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE)
list(APPEND _NX_PROPOGATE_SET "CPACK_DEBIAN_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE")
set(CPACK_DEBIAN_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_${sComponentUpper}PACKAGE_ARCHITECTURE}")
endif()
endforeach()
if(NOT DEFINED ${sGroup}_TARGETS_STATIC)
set(CPACK_${sComponentUpper}DEV_PACKAGE_ARCHITECTURE "Generic")
set(CPACK_RPM_${sComponentUpper}DEV_PACKAGE_ARCHITECTURE "noarch")
set(CPACK_DEBIAN_${sComponentUpper}DEV_PACKAGE_ARCHITECTURE "all")
endif()
set(CPACK_${sComponentUpper}DAT_PACKAGE_ARCHITECTURE "Generic")
set(CPACK_${sComponentUpper}DOC_PACKAGE_ARCHITECTURE "Generic")
set(CPACK_RPM_${sComponentUpper}DAT_PACKAGE_ARCHITECTURE "noarch")
set(CPACK_RPM_${sComponentUpper}DOC_PACKAGE_ARCHITECTURE "noarch")
set(CPACK_DEBIAN_${sComponentUpper}DAT_PACKAGE_ARCHITECTURE "all")
set(CPACK_DEBIAN_${sComponentUpper}DOC_PACKAGE_ARCHITECTURE "all")
endif()
_nx_function_prop()
endfunction()
function(_nx_component_platform sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}SYSTEM_NAME")
if("x${CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE}" STREQUAL "xGeneric")
set(CPACK_${sComponentUpper}SYSTEM_NAME "Generic")
elseif(NX_TARGET_PLATFORM_WINDOWS AND NX_TARGET_ARCHITECTURE_BITS GREATER 0)
set(CPACK_${sComponentUpper}SYSTEM_NAME "Win${NX_TARGET_ARCHITECTURE_BITS}")
else()
set(CPACK_${sComponentUpper}SYSTEM_NAME "${NX_TARGET_PLATFORM_NAME}")
endif()
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}SYSTEM_DISTRO")
if("x${CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE}" STREQUAL "xGeneric")
if(NOT DEFINED NX_HOST_PLATFORM_${NX_INSTALL_SCHEME})
set(CPACK_${sComponentUpper}SYSTEM_DISTRO "Generic")
else()
set(CPACK_${sComponentUpper}SYSTEM_DISTRO "${NX_TARGET_PLATFORM_NAME}")
endif()
elseif(DEFINED NX_TARGET_DISTRO_CODENAME AND NX_TARGET_DISTRO_CODENAME)
set(CPACK_${sComponentUpper}SYSTEM_DISTRO "${NX_TARGET_DISTRO_DESCRIPTION}-${NX_TARGET_DISTRO_CODENAME}")
else()
set(CPACK_${sComponentUpper}SYSTEM_DISTRO "${NX_TARGET_DISTRO_DESCRIPTION}")
endif()
if(DEFINED sComponentPrefix)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponent)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}${sComponent}_SYSTEM_NAME" "CPACK_${sComponentUpper}${sComponent}_SYSTEM_DISTRO")
set(CPACK_${sComponentUpper}${sComponent}_SYSTEM_NAME "${CPACK_${sComponentUpper}SYSTEM_NAME}")
set(CPACK_${sComponentUpper}${sComponent}_SYSTEM_DISTRO "${CPACK_${sComponentUpper}SYSTEM_DISTRO}")
endforeach()
if(NOT DEFINED ${sGroup}_TARGETS_STATIC)
set(CPACK_${sComponentUpper}SYSTEM_NAME "Generic")
endif()
set(CPACK_${sComponentUpper}DAT_SYSTEM_NAME "Generic")
set(CPACK_${sComponentUpper}DOC_SYSTEM_NAME "Generic")
if(NOT DEFINED NX_HOST_PLATFORM_${NX_INSTALL_SCHEME})
if(NOT DEFINED ${sGroup}_TARGETS_STATIC)
set(CPACK_${sComponentUpper}DEV_SYSTEM_DISTRO "Generic")
endif()
set(CPACK_${sComponentUpper}DAT_SYSTEM_DISTRO "Generic")
set(CPACK_${sComponentUpper}DOC_SYSTEM_DISTRO "Generic")
else()
if(NOT DEFINED ${sGroup}_TARGETS_STATIC)
set(CPACK_${sComponentUpper}DEV_SYSTEM_DISTRO "${NX_TARGET_PLATFORM_NAME}")
endif()
set(CPACK_${sComponentUpper}DAT_SYSTEM_DISTRO "${NX_TARGET_PLATFORM_NAME}")
set(CPACK_${sComponentUpper}DOC_SYSTEM_DISTRO "${NX_TARGET_PLATFORM_NAME}")
endif()
endif()
_nx_function_prop()
endfunction()
function(_nx_component_filename sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
unset(sPackageAppend)
if(DEFINED NX_TARGET_ABI_CODE)
list(APPEND sPackageAppend ${NX_TARGET_ABI_NAME})
endif()
if(DEFINED NX_TARGET_ABI_C_CODE)
list(APPEND sPackageAppend ${NX_TARGET_ABI_C_NAME})
endif()
if(DEFINED NX_TARGET_ABI_CXX_CODE)
list(APPEND sPackageAppend ${NX_TARGET_ABI_CXX_NAME})
endif()
if(DEFINED sPackageAppend AND sPackageAppend)
string(REPLACE "-" "_" sPackageAppend "${sPackageAppend}")
string(REPLACE ";" "-" sPackageAppend "${sPackageAppend}")
set(sPackageAppend "-${sPackageAppend}")
endif()
unset(sVersion)
if(DEFINED CPACK_${sComponentUpper}PACKAGE_VERSION_FULL)
set(sVersion "_${CPACK_${sComponentUpper}PACKAGE_VERSION_FULL}")
endif()
string(TOLOWER "${CPACK_${sComponentUpper}PACKAGE_ARCHITECTURE}" sArchitecture)
string(TOLOWER "${CPACK_${sComponentUpper}SYSTEM_DISTRO}" sPlatform)
list(APPEND _NX_PROPOGATE_SET "CPACK_SOURCE_${sComponentUpper}PACKAGE_FILE_NAME" "CPACK_${sComponentUpper}PACKAGE_FILE_NAME")
set(CPACK_SOURCE_${sComponentUpper}PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}PACKAGE_NAME}-src${sVersion}_generic")
set(CPACK_${sComponentUpper}PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}PACKAGE_NAME}${sVersion}_${sPlatform}")
if(NOT "x${sArchitecture}" STREQUAL "x${sPlatform}")
set(CPACK_${sComponentUpper}PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}PACKAGE_FILE_NAME}_${sArchitecture}")
endif()
if(NOT "x${sArchitecture}" STREQUAL "xgeneric")
set(CPACK_${sComponentUpper}PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}PACKAGE_FILE_NAME}${sPackageAppend}")
endif()
list(APPEND _NX_PROPOGATE_SET "CPACK_ARCHIVE_${sComponentUpper}FILE_NAME")
set(CPACK_ARCHIVE_${sComponentUpper}FILE_NAME "${CPACK_${sComponentUpper}PACKAGE_FILE_NAME}")
if(DEFINED sComponentPrefix)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponent)
string(TOLOWER "${CPACK_${sComponentUpper}${sComponent}_PACKAGE_ARCHITECTURE}" sArchitecture)
string(TOLOWER "${CPACK_${sComponentUpper}${sComponent}_SYSTEM_DISTRO}" sPlatform)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME")
set(CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}${sComponent}_PACKAGE_NAME}${sVersion}_${sPlatform}")
if(NOT "x${sArchitecture}" STREQUAL "x${sPlatform}")
set(CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME}_${sArchitecture}")
endif()
if(NOT "x${sArchitecture}" STREQUAL "xgeneric")
set(CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME "${CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME}${sPackageAppend}")
endif()
list(APPEND _NX_PROPOGATE_SET "CPACK_ARCHIVE_${sComponentUpper}${sComponent}_FILE_NAME")
set(CPACK_ARCHIVE_${sComponentUpper}${sComponent}_FILE_NAME "${CPACK_${sComponentUpper}${sComponent}_PACKAGE_FILE_NAME}")
endforeach()
endif()
_nx_function_prop()
endfunction()
function(_nx_component_dependencies sGroup)
_nx_function_init()
unset(sComponentPrefix)
unset(sComponentUpper)
if(sGroup)
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
else()
set(sGroup "${NX_PROJECT_NAME_IDENTIFIER}")
endif()
if(DEFINED sComponentPrefix)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponent)
list(APPEND _NX_PROPOGATE_SET "CPACK_${sComponentUpper}${sComponent}_DEPENDENCIES")
list(APPEND _NX_PROPOGATE_SORT "CPACK_${sComponentUpper}${sComponent}_DEPENDENCIES")
endforeach()
# Determine Main Component
unset(sMainComponent)
if("${sComponentPrefix}app" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "app")
elseif("${sComponentPrefix}srv" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "srv")
elseif("${sComponentPrefix}lib" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "lib")
elseif(DEFINED ${sGroup}_TARGETS_STATIC)
set(sMainComponent "dev")
elseif("${sComponentPrefix}bin" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "bin")
elseif("${sComponentPrefix}mod" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "mod")
elseif("${sComponentPrefix}dev" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "dev")
elseif("${sComponentPrefix}dat" IN_LIST NX_LIST_COMPONENTS)
set(sMainComponent "dat")
endif()
string(TOUPPER "${sMainComponent}_" sMainUpper)
if("${sComponentPrefix}app" IN_LIST NX_LIST_COMPONENTS)
list(APPEND CPACK_${sComponentUpper}DBG_DEPENDENCIES "${sComponentPrefix}app")
endif()
if("${sComponentPrefix}bin" IN_LIST NX_LIST_COMPONENTS)
list(APPEND CPACK_${sComponentUpper}DBG_DEPENDENCIES "${sComponentPrefix}bin")
endif()
if("${sComponentPrefix}dat" IN_LIST NX_LIST_COMPONENTS)
if(DEFINED sMainComponent AND NOT sMainComponent STREQUAL "dat")
list(APPEND CPACK_${sComponentUpper}${sMainUpper}DEPENDENCIES "${sComponentPrefix}dat")
endif()
endif()
if("${sComponentPrefix}lib" IN_LIST NX_LIST_COMPONENTS)
if(DEFINED sMainComponent AND NOT sMainComponent STREQUAL "lib")
list(APPEND CPACK_${sComponentUpper}${sMainUpper}DEPENDENCIES "${sComponentPrefix}lib")
endif()
list(APPEND CPACK_${sComponentUpper}DBG_DEPENDENCIES "${sComponentPrefix}lib")
list(APPEND CPACK_${sComponentUpper}DEV_DEPENDENCIES "${sComponentPrefix}lib")
endif()
if("${sComponentPrefix}mod" IN_LIST NX_LIST_COMPONENTS)
list(APPEND CPACK_${sComponentUpper}DBG_DEPENDENCIES "${sComponentPrefix}mod")
endif()
if("${sComponentPrefix}srv" IN_LIST NX_LIST_COMPONENTS)
list(APPEND CPACK_${sComponentUpper}DBG_DEPENDENCIES "${sComponentPrefix}srv")
endif()
foreach(sComponent "APP" "SRV" "BIN" "MOD" "LIB" "DEV" "DAT" "DOC" "DBG")
if(NOT DEFINED CPACK_${sComponentUpper}${sComponent}_DEPENDENCIES AND NOT sMainUpper STREQUAL "${sComponent}_")
list(APPEND CPACK_${sComponentUpper}${sComponent}_DEPENDENCIES "${sComponentPrefix}${sMainComponent}")
endif()
endforeach()
foreach(sDependency ${${sGroup}_DEPENDENCIES})
foreach(sOtherGroup ${NX_LIST_GROUPS})
if("${sDependency}" IN_LIST ${sOtherGroup}_TARGETS)
string(MAKE_C_IDENTIFIER "${${sOtherGroup}_NAME_PROJECT}-" sOtherPrefix)
if("lib" IN_LIST ${sOtherGroup}_COMPONENTS)
list(APPEND CPACK_${sComponentUpper}${sMainUpper}DEPENDENCIES "${sOtherPrefix}lib")
list(APPEND CPACK_${sComponentUpper}DEV_DEPENDENCIES "${sOtherPrefix}lib")
endif()
if("dev" IN_LIST ${sOtherGroup}_COMPONENTS)
list(APPEND CPACK_${sComponentUpper}DEV_DEPENDENCIES "${sOtherPrefix}dev")
endif()
endif()
endforeach()
endforeach()
if(NOT "x${${sGroup}_NAME_PROJECT}" STREQUAL "x${${sGroup}_NAME_WORKSPACE}")
string(TOUPPER "${${sGroup}_NAME_WORKSPACE}" sOtherGroup)
if("${sOtherGroup}" IN_LIST NX_LIST_GROUPS)
string(MAKE_C_IDENTIFIER "${${sOtherGroup}_NAME_PROJECT}-" sOtherPrefix)
unset(sOtherComponent)
if("${sOtherPrefix}app" IN_LIST NX_LIST_COMPONENTS)
set(sOtherComponent "app")
elseif("${sOtherPrefix}srv" IN_LIST NX_LIST_COMPONENTS)
set(sOtherComponent "srv")
elseif("${sOtherPrefix}lib" IN_LIST NX_LIST_COMPONENTS)
elseif(DEFINED ${sOtherGroup}_TARGETS_STATIC)
elseif("${sOtherPrefix}bin" IN_LIST NX_LIST_COMPONENTS)
set(sOtherComponent "bin")
elseif("${sOtherPrefix}mod" IN_LIST NX_LIST_COMPONENTS)
elseif("${sOtherPrefix}dev" IN_LIST NX_LIST_COMPONENTS)
elseif("${sOtherPrefix}dat" IN_LIST NX_LIST_COMPONENTS)
set(sOtherComponent "dat")
endif()
if(DEFINED sOtherComponent)
list(APPEND CPACK_${sComponentUpper}APP_DEPENDENCIES "${sOtherPrefix}${sOtherComponent}")
list(APPEND CPACK_${sComponentUpper}SRV_DEPENDENCIES "${sOtherPrefix}${sOtherComponent}")
list(APPEND CPACK_${sComponentUpper}BIN_DEPENDENCIES "${sOtherPrefix}${sOtherComponent}")
list(APPEND CPACK_${sComponentUpper}MOD_DEPENDENCIES "${sOtherPrefix}${sOtherComponent}")
endif()
endif()
endif()
endif()
_nx_function_prop()
endfunction()
function(nx_package)
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL "${CMAKE_SOURCE_DIR}")
return()
endif()
_nx_function_guard(nx_package)
_nx_function_init()
# Package Formats
if(NX_TARGET_PLATFORM_WINDOWS OR NX_TARGET_PLATFORM_FREEDOS)
option(CPACK_ARCHIVE_FORMAT_7Z "Create 7-Zip Archive Package" ${NX_TARGET_PLATFORM_WINDOWS})
option(CPACK_ARCHIVE_FORMAT_TGZ "Create GZip Archive Package" OFF)
option(CPACK_ARCHIVE_FORMAT_TXZ "Create LZMA Archive Package" OFF)
option(CPACK_ARCHIVE_FORMAT_ZIP "Create Zip Archive Package" ON)
else()
option(CPACK_ARCHIVE_FORMAT_7Z "Create 7-Zip Archive Package" ${NX_TARGET_PLATFORM_GENERIC})
option(CPACK_ARCHIVE_FORMAT_TGZ "Create GZip Archive Package" ON)
option(CPACK_ARCHIVE_FORMAT_TXZ "Create LZMA Archive Package" ON)
option(CPACK_ARCHIVE_FORMAT_ZIP "Create Zip Archive Package" ${NX_TARGET_PLATFORM_GENERIC})
endif()
option(CPACK_ARCHIVE_FORMAT_TBZ2 "Create BZip2 Archive Package" OFF)
option(CPACK_ARCHIVE_FORMAT_TZ "Create LZW Archive Package" OFF)
cmake_dependent_option(CPACK_ARCHIVE_FORMAT_TZST "Create Zstandard Archive Package" OFF "CMAKE_VERSION VERSION_GREATER_EQUAL 3.16" OFF)
cmake_dependent_option(CPACK_ARCHIVE_COMPONENT_INSTALL "Enable Component Packaging" ON "DEFINED NX_LIST_COMPONENTS" OFF)
unset(CPACK_GENERATOR)
unset(CPACK_SOURCE_GENERATOR)
foreach(sGenerator "7Z" "STGZ" "TBZ2" "TGZ" "TXZ" "TZ" "TZST" "ZIP")
if(CPACK_ARCHIVE_FORMAT_${sGenerator})
list(APPEND CPACK_GENERATOR "${sGenerator}")
if(NX_TARGET_ARCHITECTURE_NATIVE AND NX_TARGET_PLATFORM_NATIVE)
list(APPEND CPACK_SOURCE_GENERATOR "${sGenerator}")
endif()
endif()
endforeach()
# Package Checksum
if(NOT DEFINED CPACK_PACKAGE_CHECKSUM)
set(CPACK_PACKAGE_CHECKSUM "SHA1")
endif()
# Package Vendor
if(NOT DEFINED CPACK_PACKAGE_VENDOR)
set(CPACK_PACKAGE_VENDOR "NXBuild")
endif()
# Binary Package Options
if(NOT DEFINED CPACK_INCLUDE_TOPLEVEL_DIRECTORY)
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY OFF)
endif()
set(CPACK_PACKAGE_RELOCATABLE ON)
# Source Package Options
list(APPEND CPACK_SOURCE_IGNORE_FILES
"${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}/build.*/"
"~$;/\\\\.;\\\\.kate-swp$")
string(REPLACE "$" "#" sIgnorePatterns "${CPACK_SOURCE_IGNORE_FILES}")
string(REPLACE ";" "|" sIgnorePatterns "${sIgnorePatterns}")
string(REPLACE "\\\\" "\\" sIgnorePatterns "${sIgnorePatterns}")
include(SourceCopy)
# Package Name
_nx_component_name(OFF)
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_name("${sGroup}")
endforeach()
# Package Version
_nx_component_version(OFF)
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_version("${sGroup}")
endforeach()
# Package Description
_nx_component_description(OFF)
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_description("${sGroup}")
endforeach()
# Package Architecture
_nx_component_architecture(OFF)
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_architecture("${sGroup}")
endforeach()
# Package Platform
_nx_component_platform(OFF)
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_platform("${sGroup}")
endforeach()
# Package Filenames
_nx_component_filename(OFF)
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_filename("${sGroup}")
endforeach()
# Package Dependencies
foreach(sGroup ${NX_LIST_GROUPS})
_nx_component_dependencies("${sGroup}")
endforeach()
foreach(sTemp ${_NX_PROPOGATE_SET})
message(STATUS "${sTemp}: ${${sTemp}}")
endforeach()
# Debian Package
# TODO: WIP
if(DEFINED CPACK_PACKAGE_FORMAT_DEB)
nx_add_source_copy(deb-source "_Pack_DEB/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}" ${sIgnorePatterns})
add_custom_target(deb-tar
DEPENDS deb-source
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/_Pack_DEB/${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_Pack_DEB"
COMMAND tar -czf ${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION})
endif()
# Pack It Up
include(CPack)
foreach(sGroup ${NX_LIST_GROUPS})
string(MAKE_C_IDENTIFIER "${${sGroup}_NAME_PROJECT}-" sComponentPrefix)
string(TOUPPER "${sComponentPrefix}" sComponentUpper)
foreach(sComponent ${${sGroup}_COMPONENTS})
string(TOUPPER "${sComponent}" sComponentTag)
foreach(sDependency ${CPACK_${sComponentUpper}${sComponentTag}_DEPENDENCIES})
if(NOT "${sDependency}" IN_LIST NX_LIST_COMPONENTS)
list(REMOVE_ITEM CPACK_${sComponentUpper}${sComponentTag}_DEPENDENCIES "${sDependency}")
endif()
endforeach()
cpack_add_component("${sComponentPrefix}${sComponent}"
DISPLAY_NAME "${CPACK_${sComponentUpper}${sComponentTag}_PACKAGE_NAME}"
DESCRIPTION "${CPACK_${sComponentUpper}${sComponentTag}_PACKAGE_DESCRIPTION_SUMMARY}"
DEPENDS "${CPACK_${sComponentUpper}${sComponentTag}_DEPENDENCIES}")
endforeach()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,7 +1,7 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 Daniel Wolf <<nephatrine@gmail.com>>
# 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
@ -16,26 +16,6 @@
# PERFORMANCE OF THIS SOFTWARE.
# -------------------------------
_nx_include_guard()
if(NX_PROJECT_LANGUAGE_C)
include(CheckCSourceRuns)
endif()
if(NX_PROJECT_LANGUAGE_CXX)
include(CheckCXXSourceRuns)
endif()
include(NXClient)
function(nx_check_source_runs sCode vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL ${vResult})
if(NX_PROJECT_LANGUAGE_CXX)
check_cxx_source_runs("${sCode}" ${vResult})
elseif(NX_PROJECT_LANGUAGE_C)
check_c_source_runs("${sCode}" ${vResult})
endif()
_nx_function_prop()
endfunction()
set(NXBUILD_PATH_INTERNAL "${CMAKE_CURRENT_LIST_DIR}")
set(NXBUILD_PATH_DATADIR "${NXBUILD_PATH_INTERNAL}/@NXBUILD_PATH_DATADIR_REL@")
set(NXBUILD_PATH_HELPER "${NXBUILD_PATH_INTERNAL}/@NXBUILD_PATH_HELPER_REL@")

1748
cmake/NXTarget.cmake Normal file

File diff suppressed because it is too large Load Diff

123
cmake/NXTest.cmake Normal file
View File

@ -0,0 +1,123 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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(NXTarget)
if(NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR AND NOT NX_TARGET_PLATFORM_NATIVE)
if(NX_TARGET_PLATFORM_WINDOWS AND (NX_TARGET_ARCHITECTURE_AMD64 OR NX_TARGET_ARCHITECTURE_IA32))
find_program(CMAKE_CROSSCOMPILING_EMULATOR NAMES "wine64" "wine")
endif()
endif()
if(NOT DEFINED BUILD_TESTING)
if(DEFINED CMAKE_CROSSCOMPILING_EMULATOR AND NOT CMAKE_CROSSCOMPILING_EMULATOR STREQUAL "")
nx_check_source_runs("int main(int /*unused*/, char * /*unused*/ []) {return 0;}" BUILD_TESTING)
elseif(NX_TARGET_ARCHITECTURE_NATIVE AND NX_TARGET_PLATFORM_NATIVE AND NOT DEFINED CMAKE_SYSROOT)
set(BUILD_TESTING ON)
else()
set(BUILD_TESTING OFF)
endif()
endif()
_nx_include_guard()
function(nx_add_test vTargetList sTargetName)
option(BUILD_TESTS_${NX_PROJECT_NAME_IDENTIFIER} "Build '${NX_PROJECT_NAME}' Tests" ${BUILD_TESTING})
if(NOT BUILD_TESTS_${NX_PROJECT_NAME_IDENTIFIER})
return()
endif()
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${vTargetList}")
unset(sWorkingDir)
unset(lsTestArgs)
unset(lsCommandArgs)
unset(lsEnviroArgs)
unset(lsTargetArgs)
set(lsParseModes "DEFINES" "DEPENDS" "FEATURES" "INCLUDES" "SOURCES" "CFLAGS" "CXXFLAGS" "LDFLAGS")
set(lsIgnoreModes "TEST" "DEFINE_SYMBOL" "GENERATE" "GENERATE_EXPORT" "GENERATE_VERSION" "GROUP" "GROUP_EXPORT" "GROUP_INSTALL" "STATIC_DEFINE" "SUMMARY" "WEBSITE" "ISSUES" "WORKSPACE" "ABI" "API" "LIBTOOL" "VERSION" "COMPATIBILITY" "PRERELEASE")
set(sParseMode "TEST")
foreach(sArgument ${sTypeOptional} ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
list(APPEND lsTargetArgs "${sArgument}")
elseif("${sArgument}" IN_LIST lsIgnoreModes)
set(sParseMode "${sArgument}")
list(APPEND lsTargetArgs "${sArgument}")
elseif(sArgument STREQUAL "COMMAND")
set(sParseMode "${sArgument}")
if(DEFINED lsCommandArgs)
string(REPLACE ";" " " sCommandArgs "${lsCommandArgs}")
list(APPEND lsTestArgs "${sCommandArgs}")
unset(lsCommandArgs)
endif()
elseif(sArgument STREQUAL "ENVIRONMENT")
set(sParseMode "${sArgument}")
elseif(sArgument STREQUAL "WORKING_DIRECTORY")
set(sParseMode "${sArgument}")
elseif("${sArgument}" IN_LIST lsTestModes)
set(sParseMode "${sArgument}")
elseif(sParseMode STREQUAL "COMMAND")
list(APPEND lsCommandArgs "${sArgument}")
elseif(sParseMode STREQUAL "ENVIRONMENT")
list(APPEND lsEnviroArgs "${sArgument}")
elseif(sParseMode STREQUAL "WORKING_DIRECTORY")
if(DEFINED sWorkingDir)
message(AUTHOR_WARNING "nx_add_test: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sWorkingDir "${sArgument}")
endif()
elseif("${sParseMode}" IN_LIST lsParseModes)
list(APPEND lsTargetArgs "${sArgument}")
endif()
endforeach()
if(DEFINED lsCommandArgs)
string(REPLACE ";" " " sCommandArgs "${lsCommandArgs}")
list(APPEND lsTestArgs "${sCommandArgs}")
unset(lsCommandArgs)
endif()
if(NOT DEFINED sWorkingDir)
set(sWorkingDir "${CMAKE_CURRENT_BINARY_DIR}")
endif()
unset(sTestName)
nx_add_target(sTestName ${sTargetName} EXECUTABLE TEST ${lsTargetArgs})
foreach(lsCommandArgs ${lsTestArgs})
string(REPLACE " " ";" lsCommandArgs "${lsCommandArgs}")
string(MAKE_C_IDENTIFIER "${lsCommandArgs}" sTestSuffix)
add_test(NAME "${sTestName}-${sTestSuffix}" WORKING_DIRECTORY "${sWorkingDir}"
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:${sTestName}> ${lsCommandArgs})
if(DEFINED lsEnviroArgs)
set_tests_properties("${sTestName}-${sTestSuffix}" PROPERTIES ENVIRONMENT ${lsEnviroArgs})
endif()
endforeach()
if(NOT DEFINED lsTestArgs)
add_test(NAME "${sTestName}" WORKING_DIRECTORY "${sWorkingDir}"
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:${sTestName}>)
if(DEFINED lsEnviroArgs)
set_tests_properties("${sTestName}" PROPERTIES ENVIRONMENT ${lsEnviroArgs})
endif()
endif()
list(APPEND ${vTargetList} ${sTestName})
_nx_function_prop()
endfunction()

View File

@ -1,70 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_parse_link_options lsFlags vResult)
_nx_function_init()
list(APPEND _NX_PROPOGATE_LOCAL "${vResult}")
unset(${vResult})
unset(sLinkerFlag)
unset(sLinkerSep)
if(NX_PROJECT_LANGUAGE_CXX AND DEFINED CMAKE_CXX_LINKER_WRAPPER_FLAG)
string(REPLACE ";" " " sLinkerFlag "${CMAKE_CXX_LINKER_WRAPPER_FLAG}")
if(DEFINED CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP AND CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP)
set(sLinkerSep "${CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP}")
endif()
elseif(NX_PROJECT_LANGUAGE_C AND DEFINED CMAKE_C_LINKER_WRAPPER_FLAG)
string(REPLACE ";" " " sLinkerFlag "${CMAKE_C_LINKER_WRAPPER_FLAG}")
if(DEFINED CMAKE_C_LINKER_WRAPPER_FLAG_SEP AND CMAKE_C_LINKER_WRAPPER_FLAG_SEP)
set(sLinkerSep "${CMAKE_C_LINKER_WRAPPER_FLAG_SEP}")
endif()
elseif(NX_HOST_COMPILER_CLANG)
set(sLinkerFlag "-Xlinker ")
elseif(NX_HOST_COMPILER_GNU)
set(sLinkerFlag "-Wl,")
set(sLinkerSep ",")
endif()
if(DEFINED sLinkerFlag)
string(REPLACE " " " " sLinkerFlag "${sLinkerFlag}")
endif()
foreach(sFlag ${lsFlags})
if(sFlag MATCHES "LINKER:")
string(REPLACE "LINKER:" "" sFlag "${sFlag}")
string(REPLACE "," ";" sFlag "${sFlag}")
if(DEFINED sLinkerSep)
string(REPLACE ";" "${sLinkerSep}" sFlag "${sFlag}")
list(APPEND ${vResult} "${sLinkerFlag}${sFlag}")
else()
foreach(sFlag2 ${sFlag})
list(APPEND ${vResult} "${sLinkerFlag}${sFlag2}")
endforeach()
endif()
else()
list(APPEND ${vResult} "${sFlag}")
endif()
endforeach()
_nx_function_prop()
endfunction()

44
cmake/SourceCopy.cmake Normal file
View File

@ -0,0 +1,44 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
set(NX_SOURCECOPY_FILE "${CMAKE_CURRENT_LIST_FILE}")
function(nx_add_source_copy sTargetName sSourceOutput)
add_custom_target(
${sTargetName} BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${sSourceOutput}"
COMMENT "[SourceCopy] Mirroring Source Folder"
COMMAND
${CMAKE_COMMAND} -DNX_SOURCECOPY_INPUT="${CMAKE_CURRENT_SOURCE_DIR}/" -DNX_SOURCECOPY_OUTPUT="${CMAKE_CURRENT_BINARY_DIR}/${sSourceOutput}" -DNX_SOURCECOPY_IGNORE="${ARGN}" -P "${NX_SOURCECOPY_FILE}")
endfunction()
if(DEFINED NX_SOURCECOPY_OUTPUT AND DEFINED NX_SOURCECOPY_INPUT)
string(REPLACE "|" ";" CPACK_SOURCE_IGNORE_FILES "${NX_SOURCECOPY_IGNORE}")
string(REPLACE "#" "$" CPACK_SOURCE_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}")
unset(sIgnorePatterns)
foreach(sIgnorePattern ${CPACK_SOURCE_IGNORE_FILES})
list(APPEND sIgnorePatterns REGEX ${sIgnorePattern} EXCLUDE)
endforeach()
if(NOT EXISTS "${NX_SOURCECOPY_OUTPUT}")
file(MAKE_DIRECTORY "${NX_SOURCECOPY_OUTPUT}")
endif()
message(STATUS "INSTALL ${NX_SOURCECOPY_INPUT} DESTINATION ${NX_SOURCECOPY_OUTPUT} ${sIgnorePatterns}")
file(COPY ${NX_SOURCECOPY_INPUT} DESTINATION "${NX_SOURCECOPY_OUTPUT}"
${sIgnorePatterns})
endif()

View File

@ -16,10 +16,10 @@
# PERFORMANCE OF THIS SOFTWARE.
# -------------------------------
_nx_include_guard()
include(NXClient)
_nx_include_guard()
function(nx_source_group)
_nx_function_guard(nx_source_group)
_nx_function_init()

View File

@ -1,63 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_target_compile_definitions)
_nx_function_init()
unset(lsDefinePRIVATE)
unset(lsDefinePUBLIC)
unset(lsDefineINTERFACE)
unset(lsTargets)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC")
foreach(sArgument ${ARGN})
if(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "TARGET")
set(sParseMode "TARGET")
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
else()
list(APPEND lsDefine${sParseMode} "${sArgument}")
endif()
endforeach()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode ${lsVisibilityModes})
if(DEFINED lsDefine${sVisibilityMode})
string(REPLACE ">:-D" ">:" lsDefine${sVisibilityMode} "${lsDefine${sVisibilityMode}}")
target_compile_definitions("${sTarget}" ${sVisibilityMode} ${lsDefine${sVisibilityMode}})
endif()
endforeach()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,66 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_target_compile_features)
_nx_function_init()
unset(lsFeaturePRIVATE)
unset(lsFeaturePUBLIC)
unset(lsFeatureINTERFACE)
unset(lsTargets)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC")
foreach(sArgument ${ARGN})
if(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "TARGET")
set(sParseMode "TARGET")
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
else()
if(NX_PROJECT_LANGUAGE_CXX AND "${sArgument}" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
list(APPEND lsFeature${sParseMode} "${sArgument}")
elseif(NX_PROJECT_LANGUAGE_C AND "${sArgument}" IN_LIST CMAKE_C_COMPILE_FEATURES)
list(APPEND lsFeature${sParseMode} "${sArgument}")
endif()
endif()
endforeach()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode ${lsVisibilityModes})
if(DEFINED lsFeature${sVisibilityMode})
target_compile_features("${sTarget}" ${sVisibilityMode} ${lsNXFlag${sVisibilityMode}})
endif()
endforeach()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,62 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_target_compile_options)
_nx_function_init()
unset(lsNXFlagPRIVATE)
unset(lsNXFlagPUBLIC)
unset(lsNXFlagINTERFACE)
unset(lsTargets)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC")
foreach(sArgument ${ARGN})
if(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "TARGET")
set(sParseMode "TARGET")
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
else()
list(APPEND lsNXFlag${sParseMode} "${sArgument}")
endif()
endforeach()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode ${lsVisibilityModes})
if(DEFINED lsNXFlag${sVisibilityMode})
target_compile_options("${sTarget}" ${sVisibilityMode} ${lsNXFlag${sVisibilityMode}})
endif()
endforeach()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,147 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_target_include_directories)
_nx_function_init()
unset(lsExternalPRIVATE)
unset(lsExternalPUBLIC)
unset(lsExternalINTERFACE)
unset(lsInternalPRIVATE)
unset(lsInternalPUBLIC)
unset(lsInternalINTERFACE)
unset(lsBuildPRIVATE)
unset(lsBuildPUBLIC)
unset(lsBuildINTERFACE)
unset(lsSourcePRIVATE)
unset(lsSourcePUBLIC)
unset(lsSourceINTERFACE)
unset(lsTargets)
unset(lsGroups)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
unset(sBuildName)
set(lsParseModes "GENDIR" "TARGET" "GROUP")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif(sParseMode STREQUAL "GENDIR")
if(DEFINED sBuildName)
message(
AUTHOR_WARNING
"nx_target_include_directories: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sBuildName "${sArgument}/")
string(REPLACE "//" "/" sBuildName "${sBuildName}")
endif()
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
elseif(sParseMode STREQUAL "GROUP")
list(APPEND lsGroups "${sArgument}")
elseif(sArgument MATCHES "<[^>]+:")
list(APPEND lsExternal${sParseMode} "${sArgument}")
else()
get_filename_component(sArgument "${sArgument}" ABSOLUTE)
file(RELATIVE_PATH sPathRelative "${CMAKE_CURRENT_BINARY_DIR}" "${sArgument}")
string(SUBSTRING "${sPathRelative}" 0 2 sTest)
if(sTest STREQUAL "..")
file(RELATIVE_PATH sPathRelative "${CMAKE_CURRENT_SOURCE_DIR}" "${sArgument}")
string(SUBSTRING "${sPathRelative}" 0 2 sTest)
if(sTest STREQUAL "..")
list(APPEND lsExternal${sParseMode} "${sArgument}")
else()
list(APPEND lsSource${sParseMode} "${sPathRelative}")
list(APPEND lsBuild${sParseMode} "${sPathRelative}")
list(APPEND lsInternal${sParseMode} "${CMAKE_CURRENT_SOURCE_DIR}/${sPathRelative}")
endif()
else()
list(APPEND lsBuild${sParseMode} "${sPathRelative}")
endif()
endif()
endforeach()
foreach(sVisibilityMode ${lsVisibilityModes})
foreach(sIncludePath ${lsBuild${sVisibilityMode}})
list(APPEND lsInternal${sVisibilityMode} "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}${sIncludePath}")
endforeach()
endforeach()
list(APPEND lsExternalPRIVATE ${lsInternalPRIVATE})
foreach(sVisibilityMode "PUBLIC" "INTERFACE")
foreach(sIncludePath ${lsInternal${sVisibilityMode}})
list(APPEND lsExternal${sVisibilityMode} "$<BUILD_INTERFACE:${sIncludePath}>")
endforeach()
if(DEFINED lsInternal${sVisibilityMode})
list(APPEND lsExternal${sVisibilityMode} "$<INSTALL_INTERFACE:${NX_INSTALL_PATH_HEADERS}>")
endif()
endforeach()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode ${lsVisibilityModes})
if(DEFINED lsExternal${sVisibilityMode})
target_include_directories("${sTarget}" ${sVisibilityMode} ${lsExternal${sVisibilityMode}})
endif()
endforeach()
endforeach()
foreach(sGroup ${lsGroups})
list(APPEND _NX_PROPOGATE_SET "NX_LIST_COMPONENT_GROUPS")
list(APPEND _NX_PROPOGATE_SORT "NX_LIST_COMPONENT_GROUPS")
list(APPEND NX_LIST_COMPONENT_GROUPS ${sGroup})
if(DEFINED lsInternalPUBLIC OR DEFINED lsInternalINTERFACE)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroup}_HEADERS" "NX_DOXYGEN_${sGroup}_INCLUDE")
list(APPEND _NX_PROPOGATE_SORT "NX_COMPONENT_${sGroup}_HEADERS" "NX_DOXYGEN_${sGroup}_INCLUDE")
foreach(sIncludePath ${lsInternalPUBLIC} ${lsInternalINTERFACE})
list(APPEND NX_COMPONENT_${sGroup}_HEADERS "${sIncludePath}/")
list(APPEND NX_DOXYGEN_${sGroup}_INCLUDE "${sIncludePath}")
endforeach()
endif()
if(DEFINED lsBuildPUBLIC OR DEFINED lsBuildINTERFACE)
if(DEFINED sBuildName)
list(APPEND _NX_PROPOGATE_SET "NX_DOXYGEN_${sGroup}_STRIP")
list(APPEND _NX_PROPOGATE_SORT "NX_DOXYGEN_${sGroup}_STRIP")
list(APPEND NX_DOXYGEN_${sGroup}_STRIP "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}")
endif()
endif()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,158 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(NXClient)
function(nx_target_link_libraries)
_nx_function_init()
unset(lsLibsPRIVATE)
unset(lsLibsPUBLIC)
unset(lsLibsINTERFACE)
unset(lsTargets)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC")
foreach(sArgument ${ARGN})
if(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "TARGET")
set(sParseMode "TARGET")
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
else()
list(APPEND lsLibs${sParseMode} "${sArgument}")
endif()
endforeach()
set(lsLinkedNew ${lsTargets} ${lsLibsPRIVATE} ${lsLibsPUBLIC} ${lsLibsINTERFACE})
set(lsLinkedOld ${lsTargets})
foreach(sTarget ${lsLinkedNew})
if(NOT TARGET "${sTarget}")
list(REMOVE_ITEM lsLinkedNew "${sTarget}")
endif()
endforeach()
while(NOT lsLinkedOld STREQUAL "${lsLinkedNew}")
set(lsLinkedOld ${lsLinkedNew})
foreach(sTarget ${lsLinkedOld})
get_target_property(sProperty "${sTarget}" TYPE)
if(NOT sProperty STREQUAL "INTERFACE_LIBRARY")
get_target_property(sProperty "${sTarget}" LINK_LIBRARIES)
foreach(sCandidate ${sProperty})
if(TARGET "${sCandidate}")
list(APPEND lsLinkedNew ${sProperty})
endif()
endforeach()
endif()
get_target_property(sProperty "${sTarget}" INTERFACE_LINK_LIBRARIES)
foreach(sCandidate ${sProperty})
if(TARGET "${sCandidate}")
list(APPEND lsLinkedNew ${sProperty})
endif()
endforeach()
endforeach()
foreach(sTarget ${lsTargets})
list(REMOVE_ITEM lsLinkedNew "${sTarget}")
endforeach()
list(SORT lsLinkedNew)
list(REMOVE_DUPLICATES lsLinkedNew)
endwhile()
foreach(sTarget ${lsLinkedNew})
get_target_property(sProperty "${sTarget}" TYPE)
if(sProperty STREQUAL "SHARED_LIBRARY")
get_target_property(sProperty "${sTarget}" IMPORTED)
if(sProperty)
get_target_property(sProperty "${sTarget}" IMPORTED_LOCATION)
if(sProperty)
list(APPEND _NX_PROPOGATE_SET "NX_INSTALL_DEPENDENCIES_NOCONFIG")
list(APPEND _NX_PROPOGATE_SORT "NX_INSTALL_DEPENDENCIES_NOCONFIG")
list(APPEND NX_INSTALL_DEPENDENCIES_NOCONFIG "${sProperty}")
endif()
get_target_property(sProperty "${sTarget}" IMPORTED_LOCATION_NOCONFIG)
if(sProperty)
list(APPEND _NX_PROPOGATE_SET "NX_INSTALL_DEPENDENCIES_NOCONFIG")
list(APPEND _NX_PROPOGATE_SORT "NX_INSTALL_DEPENDENCIES_NOCONFIG")
list(APPEND NX_INSTALL_DEPENDENCIES_NOCONFIG "${sProperty}")
endif()
foreach(sConfigurationType ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
string(TOUPPER "NX_INSTALL_DEPENDENCIES_${sConfigurationType}" vDepends)
string(TOUPPER "IMPORTED_LOCATION_${sConfigurationType}" sImportName)
list(APPEND _NX_PROPOGATE_SET "${vDepends}")
list(APPEND _NX_PROPOGATE_SORT "${vDepends}")
get_target_property(sProperty "${sTarget}" ${sImportName})
if(sProperty)
list(APPEND ${vDepends} "${sProperty}")
endif()
endforeach()
endif()
endif()
endforeach()
# TODO: Search normal LOCATION properties as well and copy over the ones not in the build directory.
if(NX_TARGET_PLATFORM_WINDOWS)
if(NX_TARGET_CONFIGURATION_MULTI)
foreach(sConfigurationType ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER "NX_INSTALL_DEPENDENCIES_${sConfigurationType}" vDepends)
foreach(sDependency ${NX_INSTALL_DEPENDENCIES_NOCONFIG} ${${vDepends}})
if(EXISTS "${sDependency}")
file(COPY "${sDependency}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${sConfigurationType}")
endif()
endforeach()
endforeach()
else()
string(TOUPPER "NX_INSTALL_DEPENDENCIES_${CMAKE_BUILD_TYPE}" vDepends)
foreach(sDependency ${NX_INSTALL_DEPENDENCIES_NOCONFIG} ${${vDepends}})
if(EXISTS "${sProperty}")
file(COPY "${sProperty}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
endif()
endforeach()
endif()
endif()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode ${lsVisibilityModes})
if(DEFINED lsLibs${sVisibilityMode})
target_link_libraries("${sTarget}" ${sVisibilityMode} ${lsLibs${sVisibilityMode}})
endif()
endforeach()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -1,109 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(ParseLinkOptionsNX)
function(nx_target_link_options)
_nx_function_init()
unset(lsLDFlagPRIVATE)
unset(lsLDFlagPUBLIC)
unset(lsLDFlagINTERFACE)
unset(lsTargets)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC" "STATIC")
foreach(sArgument ${ARGN})
if(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "TARGET")
set(sParseMode "TARGET")
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
else()
list(APPEND lsLDFlag${sParseMode} "${sArgument}")
endif()
endforeach()
if(CMAKE_VERSION VERSION_LESS 3.13)
if(DEFINED lsLDFlagPUBLIC)
message(WARNING "nx_target_link_options: Ignoring PUBLIC (Requires CMake 3.13+)")
list(APPEND lsLDFlagPRIVATE ${lsLDFlagPUBLIC})
endif()
if(DEFINED lsLDFlagINTERFACE)
message(WARNING "nx_target_link_options: Ignoring INTERFACE (Requires CMake 3.13+)")
endif()
nx_parse_link_options("${lsLDFlagPRIVATE}" lsLDFlagPRIVATE)
foreach(sTarget ${lsTargets})
get_target_property(sCurrentFlags "${sTarget}" LINK_FLAGS)
if(NOT sCurrentFlags)
unset(sCurrentFlags)
endif()
string(REPLACE ";" " " sCurrentFlags "${sCurrentFlags} ${lsLDFlagPRIVATE}")
string(STRIP "${sCurrentFlags}" sCurrentFlags)
set_target_properties("${sTarget}" PROPERTIES LINK_FLAGS "${sCurrentFlags}")
endforeach()
if(DEFINED lsLDFlagSTATIC)
foreach(sTarget ${lsTargets})
get_target_property(sCurrentFlags "${sTarget}" STATIC_LIBRARY_FLAGS)
if(NOT sCurrentFlags)
unset(sCurrentFlags)
endif()
string(REPLACE ";" " " sCurrentFlags "${sCurrentFlags} ${lsLDFlagSTATIC}")
string(STRIP "${sCurrentFlags}" sCurrentFlags)
set_target_properties("${sTarget}" PROPERTIES STATIC_LIBRARY_FLAGS "${sCurrentFlags}")
endforeach()
endif()
else()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode "PRIVATE" "PUBLIC" "INTERFACE")
if(DEFINED lsLDFlag${sVisibilityMode})
target_link_options("${sTarget}" ${sVisibilityMode} ${lsLDFlag${sVisibilityMode}})
endif()
endforeach()
if(DEFINED lsLDFlagSTATIC)
get_target_property(sCurrentFlags "${sTarget}" STATIC_LIBRARY_OPTIONS)
if(NOT sCurrentFlags)
unset(sCurrentFlags)
endif()
list(APPEND sCurrentFlags ${lsLDFlagSTATIC})
set_target_properties("${sTarget}" PROPERTIES STATIC_LIBRARY_OPTIONS "${sCurrentFlags}")
endif()
endforeach()
endif()
_nx_function_prop()
endfunction()

View File

@ -1,216 +0,0 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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.
# -------------------------------
_nx_include_guard()
include(CreateBuildPathNX)
function(nx_target_sources)
_nx_function_init()
unset(lsExternalPRIVATE)
unset(lsExternalPUBLIC)
unset(lsExternalINTERFACE)
unset(lsInternalPRIVATE)
unset(lsInternalPUBLIC)
unset(lsInternalINTERFACE)
unset(lsBuildPRIVATE)
unset(lsBuildPUBLIC)
unset(lsBuildINTERFACE)
unset(lsSourcePRIVATE)
unset(lsSourcePUBLIC)
unset(lsSourceINTERFACE)
unset(lsSourceConfigure)
unset(lsGroups)
unset(lsStripPaths)
unset(lsSkipPaths)
unset(lsTargets)
set(bIgnoreMode OFF)
set(sParseMode "TARGET")
unset(sBuildName)
set(lsParseModes "GENDIR" "TARGET" "GROUP" "STRIP_PATHS" "SKIP_PATHS")
set(lsVisibilityModes "INTERFACE" "PRIVATE" "PUBLIC")
foreach(sArgument ${ARGN})
if("${sArgument}" IN_LIST lsParseModes)
set(sParseMode "${sArgument}")
elseif("${sArgument}" IN_LIST lsVisibilityModes)
if(NOT bIgnoreMode)
set(sParseMode "${sArgument}")
endif()
elseif(sArgument STREQUAL "FORCED")
set(bIgnoreMode ON)
elseif(sParseMode STREQUAL "GENDIR")
if(DEFINED sBuildName)
message(AUTHOR_WARNING "nx_target_sources: Too Many Args - Ignoring ${sParseMode} ('${sArgument}')")
else()
set(sBuildName "${sArgument}/")
string(REPLACE "//" "/" sBuildName "${sBuildName}")
endif()
elseif(sParseMode STREQUAL "STRIP_PATHS")
list(APPEND lsStripPaths "${sArgument}")
elseif(sParseMode STREQUAL "SKIP_PATHS")
list(APPEND lsSkipPaths "${sArgument}")
elseif(sParseMode STREQUAL "TARGET")
list(APPEND lsTargets "${sArgument}")
elseif(sParseMode STREQUAL "GROUP")
list(APPEND lsGroups "${sArgument}")
elseif(sArgument MATCHES "<[^>]+:")
list(APPEND lsExternal${sParseMode} "${sArgument}")
else()
if(sArgument MATCHES ".rc$|.rc.configure$" AND NOT NX_PROJECT_LANGUAGE_RC)
message(STATUS "nx_target_sources: Skipping '${sArgument}'")
else()
get_filename_component(sArgument "${sArgument}" ABSOLUTE)
file(RELATIVE_PATH sPathRelative "${CMAKE_CURRENT_BINARY_DIR}" "${sArgument}")
string(SUBSTRING "${sPathRelative}" 0 2 sTest)
if(sTest STREQUAL "..")
file(RELATIVE_PATH sPathRelative "${CMAKE_CURRENT_SOURCE_DIR}" "${sArgument}")
string(SUBSTRING "${sPathRelative}" 0 2 sTest)
if(sTest STREQUAL "..")
list(APPEND lsExternal${sParseMode} "${sArgument}")
elseif(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${sPathRelative}"
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${sPathRelative}.configure")
list(APPEND lsSourceConfigure "${sPathRelative}")
list(APPEND lsBuild${sParseMode} "${sPathRelative}")
elseif(sPathRelative MATCHES ".configure$")
string(REPLACE ".configure" "" sPathRelative "${sPathRelative}")
list(APPEND lsSourceConfigure "${sPathRelative}")
list(APPEND lsBuild${sParseMode} "${sPathRelative}")
else()
list(APPEND lsSource${sParseMode} "${sPathRelative}")
list(APPEND lsInternal${sParseMode} "${CMAKE_CURRENT_SOURCE_DIR}/${sPathRelative}")
endif()
else()
list(APPEND lsBuild${sParseMode} "${sPathRelative}")
endif()
endif()
endif()
endforeach()
if(DEFINED sBuildName)
foreach(sStripPath ${lsStripPaths})
list(APPEND lsStripPaths "${sBuildName}${sStripPath}")
endforeach()
endif()
foreach(sIncludePath ${lsSourceConfigure})
nx_create_build_path("${sIncludePath}.configure" GENDIR ${sBuildName})
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${sIncludePath}.configure"
"${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}${sIncludePath}")
endforeach()
foreach(sVisibilityMode ${lsVisibilityModes})
foreach(sIncludePath ${lsBuild${sVisibilityMode}})
list(APPEND lsInternal${sVisibilityMode} "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}${sIncludePath}")
endforeach()
endforeach()
list(APPEND lsExternalPRIVATE ${lsInternalPRIVATE})
foreach(sVisibilityMode "PUBLIC" "INTERFACE")
foreach(sIncludePath ${lsInternal${sVisibilityMode}})
list(APPEND lsExternal${sVisibilityMode} "$<BUILD_INTERFACE:${sIncludePath}>")
endforeach()
foreach(sIncludePath ${lsSource${sVisibilityMode}} ${lsBuild${sVisibilityMode}})
set(bDone OFF)
foreach(sStripPath ${lsStripPaths})
if(NOT bDone AND sIncludePath MATCHES "^${sStripPath}/")
string(REPLACE "#${sStripPath}/" "" sIncludePath "#${sIncludePath}")
set(bDone ON)
endif()
endforeach()
set(bGood ON)
foreach(sSkipPath ${lsSkipPaths})
if(bGood AND sIncludePath MATCHES "^${sSkipPath}/")
if(DEFINED lsSource${sVisibilityMode})
list(REMOVE_ITEM lsSource${sVisibilityMode} "${sIncludePath}")
endif()
if(DEFINED lsBuild${sVisibilityMode})
list(REMOVE_ITEM lsBuild${sVisibilityMode} "${sIncludePath}")
endif()
set(bGood OFF)
endif()
endforeach()
if(bGood)
list(APPEND lsExternal${sVisibilityMode}
"$<INSTALL_INTERFACE:${NX_INSTALL_PATH_SOURCE}/${sIncludePath}>")
endif()
endforeach()
endforeach()
foreach(sTarget ${lsTargets})
foreach(sVisibilityMode ${lsVisibilityModes})
if(DEFINED lsExternal${sVisibilityMode})
target_sources("${sTarget}" ${sVisibilityMode} ${lsExternal${sVisibilityMode}})
endif()
endforeach()
endforeach()
foreach(sGroup ${lsGroups})
list(APPEND _NX_PROPOGATE_SET "NX_LIST_COMPONENT_GROUPS" "NX_LIST_${sGroup}_SOURCE")
list(APPEND _NX_PROPOGATE_SORT "NX_LIST_COMPONENT_GROUPS" "NX_LIST_${sGroup}_SOURCE")
list(APPEND NX_LIST_COMPONENT_GROUPS ${sGroup})
list(APPEND NX_LIST_${sGroup}_SOURCE ${lsInternalPRIVATE} ${lsInternalPUBLIC} ${lsInternalINTERFACE})
if(DEFINED lsInternalPUBLIC OR lsInternalINTERFACE)
list(APPEND _NX_PROPOGATE_SET "NX_DOXYGEN_${sGroup}_SOURCE")
list(APPEND _NX_PROPOGATE_SORT "NX_DOXYGEN_${sGroup}_SOURCE")
list(APPEND NX_DOXYGEN_${sGroup}_SOURCE ${lsInternalPUBLIC} ${lsInternalINTERFACE})
endif()
if(DEFINED lsSourcePUBLIC OR DEFINED lsSourceINTERFACE)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroup}_SOURCE")
list(APPEND _NX_PROPOGATE_SORT "NX_COMPONENT_${sGroup}_SOURCE")
list(APPEND NX_COMPONENT_${sGroup}_SOURCE ${lsSourcePUBLIC} ${lsSourceINTERFACE})
endif()
if(DEFINED lsBuildPUBLIC OR DEFINED lsBuildINTERFACE)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroup}_BUILD")
list(APPEND _NX_PROPOGATE_SORT "NX_COMPONENT_${sGroup}_BUILD")
foreach(sSourcePath ${lsBuildPUBLIC} ${lsBuildINTERFACE})
list(APPEND NX_COMPONENT_${sGroup}_BUILD "${sBuildName}${sSourcePath}")
endforeach()
if(DEFINED sBuildName)
string(REPLACE "/" "" sBuildStrip "${sBuildName}")
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroup}_STRIP2" "NX_DOXYGEN_${sGroup}_STRIP")
list(APPEND _NX_PROPOGATE_SORT "NX_COMPONENT_${sGroup}_STRIP2" "NX_DOXYGEN_${sGroup}_STRIP")
list(APPEND NX_COMPONENT_${sGroup}_STRIP2 "${sBuildStrip}")
list(APPEND NX_DOXYGEN_${sGroup}_STRIP "${CMAKE_CURRENT_BINARY_DIR}/${sBuildName}")
endif()
endif()
if(DEFINED lsStripPaths)
list(APPEND _NX_PROPOGATE_SET "NX_COMPONENT_${sGroup}_STRIP")
list(APPEND _NX_PROPOGATE_SORT "NX_COMPONENT_${sGroup}_STRIP")
list(APPEND NX_COMPONENT_${sGroup}_STRIP ${lsStripPaths})
endif()
endforeach()
_nx_function_prop()
endfunction()

View File

@ -17,26 +17,26 @@
# -------------------------------
# -------------------------------
# Adapted from CMake Wiki FAQ: Can I Do 'mak euninstall' With CMake?
# Adapted from CMake Wiki FAQ: Can I Do 'make uninstall' With CMake?
# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake
# -------------------------------
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Uninstall: Cannot Locate Manifest ('@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt')")
message(FATAL_ERROR "cmake_uninstall: Cannot Locate Manifest ('@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt')")
endif()
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" sManifest)
string(REGEX REPLACE "\n" ";" lsFiles "${sManifest}")
foreach(sFilename ${lsFiles})
if(IS_SYMLINK "$ENV{DESTDIR}${sFilename}" OR EXISTS "$ENV{DESTDIR}${sFilename}")
file(REMOVE ${sFilename})
if(IS_SYMLINK "$ENV{DESTDIR}${sFilename}" OR EXISTS "$ENV{DESTDIR}${sFilename}")
message(FATAL_ERROR "Failed To Remove: $ENV{DESTDIR}${sFilename}\n -- ${sOutput}")
else()
message(STATUS "Removing: $ENV{DESTDIR}${sFilename}")
endif()
else()
message(STATUS "Missing: $ENV{DESTDIR}${sFilename}")
endif()
if(IS_SYMLINK "$ENV{DESTDIR}${sFilename}" OR EXISTS "$ENV{DESTDIR}${sFilename}")
file(REMOVE ${sFilename})
if(IS_SYMLINK "$ENV{DESTDIR}${sFilename}" OR EXISTS "$ENV{DESTDIR}${sFilename}")
message(FATAL_ERROR "Failed To Remove: $ENV{DESTDIR}${sFilename}\n -- ${sOutput}")
else()
message(STATUS "Removing: $ENV{DESTDIR}${sFilename}")
endif()
else()
message(STATUS "Missing: $ENV{DESTDIR}${sFilename}")
endif()
endforeach()

42
docs/NXCheck.md Normal file
View File

@ -0,0 +1,42 @@
# NXClient
## Functions
### nx_check_compiler_flag
```
nx_check_compiler_flag( <result_var> <flag> )
```
### nx_check_linker_flag
```
nx_check_linker_flag( <result_var> <flag> )
```
### nx_check_source_compiles
```
nx_check_source_compiles( <code> <result_var> )
```
### nx_check_source_runs
```
nx_check_source_runs( <code> <result_var> )
```
### nx_test_compiler_flags
```
nx_test_compiler_flags( [[LIST_VARIABLE] <result_var>] [RAW_VARIABLE <result_var>] [BOOLEAN_VARIABLE <result_var>]
[C_VARIABLE <result_var>] [CXX_VARIABLE <result_var>] [[CHECK] <flags...>]
[GENEXPR <generator-expression>] )
```
### nx_test_linker_flags
```
nx_test_linker_flags( [[LIST_VARIABLE] <result_var>] [RAW_VARIABLE <result_var>] [BOOLEAN_VARIABLE <result_var>]
[[CHECK] <flags...>] [GENEXPR <generator-expression>] )
```

24
docs/NXClient.md Normal file
View File

@ -0,0 +1,24 @@
# NXClient Module
## Functions
### nx_project_details
```
nx_project_details( [[NAME] <project>] [WORKSPACE <workspace>]
[SUMMARY <description>] [WEBSITE <url>] [ISSUES <url>]
[[API] [[VERSION] <major>[.<minor>[.<patch>[.<tweak>]]]]
[PRERELEASE (alpha[#]|beta[#]|rc[#]|unstable)]
[COMPATIBILITY (AnyNewer|SameMajor|SameMinor|Exact)]
[ABI [[VERSION] <major>[.<minor>[.<patch>]]]
[COMPATIBILITY (AnyNewer|SameMajor|SameMinor|Exact)]
[LIBTOOL [[VERSION] <current>[:<revision>[:<age>]]]]
[PACKAGE [[VERSION] <version>]]] )
```
### nx_find_package
```
nx_find_package( <package> [<version>] [EXACT]
[QUIET] [REQUIRED] [PREFER_BUILD] )
```

View File

@ -1,4 +0,0 @@
#include "hello_export.h"
#include "hello_version.h"
HELLO_EXPORT void hello();

View File

@ -1,4 +0,0 @@
#include "hello.hpp"
#include <iostream>
HELLO_EXPORT void hello() { std::cout << "Hello World!\n"; }

View File

@ -1,22 +0,0 @@
#include "hello.hpp"
#if defined(__ANDROID__) && !defined(_CONSOLE)
#include <android/native_app_glue.h>
void android_main( struct android_app * state )
{
hello();
}
#elif defined(_WIN32) && !defined(_CONSOLE)
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
{
hello();
return 0;
}
#else
int main(int argc, char *argv[])
{
hello();
return 0;
}
#endif

96
test/.clang-format Normal file
View File

@ -0,0 +1,96 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: true
AlignEscapedNewlinesLeft: true
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 200
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 6
ContinuationIndentWidth: 6
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '$'
IndentCaseLabels: true
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 200
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 60
PenaltyReturnTypeOnItsOwnLine: 1000000
PointerAlignment: Middle
ReflowComments: true
SortIncludes: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: Never
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: true
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 4
UseTab: ForIndentation
...

342
test/.cmake-format Normal file
View File

@ -0,0 +1,342 @@
# --------------------------
# General Formatting Options
# --------------------------
# How wide to allow formatted cmake files
line_width = 200
# How many spaces to tab for indent
tab_size = 4
# 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 positinal argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 6
# 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 it's own line.
dangle_parens = False
# If the trailing parenthesis must be 'dangled' on it's 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'
min_prefix_chars = 4
# If the statement spelling length (including space and parenthesis is larger
# than the tab width by more than this amoung, 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'
# Specify structure for custom cmake functions
additional_commands = {
"nx_add_files": {
"flags": [
"APPLICATION",
"APPLICATION_DEBUG",
"CMAKE",
"CONFIGURATION",
"DAEMON",
"DAEMON_DEBUG",
"DEVBIN",
"DEVDOC",
"DEVRES",
"DOCUMENTATION",
"EXECUTABLE",
"EXECUTABLE_DEBUG",
"EXPORT",
"HEADERS",
"LIBDEPS",
"MODRES",
"MODULE",
"MODULE_DEBUG",
"RESOURCES",
"SHARED",
"SHARED_DEBUG",
"SOURCES",
"STATIC"
],
"kwargs": {
"DIRS": "*",
"FILES": "*",
"GROUP": "*",
"GROUP_INSTALL": "*"
}
},
"nx_add_target": {
"flags": [
"APPLICATION",
"DAEMON",
"EXECUTABLE",
"HEADERS",
"LIBRARY",
"MODAPI",
"MODULE",
"OBJECTS",
"SHARED",
"STATIC",
"TEST"
],
"kwargs": {
"ABI": "*",
"API": "*",
"CFLAGS": "*",
"CXXFLAGS": "*",
"DEFINES": "*",
"DEFINE_SYMBOL": "*",
"DEPENDS": "*",
"FEATURES": "*",
"GENERATE": "*",
"GENERATE_EXPORT": "*",
"GENERATE_VERSION": "*",
"GROUP": "*",
"GROUP_EXPORT": "*",
"GROUP_INSTALL": "*",
"INCLUDES": "*",
"ISSUES": "*",
"LDFLAGS": "*",
"LIBTOOL": "*",
"SOURCES": "*",
"STATIC_DEFINE": "*",
"SUMMARY": "*",
"VERSION": "*",
"WEBSITE": "*",
"WORKSPACE": "*"
}
},
"nx_add_test": {
"flags": [
"EXECUTABLE",
"TEST"
],
"kwargs": {
"CFLAGS": "*",
"COMMAND": "*",
"CXXFLAGS": "*",
"DEFINES": "*",
"DEPENDS": "*",
"ENVIRONMENT": "*",
"FEATURES": "*",
"INCLUDES": "*",
"LDFLAGS": "*",
"SOURCES": "*",
"WORKING_DIRECTORY": "*"
}
},
"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_NAME": "*",
"INCLUDE_GUARD_NAME": "*",
"NO_DEPRECATED_MACRO_NAME": "*",
"NO_EXPORT_MACRO_NAME": "*",
"PREFIX_NAME": "*",
"STATIC_DEFINE": "*"
}
},
"nx_generate_vcs_header": {
"kwargs": {
"BASE_NAME": "*",
"CUSTOM_CONTENT_FROM_VARIABLE": "*",
"GIT_FILE_NAME": "*",
"GIT_MACRO_NAME": "*",
"INCLUDE_GUARD_NAME": "*",
"PREFIX_NAME": "*"
}
},
"nx_generate_version_header": {
"kwargs": {
"BASE_NAME": "*",
"CUSTOM_CONTENT_FROM_VARIABLE": "*",
"INCLUDE_GUARD_NAME": "*",
"PREFIX_NAME": "*",
"VERSION_FILE_NAME": "*",
"VERSION_MACRO_NAME": "*"
}
},
"nx_project_details": {
"flags": [
"LOCAL"
],
"kwargs": {
"ABI": "*",
"API": "*",
"ISSUES": "*",
"LIBTOOL": "*",
"NAME": "*",
"PACKAGE": "*",
"SUMMARY": "*",
"VERSION": "*",
"WEBSITE": "*",
"WORKSPACE": "*"
}
},
"nx_target_compile_definitions": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_compile_features": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_compile_options": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_headers": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_include_directories": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_link_libraries": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_link_options": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
},
"nx_target_sources": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*",
"TARGET": "*"
}
}
}
# 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
# 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
# A dictionary containing any per-command configuration overrides. Currently
# only `command_case` is supported.
per_command = {}
# A dictionary mapping layout nodes to a list of wrap decisions. See the
# documentation for more information.
layout_passes = {}
# --------------------------
# Comment Formatting Options
# --------------------------
# What character to use for bulleted lists
bullet_char = '*'
# What character to use as punctuation after numerals in an enumerated list
enum_char = '.'
# enable comment markup parsing and reflow
enable_markup = False
# 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 true, then insert a space between the first hash char and remaining hash
# chars in a hash ruler, and normalize it's length to fill the column
canonicalize_hashrulers = True
# ---------------------------------
# Miscellaneous Options
# ---------------------------------
# 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'

81
test/CMakeLists.txt Normal file
View File

@ -0,0 +1,81 @@
# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2019 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)
project(
Phoenix
VERSION "1.0"
DESCRIPTION "Phoenix Game Engine"
LANGUAGES CXX)
set(BUILD_ALL_LIBS ON)
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/NXClient.cmake" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}")
include(NXClient)
include(NXBuild)
set(HELLO_LIB_SOURCE src/hello.cpp)
set(HELLO_LIB_HEADERS include/hello.hpp)
set(HELLO_MOD_SOURCE src/hello.mod.cpp)
set(HELLO_API_HEADERS include/hello-api.hpp)
set(HELLO_SOURCE src/hello.main.cpp)
nx_add_target(
PHOENIX_LIB Flame LIBRARY
SOURCES ${HELLO_LIB_SOURCE} PUBLIC ${HELLO_LIB_HEADERS}
GENERATE PUBLIC include/hello_exports.hpp
INCLUDES PUBLIC include
SUMMARY "Phoenix Support Library")
nx_add_target(
PHOENIX_GAMEAPI GameAPI MODAPI
SOURCES INTERFACE ${HELLO_API_HEADERS}
GENERATE INTERFACE include/hello-api_exports.hpp
INCLUDES INTERFACE include
SUMMARY "Phoenix Game API")
nx_add_target(
PHOENIX_GAMES Game MODULE
SOURCES ${HELLO_MOD_SOURCE}
DEPENDS Phoenix::GameAPI Phoenix::Flame
DEFINE_SYMBOL PROVIDES_GAMEAPI
STATIC_DEFINE HARDLINK_GAMEAPI
SUMMARY "Phoenix Game Module")
nx_add_target(
PHOENIX_ENGINES Phoenix APPLICATION
SOURCES ${HELLO_SOURCE}
DEPENDS Phoenix::GameAPI Phoenix::Flame
GROUP Phoenix)
nx_add_test(
PHOENIX_TESTS test-Phoenix
SOURCES ${HELLO_SOURCE}
DEPENDS Phoenix::GameAPI Phoenix::Flame)
nx_clang_format(${HELLO_SOURCE} ${HELLO_LIB_SOURCE} ${HELLO_LIB_HEADERS} ${HELLO_API_HEADERS} ${HELLO_MOD_SOURCE})
nx_cmake_format()
nx_install()
nx_package()
if(BUILD_TESTING)
enable_testing()
endif()
foreach(sVar ${_NX_PROPOGATE_GLOBAL})
if(DEFINED ${sVar})
message(STATUS "${sVar}: ${${sVar}}")
endif()
endforeach()

View File

@ -0,0 +1,3 @@
#include "hello-api_exports.hpp"
extern GAMEAPI_EXPORT void say_hello2();

3
test/include/hello.hpp Normal file
View File

@ -0,0 +1,3 @@
#include "hello_exports.hpp"
extern FLAME_EXPORT void say_hello1();

4
test/src/hello.cpp Normal file
View File

@ -0,0 +1,4 @@
#include "hello.hpp"
#include <iostream>
FLAME_EXPORT void say_hello1() { std::cout << "Hello!\n"; }

7
test/src/hello.main.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "hello.hpp"
int main( int argc, char * argv[] )
{
say_hello1();
return 0;
}

4
test/src/hello.mod.cpp Normal file
View File

@ -0,0 +1,4 @@
#include "hello-api.hpp"
#include <iostream>
GAMEAPI_EXPORT void say_hello2() { std::cout << "Hello!\n"; }