Skip to content

Commit f3a4941

Browse files
committed
Replace current install variables with GNUInstallDirs
* The GNUInstallDirs module is more idiomatic and supported by Kitware upstream, whereas the current directories are not standardised across CMake-using packages. Using CMake native mechanisms is better than reinventing the wheel, as it makes using the build system more uniform across the ecosystem * Use CMAKE_CXX_STANDARD to force C++11 * Require CMake 3.1.0 at a minimum * Fixed lower/UPPERcase format for function/macro calls * Fixed indents by replacing tabs with 4 spaces
1 parent 0d25d9a commit f3a4941

File tree

4 files changed

+102
-106
lines changed

4 files changed

+102
-106
lines changed

CMakeLists.txt

Lines changed: 56 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# vim: et ts=4 sts=4 sw=4 tw=0
22

3-
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.5)
3+
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
44
PROJECT(jsoncpp)
55
ENABLE_TESTING()
66

@@ -27,20 +27,10 @@ IF(APPLE)
2727
SET(CMAKE_MACOSX_RPATH 1)
2828
ENDIF()
2929

30+
# Adhere to GNU filesystem layout conventions
31+
INCLUDE(GNUInstallDirs)
32+
3033
SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build")
31-
SET(LIB_SUFFIX "" CACHE STRING "Optional arch-dependent suffix for the library installation directory")
32-
33-
SET(RUNTIME_INSTALL_DIR bin
34-
CACHE PATH "Install dir for executables and dlls")
35-
SET(ARCHIVE_INSTALL_DIR lib${LIB_SUFFIX}
36-
CACHE PATH "Install dir for static libraries")
37-
SET(LIBRARY_INSTALL_DIR lib${LIB_SUFFIX}
38-
CACHE PATH "Install dir for shared libraries")
39-
SET(INCLUDE_INSTALL_DIR include
40-
CACHE PATH "Install dir for headers")
41-
SET(PACKAGE_INSTALL_DIR lib${LIB_SUFFIX}/cmake
42-
CACHE PATH "Install dir for cmake package config files")
43-
MARK_AS_ADVANCED( RUNTIME_INSTALL_DIR ARCHIVE_INSTALL_DIR INCLUDE_INSTALL_DIR PACKAGE_INSTALL_DIR )
4434

4535
# Set variable named ${VAR_NAME} to value ${VALUE}
4636
FUNCTION(set_using_dynamic_name VAR_NAME VALUE)
@@ -86,70 +76,76 @@ CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/version.in"
8676
"${PROJECT_SOURCE_DIR}/version"
8777
NEWLINE_STYLE UNIX )
8878

89-
macro(UseCompilationWarningAsError)
90-
if ( MSVC )
79+
MACRO(UseCompilationWarningAsError)
80+
IF(MSVC)
9181
# Only enabled in debug because some old versions of VS STL generate
9282
# warnings when compiled in release configuration.
93-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ")
94-
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
95-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
96-
if (JSONCPP_WITH_STRICT_ISO)
97-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors")
98-
endif ()
99-
endif()
100-
endmacro()
83+
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ")
84+
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
85+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
86+
IF(JSONCPP_WITH_STRICT_ISO)
87+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors")
88+
ENDIF()
89+
ENDIF()
90+
ENDMACRO()
10191

10292
# Include our configuration header
10393
INCLUDE_DIRECTORIES( ${jsoncpp_SOURCE_DIR}/include )
10494

105-
if ( MSVC )
95+
IF(MSVC)
10696
# Only enabled in debug because some old versions of VS STL generate
10797
# unreachable code warning when compiled in release configuration.
108-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ")
109-
endif()
110-
111-
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
112-
# using regular Clang or AppleClang
113-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare")
114-
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
115-
# using GCC
116-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra")
117-
# not yet ready for -Wsign-conversion
118-
119-
if (JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
120-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion -pedantic")
121-
endif ()
122-
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
123-
# using Intel compiler
124-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra -Werror=conversion")
125-
126-
if (JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
127-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
128-
endif ()
129-
endif()
130-
131-
find_program(CCACHE_FOUND ccache)
132-
if(CCACHE_FOUND)
133-
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
134-
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
135-
endif(CCACHE_FOUND)
98+
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ")
99+
ENDIF()
100+
101+
# Require C++11 support, prefer ISO C++ over GNU variants,
102+
# as relying solely on ISO C++ is more portable.
103+
SET(CMAKE_CXX_STANDARD 11)
104+
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
105+
SET(CMAKE_CXX_EXTENSIONS OFF)
106+
107+
IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
108+
# using regular Clang or AppleClang
109+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare")
110+
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
111+
# using GCC
112+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra")
113+
# not yet ready for -Wsign-conversion
114+
115+
IF(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
116+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion -pedantic")
117+
ENDIF()
118+
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
119+
# using Intel compiler
120+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra -Werror=conversion")
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()
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)
136132

137133
IF(JSONCPP_WITH_WARNING_AS_ERROR)
138134
UseCompilationWarningAsError()
139135
ENDIF()
140136

141137
IF(JSONCPP_WITH_PKGCONFIG_SUPPORT)
142-
CONFIGURE_FILE(
143-
"pkg-config/jsoncpp.pc.in"
144-
"pkg-config/jsoncpp.pc"
145-
@ONLY)
146-
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc"
147-
DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig")
138+
CONFIGURE_FILE(
139+
"pkg-config/jsoncpp.pc.in"
140+
"pkg-config/jsoncpp.pc"
141+
@ONLY)
142+
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc"
143+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
148144
ENDIF()
149145

150146
IF(JSONCPP_WITH_CMAKE_PACKAGE)
151147
INSTALL(EXPORT jsoncpp
152-
DESTINATION ${PACKAGE_INSTALL_DIR}/jsoncpp
148+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp
153149
FILE jsoncppConfig.cmake)
154150
ENDIF()
155151

include/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
FILE(GLOB INCLUDE_FILES "json/*.h")
2-
INSTALL(FILES ${INCLUDE_FILES} DESTINATION ${INCLUDE_INSTALL_DIR}/json)
2+
INSTALL(FILES ${INCLUDE_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/json)

pkg-config/jsoncpp.pc.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
prefix=@CMAKE_INSTALL_PREFIX@
22
exec_prefix=${prefix}
3-
libdir=${exec_prefix}/@LIBRARY_INSTALL_DIR@
4-
includedir=${prefix}/@INCLUDE_INSTALL_DIR@
3+
libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
4+
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
55

66
Name: jsoncpp
77
Description: A C++ library for interacting with JSON

src/lib_json/CMakeLists.txt

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
1-
if( CMAKE_COMPILER_IS_GNUCXX )
2-
#Get compiler version.
3-
execute_process( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
4-
OUTPUT_VARIABLE GNUCXX_VERSION )
5-
6-
#-Werror=* was introduced -after- GCC 4.1.2
7-
if( GNUCXX_VERSION VERSION_GREATER 4.1.2 )
8-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=strict-aliasing")
9-
endif()
10-
endif( CMAKE_COMPILER_IS_GNUCXX )
11-
12-
include(CheckIncludeFileCXX)
13-
include(CheckTypeSize)
14-
include(CheckStructHasMember)
15-
include(CheckCXXSymbolExists)
1+
IF( CMAKE_COMPILER_IS_GNUCXX )
2+
#Get compiler version.
3+
EXECUTE_PROCESS( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
4+
OUTPUT_VARIABLE GNUCXX_VERSION )
5+
6+
#-Werror=* was introduced -after- GCC 4.1.2
7+
IF( GNUCXX_VERSION VERSION_GREATER 4.1.2 )
8+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=strict-aliasing")
9+
ENDIF()
10+
ENDIF( CMAKE_COMPILER_IS_GNUCXX )
11+
12+
INCLUDE(CheckIncludeFileCXX)
13+
INCLUDE(CheckTypeSize)
14+
INCLUDE(CheckStructHasMember)
15+
INCLUDE(CheckCXXSymbolExists)
1616

1717
check_include_file_cxx(clocale HAVE_CLOCALE)
1818
check_cxx_symbol_exists(localeconv clocale HAVE_LOCALECONV)
1919

20-
if(CMAKE_VERSION VERSION_LESS 3.0.0)
21-
# The "LANGUAGE CXX" parameter is not supported in CMake versions below 3,
22-
# so the C compiler and header has to be used.
23-
check_include_file(locale.h HAVE_LOCALE_H)
24-
set(CMAKE_EXTRA_INCLUDE_FILES locale.h)
25-
check_type_size("struct lconv" LCONV_SIZE)
26-
unset(CMAKE_EXTRA_INCLUDE_FILES)
27-
check_struct_has_member("struct lconv" decimal_point locale.h HAVE_DECIMAL_POINT)
28-
else()
29-
set(CMAKE_EXTRA_INCLUDE_FILES clocale)
30-
check_type_size(lconv LCONV_SIZE LANGUAGE CXX)
31-
unset(CMAKE_EXTRA_INCLUDE_FILES)
32-
check_struct_has_member(lconv decimal_point clocale HAVE_DECIMAL_POINT LANGUAGE CXX)
33-
endif()
34-
35-
if(NOT (HAVE_CLOCALE AND HAVE_LCONV_SIZE AND HAVE_DECIMAL_POINT AND HAVE_LOCALECONV))
36-
message(WARNING "Locale functionality is not supported")
37-
add_definitions(-DJSONCPP_NO_LOCALE_SUPPORT)
38-
endif()
20+
IF(CMAKE_VERSION VERSION_LESS 3.0.0)
21+
# The "LANGUAGE CXX" parameter is not supported in CMake versions below 3,
22+
# so the C compiler and header has to be used.
23+
check_include_file(locale.h HAVE_LOCALE_H)
24+
SET(CMAKE_EXTRA_INCLUDE_FILES locale.h)
25+
check_type_size("struct lconv" LCONV_SIZE)
26+
UNSET(CMAKE_EXTRA_INCLUDE_FILES)
27+
check_struct_has_member("struct lconv" decimal_point locale.h HAVE_DECIMAL_POINT)
28+
ELSE()
29+
SET(CMAKE_EXTRA_INCLUDE_FILES clocale)
30+
check_type_size(lconv LCONV_SIZE LANGUAGE CXX)
31+
UNSET(CMAKE_EXTRA_INCLUDE_FILES)
32+
check_struct_has_member(lconv decimal_point clocale HAVE_DECIMAL_POINT LANGUAGE CXX)
33+
ENDIF()
34+
35+
IF(NOT (HAVE_CLOCALE AND HAVE_LCONV_SIZE AND HAVE_DECIMAL_POINT AND HAVE_LOCALECONV))
36+
MESSAGE(WARNING "Locale functionality is not supported")
37+
ADD_DEFINITIONS(-DJSONCPP_NO_LOCALE_SUPPORT)
38+
ENDIF()
3939

4040
SET( JSONCPP_INCLUDE_DIR ../../include )
4141

@@ -80,13 +80,13 @@ IF(BUILD_SHARED_LIBS)
8080
ENDIF()
8181

8282
INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
83-
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
84-
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
85-
ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR})
83+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
84+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
85+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
8686

8787
IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
8888
TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib PUBLIC
89-
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
89+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
9090
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>)
9191
ENDIF()
9292

@@ -99,15 +99,15 @@ IF(BUILD_STATIC_LIBS)
9999
DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
100100

101101
INSTALL( TARGETS jsoncpp_lib_static ${INSTALL_EXPORT}
102-
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
103-
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
104-
ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR})
102+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
103+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
104+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
105105

106106
IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
107107
TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib_static PUBLIC
108-
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
108+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
109109
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>
110110
)
111-
ENDIF()
111+
ENDIF()
112112

113113
ENDIF()

0 commit comments

Comments
 (0)