# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2021-2025 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.10 FATAL_ERROR)
project(HelloTest LANGUAGES CXX)

if(CMAKE_TOOLCHAIN_FILE MATCHES "conan")
	set(CONAN ON)
else()
	set(CONAN OFF)
endif()

if(NOT DEFINED BUILD_SHARED_LIBS AND NOT DEFINED BUILD_STATIC_LIBS)
	set(BUILD_SHARED_LIBS ON)
	set(BUILD_STATIC_LIBS ON)
elseif(DEFINED BUILD_SHARED_LIBS AND DEFINED BUILD_STATIC_LIBS)
elseif(DEFINED BUILD_SHARED_LIBS)
	if(BUILD_SHARED_LIBS)
		set(BUILD_STATIC_LIBS OFF)
	else()
		set(BUILD_STATIC_LIBS ON)
	endif()
elseif(DEFINED BUILD_STATIC_LIBS)
	if(BUILD_STATIC_LIBS)
		set(BUILD_SHARED_LIBS OFF)
	else()
		set(BUILD_SHARED_LIBS ON)
	endif()
endif()

if(BUILD_SHARED_LIBS)
	if(CMAKE_SYSTEM_NAME MATCHES "Generic")
		if(NOT BUILD_STATIC_LIBS)
			message(WARNING "Compiler and platform combination does not support shared libraries.")
			set(BUILD_STATIC_LIBS ON)
		endif()
		set(BUILD_SHARED_LIBS OFF)
	elseif(CMAKE_CXX_COMPILER_ID MATCHES "DigitalMars" AND CMAKE_SYSTEM_NAME MATCHES "DOS")
		if(NOT BUILD_STATIC_LIBS)
			message(WARNING "Compiler and platform combination does not support shared libraries.")
			set(BUILD_STATIC_LIBS ON)
		endif()
		set(BUILD_SHARED_LIBS OFF)
	elseif(CMAKE_CXX_COMPILER_ID MATCHES "OpenWatcom" AND CMAKE_SYSTEM_NAME MATCHES "DOS")
		if(NOT BUILD_STATIC_LIBS)
			message(WARNING "Compiler and platform combination does not support shared libraries.")
			set(BUILD_STATIC_LIBS ON)
		endif()
		set(BUILD_SHARED_LIBS OFF)
	elseif(CMAKE_CXX_COMPILER_ID MATCHES "OpenWatcom" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
		if(NOT BUILD_STATIC_LIBS)
			message(WARNING "Compiler and platform combination does not support shared libraries.")
			set(BUILD_STATIC_LIBS ON)
		endif()
		set(BUILD_SHARED_LIBS OFF)
	elseif(CMAKE_SYSTEM_NAME MATCHES "WASI")
		# We can build modules, but not proper dynamic libraries.
		if(NOT BUILD_STATIC_LIBS)
			message(WARNING "Compiler and platform combination does not support shared libraries.")
			set(BUILD_STATIC_LIBS ON)
		endif()
		set(BUILD_SHARED_LIBS OFF)
	elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND DEFINED CMAKE_VS_PLATFORM_NAME AND CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
		message(WARNING "Shared libraries do not work with this configuration in our build system. I do not know why.")
		# 0024:err:module:LdrInitializeThunk "HelloWorld.dll" failed to initialize, aborting
		# 0024:err:module:LdrInitializeThunk Initializing dlls for L"Z:\\tmp\\build-aarch64-vc17\\HelloTest.exe" failed, status c0000005
		if(NOT BUILD_STATIC_LIBS)
			message(WARNING "Compiler and platform combination does not support shared libraries.")
			set(BUILD_STATIC_LIBS ON)
		endif()
		set(BUILD_SHARED_LIBS OFF)
	endif()
endif()

# ------------------
# Installation Paths

set(NXBUILD_INSTALL_TYPE_DOS_BUNDLE OFF) # C:/[NAME]
set(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE OFF) # C:/Program Files/[NAME]
set(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OFF) # /boot/system
set(NXBUILD_INSTALL_TYPE_HAIKU_LOCAL OFF) # /boot/system/non-packaged
set(NXBUILD_INSTALL_TYPE_UNIX_SYSTEM OFF) # /usr
set(NXBUILD_INSTALL_TYPE_UNIX_LOCAL OFF) # /usr/local /opt/local
set(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE OFF) # /opt/[NAME]

set(NXBUILD_INSTALL_TYPE_ARCH_SHARED ON)
set(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE OFF)

unset(NXBUILD_INSTALL_PREFIX_ALL)
unset(NXBUILD_INSTALL_PREFIX_USR)
unset(NXBUILD_INSTALL_PREFIX_ETC)
unset(NXBUILD_INSTALL_SUFFIX_ETC)

if(DEFINED NXBUILD_INSTALL_TYPE)
	if(NXBUILD_INSTALL_TYPE MATCHES "Bundle")
		set(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(NXBUILD_INSTALL_TYPE MATCHES "Simple")
		set(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(NXBUILD_INSTALL_TYPE MATCHES "DOS")
		set(NXBUILD_INSTALL_TYPE_DOS_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(NXBUILD_INSTALL_TYPE MATCHES "Windows")
		set(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(NXBUILD_INSTALL_TYPE MATCHES "BeOS|Haiku")
		set(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM ON)
	elseif(NXBUILD_INSTALL_TYPE MATCHES "FHS|FreeBSD|Linux|Unix")
		set(NXBUILD_INSTALL_TYPE_UNIX_SYSTEM ON)
	endif()
elseif(DEFINED CMAKE_INSTALL_PREFIX)
	if(CMAKE_INSTALL_PREFIX STREQUAL "/")
		if(CMAKE_SYSTEM_NAME STREQUAL "DOS")
			set(NXBUILD_INSTALL_TYPE_DOS_BUNDLE ON)
			set(NXBUILD_INSTALL_PREFIX_ALL "${PROJECT_NAME}/")
			set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
		elseif(CMAKE_SYSTEM_NAME STREQUAL "Haiku")
			set(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM ON)
			set(NXBUILD_INSTALL_PREFIX_ALL "boot/system/")
		elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
			set(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE ON)
			set(NXBUILD_INSTALL_PREFIX_ALL "${PROJECT_NAME}/")
			set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
		else()
			set(NXBUILD_INSTALL_TYPE_UNIX_SYSTEM ON)
			set(NXBUILD_INSTALL_PREFIX_USR "usr/")
		endif()
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/usr$")
		set(NXBUILD_INSTALL_TYPE_UNIX_SYSTEM ON)
		string(REGEX REPLACE "/usr$" "/" NXBUILD_INSTALL_PREFIX_ETC "${CMAKE_INSTALL_PREFIX}")
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/boot$")
		set(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM ON)
		set(NXBUILD_INSTALL_PREFIX_ALL "system/")
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/system$")
		set(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM ON)
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/local$")
		set(NXBUILD_INSTALL_TYPE_UNIX_LOCAL ON)
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/non-packaged$")
		set(NXBUILD_INSTALL_TYPE_HAIKU_LOCAL ON)
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/psp$")
		set(NXBUILD_INSTALL_TYPE_UNIX_LOCAL ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_INSTALL_PREFIX MATCHES "/opt/")
		set(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
		string(REGEX REPLACE "/opt/.+" "/" NXBUILD_INSTALL_PREFIX_ETC "${CMAKE_INSTALL_PREFIX}")
		string(REGEX MATCH "/opt/.+" NXBUILD_INSTALL_SUFFIX_ETC "${CMAKE_INSTALL_PREFIX}")
	elseif(CMAKE_SYSTEM_NAME MATCHES "Generic")
		set(NXBUILD_INSTALL_TYPE_UNIX_LOCAL ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_SYSTEM_NAME MATCHES "DOS")
		set(NXBUILD_INSTALL_TYPE_DOS_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
		set(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS|Haiku")
		set(NXBUILD_INSTALL_TYPE_HAIKU_LOCAL ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_INSTALL_PREFIX MATCHES "${PROJECT_NAME}")
		set(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	else()
		set(NXBUILD_INSTALL_TYPE_UNIX_LOCAL ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	endif()
else()
	if(CMAKE_SYSTEM_NAME MATCHES "DOS")
		set(NXBUILD_INSTALL_TYPE_DOS_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
		set(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE ON)
		set(NXBUILD_INSTALL_TYPE_ARCH_SHARED OFF)
	elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS|Haiku")
		set(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM ON)
	else()
		set(NXBUILD_INSTALL_TYPE_UNIX_SYSTEM ON)
	endif()
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_TOOLS AND DEFINED CMAKE_INSTALL_BINDIR)
	set(NXBUILD_INSTALL_PATH_APPS "${CMAKE_INSTALL_BINDIR}")
	set(NXBUILD_INSTALL_PATH_DAEMONS "${CMAKE_INSTALL_BINDIR}")
	set(NXBUILD_INSTALL_PATH_TOOLS "${CMAKE_INSTALL_BINDIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_TOOLS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_TOOLS "tools")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_TOOLS "${NXBUILD_INSTALL_PREFIX_ALL}BIN")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_TOOLS "${NXBUILD_INSTALL_PREFIX_ALL}Bin")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_PATH_TOOLS "${NXBUILD_INSTALL_PREFIX_ALL}bin")
	else()
		set(NXBUILD_INSTALL_PATH_TOOLS "${NXBUILD_INSTALL_PREFIX_USR}bin")
	endif()
endif()
if(NOT DEFINED NXBUILD_TARGET_SUFFIX_TOOLS AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
	if(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH)
			set(NXBUILD_TARGET_SUFFIX_TOOLS "-${CMAKE_HAIKU_SECONDARY_ARCH}")
		endif()
	elseif(NXBUILD_INSTALL_TYPE_UNIX_SYSTEM OR NXBUILD_INSTALL_TYPE_UNIX_LOCAL)
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE)
			set(NXBUILD_TARGET_SUFFIX_TOOLS "-32")
		endif()
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_APPS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_APPS ".")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM)
		set(NXBUILD_INSTALL_PATH_APPS "${NXBUILD_INSTALL_PREFIX_ALL}apps")
	else()
		set(NXBUILD_INSTALL_PATH_APPS "${NXBUILD_INSTALL_PATH_TOOLS}")
	endif()
endif()
if(NOT DEFINED NXBUILD_TARGET_SUFFIX_APPS AND DEFINED NXBUILD_TARGET_SUFFIX_TOOLS)
	set(NXBUILD_TARGET_SUFFIX_APPS "${NXBUILD_TARGET_SUFFIX_TOOLS}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_DAEMONS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DAEMONS ".")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM)
		set(NXBUILD_INSTALL_PATH_DAEMONS "${NXBUILD_INSTALL_PREFIX_ALL}servers")
	else()
		set(NXBUILD_INSTALL_PATH_DAEMONS "${NXBUILD_INSTALL_PATH_TOOLS}")
	endif()
endif()
if(NOT DEFINED NXBUILD_TARGET_SUFFIX_DAEMONS AND DEFINED NXBUILD_TARGET_SUFFIX_TOOLS)
	set(NXBUILD_TARGET_SUFFIX_DAEMONS "${NXBUILD_TARGET_SUFFIX_TOOLS}")
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_CONFIGS AND DEFINED CMAKE_INSTALL_SYSCONFDIR)
	set(NXBUILD_INSTALL_PATH_CONFIGS "${CMAKE_INSTALL_SYSCONFDIR}")
	set(NXBUILD_INSTALL_PATH_CONFIG_SAMPLES "${CMAKE_INSTALL_SYSCONFDIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_CONFIGS AND DEFINED SYSCONF_INSTALL_DIR)
	set(NXBUILD_INSTALL_PATH_CONFIGS "${SYSCONF_INSTALL_DIR}")
	set(NXBUILD_INSTALL_PATH_CONFIG_SAMPLES "${SYSCONF_INSTALL_DIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_CONFIGS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_CONFIGS ".")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_CONFIGS "${NXBUILD_INSTALL_PREFIX_ALL}.")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_CONFIGS "${NXBUILD_INSTALL_PREFIX_ALL}.")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_PATH_CONFIGS "${NXBUILD_INSTALL_PREFIX_ALL}settings")
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_CONFIGS "${NXBUILD_INSTALL_PATH_CONFIGS}/${CMAKE_HAIKU_SECONDARY_ARCH}")
		endif()
	else()
		set(NXBUILD_INSTALL_PATH_CONFIGS "${NXBUILD_INSTALL_PREFIX_ETC}etc${NXBUILD_INSTALL_SUFFIX_ETC}")
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_CONFIGS "${NXBUILD_INSTALL_PATH_CONFIGS}/lib32")
		endif()
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_CONFIG_SAMPLES)
	if(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_PATH_CONFIG_SAMPLES "${NXBUILD_INSTALL_PREFIX_USR}etc")
	else()
		set(NXBUILD_INSTALL_PATH_CONFIG_SAMPLES "${NXBUILD_INSTALL_PATH_CONFIGS}")
	endif()
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_LIBRARIES AND DEFINED CMAKE_INSTALL_LIBDIR)
	set(NXBUILD_INSTALL_PATH_LIBRARIES "${CMAKE_INSTALL_LIBDIR}")
	set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "${CMAKE_INSTALL_LIBDIR}")
	set(NXBUILD_INSTALL_DEVPATH_ARCHIVES "${CMAKE_INSTALL_LIBDIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_LIBRARIES AND DEFINED LIB_INSTALL_DIR)
	set(NXBUILD_INSTALL_PATH_LIBRARIES "${LIB_INSTALL_DIR}")
	set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "${LIB_INSTALL_DIR}")
	set(NXBUILD_INSTALL_DEVPATH_ARCHIVES "${LIB_INSTALL_DIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_LIBRARIES)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LIBRARIES ".")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}LIB")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}Lib")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}lib/${CMAKE_HAIKU_SECONDARY_ARCH}")
		else()
			set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}lib")
		endif()
	else()
		if(DEFINED CMAKE_LIBRARY_ARCHITECTURE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_USR}lib/${CMAKE_LIBRARY_ARCHITECTURE}")
		elseif(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_USR}lib32")
		elseif(DEFINED LIB_SUFFIX)
			set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_USR}lib${LIB_SUFFIX}")
		elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			if(EXISTS "/etc/redhat-release" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
				set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_USR}lib64")
			else()
				set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_USR}lib")
			endif()
		else()
			set(NXBUILD_INSTALL_PATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_USR}lib")
		endif()
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_LIBRARIES)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "tools/lib")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}SDK/Lib")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}develop/lib/${CMAKE_HAIKU_SECONDARY_ARCH}")
		else()
			set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "${NXBUILD_INSTALL_PREFIX_ALL}develop/lib")
		endif()
	else()
		set(NXBUILD_INSTALL_DEVPATH_LIBRARIES "${NXBUILD_INSTALL_PATH_LIBRARIES}")
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_ARCHIVES)
	set(NXBUILD_INSTALL_DEVPATH_ARCHIVES "${NXBUILD_INSTALL_DEVPATH_LIBRARIES}")
endif()

if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_HEADERS AND DEFINED CMAKE_INSTALL_INCLUDEDIR)
	set(NXBUILD_INSTALL_DEVPATH_HEADERS "${CMAKE_INSTALL_INCLUDEDIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_HEADERS AND DEFINED INCLUDE_INSTALL_DIR)
	set(NXBUILD_INSTALL_DEVPATH_HEADERS "${INCLUDE_INSTALL_DIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_HEADERS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_HEADERS "tools/include")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_HEADERS "${NXBUILD_INSTALL_PREFIX_ALL}INCLUDE")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_HEADERS "${NXBUILD_INSTALL_PREFIX_ALL}SDK/Include")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_DEVPATH_HEADERS "${NXBUILD_INSTALL_PREFIX_ALL}develop/headers")
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_HEADERS "${NXBUILD_INSTALL_DEVPATH_HEADERS}/${CMAKE_HAIKU_SECONDARY_ARCH}")
		endif()
	else()
		set(NXBUILD_INSTALL_DEVPATH_HEADERS "${NXBUILD_INSTALL_PREFIX_USR}include")
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_HEADERS "${NXBUILD_INSTALL_DEVPATH_HEADERS}/lib32")
		endif()
	endif()
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_DATAROOT AND DEFINED CMAKE_INSTALL_DATAROOTDIR)
	set(NXBUILD_INSTALL_PATH_DATAROOT "${CMAKE_INSTALL_DATAROOTDIR}")
	set(NXBUILD_INSTALL_DEVPATH_DATAROOT "${CMAKE_INSTALL_DATAROOTDIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_DATAROOT AND DEFINED SHARE_INSTALL_PREFIX)
	set(NXBUILD_INSTALL_PATH_DATAROOT "${SHARE_INSTALL_PREFIX}")
	set(NXBUILD_INSTALL_DEVPATH_DATAROOT "${SHARE_INSTALL_PREFIX}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_DATAROOT)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATAROOT ".")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATAROOT "${NXBUILD_INSTALL_PREFIX_ALL}DATA")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATAROOT "${NXBUILD_INSTALL_PREFIX_ALL}Data")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_PATH_DATAROOT "${NXBUILD_INSTALL_PREFIX_ALL}data")
	else()
		set(NXBUILD_INSTALL_PATH_DATAROOT "${NXBUILD_INSTALL_PREFIX_USR}share")
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_DATAROOT)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DATAROOT "tools")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DATAROOT "${NXBUILD_INSTALL_PREFIX_ALL}SDK/Data")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_DEVPATH_DATAROOT "${NXBUILD_INSTALL_PREFIX_ALL}develop/data")
	else()
		set(NXBUILD_INSTALL_DEVPATH_DATAROOT "${NXBUILD_INSTALL_PATH_DATAROOT}")
	endif()
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_DATA AND DEFINED CMAKE_INSTALL_DATADIR)
	set(NXBUILD_INSTALL_PATH_DATA "${CMAKE_INSTALL_DATADIR}")
	set(NXBUILD_INSTALL_DEVPATH_DATA "${CMAKE_INSTALL_DATADIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_DATA)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}/data")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}/${PROJECT_NAME}_${CMAKE_HAIKU_SECONDARY_ARCH}")
		else()
			set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}/${PROJECT_NAME}")
		endif()
	else()
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}/${PROJECT_NAME}-32")
		else()
			set(NXBUILD_INSTALL_PATH_DATA "${NXBUILD_INSTALL_PATH_DATAROOT}/${PROJECT_NAME}")
		endif()
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_DATA)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/data")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/${PROJECT_NAME}_${CMAKE_HAIKU_SECONDARY_ARCH}")
		else()
			set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/${PROJECT_NAME}")
		endif()
	else()
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/${PROJECT_NAME}-32")
		else()
			set(NXBUILD_INSTALL_DEVPATH_DATA "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/${PROJECT_NAME}")
		endif()
	endif()
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_DOCS AND DEFINED CMAKE_INSTALL_DOCDIR)
	set(NXBUILD_INSTALL_PATH_DOCS "${CMAKE_INSTALL_DOCDIR}")
	set(NXBUILD_INSTALL_DEVPATH_DOCS "${CMAKE_INSTALL_DOCDIR}")
endif()
if(NOT DEFINED NXBUILD_INSTALL_PATH_DOCS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}.")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}.")
	elseif(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PATH_DATAROOT}/doc")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}documentation/packages/${PROJECT_NAME}_${CMAKE_HAIKU_SECONDARY_ARCH}")
		else()
			set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}documentation/packages/${PROJECT_NAME}")
		endif()
	else()
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PATH_DATAROOT}/doc/${PROJECT_NAME}-32")
		else()
			set(NXBUILD_INSTALL_PATH_DOCS "${NXBUILD_INSTALL_PATH_DATAROOT}/doc/${PROJECT_NAME}")
		endif()
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_DOCS)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_DEVPATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}.")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}SDK")
	elseif(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/doc")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		if(DEFINED CMAKE_HAIKU_SECONDARY_ARCH AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}develop/documentation/${PROJECT_NAME}_${CMAKE_HAIKU_SECONDARY_ARCH}")
		else()
			set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_PREFIX_ALL}develop/documentation/${PROJECT_NAME}")
		endif()
	else()
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/doc/${PROJECT_NAME}-32")
		else()
			set(NXBUILD_INSTALL_DEVPATH_DOCS "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/doc/${PROJECT_NAME}")
		endif()
	endif()
endif()

if(NOT DEFINED NXBUILD_INSTALL_PATH_LICENSES)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DOCS}")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DOCS}")
	elseif(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DATAROOT}/licenses")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DOCS}")
	else()
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DATAROOT}/licenses/${PROJECT_NAME}-32")
		else()
			set(NXBUILD_INSTALL_PATH_LICENSES "${NXBUILD_INSTALL_PATH_DATAROOT}/licenses/${PROJECT_NAME}")
		endif()
	endif()
endif()
if(NOT DEFINED NXBUILD_INSTALL_DEVPATH_LICENSES)
	if(NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DATAROOT}")
	elseif(NXBUILD_INSTALL_TYPE_DOS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DOCS}")
	elseif(NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DOCS}")
	elseif(NXBUILD_INSTALL_TYPE_UNIX_BUNDLE)
		set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/licenses")
	elseif(NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM OR NXBUILD_INSTALL_TYPE_HAIKU_LOCAL)
		set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DOCS}")
	else()
		if(DEFINED NXBUILD_LIB32_SIDE_BY_SIDE AND NXBUILD_INSTALL_TYPE_ARCH_SHARED)
			set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/licenses/${PROJECT_NAME}-32")
		else()
			set(NXBUILD_INSTALL_DEVPATH_LICENSES "${NXBUILD_INSTALL_DEVPATH_DATAROOT}/licenses/${PROJECT_NAME}")
		endif()
	endif()
endif()

# ----------------
# Print Config

foreach(
	vConfigVar
	"BUILD_SHARED_LIBS"
	"BUILD_STATIC_LIBS"
	"CMAKE_AR"
	"CMAKE_ASM_COMPILER"
	"CMAKE_ASM_COMPILER_ID"
	"CMAKE_ASM_COMPILER_TARGET"
	"CMAKE_ASM_FLAGS"
	"CMAKE_ASM_FLAGS_DEBUG"
	"CMAKE_ASM_FLAGS_RELEASE"
	"CMAKE_BUILD_TYPE"
	"CMAKE_C_COMPILER"
	"CMAKE_C_COMPILER_ID"
	"CMAKE_C_COMPILER_TARGET"
	"CMAKE_C_FLAGS"
	"CMAKE_C_FLAGS_DEBUG"
	"CMAKE_C_FLAGS_RELEASE"
	"CMAKE_CROSSCOMPILING"
	"CMAKE_CROSSCOMPILING_EMULATOR"
	"CMAKE_CXX_COMPILER"
	"CMAKE_CXX_COMPILER_ID"
	"CMAKE_CXX_COMPILER_TARGET"
	"CMAKE_CXX_FLAGS"
	"CMAKE_CXX_FLAGS_DEBUG"
	"CMAKE_CXX_FLAGS_RELEASE"
	"CMAKE_EXE_LINKER_FLAGS"
	"CMAKE_EXPORT_NO_PACKAGE_REGISTRY"
	"CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY"
	"CMAKE_FIND_ROOT_PATH"
	"CMAKE_FIND_ROOT_PATH_MODE_INCLUDE"
	"CMAKE_FIND_ROOT_PATH_MODE_LIBRARY"
	"CMAKE_FIND_USE_PACKAGE_REGISTRY"
	"CMAKE_Fortran_FLAGS"
	"CMAKE_Fortran_FLAGS_DEBUG"
	"CMAKE_Fortran_FLAGS_RELEASE"
	"CMAKE_INSTALL_BINDIR"
	"CMAKE_INSTALL_DATADIR"
	"CMAKE_INSTALL_DATAROOTDIR"
	"CMAKE_INSTALL_DO_STRIP"
	"CMAKE_INSTALL_DOCDIR"
	"CMAKE_INSTALL_INCLUDEDIR"
	"CMAKE_INSTALL_LIBDIR"
	"CMAKE_INSTALL_LOCALSTATEDIR"
	"CMAKE_INSTALL_PREFIX"
	"CMAKE_INSTALL_SYSCONFDIR"
	"CMAKE_LINKER"
	"CMAKE_MODULE_LINKER_FLAGS"
	"CMAKE_NM"
	"CMAKE_OBJCOPY"
	"CMAKE_OBJDUMP"
	"CMAKE_POSITION_INDEPENDENT_CODE"
	"CMAKE_RANLIB"
	"CMAKE_SHARED_LINKER_FLAGS"
	"CMAKE_STATIC_LINKER_FLAGS"
	"CMAKE_STRIP"
	"CMAKE_SYSTEM_NAME"
	"CMAKE_SYSTEM_PROCESSOR"
	"CMAKE_SYSTEM_VERSION"
	"CMAKE_TOOLCHAIN_FILE"
	"CMAKE_TRY_COMPILE_PLATFORM_VARIABLES"
	"CMAKE_VERBOSE_MAKEFILE"
	"FETCHCONTENT_FULLY_DISCONNECTED"
	"INCLUDE_INSTALL_DIR"
	"LIB_INSTALL_DIR"
	"LIB_SUFFIX"
	"NXBUILD_INSTALL_TYPE"
	"NXBUILD_INSTALL_PREFIX_ALL"
	"NXBUILD_INSTALL_PREFIX_ETC"
	"NXBUILD_INSTALL_PREFIX_USR"
	"NXBUILD_INSTALL_SUFFIX_ETC"
	"NXBUILD_TARGET_SUFFIX_APPS"
	"NXBUILD_TARGET_SUFFIX_DAEMONS"
	"NXBUILD_TARGET_SUFFIX_TOOLS"
	"PKG_CONFIG_EXECUTABLE"
	"PKGCONFIG_EXECUTABLE"
	"QMAKE_EXECUTABLE"
	"SHARE_INSTALL_PREFIX"
	"SYSCONF_INSTALL_DIR"
)
	if(DEFINED ${vConfigVar})
		message(STATUS "${vConfigVar}: \"${${vConfigVar}}\"")
	endif()
endforeach()
foreach(
	vConfigVar
	"NXBUILD_INSTALL_DEVPATH_ARCHIVES"
	"NXBUILD_INSTALL_DEVPATH_DATA"
	"NXBUILD_INSTALL_DEVPATH_DATAROOT"
	"NXBUILD_INSTALL_DEVPATH_DOCS"
	"NXBUILD_INSTALL_DEVPATH_HEADERS"
	"NXBUILD_INSTALL_DEVPATH_LIBRARIES"
	"NXBUILD_INSTALL_DEVPATH_LICENSES"
	"NXBUILD_INSTALL_PATH_APPS"
	"NXBUILD_INSTALL_PATH_CONFIGS"
	"NXBUILD_INSTALL_PATH_CONFIG_SAMPLES"
	"NXBUILD_INSTALL_PATH_DAEMONS"
	"NXBUILD_INSTALL_PATH_DATA"
	"NXBUILD_INSTALL_PATH_DATAROOT"
	"NXBUILD_INSTALL_PATH_DOCS"
	"NXBUILD_INSTALL_PATH_LIBRARIES"
	"NXBUILD_INSTALL_PATH_LICENSES"
	"NXBUILD_INSTALL_PATH_TOOLS"
	"NXBUILD_INSTALL_TYPE_ARCH_SHARED"
	"NXBUILD_INSTALL_TYPE_DOS_BUNDLE"
	"NXBUILD_INSTALL_TYPE_HAIKU_LOCAL"
	"NXBUILD_INSTALL_TYPE_HAIKU_SYSTEM"
	"NXBUILD_INSTALL_TYPE_SIMPLE_BUNDLE"
	"NXBUILD_INSTALL_TYPE_UNIX_BUNDLE"
	"NXBUILD_INSTALL_TYPE_UNIX_LOCAL"
	"NXBUILD_INSTALL_TYPE_UNIX_SYSTEM"
	"NXBUILD_INSTALL_TYPE_WINDOWS_BUNDLE"
)
	if(DEFINED ${vConfigVar})
		message(STATUS "${vConfigVar}: \"${${vConfigVar}}\"")
	else()
		message(FATAL_ERROR "${vConfigVar}: - NOT DEFINED -")
	endif()
endforeach()

# ----------------
# Build Targets

if(BUILD_STATIC_LIBS)
	add_library(HelloWorld_Static STATIC "src/HelloWorld.cpp")
	if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "DigitalMars" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "OpenWatcom")
		target_compile_features(HelloWorld_Static PUBLIC cxx_std_17)
	endif()
	target_include_directories(HelloWorld_Static PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
	target_compile_definitions(HelloWorld_Static PUBLIC HELLOWORLD_STATIC)
	set_target_properties(HelloWorld_Static PROPERTIES DEFINE_SYMBOL HELLOWORLD_EXPORTS)
	set_target_properties(HelloWorld_Static PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/HelloWorld.hpp")
	if(CMAKE_SYSTEM_NAME MATCHES "DOS")
		set_target_properties(HelloWorld_Static PROPERTIES OUTPUT_NAME hello)
	endif()
endif()

if(BUILD_SHARED_LIBS)
	add_library(HelloWorld SHARED "src/HelloWorld.cpp")
	if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "DigitalMars" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "OpenWatcom")
		target_compile_features(HelloWorld PUBLIC cxx_std_17)
	endif()
	target_include_directories(HelloWorld PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
	set_target_properties(HelloWorld PROPERTIES DEFINE_SYMBOL HELLOWORLD_EXPORTS)
	set_target_properties(HelloWorld PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/HelloWorld.hpp")
	if(CMAKE_SYSTEM_NAME MATCHES "DOS")
		set_target_properties(HelloWorld PROPERTIES OUTPUT_NAME hello)
	endif()
endif()

add_executable(HelloTest "src/HelloTest.cpp")
if(NOT TARGET HelloWorld OR CMAKE_SYSTEM_NAME STREQUAL "WASI")
	target_link_libraries(HelloTest PRIVATE HelloWorld_Static)
else()
	target_link_libraries(HelloTest PRIVATE HelloWorld)
endif()
if(CMAKE_SYSTEM_NAME MATCHES "DOS")
	set_target_properties(HelloTest PROPERTIES OUTPUT_NAME hello)
elseif(DEFINED NXBUILD_TARGET_SUFFIX_TOOLS)
	set_target_properties(HelloTest PROPERTIES OUTPUT_NAME HelloTest${NXBUILD_TARGET_SUFFIX_TOOLS})
endif()

# ---------------
# Sony Handhelds

if(PSP AND NOT CONAN)
	include("$ENV{PSPDEV}/psp/share/CreatePBP.cmake")
	create_pbp_file(TARGET HelloTest TITLE "${PROJECT_NAME}" VERSION 01.00 ICON_PATH NULL BACKGROUND_PATH NULL PREVIEW_PATH NULL)
endif()
if(VITA AND NOT CONAN)
	set(VITA_ELF_CREATE "${VITASDK}/bin/vita-elf-create" CACHE PATH "vita-elf-create")
	set(VITA_ELF_EXPORT "${VITASDK}/bin/vita-elf-export" CACHE PATH "vita-elf-export")
	set(VITA_LIBS_GEN "${VITASDK}/bin/vita-libs-gen" CACHE PATH "vita-libs-gen")
	set(VITA_MAKE_FSELF "${VITASDK}/bin/vita-make-fself" CACHE PATH "vita-make-fself")
	set(VITA_MKSFOEX "${VITASDK}/bin/vita-mksfoex" CACHE PATH "vita-mksfoex")
	set(VITA_PACK_VPK "${VITASDK}/bin/vita-pack-vpk" CACHE PATH "vita-pack-vpk")
	include("$ENV{VITASDK}/share/vita.cmake")
	vita_create_self(vitaself "HelloTest" REL_OPTIMIZE)
	vita_create_vpk("${PROJECT_NAME}.vpk" "NEPH00000" "${PROJECT_NAME}.self" NAME "Hello World" VERSION "01.00")
endif()

# ---------------
# Perform Testing

if(NOT DEFINED CMAKE_CROSSCOMPILING OR NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR)
	include(CTest)
	if(TARGET HelloTest)
		add_test(NAME HelloTest COMMAND $<TARGET_FILE:HelloTest>)
	endif()
endif()

# --------------------
# Perform Installation

if(TARGET HelloTest)
	install(TARGETS HelloTest COMPONENT HelloTest_BIN DESTINATION "${NXBUILD_INSTALL_PATH_TOOLS}")
endif()

if(TARGET HelloWorld)
	install(
		TARGETS HelloWorld
		RUNTIME DESTINATION "${NXBUILD_INSTALL_PATH_TOOLS}" COMPONENT HelloWorld_LIB
		LIBRARY DESTINATION "${NXBUILD_INSTALL_PATH_LIBRARIES}" COMPONENT HelloWorld_LIB
		ARCHIVE DESTINATION "${NXBUILD_INSTALL_DEVPATH_ARCHIVES}" COMPONENT HelloWorld_DEV
		PUBLIC_HEADER DESTINATION "${NXBUILD_INSTALL_DEVPATH_HEADERS}" COMPONENT HelloWorld_DEV
	)
endif()
if(TARGET HelloWorld_Static)
	install(TARGETS HelloWorld_Static COMPONENT HelloWorld_DEV ARCHIVE DESTINATION "${NXBUILD_INSTALL_DEVPATH_ARCHIVES}" PUBLIC_HEADER DESTINATION "${NXBUILD_INSTALL_DEVPATH_HEADERS}")
endif()

install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/README.md" COMPONENT HelloWorld_DOC DESTINATION "${NXBUILD_INSTALL_PATH_DOCS}")

install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" COMPONENT HelloWorld_DOC DESTINATION "${NXBUILD_INSTALL_PATH_LICENSES}")

if(NOT "${NXBUILD_INSTALL_PATH_DOCS}" STREQUAL "${NXBUILD_INSTALL_DEVPATH_DOCS}")
	install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/README.md" COMPONENT HelloWorld_DEV DESTINATION "${NXBUILD_INSTALL_DEVPATH_DOCS}")
endif()
if(NOT "${NXBUILD_INSTALL_PATH_LICENSES}" STREQUAL "${NXBUILD_INSTALL_DEVPATH_LICENSES}")
	install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" COMPONENT HelloWorld_DEV DESTINATION "${NXBUILD_INSTALL_DEVPATH_LICENSES}")
endif()

if(NOT CONAN)
	set(CPACK_PACKAGE_CHECKSUM "SHA256")
	include(CPack)
endif()
