• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/json-c/apps/CMakeLists.txt

  1 
  2 cmake_minimum_required(VERSION 2.8)  # see ../CMakeLists.txt for why 2.8
  3 
  4 if(POLICY CMP0075)
  5     cmake_policy(SET CMP0075 NEW)
  6 endif()
  7 
  8 include(CheckSymbolExists)
  9 include(CheckIncludeFile)
 10 include(CMakePackageConfigHelpers)
 11 
 12 # First, sort out whether we're running inside a json-c build,
 13 #  or standalone, such as part of a benchmark build.
 14 
 15 if ("${PROJECT_NAME}" STREQUAL "json-c")
 16 # Part of an overall json-c build
 17 set(APPS_LINK_LIBS "${PROJECT_NAME}")
 18 
 19 # We know we have this in our current sources:
 20 set(HAVE_JSON_TOKENER_GET_PARSE_END)
 21 
 22 else()
 23 
 24 # Standalone mode, using an already installed json-c library, somewhere.
 25 # The path to the json-c install must be specified with -DCMAKE_PREFIX_PATH=...
 26 
 27 project(apps)
 28 find_package(PkgConfig)
 29 
 30 # PkgConfig is supposed to include CMAKE_PREFIX_PATH in the PKG_CONFIG_PATH
 31 #  that's used when running pkg-config, but it just doesn't work :(
 32 # https://gitlab.kitware.com/cmake/cmake/issues/18150
 33 #set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH True)
 34 
 35 # Instead, we handle it explicitly here and update PKG_CONFIG_PATH ourselves.
 36 if (NOT CMAKE_PREFIX_PATH)
 37         message(FATAL_ERROR "Please specify -DCMAKE_PREFIX_PATH=... when running cmake.")
 38 endif()
 39 
 40 # Note: find_file isn't recursive :(
 41 find_file(PC_FILE_PATH "json-c.pc"
 42         PATHS "${CMAKE_PREFIX_PATH}/lib64" "${CMAKE_PREFIX_PATH}/lib"
 43         PATH_SUFFIXES "pkgconfig"
 44         NO_DEFAULT_PATH)
 45 get_filename_component(PC_DIR_PATH "${PC_FILE_PATH}" DIRECTORY)
 46 set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${PC_DIR_PATH}")
 47 message(STATUS "PC_FILE_PATH=${PC_FILE_PATH}")
 48 message(STATUS "PC_DIR_PATH=${PC_DIR_PATH}")
 49 
 50 pkg_check_modules(PC_JSONC json-c)
 51 if (PC_JSONC_FOUND)
 52         message(STATUS "Found json-c using pkg-config: ${PC_JSONC_PREFIX}")
 53         message(STATUS " PC_JSONC_INCLUDE_DIRS=${PC_JSONC_INCLUDE_DIRS}")
 54         message(STATUS " PC_JSONC_LIBRARIES=${PC_JSONC_LIBRARIES}")
 55         message(STATUS " PC_JSONC_LIBRARY_DIRS=${PC_JSONC_LIBRARY_DIRS}")
 56         link_directories(${PC_JSONC_LIBRARY_DIRS})
 57         include_directories(${PC_JSONC_INCLUDE_DIRS})
 58         # for target_link_libraries(...)
 59         set(APPS_INCLUDE_DIRS ${PC_JSONC_INCLUDE_DIRS})
 60         set(APPS_LINK_DIRS ${PC_JSONC_LIBRARY_DIRS})
 61         set(APPS_LINK_LIBS ${PC_JSONC_LIBRARIES})
 62 else()
 63         message(STATUS "Using find_package to locate json-c")
 64 
 65         # Note: find_package needs CMAKE_PREFIX_PATH set appropriately.
 66         # XXX json-c's installed cmake files don't actually set up what's
 67         #  needed to use find_package() by itself, so we're just using it
 68         #  to confirm the top of the install location.
 69         find_package(json-c CONFIG)  # sets json-c_DIR
 70 
 71         # Assume json-c-config.cmake is in lib64/cmake/json-c/
 72         get_filename_component(json-c_TOP "${json-c_DIR}/../../.." ABSOLUTE)
 73         get_filename_component(json-c_LIBDIR "${json-c_DIR}/../.." ABSOLUTE)
 74 
 75         message(STATUS " json-c_TOP=${json-c_TOP}")
 76         message(STATUS " json-c_DIR=${json-c_DIR}")
 77         message(STATUS " json-c_LIBDIR=${json-c_LIBDIR}")
 78 
 79         link_directories(${json-c_LIBDIR})
 80         include_directories(${json-c_TOP}/include)
 81         include_directories(${json-c_TOP}/include/json-c)
 82         set(APPS_LINK_DIRS "${json-c_LIBDIR}")
 83         set(APPS_INCLUDE_DIRS "${json-c_TOP}/include;${json-c_TOP}/include/json-c")
 84 
 85         set(APPS_LINK_LIBS json-c)
 86 endif()
 87 
 88 set(CMAKE_REQUIRED_LINK_OPTIONS "-L${APPS_LINK_DIRS}")
 89 set(CMAKE_REQUIRED_LIBRARIES ${APPS_LINK_LIBS})
 90 set(CMAKE_REQUIRED_INCLUDES ${APPS_INCLUDE_DIRS})
 91 check_symbol_exists(json_tokener_get_parse_end "json_tokener.h" HAVE_JSON_TOKENER_GET_PARSE_END)
 92 
 93 endif() # end "standalone mode" block
 94 
 95 # ---------------------------------
 96 
 97 check_include_file(sys/resource.h   HAVE_SYS_RESOURCE_H) # for getrusage
 98 if (HAVE_SYS_RESOURCE_H)
 99     check_symbol_exists(getrusage   "sys/resource.h" HAVE_GETRUSAGE)
100 endif()
101 
102 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/apps_config.h.in
103                ${PROJECT_BINARY_DIR}/apps_config.h)
104 message(STATUS "Wrote ${PROJECT_BINARY_DIR}/apps_config.h")
105 
106 # ---------------------------------
107 
108 include_directories(PUBLIC ${CMAKE_SOURCE_DIR})
109 include_directories(${PROJECT_SOURCE_DIR})
110 include_directories(${PROJECT_BINARY_DIR})
111 
112 # ---------------------------------
113 
114 # Now, finally, the actual executables we're building:
115 
116 add_executable(json_parse json_parse.c)
117 target_link_libraries(json_parse PRIVATE ${APPS_LINK_LIBS})
118 
119 # Note: it is intentional that there are no install instructions here yet.
120 # When/if the interface of the app(s) listed here settles down enough to
121 # publish as part of a regular build that will be added.
122 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt