From 251e5a5e34873a7c97c6664cedf31b94981a0479 Mon Sep 17 00:00:00 2001 From: Markus Blatt Date: Fri, 4 Nov 2016 19:59:04 +0100 Subject: [PATCH] Added rudimentary package configuration files. These files will allow cmake based projects to find the library using find_package(cJSON). If successful, they can use CJSON_LIBRARIES and CJSON_INCLUDE_DIRS. Other build systems can use a similar approach to pkg-config: cmake --find-package -DNAME=cJSON -DCOMPILER_ID=GNU -DLANGUAGE=C -DCMAKE_PREFIX_PATH= -DMODE=LINK or with MODE COMPILE or EXISTS. --- CMakeLists.txt | 22 +++++++++++++++++++++- cJSONConfig.cmake.in | 14 ++++++++++++++ cJSONConfigVersion.cmake.in | 11 +++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 cJSONConfig.cmake.in create mode 100644 cJSONConfigVersion.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 17f3e4f..ea32cd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,7 +69,27 @@ if(ENABLE_CJSON_UTILS) VERSION "${CJSON_VERSION}") endif() -option(ENABLE_CJSON_TEST "Enable building cJSON test" ON) +# export library information for CMake projects +export(TARGETS ${CJSON_LIB} ${CJSON_UTILS_LIB} + FILE ${PROJECT_BINARY_DIR}/cJSONConfigTargets.cmake) + +# create the other package config files +configure_file( + cJSONConfig.cmake.in + ${PROJECT_BINARY_DIR}/cJSONConfig.cmake @ONLY) +configure_file( + cJSONConfigVersion.cmake.in + ${PROJECT_BINARY_DIR}/cJSONConfigVersion.cmake @ONLY) + +# Install package config files +install(FILES ${PROJECT_BINARY_DIR}/cJSONConfig.cmake + ${PROJECT_BINARY_DIR}/cJSONConfigVersion.cmake + ${PROJECT_BINARY_DIR}/cJSONConfigTargets.cmake + DESTINATION lib/cmake/cJSON) + +option(ENABLE_CJSON_TEST "Enable building cJSON test" OFF) + + if(ENABLE_CJSON_TEST) set(TEST_CJSON cJSON_test) add_executable("${TEST_CJSON}" test.c) diff --git a/cJSONConfig.cmake.in b/cJSONConfig.cmake.in new file mode 100644 index 0000000..da8e588 --- /dev/null +++ b/cJSONConfig.cmake.in @@ -0,0 +1,14 @@ +# Whether the utils lib was build. +set(CJSON_UTILS_FOUND @ENABLE_CJSON_UTILS@) + +# All cJson libraries (including the utils lib if present +set(CJSON_LIBRARIES @CJSON_UTILS_LIB@ @CJSON_LIB@) +# The cJSON utils library +set(CJSON_UTILS_LIBRARY @CJSON_UTILS_LIB@) +# The cJSON library +set(CJSON_LIBRARY @CJSON_LIB@) +# The include directories used by cJSON +set(CJSON_INCLUDE_DIRS @CMAKE_INSTALL_PREFIX@/include) + +get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) +include("${_dir}/cJSONConfigTargets.cmake") diff --git a/cJSONConfigVersion.cmake.in b/cJSONConfigVersion.cmake.in new file mode 100644 index 0000000..22ffec0 --- /dev/null +++ b/cJSONConfigVersion.cmake.in @@ -0,0 +1,11 @@ +set(PACKAGE_VERSION "@PROJECT_VERSION@") + +# Check whether the requested PACKAGE_FIND_VERSION is compatible +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() -- GitLab