diff --git a/CMakeLists.txt b/CMakeLists.txt index d3c424be7..bdc160d65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,7 +65,7 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES) # Allow the user to enable/disable all system utility library options by # defining CMAKE_USE_SYSTEM_LIBRARIES or CMAKE_USE_SYSTEM_LIBRARY_${util}. - set(UTILITIES BZIP2 CURL EXPAT FORM LIBARCHIVE LIBLZMA ZLIB) + set(UTILITIES BZIP2 CURL EXPAT FORM JSONCPP LIBARCHIVE LIBLZMA ZLIB) foreach(util ${UTILITIES}) if(NOT DEFINED CMAKE_USE_SYSTEM_LIBRARY_${util} AND DEFINED CMAKE_USE_SYSTEM_LIBRARIES) @@ -104,6 +104,7 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES) CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_LIBLZMA "Use system-installed liblzma" "${CMAKE_USE_SYSTEM_LIBRARY_LIBLZMA}" "NOT CMAKE_USE_SYSTEM_LIBARCHIVE" ON) option(CMAKE_USE_SYSTEM_FORM "Use system-installed libform" "${CMAKE_USE_SYSTEM_LIBRARY_FORM}") + option(CMAKE_USE_SYSTEM_JSONCPP "Use system-installed jsoncpp" "${CMAKE_USE_SYSTEM_LIBRARY_JSONCPP}") # Mention to the user what system libraries are being used. foreach(util ${UTILITIES}) @@ -373,8 +374,24 @@ macro (CMAKE_BUILD_UTILITIES) #--------------------------------------------------------------------- # Build jsoncpp library. - add_subdirectory(Utilities/cmjsoncpp) - CMAKE_SET_TARGET_FOLDER(cmjsoncpp "Utilities/3rdParty") + if(CMAKE_USE_SYSTEM_JSONCPP) + if(EXISTS ${CMAKE_ROOT}/Modules/FindJsonCpp.cmake) + find_package(JsonCpp) + elseif(NOT CMAKE_VERSION VERSION_LESS 3.0) + include(${CMake_SOURCE_DIR}/Modules/FindJsonCpp.cmake) + else() + message(FATAL_ERROR "CMAKE_USE_SYSTEM_JSONCPP requires CMake >= 3.0") + endif() + if(NOT JsonCpp_FOUND) + message(FATAL_ERROR + "CMAKE_USE_SYSTEM_JSONCPP is ON but a JsonCpp is not found!") + endif() + set(CMAKE_JSONCPP_LIBRARIES JsonCpp::JsonCpp) + else() + set(CMAKE_JSONCPP_LIBRARIES cmjsoncpp) + add_subdirectory(Utilities/cmjsoncpp) + CMAKE_SET_TARGET_FOLDER(cmjsoncpp "Utilities/3rdParty") + endif() #--------------------------------------------------------------------- # Build XMLRPC library for CMake and CTest. diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 435b6549d..af4c7cfcc 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -503,7 +503,7 @@ target_link_libraries(CMakeLib cmsys ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_ZLIB_LIBRARIES} ${CMAKE_TAR_LIBRARIES} ${CMAKE_COMPRESS_LIBRARIES} ${CMAKE_CURL_LIBRARIES} - cmjsoncpp + ${CMAKE_JSONCPP_LIBRARIES} ) # On Apple we need CoreFoundation diff --git a/Utilities/cmThirdParty.h.in b/Utilities/cmThirdParty.h.in index b88328472..0cb6809c3 100644 --- a/Utilities/cmThirdParty.h.in +++ b/Utilities/cmThirdParty.h.in @@ -20,6 +20,7 @@ #cmakedefine CMAKE_USE_SYSTEM_LIBARCHIVE #cmakedefine CMAKE_USE_SYSTEM_LIBLZMA #cmakedefine CMAKE_USE_SYSTEM_FORM +#cmakedefine CMAKE_USE_SYSTEM_JSONCPP #cmakedefine CTEST_USE_XMLRPC #endif diff --git a/Utilities/cm_jsoncpp_reader.h b/Utilities/cm_jsoncpp_reader.h index d7cb50e7f..22f2d8115 100644 --- a/Utilities/cm_jsoncpp_reader.h +++ b/Utilities/cm_jsoncpp_reader.h @@ -13,6 +13,11 @@ #define cm_jsoncpp_reader_h /* Use the jsoncpp library configured for CMake. */ -#include +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_JSONCPP +# include +#else +# include +#endif #endif diff --git a/Utilities/cm_jsoncpp_value.h b/Utilities/cm_jsoncpp_value.h index 15e1088a8..b4cf62057 100644 --- a/Utilities/cm_jsoncpp_value.h +++ b/Utilities/cm_jsoncpp_value.h @@ -13,6 +13,11 @@ #define cm_jsoncpp_value_h /* Use the jsoncpp library configured for CMake. */ -#include +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_JSONCPP +# include +#else +# include +#endif #endif diff --git a/Utilities/cm_jsoncpp_writer.h b/Utilities/cm_jsoncpp_writer.h index c410369ec..c99a0d090 100644 --- a/Utilities/cm_jsoncpp_writer.h +++ b/Utilities/cm_jsoncpp_writer.h @@ -13,6 +13,11 @@ #define cm_jsoncpp_writer_h /* Use the jsoncpp library configured for CMake. */ -#include +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_JSONCPP +# include +#else +# include +#endif #endif