|
1 | 1 | # vim: et ts=4 sts=4 sw=4 tw=0 |
2 | 2 |
|
3 | | -CMAKE_MINIMUM_REQUIRED(VERSION 3.1) |
| 3 | +cmake_minimum_required(VERSION 3.1) |
4 | 4 |
|
5 | 5 | # Ensures that CMAKE_BUILD_TYPE has a default value |
6 | | -IF(NOT DEFINED CMAKE_BUILD_TYPE) |
7 | | - SET(CMAKE_BUILD_TYPE Release CACHE STRING |
| 6 | +if(NOT DEFINED CMAKE_BUILD_TYPE) |
| 7 | + set(CMAKE_BUILD_TYPE Release CACHE STRING |
8 | 8 | "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage.") |
9 | | -ENDIF() |
| 9 | +endif() |
10 | 10 |
|
11 | | -PROJECT(jsoncpp) |
12 | | -ENABLE_TESTING() |
| 11 | +project(jsoncpp) |
| 12 | +enable_testing() |
13 | 13 |
|
14 | | -OPTION(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON) |
15 | | -OPTION(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON) |
16 | | -OPTION(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF) |
17 | | -OPTION(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON) |
18 | | -OPTION(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" ON) |
19 | | -OPTION(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" ON) |
20 | | -OPTION(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." OFF) |
| 14 | +option(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON) |
| 15 | +option(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON) |
| 16 | +option(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF) |
| 17 | +option(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON) |
| 18 | +option(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" ON) |
| 19 | +option(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" ON) |
| 20 | +option(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." OFF) |
21 | 21 |
|
22 | 22 | # Enable runtime search path support for dynamic libraries on OSX |
23 | | -IF(APPLE) |
24 | | - SET(CMAKE_MACOSX_RPATH 1) |
25 | | -ENDIF() |
| 23 | +if(APPLE) |
| 24 | + set(CMAKE_MACOSX_RPATH 1) |
| 25 | +endif() |
26 | 26 |
|
27 | 27 | # Adhere to GNU filesystem layout conventions |
28 | | -INCLUDE(GNUInstallDirs) |
| 28 | +include(GNUInstallDirs) |
29 | 29 |
|
30 | | -SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build") |
| 30 | +set(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build") |
31 | 31 |
|
32 | 32 | # Set variable named ${VAR_NAME} to value ${VALUE} |
33 | | -FUNCTION(set_using_dynamic_name VAR_NAME VALUE) |
34 | | - SET( "${VAR_NAME}" "${VALUE}" PARENT_SCOPE) |
35 | | -ENDFUNCTION() |
| 33 | +function(set_using_dynamic_name VAR_NAME VALUE) |
| 34 | + set( "${VAR_NAME}" "${VALUE}" PARENT_SCOPE) |
| 35 | +endfunction() |
36 | 36 |
|
37 | 37 | # Extract major, minor, patch from version text |
38 | 38 | # Parse a version string "X.Y.Z" and outputs |
39 | 39 | # version parts in ${OUPUT_PREFIX}_MAJOR, _MINOR, _PATCH. |
40 | 40 | # If parse succeeds then ${OUPUT_PREFIX}_FOUND is TRUE. |
41 | | -MACRO(jsoncpp_parse_version VERSION_TEXT OUPUT_PREFIX) |
42 | | - SET(VERSION_REGEX "[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9_]+)?") |
43 | | - IF( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} ) |
44 | | - STRING(REGEX MATCHALL "[0-9]+|-([A-Za-z0-9_]+)" VERSION_PARTS ${VERSION_TEXT}) |
45 | | - LIST(GET VERSION_PARTS 0 ${OUPUT_PREFIX}_MAJOR) |
46 | | - LIST(GET VERSION_PARTS 1 ${OUPUT_PREFIX}_MINOR) |
47 | | - LIST(GET VERSION_PARTS 2 ${OUPUT_PREFIX}_PATCH) |
| 41 | +macro(jsoncpp_parse_version VERSION_TEXT OUPUT_PREFIX) |
| 42 | + set(VERSION_REGEX "[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9_]+)?") |
| 43 | + if( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} ) |
| 44 | + string(REGEX MATCHALL "[0-9]+|-([A-Za-z0-9_]+)" VERSION_PARTS ${VERSION_TEXT}) |
| 45 | + list(GET VERSION_PARTS 0 ${OUPUT_PREFIX}_MAJOR) |
| 46 | + list(GET VERSION_PARTS 1 ${OUPUT_PREFIX}_MINOR) |
| 47 | + list(GET VERSION_PARTS 2 ${OUPUT_PREFIX}_PATCH) |
48 | 48 | set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" TRUE ) |
49 | | - ELSE( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} ) |
| 49 | + else( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} ) |
50 | 50 | set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" FALSE ) |
51 | | - ENDIF() |
52 | | -ENDMACRO() |
| 51 | + endif() |
| 52 | +endmacro() |
53 | 53 |
|
54 | 54 | # Read out version from "version" file |
55 | | -#FILE(STRINGS "version" JSONCPP_VERSION) |
56 | | -#SET( JSONCPP_VERSION_MAJOR X ) |
57 | | -#SET( JSONCPP_VERSION_MINOR Y ) |
58 | | -#SET( JSONCPP_VERSION_PATCH Z ) |
59 | | -SET( JSONCPP_VERSION 1.8.4 ) |
| 55 | +#file(STRINGS "version" JSONCPP_VERSION) |
| 56 | +#set( JSONCPP_VERSION_MAJOR X ) |
| 57 | +#set( JSONCPP_VERSION_MINOR Y ) |
| 58 | +#set( JSONCPP_VERSION_PATCH Z ) |
| 59 | +set( JSONCPP_VERSION 1.8.4 ) |
60 | 60 | jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION ) |
61 | | -#IF(NOT JSONCPP_VERSION_FOUND) |
62 | | -# MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z") |
63 | | -#ENDIF(NOT JSONCPP_VERSION_FOUND) |
64 | | -SET( JSONCPP_SOVERSION 19 ) |
65 | | -SET( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" ) |
| 61 | +#if(NOT JSONCPP_VERSION_FOUND) |
| 62 | +# message(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z") |
| 63 | +#endif(NOT JSONCPP_VERSION_FOUND) |
| 64 | +set( JSONCPP_SOVERSION 19 ) |
| 65 | +set( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" ) |
66 | 66 |
|
67 | | -MESSAGE(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}") |
| 67 | +message(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}") |
68 | 68 | # File version.h is only regenerated on CMake configure step |
69 | | -CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/src/lib_json/version.h.in" |
| 69 | +configure_file( "${PROJECT_SOURCE_DIR}/src/lib_json/version.h.in" |
70 | 70 | "${PROJECT_BINARY_DIR}/include/json/version.h" |
71 | 71 | NEWLINE_STYLE UNIX ) |
72 | | -CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/version.in" |
| 72 | +configure_file( "${PROJECT_SOURCE_DIR}/version.in" |
73 | 73 | "${PROJECT_BINARY_DIR}/version" |
74 | 74 | NEWLINE_STYLE UNIX ) |
75 | 75 |
|
76 | | -MACRO(UseCompilationWarningAsError) |
77 | | - IF(MSVC) |
| 76 | +macro(UseCompilationWarningAsError) |
| 77 | + if(MSVC) |
78 | 78 | # Only enabled in debug because some old versions of VS STL generate |
79 | 79 | # warnings when compiled in release configuration. |
80 | | - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ") |
81 | | - ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
82 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") |
83 | | - IF(JSONCPP_WITH_STRICT_ISO) |
84 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors") |
85 | | - ENDIF() |
86 | | - ENDIF() |
87 | | -ENDMACRO() |
| 80 | + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ") |
| 81 | + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| 82 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") |
| 83 | + if(JSONCPP_WITH_STRICT_ISO) |
| 84 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors") |
| 85 | + endif() |
| 86 | + endif() |
| 87 | +endmacro() |
88 | 88 |
|
89 | 89 | # Include our configuration header |
90 | | -INCLUDE_DIRECTORIES( ${jsoncpp_SOURCE_DIR}/include ) |
| 90 | +include_directories( ${jsoncpp_SOURCE_DIR}/include ) |
91 | 91 |
|
92 | | -IF(MSVC) |
| 92 | +if(MSVC) |
93 | 93 | # Only enabled in debug because some old versions of VS STL generate |
94 | 94 | # unreachable code warning when compiled in release configuration. |
95 | | - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ") |
96 | | -ENDIF() |
| 95 | + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ") |
| 96 | +endif() |
97 | 97 |
|
98 | 98 | # Require C++11 support, prefer ISO C++ over GNU variants, |
99 | 99 | # as relying solely on ISO C++ is more portable. |
100 | | -SET(CMAKE_CXX_STANDARD 11) |
101 | | -SET(CMAKE_CXX_STANDARD_REQUIRED ON) |
102 | | -SET(CMAKE_CXX_EXTENSIONS OFF) |
| 100 | +set(CMAKE_CXX_STANDARD 11) |
| 101 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 102 | +set(CMAKE_CXX_EXTENSIONS OFF) |
103 | 103 |
|
104 | | -IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
| 104 | +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
105 | 105 | # using regular Clang or AppleClang |
106 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare") |
107 | | -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| 106 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare") |
| 107 | +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
108 | 108 | # using GCC |
109 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra") |
| 109 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra") |
110 | 110 | # not yet ready for -Wsign-conversion |
111 | 111 |
|
112 | | - IF(JSONCPP_WITH_STRICT_ISO) |
113 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") |
114 | | - ENDIF() |
115 | | - IF(JSONCPP_WITH_WARNING_AS_ERROR) |
116 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion") |
117 | | - ENDIF() |
118 | | -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") |
| 112 | + if(JSONCPP_WITH_STRICT_ISO) |
| 113 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") |
| 114 | + endif() |
| 115 | + if(JSONCPP_WITH_WARNING_AS_ERROR) |
| 116 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion") |
| 117 | + endif() |
| 118 | +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") |
119 | 119 | # using Intel compiler |
120 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra -Werror=conversion") |
| 120 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra -Werror=conversion") |
121 | 121 |
|
122 | | - IF(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR) |
123 | | - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") |
124 | | - ENDIF() |
125 | | -ENDIF() |
| 122 | + if(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR) |
| 123 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") |
| 124 | + endif() |
| 125 | +endif() |
126 | 126 |
|
127 | | -FIND_PROGRAM(CCACHE_FOUND ccache) |
128 | | -IF(CCACHE_FOUND) |
129 | | - SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) |
130 | | - SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) |
131 | | -ENDIF(CCACHE_FOUND) |
| 127 | +find_program(CCACHE_FOUND ccache) |
| 128 | +if(CCACHE_FOUND) |
| 129 | + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) |
| 130 | + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) |
| 131 | +endif(CCACHE_FOUND) |
132 | 132 |
|
133 | | -IF(JSONCPP_WITH_WARNING_AS_ERROR) |
| 133 | +if(JSONCPP_WITH_WARNING_AS_ERROR) |
134 | 134 | UseCompilationWarningAsError() |
135 | | -ENDIF() |
| 135 | +endif() |
136 | 136 |
|
137 | | -IF(JSONCPP_WITH_PKGCONFIG_SUPPORT) |
138 | | - CONFIGURE_FILE( |
| 137 | +if(JSONCPP_WITH_PKGCONFIG_SUPPORT) |
| 138 | + configure_file( |
139 | 139 | "pkg-config/jsoncpp.pc.in" |
140 | 140 | "pkg-config/jsoncpp.pc" |
141 | 141 | @ONLY) |
142 | | - INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc" |
| 142 | + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc" |
143 | 143 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") |
144 | | -ENDIF() |
| 144 | +endif() |
145 | 145 |
|
146 | | -IF(JSONCPP_WITH_CMAKE_PACKAGE) |
147 | | - INSTALL(EXPORT jsoncpp |
| 146 | +if(JSONCPP_WITH_CMAKE_PACKAGE) |
| 147 | + install(EXPORT jsoncpp |
148 | 148 | DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp |
149 | 149 | FILE jsoncppConfig.cmake) |
150 | | -ENDIF() |
| 150 | +endif() |
151 | 151 |
|
152 | 152 | # Build the different applications |
153 | | -ADD_SUBDIRECTORY( src ) |
| 153 | +add_subdirectory( src ) |
154 | 154 |
|
155 | 155 | #install the includes |
156 | | -ADD_SUBDIRECTORY( include ) |
| 156 | +add_subdirectory( include ) |
0 commit comments