nats.zig/deps/nats.c/CMakeLists.txt
torque 41fbdf886b
git subrepo pull --branch=v3.7.0 deps/nats.c
subrepo:
  subdir:   "deps/nats.c"
  merged:   "5d057f6"
upstream:
  origin:   "https://github.com/nats-io/nats.c.git"
  branch:   "v3.7.0"
  commit:   "5d057f6"
git-subrepo:
  version:  "0.4.6"
  commit:   "affc4c01a"
2023-10-14 13:22:13 -07:00

284 lines
9.2 KiB
CMake

cmake_minimum_required(VERSION 3.13)
project(cnats)
include(CTest)
include(FindPackageHandleStandardArgs)
# Uncomment to have the build process verbose
#set(CMAKE_VERBOSE_MAKEFILE TRUE)
# Uncomment to have the executable moved to 'build' instead of their respective 'build/xxx' directories
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
# Set a default build type if none was specified
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Release" "Debug" "MinSizeRel" "RelWithDebInfo")
endif()
option(NATS_UPDATE_VERSION "Update the version file" OFF)
option(NATS_UPDATE_DOC "Update the doc template file" OFF)
option(NATS_COVERAGE "Code coverage" OFF)
option(NATS_BUILD_NO_SPIN "Enable if spin code does not compile on your arch" OFF)
option(NATS_BUILD_WITH_TLS "Build with TLS support" ON)
option(NATS_BUILD_TLS_FORCE_HOST_VERIFY "Forces hostname verification" ON)
option(NATS_BUILD_TLS_USE_OPENSSL_1_1_API "Build for OpenSSL 1.1+" ON)
option(NATS_BUILD_USE_SODIUM "Build using libsodium library" OFF)
option(NATS_BUILD_EXAMPLES "Build examples" ON)
option(NATS_BUILD_LIBUV_EXAMPLE "Build libuv examples" OFF)
option(NATS_BUILD_LIBEVENT_EXAMPLE "Build libevent examples" OFF)
option(NATS_BUILD_STATIC_EXAMPLES "Statically link examples" OFF)
option(NATS_BUILD_STREAMING "Build NATS Streaming" ON)
option(NATS_BUILD_NO_PREFIX_CONNSTS "No prefix for connection status enum" OFF)
option(NATS_BUILD_LIB_STATIC "Build static library" ON)
option(NATS_BUILD_LIB_SHARED "Build shared library" ON)
option(NATS_COMPILER_HARDENING "Compiler hardening flags" OFF)
if(UNIX AND APPLE)
option(CMAKE_MACOSX_RPATH "Build with macOS RPath" ON)
endif()
if(DEFINED ENV{NATS_SANITIZE})
set(NATS_STANITIZE "$ENV{NATS_SANITIZE}")
mark_as_advanced(NATS_SANITIZE)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR})
if(NATS_COVERAGE)
message("-- Coverage Enabled")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage -fprofile-arcs -ftest-coverage")
endif(NATS_COVERAGE)
if(NATS_BUILD_WITH_TLS)
set(OPENSSL_USE_STATIC_LIBS ${NATS_BUILD_OPENSSL_STATIC_LIBS})
find_package(OpenSSL REQUIRED)
endif(NATS_BUILD_WITH_TLS)
set(LIBUV_DIR "" CACHE PATH "Libuv install directory")
set(LIBEVENT_DIR "" CACHE PATH "Libevent install directory")
set(NATS_DOC_PROJECT_NAME "NATS C Client with JetStream support")
if(NATS_BUILD_STREAMING)
IF(DEFINED ENV{NATS_PROTOBUF_DIR})
SET(NATS_PROTOBUF_DIR "$ENV{NATS_PROTOBUF_DIR}")
ENDIF()
FIND_PATH(
NATS_PROTOBUF_INCLUDE_DIR
protobuf-c/protobuf-c.h
HINTS
${NATS_PROTOBUF_DIR}
)
FIND_LIBRARY(NATS_PROTOBUF_LIBRARY
NAMES libprotobuf-c.so libprotobuf-c.dylib libprotobuf-c.a protobuf-c.lib protobuf-c.dll
HINTS ${NATS_PROTOBUF_DIR}
)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(libprotobuf-c DEFAULT_MSG
NATS_PROTOBUF_INCLUDE_DIR
NATS_PROTOBUF_LIBRARY
)
IF(libprotobuf-c_FOUND)
SET(NATS_PROTOBUF_INCLUDE_DIRS ${NATS_PROTOBUF_INCLUDE_DIR})
SET(NATS_PROTOBUF_LIBRARIES ${NATS_PROTOBUF_LIBRARY})
MARK_AS_ADVANCED(
NATS_PROTOBUF_LIBRARY
NATS_PROTOBUF_INCLUDE_DIR
NATS_PROTOBUF_DIR
)
ELSE()
SET(NATS_PROTOBUF_DIR "" CACHE STRING
"An optional hint to a directory for finding `libprotobuf-c`"
)
MESSAGE(FATAL_ERROR
"Could not find libprotobuf-c package. Check build instructions: https://github.com/nats-io/nats.c#building-with-streaming")
ENDIF()
add_definitions(-DNATS_HAS_STREAMING)
set(NATS_DOC_INCLUDE_STREAMING "NATS_HAS_STREAMING")
set(NATS_DOC_PROJECT_NAME "NATS C Client with JetStream and Streaming support")
endif(NATS_BUILD_STREAMING)
if(NATS_BUILD_USE_SODIUM)
IF(DEFINED ENV{NATS_SODIUM_DIR})
SET(NATS_SODIUM_DIR "$ENV{NATS_SODIUM_DIR}")
ENDIF()
FIND_PATH(
NATS_SODIUM_INCLUDE_DIR
sodium.h
HINTS
${NATS_SODIUM_DIR}
)
FIND_LIBRARY(NATS_SODIUM_LIBRARY
NAMES libsodium.so libsodium.dylib libsodium.a libsodium.lib libsodium.dll
HINTS ${NATS_SODIUM_DIR}
)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(libsodium DEFAULT_MSG
NATS_SODIUM_INCLUDE_DIR
NATS_SODIUM_LIBRARY
)
IF(libsodium_FOUND)
SET(NATS_SODIUM_INCLUDE_DIRS ${NATS_SODIUM_INCLUDE_DIR})
SET(NATS_SODIUM_LIBRARIES ${NATS_SODIUM_LIBRARY})
MARK_AS_ADVANCED(
NATS_SODIUM_LIBRARY
NATS_SODIUM_INCLUDE_DIR
NATS_SODIUM_DIR
)
ELSE()
SET(NATS_SODIUM_DIR "" CACHE STRING
"An optional hint to a directory for finding `libsodium`"
)
MESSAGE(FATAL_ERROR
"Could not find libsodium package. Check build instructions: https://github.com/nats-io/nats.c#building-with-libsodium")
ENDIF()
add_definitions(-DNATS_USE_LIBSODIUM)
endif(NATS_BUILD_USE_SODIUM)
if(NATS_BUILD_NO_PREFIX_CONNSTS)
add_definitions(-DNATS_CONN_STATUS_NO_PREFIX)
endif(NATS_BUILD_NO_PREFIX_CONNSTS)
# Platform specific settings
if(UNIX)
#---------------------------------------------------------------------------
# Define NATS cache variables that override the CMAKE and MEMCHECK variables
#---------------------------------------------------------------------------
include(GNUInstallDirs)
set(NATS_LIBDIR ${CMAKE_INSTALL_LIBDIR})
set(NATS_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
set(NATS_BUILD_ARCH "64" CACHE STRING "32 for 32bits builds")
find_program(MEMORYCHECK_COMMAND valgrind)
set(NATS_MEMCHECK_CMD_OPTS "--leak-check=full --track-fds=yes --show-reachable=yes --num-callers=50" CACHE STRING "Memcheck options")
set(MEMORYCHECK_COMMAND_OPTIONS ${NATS_MEMCHECK_CMD_OPTS} CACHE INTERNAL "")
set(NATS_COMMON_C_FLAGS "-std=c99 -pedantic")
# Some compiler hardening flags.
if(NATS_COMPILER_HARDENING)
set(NATS_COMMON_C_FLAGS "${NATS_COMMON_C_FLAGS} -fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2 -O1")
# Works only with GCC.
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(NATS_COMMON_C_FLAGS "${NATS_COMMON_C_FLAGS} -Wl,-z,relro,-z,now -pie")
endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
endif(NATS_COMPILER_HARDENING)
set(NATS_WARNINGS "-fstrict-aliasing -Wall -W -Wno-unused-parameter -Wno-unused-function -Wstrict-prototypes -Wwrite-strings")
set(NATS_PLATFORM_INCLUDE "unix")
if(APPLE)
set(NATS_OS "DARWIN")
else(APPLE)
set(NATS_OS "LINUX")
set(NATS_USE_PTHREAD "-pthread")
set(NATS_EXTRA_LIB "rt")
endif(APPLE)
if (${NATS_BUILD_ARCH} MATCHES "32")
if(NOT APPLE)
message("-----------------------------------------------------------")
message("If build fails, you probably need to install libc6-dev-i386")
message("apt-get install libc6-dev-i386")
message("-----------------------------------------------------------")
endif(NOT APPLE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
set(CMAKE_C_LINKER_FLAGS "${CMAKE_C_LINKER_FLAGS} -m32")
endif(${NATS_BUILD_ARCH} MATCHES "32")
elseif(WIN32)
set(NATS_LIBDIR "lib")
set(NATS_INCLUDE_DIR "include")
set(NATS_EXTRA_LIB "Ws2_32")
set(NATS_OS "_WIN32")
set(NATS_PLATFORM_INCLUDE "win")
if(sodium_USE_STATIC_LIBS)
add_definitions(
-DSODIUM_STATIC
-DSODIUM_EXPORT=
)
endif(sodium_USE_STATIC_LIBS)
endif(UNIX)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NATS_COMMON_C_FLAGS} ${NATS_USE_PTHREAD} ${NATS_WARNINGS}")
if(NATS_SANITIZE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fno-optimize-sibling-calls")
endif(NATS_SANITIZE)
if(UNIX)
if(APPLE)
else(APPLE)
add_definitions(-D_GNU_SOURCE)
if(NATS_BUILD_NO_SPIN)
add_definitions(-DNATS_NO_SPIN)
endif(NATS_BUILD_NO_SPIN)
endif(APPLE)
endif(UNIX)
add_definitions(-D${NATS_OS})
add_definitions(-D_REENTRANT)
if(NATS_BUILD_WITH_TLS)
add_definitions(-DNATS_HAS_TLS)
if(NATS_BUILD_TLS_USE_OPENSSL_1_1_API)
add_definitions(-DNATS_USE_OPENSSL_1_1)
endif(NATS_BUILD_TLS_USE_OPENSSL_1_1_API)
if(NATS_BUILD_TLS_FORCE_HOST_VERIFY)
add_definitions(-DNATS_FORCE_HOST_VERIFICATION)
endif(NATS_BUILD_TLS_FORCE_HOST_VERIFY)
endif(NATS_BUILD_WITH_TLS)
#------------
# Versionning and Doc
set(NATS_VERSION_MAJOR 3)
set(NATS_VERSION_MINOR 7)
set(NATS_VERSION_PATCH 0)
set(NATS_VERSION_SUFFIX "")
set(NATS_VERSION_REQUIRED_NUMBER 0x030700)
if(NATS_UPDATE_VERSION OR NATS_UPDATE_DOC)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in
${CMAKE_CURRENT_SOURCE_DIR}/src/version.h
@ONLY)
configure_file(
${CMAKE_SOURCE_DIR}/doc/DoxyFile.NATS.Client.in
${CMAKE_SOURCE_DIR}/doc/DoxyFile.NATS.Client
@ONLY)
endif(NATS_UPDATE_VERSION OR NATS_UPDATE_DOC)
#------------
#------------
# pkg-config
if(UNIX)
configure_file(
${PROJECT_SOURCE_DIR}/src/libnats.pc.in
${PROJECT_BINARY_DIR}/libnats.pc
@ONLY
)
install (
FILES "${PROJECT_BINARY_DIR}/libnats.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
endif(UNIX)
#------------
#----------------------------
# Add the project directories
add_subdirectory(src)
add_subdirectory(examples)
add_subdirectory(examples/getstarted)
if(NATS_BUILD_STREAMING)
add_subdirectory(examples/stan)
endif()
add_subdirectory(test)
add_subdirectory(test/dylib)
#----------------------------