| 3e5ce8ff |
sum01 |
2018-04-16 21:01 |
1 |
# For target_compile_features |
| 3e5ce8ff |
sum01 |
2018-04-16 21:01 |
2 |
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) |
| bc48900a |
sago007 |
2018-05-27 13:07 |
3 |
project(platform_folders VERSION 3.2.0 LANGUAGES CXX) |
| d483775b |
sum01 |
2018-04-16 03:05 |
4 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
5 |
# Since it's off, the library will be static by default |
| d483775b |
sum01 |
2018-04-16 03:05 |
6 |
option(BUILD_SHARED_LIBS "Build shared instead of static." OFF) |
| d483775b |
sum01 |
2018-04-16 03:05 |
7 |
|
| 80e52811 |
sum01 |
2018-05-04 17:14 |
8 |
add_library(platform_folders |
| d483775b |
sum01 |
2018-04-16 03:05 |
9 |
sago/platform_folders.cpp |
| d483775b |
sum01 |
2018-04-16 03:05 |
10 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
11 |
|
| 80e52811 |
sum01 |
2018-05-04 17:14 |
12 |
# Defines standardized defaults for install paths |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
13 |
include(GNUInstallDirs) |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
14 |
# Where to search for the header while building |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
15 |
target_include_directories(platform_folders PUBLIC |
| d483775b |
sum01 |
2018-04-16 03:05 |
16 |
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/sago> |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
17 |
# Controls where #include <sago/platform_folders.h> starts to look from |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
18 |
# So /usr/include/<sago/platform_folders.h> |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
19 |
# or C:\Program Files\platform_folders\include\<sago/platform_folders.h> |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
20 |
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> |
| d483775b |
sum01 |
2018-04-16 03:05 |
21 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
22 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
23 |
# Define the header as public for installation |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
24 |
set_target_properties(platform_folders PROPERTIES |
| d483775b |
sum01 |
2018-04-16 03:05 |
25 |
PUBLIC_HEADER "sago/platform_folders.h" |
| d483775b |
sum01 |
2018-04-16 03:05 |
26 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
27 |
|
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
28 |
# cxx_std_11 requires v3.8 |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
29 |
if(CMAKE_VERSION VERSION_LESS "3.8.0") |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
30 |
# Use old method of forcing C++11 |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
31 |
set(CMAKE_CXX_STANDARD 11) |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
32 |
set(CMAKE_CXX_STANDARD_REQUIRED true) |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
33 |
else() |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
34 |
# Require (minimum) C++11 when using header |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
35 |
# PRIVATE means only at compile time |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
36 |
target_compile_features(platform_folders PUBLIC cxx_std_11) |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
37 |
endif() |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
38 |
|
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
39 |
# cxx_nullptr exists in v3.1 |
| 2cbeb56e |
sum01 |
2018-06-04 00:10 |
40 |
target_compile_features(platform_folders PRIVATE cxx_nullptr) |
| 3e5ce8ff |
sum01 |
2018-04-16 21:01 |
41 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
42 |
# Apple requires linking to CoreServices |
| d483775b |
sum01 |
2018-04-16 03:05 |
43 |
# Check sys name instead of "APPLE" for cross-compilation |
| d483775b |
sum01 |
2018-04-16 03:05 |
44 |
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
| d483775b |
sum01 |
2018-04-16 03:05 |
45 |
# Find the framework |
| d483775b |
sum01 |
2018-04-16 03:05 |
46 |
# ref: https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/OSX_Technology_Overview/SystemFrameworks/SystemFrameworks.html |
| d483775b |
sum01 |
2018-04-16 03:05 |
47 |
find_library(_CoreServices_FRAMEWORK |
| d483775b |
sum01 |
2018-04-16 03:05 |
48 |
NAMES "CoreServices.framework" "CoreServices" |
| d483775b |
sum01 |
2018-04-16 03:05 |
49 |
PATH_SUFFIXES "CoreServices" |
| d483775b |
sum01 |
2018-04-16 03:05 |
50 |
PATHS "/System/Library/Frameworks" |
| d483775b |
sum01 |
2018-04-16 03:05 |
51 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
52 |
# Make sure it was found |
| d483775b |
sum01 |
2018-04-16 03:05 |
53 |
if(NOT _CoreServices_FRAMEWORK) |
| d483775b |
sum01 |
2018-04-16 03:05 |
54 |
message(FATAL_ERROR "Could not find the CoreServices framework!") |
| d483775b |
sum01 |
2018-04-16 03:05 |
55 |
endif() |
| d483775b |
sum01 |
2018-04-16 03:05 |
56 |
# Link to the CoreServices framework. This also sets the correct linking options |
| d483775b |
sum01 |
2018-04-16 03:05 |
57 |
# "If the library file is in a Mac OSX framework, the Headers directory of the framework will also be processed as a usage requirement." |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
58 |
target_link_libraries(platform_folders PRIVATE "${_CoreServices_FRAMEWORK}") |
| d483775b |
sum01 |
2018-04-16 03:05 |
59 |
endif() |
| d483775b |
sum01 |
2018-04-16 03:05 |
60 |
|
| 2e81279d |
sum01 |
2018-06-21 15:13 |
61 |
# Cmake's find_package search path is different based on the system |
| 2e81279d |
sum01 |
2018-06-21 15:13 |
62 |
# See https://cmake.org/cmake/help/latest/command/find_package.html for the list |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
63 |
if(CMAKE_SYSTEM_NAME STREQUAL "Windows") |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
64 |
# You can pass these when calling Cmake, so don't override if the user does |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
65 |
if(NOT _WIN32_WINNT AND NOT WINVER) |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
66 |
target_compile_definitions(platform_folders PRIVATE |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
67 |
_WIN32_WINNT=0x0601 |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
68 |
WINVER=0x0601 |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
69 |
) |
| 6daea864 |
sago007 |
2018-06-06 20:45 |
70 |
endif() |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
71 |
# Controls where the exports, config, and configversion files install to |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
72 |
set(_PROJECT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_PREFIX}/cmake") |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
73 |
else() |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
74 |
# When calling find_package(<name>) |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
75 |
# it looks for /usr/lib/cmake/<name>/<name>Config.cmake |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
76 |
set(_PROJECT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/platform_folders") |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
77 |
endif() |
| d483775b |
sum01 |
2018-04-16 03:05 |
78 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
79 |
# Gives "Make install" esque operations a location to install to... |
| d483775b |
sum01 |
2018-04-16 03:05 |
80 |
# and creates a .cmake file to be exported |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
81 |
install(TARGETS platform_folders |
| c8e9ee00 |
sum01 |
2018-06-21 15:16 |
82 |
EXPORT "platform_foldersConfig" |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
83 |
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
84 |
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
85 |
# Tells it where to put the header files |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
86 |
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/sago" |
| d483775b |
sum01 |
2018-04-16 03:05 |
87 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
88 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
89 |
# "The install(TARGETS) and install(EXPORT) commands work together to install a target and a file to help import it" |
| d483775b |
sum01 |
2018-04-16 03:05 |
90 |
# Installs a cmake file which external projects can import. |
| c8e9ee00 |
sum01 |
2018-06-21 15:16 |
91 |
install(EXPORT "platform_foldersConfig" |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
92 |
NAMESPACE sago:: |
| d483775b |
sum01 |
2018-04-16 03:05 |
93 |
DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}" |
| d483775b |
sum01 |
2018-04-16 03:05 |
94 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
95 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
96 |
# "The export command is used to generate a file exporting targets from a project build tree" |
| d483775b |
sum01 |
2018-04-16 03:05 |
97 |
# Creates an import file for external projects which are aware of the build tree. |
| d483775b |
sum01 |
2018-04-16 03:05 |
98 |
# May be useful for cross-compiling |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
99 |
export(TARGETS platform_folders |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
100 |
FILE "platform_folders-exports.cmake" |
| d483775b |
sum01 |
2018-04-16 03:05 |
101 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
102 |
|
| 80e52811 |
sum01 |
2018-05-04 17:14 |
103 |
# For the config and configversion macros |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
104 |
include(CMakePackageConfigHelpers) |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
105 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
106 |
# Creates the project's ConfigVersion.cmake file |
| d483775b |
sum01 |
2018-04-16 03:05 |
107 |
# This allows for find_package() to use a version in the call |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
108 |
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake" |
| d483775b |
sum01 |
2018-04-16 03:05 |
109 |
# This'll require versioning in the project() call |
| d483775b |
sum01 |
2018-04-16 03:05 |
110 |
VERSION ${CMAKE_PROJECT_VERSION} |
| d483775b |
sum01 |
2018-04-16 03:05 |
111 |
# Just assuming Semver is followed |
| d483775b |
sum01 |
2018-04-16 03:05 |
112 |
COMPATIBILITY SameMajorVersion |
| d483775b |
sum01 |
2018-04-16 03:05 |
113 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
114 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
115 |
# Install the ConfigVersion file, which is located in the build dir |
| d483775b |
sum01 |
2018-04-16 03:05 |
116 |
install(FILES |
| 80e52811 |
sum01 |
2018-05-04 17:14 |
117 |
"${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake" |
| d483775b |
sum01 |
2018-04-16 03:05 |
118 |
DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}" |
| d483775b |
sum01 |
2018-04-16 03:05 |
119 |
) |
| d483775b |
sum01 |
2018-04-16 03:05 |
120 |
|
| d483775b |
sum01 |
2018-04-16 03:05 |
121 |
# A module for testing the library |
| d483775b |
sum01 |
2018-04-16 03:05 |
122 |
include(CTest) |
| d483775b |
sum01 |
2018-04-16 03:05 |
123 |
# BUILD_TESTING is defined (default ON) in CTest |
| d483775b |
sum01 |
2018-04-16 03:05 |
124 |
if(BUILD_TESTING) |
| 452e64cc |
sum01 |
2018-04-26 21:25 |
125 |
add_subdirectory(test) |
| 513c0ebf |
Poul Sander |
2018-06-06 17:05 |
126 |
add_executable(platform_folders_sample platform_folders.cpp) |
| 513c0ebf |
Poul Sander |
2018-06-06 17:05 |
127 |
target_link_libraries(platform_folders_sample PRIVATE platform_folders) |
| d483775b |
sum01 |
2018-04-16 03:05 |
128 |
endif() |
|
|
1970-01-01 00:00 |
129 |
|