git repos / blockattack-game

blame: source/misc/embedded_libs/PlatformFolders-4.2.0/CMakeLists.txt

normal view · raw

c74066db Poul Sander 2022-02-16 12:14 1
# For target_compile_features
ee1fee2a Poul Sander 2025-10-11 19:54 2
cmake_minimum_required(VERSION 3.5.1...3.28.3)
c74066db Poul Sander 2022-02-16 12:14 3
c74066db Poul Sander 2022-02-16 12:14 4
set(PLATFORMFOLDERS_MAIN_PROJECT OFF)
c74066db Poul Sander 2022-02-16 12:14 5
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
c74066db Poul Sander 2022-02-16 12:14 6
  set(PLATFORMFOLDERS_MAIN_PROJECT ON)
c74066db Poul Sander 2022-02-16 12:14 7
endif()
c74066db Poul Sander 2022-02-16 12:14 8
c74066db Poul Sander 2022-02-16 12:14 9
project(platform_folders VERSION 4.2.0 LANGUAGES CXX)
c74066db Poul Sander 2022-02-16 12:14 10
c74066db Poul Sander 2022-02-16 12:14 11
# BUILD_SHARED_LIBS is off by default, the library will be static by default
c74066db Poul Sander 2022-02-16 12:14 12
option(PLATFORMFOLDERS_BUILD_SHARED_LIBS "Build platform_folders shared library" ${BUILD_SHARED_LIBS})
c74066db Poul Sander 2022-02-16 12:14 13
option(PLATFORMFOLDERS_BUILD_TESTING "Build platform_folders tests" ${PLATFORMFOLDERS_MAIN_PROJECT})
c74066db Poul Sander 2022-02-16 12:14 14
option(PLATFORMFOLDERS_ENABLE_INSTALL "Enable platform_folders INSTALL target" ${PLATFORMFOLDERS_MAIN_PROJECT})
c74066db Poul Sander 2022-02-16 12:14 15
c74066db Poul Sander 2022-02-16 12:14 16
set(PLATFORMFOLDERS_TYPE STATIC)
c74066db Poul Sander 2022-02-16 12:14 17
if(PLATFORMFOLDERS_BUILD_SHARED_LIBS)
c74066db Poul Sander 2022-02-16 12:14 18
	set(PLATFORMFOLDERS_TYPE SHARED)
c74066db Poul Sander 2022-02-16 12:14 19
endif()
c74066db Poul Sander 2022-02-16 12:14 20
c74066db Poul Sander 2022-02-16 12:14 21
add_library(platform_folders ${PLATFORMFOLDERS_TYPE}
c74066db Poul Sander 2022-02-16 12:14 22
	sago/platform_folders.cpp
c74066db Poul Sander 2022-02-16 12:14 23
)
c74066db Poul Sander 2022-02-16 12:14 24
c74066db Poul Sander 2022-02-16 12:14 25
set_target_properties(platform_folders PROPERTIES DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
c74066db Poul Sander 2022-02-16 12:14 26
c74066db Poul Sander 2022-02-16 12:14 27
# Creates an alias so that people building in-tree (instead of using find_package)...
c74066db Poul Sander 2022-02-16 12:14 28
# can still link against the same target
c74066db Poul Sander 2022-02-16 12:14 29
add_library(sago::platform_folders ALIAS platform_folders)
c74066db Poul Sander 2022-02-16 12:14 30
c74066db Poul Sander 2022-02-16 12:14 31
# Defines standardized defaults for install paths
c74066db Poul Sander 2022-02-16 12:14 32
include(GNUInstallDirs)
c74066db Poul Sander 2022-02-16 12:14 33
# Where to search for the header while building
c74066db Poul Sander 2022-02-16 12:14 34
target_include_directories(platform_folders PUBLIC
c74066db Poul Sander 2022-02-16 12:14 35
	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/sago>
c74066db Poul Sander 2022-02-16 12:14 36
	# Controls where #include <sago/platform_folders.h> starts to look from
c74066db Poul Sander 2022-02-16 12:14 37
	# So /usr/include/<sago/platform_folders.h>
c74066db Poul Sander 2022-02-16 12:14 38
	# or C:\Program Files\platform_folders\include\<sago/platform_folders.h>
c74066db Poul Sander 2022-02-16 12:14 39
	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
c74066db Poul Sander 2022-02-16 12:14 40
)
c74066db Poul Sander 2022-02-16 12:14 41
c74066db Poul Sander 2022-02-16 12:14 42
# Define the header as public for installation
c74066db Poul Sander 2022-02-16 12:14 43
set_target_properties(platform_folders PROPERTIES
c74066db Poul Sander 2022-02-16 12:14 44
	PUBLIC_HEADER "sago/platform_folders.h"
c74066db Poul Sander 2022-02-16 12:14 45
)
c74066db Poul Sander 2022-02-16 12:14 46
c74066db Poul Sander 2022-02-16 12:14 47
# cxx_std_11 requires v3.8
c74066db Poul Sander 2022-02-16 12:14 48
if(CMAKE_VERSION VERSION_LESS "3.8.0")
c74066db Poul Sander 2022-02-16 12:14 49
	# Use old method of forcing C++11
c74066db Poul Sander 2022-02-16 12:14 50
	set(CMAKE_CXX_STANDARD 11)
c74066db Poul Sander 2022-02-16 12:14 51
	set(CMAKE_CXX_STANDARD_REQUIRED true)
c74066db Poul Sander 2022-02-16 12:14 52
else()
c74066db Poul Sander 2022-02-16 12:14 53
	# Require (minimum) C++11 when using header
c74066db Poul Sander 2022-02-16 12:14 54
	# PRIVATE means only at compile time
c74066db Poul Sander 2022-02-16 12:14 55
	target_compile_features(platform_folders PUBLIC cxx_std_11)
c74066db Poul Sander 2022-02-16 12:14 56
endif()
c74066db Poul Sander 2022-02-16 12:14 57
c74066db Poul Sander 2022-02-16 12:14 58
# cxx_nullptr exists in v3.1
c74066db Poul Sander 2022-02-16 12:14 59
target_compile_features(platform_folders PRIVATE cxx_nullptr)
c74066db Poul Sander 2022-02-16 12:14 60
c74066db Poul Sander 2022-02-16 12:14 61
# Cmake's find_package search path is different based on the system
c74066db Poul Sander 2022-02-16 12:14 62
# See https://cmake.org/cmake/help/latest/command/find_package.html for the list
c74066db Poul Sander 2022-02-16 12:14 63
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
c74066db Poul Sander 2022-02-16 12:14 64
	# You can pass these when calling Cmake, so don't override if the user does
c74066db Poul Sander 2022-02-16 12:14 65
	if(NOT _WIN32_WINNT AND NOT WINVER)
c74066db Poul Sander 2022-02-16 12:14 66
		target_compile_definitions(platform_folders PRIVATE
c74066db Poul Sander 2022-02-16 12:14 67
			_WIN32_WINNT=0x0601
c74066db Poul Sander 2022-02-16 12:14 68
			WINVER=0x0601
c74066db Poul Sander 2022-02-16 12:14 69
		)
c74066db Poul Sander 2022-02-16 12:14 70
	endif()
c74066db Poul Sander 2022-02-16 12:14 71
	# Controls where the exports, config, and configversion files install to
c74066db Poul Sander 2022-02-16 12:14 72
	set(_PROJECT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_PREFIX}/cmake")
c74066db Poul Sander 2022-02-16 12:14 73
else()
c74066db Poul Sander 2022-02-16 12:14 74
	# When calling find_package(<name>)
c74066db Poul Sander 2022-02-16 12:14 75
	# it looks for /usr/lib/cmake/<name>/<name>Config.cmake
c74066db Poul Sander 2022-02-16 12:14 76
	set(_PROJECT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/platform_folders")
c74066db Poul Sander 2022-02-16 12:14 77
endif()
c74066db Poul Sander 2022-02-16 12:14 78
c74066db Poul Sander 2022-02-16 12:14 79
if(PLATFORMFOLDERS_ENABLE_INSTALL)
c74066db Poul Sander 2022-02-16 12:14 80
	# Gives "Make install" esque operations a location to install to...
c74066db Poul Sander 2022-02-16 12:14 81
	# and creates a .cmake file to be exported
c74066db Poul Sander 2022-02-16 12:14 82
	install(TARGETS platform_folders
c74066db Poul Sander 2022-02-16 12:14 83
		EXPORT "platform_foldersConfig"
c74066db Poul Sander 2022-02-16 12:14 84
		LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
c74066db Poul Sander 2022-02-16 12:14 85
		ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
c74066db Poul Sander 2022-02-16 12:14 86
		# Tells it where to put the header files
c74066db Poul Sander 2022-02-16 12:14 87
		PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/sago"
c74066db Poul Sander 2022-02-16 12:14 88
	)
c74066db Poul Sander 2022-02-16 12:14 89
c74066db Poul Sander 2022-02-16 12:14 90
	# "The install(TARGETS) and install(EXPORT) commands work together to install a target and a file to help import it"
c74066db Poul Sander 2022-02-16 12:14 91
	# Installs a cmake file which external projects can import.
c74066db Poul Sander 2022-02-16 12:14 92
	install(EXPORT "platform_foldersConfig"
c74066db Poul Sander 2022-02-16 12:14 93
		NAMESPACE sago::
c74066db Poul Sander 2022-02-16 12:14 94
		DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}"
c74066db Poul Sander 2022-02-16 12:14 95
	)
c74066db Poul Sander 2022-02-16 12:14 96
c74066db Poul Sander 2022-02-16 12:14 97
	# "The export command is used to generate a file exporting targets from a project build tree"
c74066db Poul Sander 2022-02-16 12:14 98
	# Creates an import file for external projects which are aware of the build tree.
c74066db Poul Sander 2022-02-16 12:14 99
	# May be useful for cross-compiling
c74066db Poul Sander 2022-02-16 12:14 100
	export(TARGETS platform_folders
c74066db Poul Sander 2022-02-16 12:14 101
		FILE "platform_folders-exports.cmake"
c74066db Poul Sander 2022-02-16 12:14 102
	)
c74066db Poul Sander 2022-02-16 12:14 103
c74066db Poul Sander 2022-02-16 12:14 104
	# For the config and configversion macros
c74066db Poul Sander 2022-02-16 12:14 105
	include(CMakePackageConfigHelpers)
c74066db Poul Sander 2022-02-16 12:14 106
c74066db Poul Sander 2022-02-16 12:14 107
	# Creates the project's ConfigVersion.cmake file
c74066db Poul Sander 2022-02-16 12:14 108
	# This allows for find_package() to use a version in the call
c74066db Poul Sander 2022-02-16 12:14 109
	write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake"
c74066db Poul Sander 2022-02-16 12:14 110
		# This'll require versioning in the project() call
c74066db Poul Sander 2022-02-16 12:14 111
		VERSION ${CMAKE_PROJECT_VERSION}
c74066db Poul Sander 2022-02-16 12:14 112
		# Just assuming Semver is followed
c74066db Poul Sander 2022-02-16 12:14 113
		COMPATIBILITY SameMajorVersion
c74066db Poul Sander 2022-02-16 12:14 114
	)
c74066db Poul Sander 2022-02-16 12:14 115
c74066db Poul Sander 2022-02-16 12:14 116
	# Install the ConfigVersion file, which is located in the build dir
c74066db Poul Sander 2022-02-16 12:14 117
	install(FILES
c74066db Poul Sander 2022-02-16 12:14 118
			"${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake"
c74066db Poul Sander 2022-02-16 12:14 119
		DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}"
c74066db Poul Sander 2022-02-16 12:14 120
	)
c74066db Poul Sander 2022-02-16 12:14 121
endif()
c74066db Poul Sander 2022-02-16 12:14 122
c74066db Poul Sander 2022-02-16 12:14 123
if(PLATFORMFOLDERS_BUILD_TESTING)
c74066db Poul Sander 2022-02-16 12:14 124
	enable_testing()
c74066db Poul Sander 2022-02-16 12:14 125
	add_subdirectory(test)
c74066db Poul Sander 2022-02-16 12:14 126
	add_executable(platform_folders_sample platform_folders.cpp)
c74066db Poul Sander 2022-02-16 12:14 127
	target_link_libraries(platform_folders_sample PRIVATE platform_folders)
c74066db Poul Sander 2022-02-16 12:14 128
endif()
1970-01-01 00:00 129