Imported Upstream version 0.13
[platform/upstream/json-c.git] / CMakeLists.txt
1 #Licensed under the MIT license. See LICENSE file in the project root for full license information.
2
3 cmake_minimum_required(VERSION 2.8.7)
4 cmake_policy(SET CMP0048 NEW)
5 project(json-c VERSION 0.13)
6
7
8 include(CheckSymbolExists)
9
10 check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL)
11
12 set(cmake_strtoll "strtoll")
13 if (NOT HAVE_STRTOLL)
14   # Use _strtoi64 if strtoll is not available.
15   check_symbol_exists(_strtoi64 stdlib.h have_strtoi64)
16   if (have_strtoi64)
17     set(HAVE_STRTOLL 1)
18     set(cmake_strtoll "_strtoi64")
19     # could do the same for strtoull, if needed
20   endif ()
21 endif ()
22
23
24
25 if(MSVC)
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)
29 elseif(MINGW)
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/)
38   else()
39     set(cmake_create_config 1)
40   endif()
41 elseif(UNIX)
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/)
49 endif()
50
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)
56 endif ()
57
58 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
59
60 set(JSON_C_PUBLIC_HEADERS
61     ./json.h
62     ${CMAKE_CURRENT_BINARY_DIR}/include/config.h
63     ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h
64     ./arraylist.h
65     ./debug.h
66     ./json_c_version.h
67     ./json_inttypes.h
68     ./json_object.h
69     ./json_pointer.h
70     ./json_tokener.h
71     ./json_util.h
72     ./linkhash.h
73     ./printbuf.h
74 )
75 set(JSON_C_HEADERS
76     ${JSON_C_PUBLIC_HEADERS}
77     ./json_object_private.h
78     ./random_seed.h
79     ./strerror_override.h
80     ./strerror_override_private.h
81     ./math_compat.h
82     ./snprintf_compat.h
83     ./strdup_compat.h
84     ./vasprintf_compat.h
85 )
86
87 set(JSON_C_SOURCES
88     ./arraylist.c
89     ./debug.c
90     ./json_c_version.c
91     ./json_object.c
92     ./json_object_iterator.c
93     ./json_pointer.c
94     ./json_tokener.c
95     ./json_util.c
96     ./json_visit.c
97     ./linkhash.c
98     ./printbuf.c
99     ./random_seed.c
100     ./strerror_override.c
101 )
102
103 add_library(json-c
104     SHARED
105     ${JSON_C_SOURCES}
106     ${JSON_C_HEADERS}
107 )
108
109 add_library(json-c-static
110     STATIC
111     ${JSON_C_SOURCES}
112     ${JSON_C_HEADERS}
113 )
114
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)
118
119 install(TARGETS json-c json-c-static
120     RUNTIME DESTINATION bin
121     LIBRARY DESTINATION lib
122     ARCHIVE DESTINATION lib
123 )
124
125 install(FILES ${JSON_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/json-c )
126
127 if (UNIX)
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}")
136 endif ()