diff options
Diffstat (limited to 'cmake/Modules/FindJSON-C.cmake')
-rw-r--r-- | cmake/Modules/FindJSON-C.cmake | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/cmake/Modules/FindJSON-C.cmake b/cmake/Modules/FindJSON-C.cmake new file mode 100644 index 0000000..e66a011 --- /dev/null +++ b/cmake/Modules/FindJSON-C.cmake @@ -0,0 +1,123 @@ +# Copyright (c) 2018 Ribose Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +#.rst: +# FindJSON-C +# ----------- +# +# Find the json-c library. +# +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines :prop_tgt:`IMPORTED` targets: +# +# ``JSON-C::JSON-C`` +# The json-c library, if found. +# +# Result variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables: +# +# :: +# +# JSON-C_FOUND - true if the headers and library were found +# JSON-C_INCLUDE_DIRS - where to find headers +# JSON-C_LIBRARIES - list of libraries to link +# JSON-C_VERSION - library version that was found, if any + +# use pkg-config to get the directories and then use these values +# in the find_path() and find_library() calls +find_package(PkgConfig QUIET) +pkg_check_modules(PC_JSON-C QUIET json-c) + +# RHEL-based systems may have json-c12 +if (NOT PC_JSON-C_FOUND) + pkg_check_modules(PC_JSON-C QUIET json-c12) +endif() + +# find the headers +find_path(JSON-C_INCLUDE_DIR + NAMES json_c_version.h + HINTS + ${PC_JSON-C_INCLUDEDIR} + ${PC_JSON-C_INCLUDE_DIRS} + PATH_SUFFIXES json-c +) + +# find the library +find_library(JSON-C_LIBRARY + NAMES json-c libjson-c json-c12 libjson-c12 + HINTS + ${PC_JSON-C_LIBDIR} + ${PC_JSON-C_LIBRARY_DIRS} +) + +# determine the version +if(PC_JSON-C_VERSION) + set(JSON-C_VERSION ${PC_JSON-C_VERSION}) +elseif(JSON-C_INCLUDE_DIR AND EXISTS "${JSON-C_INCLUDE_DIR}/json_c_version.h") + file(STRINGS "${JSON-C_INCLUDE_DIR}/json_c_version.h" _json-c_version_h + REGEX "^#define[\t ]+JSON_C_VERSION[\t ]+\"[^\"]*\"$") + + string(REGEX REPLACE ".*#define[\t ]+JSON_C_VERSION[\t ]+\"([^\"]*)\".*" + "\\1" _json-c_version_str "${_json-c_version_h}") + set(JSON-C_VERSION "${_json-c_version_str}" + CACHE INTERNAL "The version of json-c which was detected") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(JSON-C + REQUIRED_VARS JSON-C_LIBRARY JSON-C_INCLUDE_DIR JSON-C_VERSION + VERSION_VAR JSON-C_VERSION +) + +if (JSON-C_FOUND) + set(JSON-C_INCLUDE_DIRS ${JSON-C_INCLUDE_DIR} ${PC_JSON-C_INCLUDE_DIRS}) + set(JSON-C_LIBRARIES ${JSON-C_LIBRARY}) +endif() + +if (JSON-C_FOUND AND NOT TARGET JSON-C::JSON-C) + # create the new library target + add_library(JSON-C::JSON-C UNKNOWN IMPORTED) + # set the required include dirs for the target + if (JSON-C_INCLUDE_DIRS) + set_target_properties(JSON-C::JSON-C + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${JSON-C_INCLUDE_DIRS}" + ) + endif() + # set the required libraries for the target + if (EXISTS "${JSON-C_LIBRARY}") + set_target_properties(JSON-C::JSON-C + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${JSON-C_LIBRARY}" + ) + endif() +endif() + +mark_as_advanced(JSON-C_INCLUDE_DIR JSON-C_LIBRARY) + |