Mercurial > embed
diff libjansson/CMakeLists.txt @ 76:0bd0077049ff
misc: prefix everything with lib
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 23 Nov 2018 21:43:06 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libjansson/CMakeLists.txt Fri Nov 23 21:43:06 2018 +0100 @@ -0,0 +1,245 @@ +# +# this file was customized it may be different from upstream. +# + +cmake_minimum_required(VERSION 3.0) +project(libjansson C) + +option(USE_URANDOM "Use /dev/urandom to seed the hash function." On) +option(USE_WINDOWS_CRYPTOAPI "Use CryptGenRandom to seed the hash function." On) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${libjansson_SOURCE_DIR}/cmake) + +include(CheckCSourceCompiles) +include(CheckFunctionExists) +include(CheckFunctionKeywords) +include(CheckIncludeFiles) +include(CheckTypeSize) + +check_include_files(endian.h HAVE_ENDIAN_H) +check_include_files(fcntl.h HAVE_FCNTL_H) +check_include_files(sched.h HAVE_SCHED_H) +check_include_files(unistd.h HAVE_UNISTD_H) +check_include_files(stdint.h HAVE_STDINT_H) +check_include_files(sys/param.h HAVE_SYS_PARAM_H) +check_include_files(sys/stat.h HAVE_SYS_STAT_H) +check_include_files(sys/time.h HAVE_SYS_TIME_H) +check_include_files(sys/time.h HAVE_SYS_TYPES_H) + +check_function_exists(close HAVE_CLOSE) +check_function_exists(getpid HAVE_GETPID) +check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) +check_function_exists(open HAVE_OPEN) +check_function_exists(read HAVE_READ) +check_function_exists(sched_yield HAVE_SCHED_YIELD) + +check_type_size(__int64 __INT64) +check_type_size(int64_t INT64_T) +check_type_size("long long" LONG_LONG_INT) +check_type_size(int32_t INT32_T) +check_type_size(__int32 __INT32) +check_type_size("long" LONG_INT) +check_type_size("int" INT) + +if (HAVE_INT32_T) + set(JSON_INT32 int32_t) +elseif (HAVE___INT32) + set(JSON_INT32 __int32) +elseif (HAVE_LONG_INT AND (${LONG_INT} EQUAL 4)) + set(JSON_INT32 long) +elseif (HAVE_INT AND (${INT} EQUAL 4)) + set(JSON_INT32 int) +else () + message (FATAL_ERROR "Could not detect a valid 32-bit integer type") +endif () + +check_type_size("unsigned long" UNSIGNED_LONG_INT) +check_type_size("unsigned int" UNSIGNED_INT) +check_type_size("unsigned short" UNSIGNED_SHORT) +check_type_size(uint32_t UINT32_T) +check_type_size(__uint32 __UINT32) + +if (HAVE_UINT32_T) + set(JSON_UINT32 uint32_t) +elseif (HAVE___UINT32) + set(JSON_UINT32 __uint32) +elseif (HAVE_UNSIGNED_LONG_INT AND (${UNSIGNED_LONG_INT} EQUAL 4)) + set(JSON_UINT32 "unsigned long") +elseif (HAVE_UNSIGNED_INT AND (${UNSIGNED_INT} EQUAL 4)) + set(JSON_UINT32 "unsigned int") +else () + message(FATAL_ERROR "Could not detect a valid unsigned 32-bit integer type") +endif () + +check_type_size(uint16_t UINT16_T) +check_type_size(__uint16 __UINT16) + +if (HAVE_UINT16_T) + set(JSON_UINT16 uint16_t) +elseif (HAVE___UINT16) + set(JSON_UINT16 __uint16) +elseif (HAVE_UNSIGNED_INT AND (${UNSIGNED_INT} EQUAL 2)) + set(JSON_UINT16 "unsigned int") +elseif (HAVE_UNSIGNED_SHORT AND (${UNSIGNED_SHORT} EQUAL 2)) + set(JSON_UINT16 "unsigned short") +else () + message(FATAL_ERROR "Could not detect a valid unsigned 16-bit integer type") +endif () + +check_type_size(uint8_t UINT8_T) +check_type_size(__uint8 __UINT8) + +if (HAVE_UINT8_T) + set(JSON_UINT8 uint8_t) +elseif (HAVE___UINT8) + set(JSON_UINT8 __uint8) +else () + set(JSON_UINT8 "unsigned char") +endif () + +check_type_size(ssize_t SSIZE_T) +check_type_size(SSIZE_T UPPERCASE_SSIZE_T) + +if(NOT HAVE_SSIZE_T) + if(HAVE_UPPERCASE_SSIZE_T) + set(JSON_SSIZE SSIZE_T) + else() + set(JSON_SSIZE int) + endif() +endif() + +set(CMAKE_EXTRA_INCLUDE_FILES "") + +check_function_exists(strtoll HAVE_STRTOLL) +check_function_exists(strtoq HAVE_STRTOQ) +check_function_exists(_strtoi64 HAVE__STRTOI64) + +if (HAVE_STRTOLL) + set(JSON_STRTOINT strtoll) +elseif (HAVE_STRTOQ) + set(JSON_STRTOINT strtoq) +elseif (HAVE__STRTOI64) + set(JSON_STRTOINT _strtoi64) +else () + set (JSON_STRTOINT strtol) + set (JSON_INT_T long) + set (JSON_INTEGER_FORMAT "\"ld\"") +endif () + +if (NOT DEFINED JSON_INT_T) + if (HAVE_LONG_LONG_INT AND (${LONG_LONG_INT} EQUAL 8)) + set(JSON_INT_T "long long") + elseif (HAVE_INT64_T) + set(JSON_INT_T int64_t) + elseif (HAVE___INT64) + set(JSON_INT_T __int64) + else () + message(FATAL_ERROR "Could not detect 64 bit type, although I detected the strtoll equivalent") + endif () + + if (WIN32) + set(JSON_INTEGER_FORMAT "\"I64d\"") + else () + set(JSON_INTEGER_FORMAT "\"lld\"") + endif () +endif () + +check_include_files (locale.h HAVE_LOCALE_H) +check_function_exists (localeconv HAVE_LOCALECONV) + +if (HAVE_LOCALECONV AND HAVE_LOCALE_H) + set(JSON_HAVE_LOCALECONV 1) +else () + set(JSON_HAVE_LOCALECONV 0) +endif() + +check_function_exists(setlocale HAVE_SETLOCALE) + +check_function_keywords("inline") +check_function_keywords("__inline") +check_function_keywords("__inline__") + +if (HAVE_INLINE) + set(JSON_INLINE inline) +elseif (HAVE___INLINE) + set(JSON_INLINE __inline) +elseif (HAVE___INLINE__) + set(JSON_INLINE __inline__) +else() + set (JSON_INLINE) +endif() + +check_function_exists(snprintf HAVE_SNPRINTF) +check_function_exists(_snprintf HAVE__SNPRINTF) + +if (HAVE_SNPRINTF) + set(JSON_SNPRINTF snprintf) +elseif (HAVE__SNPRINTF) + set(JSON_SNPRINTF _snprintf) +endif () + +check_c_source_compiles("int main() { unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1); return 0; } " HAVE_SYNC_BUILTINS) +check_c_source_compiles("int main() { char l; unsigned long v; __atomic_test_and_set(&l, __ATOMIC_RELAXED); __atomic_store_n(&v, 1, __ATOMIC_RELEASE); __atomic_load_n(&v, __ATOMIC_ACQUIRE); return 0; }" HAVE_ATOMIC_BUILTINS) + +configure_file( + ${libjansson_SOURCE_DIR}/cmake/jansson_config.h.cmake + ${libjansson_BINARY_DIR}/include/jansson_config.h +) + +file( + COPY ${libjansson_SOURCE_DIR}/src/jansson.h + DESTINATION ${libjansson_BINARY_DIR}/include/ +) + +add_definitions(-DJANSSON_USING_CMAKE) + +configure_file( + ${libjansson_SOURCE_DIR}/cmake/jansson_private_config.h.cmake + ${libjansson_BINARY_DIR}/private_include/jansson_private_config.h +) + +add_definitions(-DHAVE_CONFIG_H) + +set( + JANSSON_SRC + ${libjansson_SOURCE_DIR}/src/dump.c + ${libjansson_SOURCE_DIR}/src/error.c + ${libjansson_SOURCE_DIR}/src/hashtable.c + ${libjansson_SOURCE_DIR}/src/hashtable_seed.c + ${libjansson_SOURCE_DIR}/src/load.c + ${libjansson_SOURCE_DIR}/src/memory.c + ${libjansson_SOURCE_DIR}/src/pack_unpack.c + ${libjansson_SOURCE_DIR}/src/strbuffer.c + ${libjansson_SOURCE_DIR}/src/strconv.c + ${libjansson_SOURCE_DIR}/src/utf.c + ${libjansson_SOURCE_DIR}/src/value.c +) + +set( + JANSSON_HDR_PRIVATE + ${libjansson_SOURCE_DIR}/src/hashtable.h + ${libjansson_SOURCE_DIR}/src/jansson_private.h + ${libjansson_SOURCE_DIR}/src/strbuffer.h + ${libjansson_SOURCE_DIR}/src/utf.h + ${libjansson_BINARY_DIR}/private_include/jansson_private_config.h +) + +set( + JANSSON_HDR_PUBLIC + ${libjansson_BINARY_DIR}/include/jansson_config.h + ${libjansson_SOURCE_DIR}/src/jansson.h +) + +add_library(libjansson ${JANSSON_SRC} ${JANSSON_HDR_PRIVATE} ${JANSSON_HDR_PUBLIC}) +set_target_properties(libjansson PROPERTIES PREFIX "" WINDOWS_EXPORT_ALL_SYMBOLS On) + +target_include_directories( + libjansson + PUBLIC $<BUILD_INTERFACE:${libjansson_BINARY_DIR}/include> + PRIVATE ${libjansson_BINARY_DIR}/private_include +) + +if (MSVC) + target_compile_definitions(libjansson PUBLIC _CRT_SECURE_NO_WARNINGS) + target_compile_options(libjansson PUBLIC /W3 /D /wd4005 /wd4996 /wd4334 /wd4267) +endif()