Blame CMakeLists.txt

Packit ea8578
#Licensed under the MIT license. See LICENSE file in the project root for full license information.
Packit ea8578
Packit ea8578
cmake_minimum_required(VERSION 2.8.7)
Packit ea8578
cmake_policy(SET CMP0048 NEW)
Packit ea8578
project(json-c VERSION 0.13.1)
Packit ea8578
Packit ea8578
Packit ea8578
include(CheckSymbolExists)
Packit ea8578
Packit ea8578
check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL)
Packit ea8578
Packit ea8578
set(cmake_strtoll "strtoll")
Packit ea8578
if (NOT HAVE_STRTOLL)
Packit ea8578
  # Use _strtoi64 if strtoll is not available.
Packit ea8578
  check_symbol_exists(_strtoi64 stdlib.h have_strtoi64)
Packit ea8578
  if (have_strtoi64)
Packit ea8578
    set(HAVE_STRTOLL 1)
Packit ea8578
    set(cmake_strtoll "_strtoi64")
Packit ea8578
    # could do the same for strtoull, if needed
Packit ea8578
  endif ()
Packit ea8578
endif ()
Packit ea8578
Packit ea8578
Packit ea8578
Packit ea8578
if(MSVC)
Packit ea8578
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100 /wd4996 /wd4244 /wd4706 /wd4702 /wd4127 /wd4701")
Packit ea8578
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4100 /wd4996 /wd4244 /wd4706 /wd4702 /wd4127 /wd4701")
Packit ea8578
  set(cmake_create_config 1)
Packit ea8578
elseif(MINGW)
Packit ea8578
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -D_GNU_SOURCE=1")
Packit ea8578
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -D_GNU_SOURCE=1")
Packit ea8578
  if (MSYS OR CMAKE_GENERATOR STREQUAL "Unix Makefiles")
Packit ea8578
    execute_process(COMMAND echo ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit ea8578
    execute_process(COMMAND sh autogen.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit ea8578
    execute_process(COMMAND sh ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit ea8578
    file(COPY ./config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
Packit ea8578
    file(COPY ./json_config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
Packit ea8578
  else()
Packit ea8578
    set(cmake_create_config 1)
Packit ea8578
  endif()
Packit ea8578
elseif(UNIX)
Packit ea8578
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
Packit ea8578
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -D_GNU_SOURCE")
Packit ea8578
  execute_process(COMMAND echo ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit ea8578
  execute_process(COMMAND sh autogen.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit ea8578
  execute_process(COMMAND ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit ea8578
  file(COPY ./config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
Packit ea8578
  file(COPY ./json_config.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
Packit ea8578
endif()
Packit ea8578
Packit ea8578
if (cmake_create_config)
Packit ea8578
  file(REMOVE ./config.h)  # make sure any stale one is gone
Packit ea8578
  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.win32 ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
Packit ea8578
  file(COPY ./json_config.h.win32 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/)
Packit ea8578
  file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h.win32 ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h)
Packit ea8578
endif ()
Packit ea8578
Packit ea8578
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
Packit ea8578
Packit ea8578
set(JSON_C_PUBLIC_HEADERS
Packit ea8578
    ./json.h
Packit ea8578
    ${CMAKE_CURRENT_BINARY_DIR}/include/config.h
Packit ea8578
    ${CMAKE_CURRENT_BINARY_DIR}/include/json_config.h
Packit ea8578
    ./arraylist.h
Packit ea8578
    ./debug.h
Packit ea8578
    ./json_c_version.h
Packit ea8578
    ./json_inttypes.h
Packit ea8578
    ./json_object.h
Packit ea8578
    ./json_pointer.h
Packit ea8578
    ./json_tokener.h
Packit ea8578
    ./json_util.h
Packit ea8578
    ./linkhash.h
Packit ea8578
    ./printbuf.h
Packit ea8578
)
Packit ea8578
set(JSON_C_HEADERS
Packit ea8578
    ${JSON_C_PUBLIC_HEADERS}
Packit ea8578
    ./json_object_private.h
Packit ea8578
    ./random_seed.h
Packit ea8578
    ./strerror_override.h
Packit ea8578
    ./strerror_override_private.h
Packit ea8578
    ./math_compat.h
Packit ea8578
    ./snprintf_compat.h
Packit ea8578
    ./strdup_compat.h
Packit ea8578
    ./vasprintf_compat.h
Packit ea8578
)
Packit ea8578
Packit ea8578
set(JSON_C_SOURCES
Packit ea8578
    ./arraylist.c
Packit ea8578
    ./debug.c
Packit ea8578
    ./json_c_version.c
Packit ea8578
    ./json_object.c
Packit ea8578
    ./json_object_iterator.c
Packit ea8578
    ./json_pointer.c
Packit ea8578
    ./json_tokener.c
Packit ea8578
    ./json_util.c
Packit ea8578
    ./json_visit.c
Packit ea8578
    ./linkhash.c
Packit ea8578
    ./printbuf.c
Packit ea8578
    ./random_seed.c
Packit ea8578
    ./strerror_override.c
Packit ea8578
)
Packit ea8578
Packit ea8578
add_library(json-c
Packit ea8578
    SHARED
Packit ea8578
    ${JSON_C_SOURCES}
Packit ea8578
    ${JSON_C_HEADERS}
Packit ea8578
)
Packit ea8578
Packit ea8578
add_library(json-c-static
Packit ea8578
    STATIC
Packit ea8578
    ${JSON_C_SOURCES}
Packit ea8578
    ${JSON_C_HEADERS}
Packit ea8578
)
Packit ea8578
Packit ea8578
set_property(TARGET json-c PROPERTY C_STANDARD 99)
Packit ea8578
set_property(TARGET json-c-static PROPERTY C_STANDARD 99)
Packit ea8578
set_target_properties(json-c-static PROPERTIES OUTPUT_NAME json-c)
Packit ea8578
Packit ea8578
install(TARGETS json-c json-c-static
Packit ea8578
    RUNTIME DESTINATION bin
Packit ea8578
    LIBRARY DESTINATION lib
Packit ea8578
    ARCHIVE DESTINATION lib
Packit ea8578
)
Packit ea8578
Packit ea8578
install(FILES ${JSON_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/json-c )
Packit ea8578
Packit ea8578
if (UNIX)
Packit ea8578
	set(prefix ${CMAKE_INSTALL_PREFIX})
Packit ea8578
	set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
Packit ea8578
	set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
Packit ea8578
	set(includedir ${CMAKE_INSTALL_PREFIX}/include)
Packit ea8578
	set(VERSION ${PROJECT_VERSION})
Packit ea8578
	configure_file(json-c.pc.in json-c.pc @ONLY)
Packit ea8578
	set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
Packit ea8578
	install(FILES ${CMAKE_BINARY_DIR}/json-c.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}")
Packit ea8578
endif ()