include(ExternalProject) if (${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") set(JSONCPP_CMAKE_COMMAND emcmake cmake) else() set(JSONCPP_CMAKE_COMMAND ${CMAKE_COMMAND}) endif() include(GNUInstallDirs) set(libdir ${CMAKE_INSTALL_LIBDIR}) if(CMAKE_LIBRARY_ARCHITECTURE) # Do not use Debian multiarch library dir. string(REPLACE "/${CMAKE_LIBRARY_ARCHITECTURE}" "" libdir ${libdir}) endif() set(prefix "${CMAKE_BINARY_DIR}/deps") set(JSONCPP_LIBRARY "${prefix}/${libdir}/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX}") set(JSONCPP_INCLUDE_DIR "${prefix}/include") if(NOT MSVC) set(JSONCPP_EXTRA_FLAGS "-std=c++11") endif() set(byproducts "") if(CMAKE_VERSION VERSION_GREATER 3.1) set(byproducts BUILD_BYPRODUCTS "${JSONCPP_LIBRARY}") endif() ExternalProject_Add(jsoncpp-project PREFIX "${prefix}" DOWNLOAD_DIR "${CMAKE_SOURCE_DIR}/deps/downloads" DOWNLOAD_NAME jsoncpp-1.8.4.tar.gz URL https://github.com/open-source-parsers/jsoncpp/archive/1.8.4.tar.gz URL_HASH SHA256=c49deac9e0933bcb7044f08516861a2d560988540b23de2ac1ad443b219afdb6 CMAKE_COMMAND ${JSONCPP_CMAKE_COMMAND} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} # Build static lib but suitable to be included in a shared lib. -DCMAKE_POSITION_INDEPENDENT_CODE=${BUILD_SHARED_LIBS} -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF -DCMAKE_CXX_FLAGS=${JSONCPP_EXTRA_FLAGS} # Overwrite build and install commands to force Release build on MSVC. BUILD_COMMAND cmake --build --config Release INSTALL_COMMAND cmake --build --config Release --target install ${byproducts} ) # Create jsoncpp imported library add_library(jsoncpp STATIC IMPORTED) file(MAKE_DIRECTORY ${JSONCPP_INCLUDE_DIR}) # Must exist. set_property(TARGET jsoncpp PROPERTY IMPORTED_LOCATION ${JSONCPP_LIBRARY}) set_property(TARGET jsoncpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INCLUDE_DIR}) add_dependencies(jsoncpp jsoncpp-project)