You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 5.3 kB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
8 years ago
9 years ago
9 years ago
9 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #Licensed under the MIT license. See LICENSE file in the project root for full license information.
  2. cmake_minimum_required(VERSION 2.8.7)
  3. if(POLICY CMP0048)
  4. cmake_policy(SET CMP0048 NEW)
  5. endif()
  6. if (CMAKE_VERSION VERSION_LESS 3.0)
  7. # Fixes for CMake 2.8.12
  8. # Reference: https://github.com/Tencent/rapidjson/issues/1154
  9. set(LIB_MAJOR_VERSION "0")
  10. set(LIB_MINOR_VERSION "13")
  11. set(LIB_PATCH_VERSION "1")
  12. set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}")
  13. project(json-c)
  14. else()
  15. project(json-c VERSION 0.13.1)
  16. endif()
  17. include(CheckSymbolExists)
  18. check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL)
  19. set(cmake_strtoll "strtoll")
  20. if (NOT HAVE_STRTOLL)
  21. # Use _strtoi64 if strtoll is not available.
  22. check_symbol_exists(_strtoi64 stdlib.h have_strtoi64)
  23. if (have_strtoi64)
  24. set(HAVE_STRTOLL 1)
  25. set(cmake_strtoll "_strtoi64")
  26. # could do the same for strtoull, if needed
  27. endif ()
  28. endif ()
  29. if(MSVC)
  30. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100 /wd4996 /wd4244 /wd4706 /wd4702 /wd4127 /wd4701")
  31. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4100 /wd4996 /wd4244 /wd4706 /wd4702 /wd4127 /wd4701")
  32. set(cmake_create_config 1)
  33. elseif(MINGW)
  34. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -D_GNU_SOURCE=1")
  35. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -D_GNU_SOURCE=1")
  36. if (MSYS OR CMAKE_GENERATOR STREQUAL "Unix Makefiles")
  37. execute_process(COMMAND echo ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  38. execute_process(COMMAND sh autogen.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  39. execute_process(COMMAND sh ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  40. file(COPY ./config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
  41. file(COPY ./json_config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
  42. else()
  43. set(cmake_create_config 1)
  44. endif()
  45. elseif(UNIX)
  46. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
  47. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -D_GNU_SOURCE")
  48. execute_process(COMMAND echo ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  49. execute_process(COMMAND sh autogen.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  50. execute_process(COMMAND ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  51. file(COPY ./config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
  52. file(COPY ./json_config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
  53. endif()
  54. if (cmake_create_config)
  55. file(REMOVE ./config.h) # make sure any stale one is gone
  56. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.win32 ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
  57. file(COPY ./json_config.h.win32 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
  58. file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h.win32 ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h)
  59. endif ()
  60. include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
  61. set(JSON_C_PUBLIC_HEADERS
  62. ./json.h
  63. ${CMAKE_CURRENT_BINARY_DIR}/include/config.h
  64. ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h
  65. ./arraylist.h
  66. ./debug.h
  67. ./json_c_version.h
  68. ./json_inttypes.h
  69. ./json_object.h
  70. ./json_object_iterator.h
  71. ./json_pointer.h
  72. ./json_tokener.h
  73. ./json_util.h
  74. ./linkhash.h
  75. ./printbuf.h
  76. )
  77. set(JSON_C_HEADERS
  78. ${JSON_C_PUBLIC_HEADERS}
  79. ./json_object_private.h
  80. ./random_seed.h
  81. ./strerror_override.h
  82. ./strerror_override_private.h
  83. ./math_compat.h
  84. ./snprintf_compat.h
  85. ./strdup_compat.h
  86. ./vasprintf_compat.h
  87. )
  88. set(JSON_C_SOURCES
  89. ./arraylist.c
  90. ./debug.c
  91. ./json_c_version.c
  92. ./json_object.c
  93. ./json_object_iterator.c
  94. ./json_pointer.c
  95. ./json_tokener.c
  96. ./json_util.c
  97. ./json_visit.c
  98. ./linkhash.c
  99. ./printbuf.c
  100. ./random_seed.c
  101. ./strerror_override.c
  102. )
  103. add_library(json-c
  104. SHARED
  105. ${JSON_C_SOURCES}
  106. ${JSON_C_HEADERS}
  107. )
  108. add_library(json-c-static
  109. STATIC
  110. ${JSON_C_SOURCES}
  111. ${JSON_C_HEADERS}
  112. )
  113. set_property(TARGET json-c PROPERTY C_STANDARD 99)
  114. set_property(TARGET json-c-static PROPERTY C_STANDARD 99)
  115. set_target_properties(json-c-static PROPERTIES OUTPUT_NAME json-c)
  116. if (CMAKE_VERSION VERSION_LESS 3.0)
  117. # Fixes for CMake 2.8.12
  118. # Reference: https://github.com/Tencent/rapidjson/issues/1154
  119. set(LIB_MAJOR_VERSION "0")
  120. set(LIB_MINOR_VERSION "13")
  121. set(LIB_PATCH_VERSION "1")
  122. set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}")
  123. set_target_properties(json-c PROPERTIES VERSION ${LIB_VERSION_STRING})
  124. set_target_properties(json-c-static PROPERTIES VERSION ${LIB_VERSION_STRING})
  125. endif ()
  126. install(TARGETS json-c json-c-static
  127. RUNTIME DESTINATION bin
  128. LIBRARY DESTINATION lib
  129. ARCHIVE DESTINATION lib
  130. )
  131. install(FILES ${JSON_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/json-c )
  132. if (UNIX)
  133. set(prefix ${CMAKE_INSTALL_PREFIX})
  134. set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
  135. set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
  136. set(includedir ${CMAKE_INSTALL_PREFIX}/include)
  137. set(VERSION ${PROJECT_VERSION})
  138. configure_file(json-c.pc.in json-c.pc @ONLY)
  139. set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
  140. install(FILES ${CMAKE_BINARY_DIR}/json-c.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}")
  141. endif ()