1 #Licensed under the MIT license. See LICENSE file in the project root for full license information.
3 cmake_minimum_required(VERSION 2.8.7)
4 cmake_policy(SET CMP0048 NEW)
5 project(json-c VERSION 0.13)
8 include(CheckSymbolExists)
10 check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL)
12 set(cmake_strtoll "strtoll")
14 # Use _strtoi64 if strtoll is not available.
15 check_symbol_exists(_strtoi64 stdlib.h have_strtoi64)
18 set(cmake_strtoll "_strtoi64")
19 # could do the same for strtoull, if needed
26 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100 /wd4996 /wd4244 /wd4706 /wd4702 /wd4127 /wd4701")
27 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4100 /wd4996 /wd4244 /wd4706 /wd4702 /wd4127 /wd4701")
28 set(cmake_create_config 1)
30 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -D_GNU_SOURCE=1")
31 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -D_GNU_SOURCE=1")
32 if (MSYS OR CMAKE_GENERATOR STREQUAL "Unix Makefiles")
33 execute_process(COMMAND echo ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
34 execute_process(COMMAND sh autogen.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
35 execute_process(COMMAND sh ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
36 file(COPY ./config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
37 file(COPY ./json_config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
39 set(cmake_create_config 1)
42 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
43 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -D_GNU_SOURCE")
44 execute_process(COMMAND echo ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
45 execute_process(COMMAND sh autogen.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
46 execute_process(COMMAND ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
47 file(COPY ./config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
48 file(COPY ./json_config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
51 if (cmake_create_config)
52 file(REMOVE ./config.h) # make sure any stale one is gone
53 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.win32 ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
54 file(COPY ./json_config.h.win32 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
55 file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h.win32 ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h)
58 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
60 set(JSON_C_PUBLIC_HEADERS
62 ${CMAKE_CURRENT_BINARY_DIR}/include/config.h
63 ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h
76 ${JSON_C_PUBLIC_HEADERS}
77 ./json_object_private.h
80 ./strerror_override_private.h
92 ./json_object_iterator.c
100 ./strerror_override.c
109 add_library(json-c-static
115 set_property(TARGET json-c PROPERTY C_STANDARD 99)
116 set_property(TARGET json-c-static PROPERTY C_STANDARD 99)
117 set_target_properties(json-c-static PROPERTIES OUTPUT_NAME json-c)
119 install(TARGETS json-c json-c-static
120 RUNTIME DESTINATION bin
121 LIBRARY DESTINATION lib
122 ARCHIVE DESTINATION lib
125 install(FILES ${JSON_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/json-c )
128 set(prefix ${CMAKE_INSTALL_PREFIX})
129 set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
130 set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
131 set(includedir ${CMAKE_INSTALL_PREFIX}/include)
132 set(VERSION ${PROJECT_VERSION})
133 configure_file(json-c.pc.in json-c.pc @ONLY)
134 set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
135 install(FILES ${CMAKE_BINARY_DIR}/json-c.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}")