|
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