big test
This commit is contained in:
parent
0a3a0e6f71
commit
0ad8c1c97a
|
@ -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'
|
||||
|
383
.drone.yml
383
.drone.yml
|
@ -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
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
build*/*
|
||||
*.kate-swp
|
||||
.vs/*
|
||||
.vscode/*
|
||||
build*/*
|
|
@ -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
|
373
CMakeLists.txt
373
CMakeLists.txt
|
@ -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()
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
||||
|
|
|
@ -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
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
2733
cmake/NXClient.cmake
2733
cmake/NXClient.cmake
File diff suppressed because it is too large
Load Diff
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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@")
|
File diff suppressed because it is too large
Load Diff
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
24
data/Uninstall.cmake.configure → cmake/cmake_uninstall.cmake.configure
Executable file → Normal file
24
data/Uninstall.cmake.configure → cmake/cmake_uninstall.cmake.configure
Executable file → Normal 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()
|
|
@ -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>] )
|
||||
```
|
|
@ -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] )
|
||||
```
|
|
@ -1,4 +0,0 @@
|
|||
#include "hello_export.h"
|
||||
#include "hello_version.h"
|
||||
|
||||
HELLO_EXPORT void hello();
|
|
@ -1,4 +0,0 @@
|
|||
#include "hello.hpp"
|
||||
#include <iostream>
|
||||
|
||||
HELLO_EXPORT void hello() { std::cout << "Hello World!\n"; }
|
22
src/main.cpp
22
src/main.cpp
|
@ -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
|
|
@ -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
|
||||
...
|
||||
|
|
@ -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'
|
||||
|
|
@ -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()
|
|
@ -0,0 +1,3 @@
|
|||
#include "hello-api_exports.hpp"
|
||||
|
||||
extern GAMEAPI_EXPORT void say_hello2();
|
|
@ -0,0 +1,3 @@
|
|||
#include "hello_exports.hpp"
|
||||
|
||||
extern FLAME_EXPORT void say_hello1();
|
|
@ -0,0 +1,4 @@
|
|||
#include "hello.hpp"
|
||||
#include <iostream>
|
||||
|
||||
FLAME_EXPORT void say_hello1() { std::cout << "Hello!\n"; }
|
|
@ -0,0 +1,7 @@
|
|||
#include "hello.hpp"
|
||||
|
||||
int main( int argc, char * argv[] )
|
||||
{
|
||||
say_hello1();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
#include "hello-api.hpp"
|
||||
#include <iostream>
|
||||
|
||||
GAMEAPI_EXPORT void say_hello2() { std::cout << "Hello!\n"; }
|
Loading…
Reference in New Issue