aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt471
1 files changed, 281 insertions, 190 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5c8132b8..31e2efcb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,9 @@
#
+# Copyright 2019 Staysail Systems, Inc. <info@staysail.tech>
# Copyright (c) 2012 Martin Sustrik All rights reserved.
# Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
# Copyright (c) 2015-2016 Jack R. Dunaway. All rights reserved.
# Copyright 2016 Franklin "Snaipe" Mathieu <franklinmathieu@gmail.com>
-# Copyright 2019 Staysail Systems, Inc. <info@staysail.tech>
# Copyright 2018 Capitar IT Group BV <info@capitar.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -25,73 +25,73 @@
# IN THE SOFTWARE.
#
-cmake_minimum_required (VERSION 3.1)
+cmake_minimum_required(VERSION 3.1)
-project (nng C)
-include (CheckFunctionExists)
-include (CheckSymbolExists)
-include (CheckStructHasMember)
-include (CheckLibraryExists)
-include (CheckCSourceCompiles)
-include (CheckCCompilerFlag)
-include (CMakeDependentOption)
-include (GNUInstallDirs)
-include (TestBigEndian)
-include (FindUnixCommands)
+project(nng C)
+include(CheckFunctionExists)
+include(CheckSymbolExists)
+include(CheckStructHasMember)
+include(CheckLibraryExists)
+include(CheckCSourceCompiles)
+include(CheckCCompilerFlag)
+include(CMakeDependentOption)
+include(GNUInstallDirs)
+include(TestBigEndian)
+include(FindUnixCommands)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
if (POLICY CMP0042)
# Newer cmake on MacOS should use @rpath
- cmake_policy (SET CMP0042 NEW)
+ cmake_policy(SET CMP0042 NEW)
endif ()
if (POLICY CMP0028)
# Double colon targets are only alias or imports.
- cmake_policy (SET CMP0028 NEW)
+ cmake_policy(SET CMP0028 NEW)
endif ()
set(CMAKE_C_STANDARD 99)
-set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-list (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" isSystemDir)
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" isSystemDir)
if ("${isSystemDir}" STREQUAL "-1")
- set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
endif ("${isSystemDir}" STREQUAL "-1")
-set (NNG_DESCRIPTION "High-Performance Scalability Protocols NextGen")
-set (ISSUE_REPORT_MSG "Please consider opening an issue at https://github.com/nanomsg/nng")
+set(NNG_DESCRIPTION "High-Performance Scalability Protocols NextGen")
+set(ISSUE_REPORT_MSG "Please consider opening an issue at https://github.com/nanomsg/nng")
# Determine library versions.
-set (NNG_ABI_SOVERSION 1)
-set (NNG_ABI_VERSION "1.1.0")
+set(NNG_ABI_SOVERSION 1)
+set(NNG_ABI_VERSION "1.1.0")
# Determine package version.
-find_package (Git QUIET)
+find_package(Git QUIET)
if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
# Working off a git repo, using git versioning
# Get version from last tag
- execute_process (
- COMMAND "${GIT_EXECUTABLE}" describe --always# | sed -e "s:v::"
- WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
- OUTPUT_VARIABLE NNG_PACKAGE_VERSION
- OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" describe --always# | sed -e "s:v::"
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
+ OUTPUT_VARIABLE NNG_PACKAGE_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
# If the sources have been changed locally, add -dirty to the version.
- execute_process (
- COMMAND "${GIT_EXECUTABLE}" diff --quiet
- WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
- RESULT_VARIABLE res)
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" diff --quiet
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
+ RESULT_VARIABLE res)
if (res EQUAL 1)
- set (NNG_PACKAGE_VERSION "${NNG_PACKAGE_VERSION}-dirty")
- endif()
+ set(NNG_PACKAGE_VERSION "${NNG_PACKAGE_VERSION}-dirty")
+ endif ()
else ()
- set (NNG_PACKAGE_VERSION "Unknown")
-endif()
+ set(NNG_PACKAGE_VERSION "Unknown")
+endif ()
if ("${NNG_PACKAGE_VERSION}" MATCHES "v[0-9]")
string(SUBSTRING "${NNG_PACKAGE_VERSION}" 1 -1 NNG_PACKAGE_VERSION)
-endif()
+endif ()
string(REGEX REPLACE "([0-9]+).[0-9]+.+" "\\1" NNG_VERSION_MAJOR "${NNG_PACKAGE_VERSION}")
string(REGEX REPLACE "[0-9]+.([0-9]+).[0-9].+" "\\1" NNG_VERSION_MINOR "${NNG_PACKAGE_VERSION}")
@@ -102,20 +102,20 @@ string(REGEX REPLACE "[0-9]+.[0-9]+.([0-9]+).*" "\\1" NNG_VERSION_PATCH "${NNG_P
option(BUILD_SHARED_LIBS "Build shared library" ${BUILD_SHARED_LIBS})
if (CMAKE_CROSSCOMPILING)
- set (NNG_NATIVE_BUILD OFF)
-else()
- set (NNG_NATIVE_BUILD ON)
-endif()
+ set(NNG_NATIVE_BUILD OFF)
+else ()
+ set(NNG_NATIVE_BUILD ON)
+endif ()
# We only build command line tools and tests if we are not in a
# cross-compile situation. Cross-compiling users who still want to
# build these must enable them explicitly.
-option (NNG_TESTS "Build and run tests" ${NNG_NATIVE_BUILD})
-option (NNG_TOOLS "Build extra tools" ${NNG_NATIVE_BUILD})
-option (NNG_ENABLE_NNGCAT "Enable building nngcat utility." ${NNG_TOOLS})
-option (NNG_ENABLE_COVERAGE "Enable coverage reporting." OFF)
+option(NNG_TESTS "Build and run tests" ${NNG_NATIVE_BUILD})
+option(NNG_TOOLS "Build extra tools" ${NNG_NATIVE_BUILD})
+option(NNG_ENABLE_NNGCAT "Enable building nngcat utility." ${NNG_TOOLS})
+option(NNG_ENABLE_COVERAGE "Enable coverage reporting." OFF)
# Enable access to private APIs for our own use.
-add_definitions (-DNNG_PRIVATE)
+add_definitions(-DNNG_PRIVATE)
# We can use rlimit to configure the stack size for systems
# that have too small defaults. This is not used for Windows,
@@ -123,288 +123,379 @@ add_definitions (-DNNG_PRIVATE)
# by with a smallish stack, but application callbacks might require
# larger values if using aio completion callbacks.)
if (NOT WIN32)
- option (NNG_SETSTACKSIZE "Use rlimit for thread stack size" OFF)
+ option(NNG_SETSTACKSIZE "Use rlimit for thread stack size" OFF)
if (NNG_SETSTACKSIZE)
add_definitions(-DNNG_SETSTACKSIZE)
- endif()
+ endif ()
mark_as_advanced(NNG_SETSTACKSIZE)
-endif()
+endif ()
-option (NNG_ENABLE_TLS "Enable TLS protocol (requires mbedTLS)" OFF)
+option(NNG_ENABLE_TLS "Enable TLS protocol (requires mbedTLS)" OFF)
if (NNG_ENABLE_TLS)
add_definitions(-DNNG_SUPP_TLS)
set(NNG_SUPP_TLS ON)
-endif()
+endif ()
-option (NNG_ENABLE_STATS "Enable statistics" ON)
+option(NNG_ENABLE_STATS "Enable statistics" ON)
if (NNG_ENABLE_STATS)
add_definitions(-DNNG_ENABLE_STATS)
-endif()
+endif ()
mark_as_advanced(NNG_ENABLE_STATS)
if (NNG_RESOLV_CONCURRENCY)
add_definitions(-DNNG_RESOLV_CONCURRENCY=${NNG_RESOLV_CONCURRENCY})
-endif()
+endif ()
mark_as_advanced(NNG_RESOLV_CONCURRENCY)
if (NNG_NUM_TASKQ_THREADS)
add_definitions(-DNNG_NUM_TASKQ_THREADS=${NNG_NUM_TASKQ_THREADS})
-endif()
+endif ()
mark_as_advanced(NNG_NUM_TASKQ_THREADS)
# Platform checks.
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
- set(NNG_WARN_FLAGS "-Wall -Wextra -fno-omit-frame-pointer")
+ set(NNG_WARN_FLAGS "-Wall -Wextra -fno-omit-frame-pointer")
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
set(NNG_WARN_FLAGS "-Wall -Wextra -fno-omit-frame-pointer")
elseif (CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
set(NNG_WARN_FLAGS "-Wall -Wextra -fno-omit-frame-pointer")
-endif()
+endif ()
-include (CheckSanitizer)
+include(CheckSanitizer)
CheckSanitizer()
if (NOT NNG_SANITIZER STREQUAL "none")
- set (NNG_SANITIZER_FLAGS "-fsanitize=${NNG_SANITIZER}")
-endif()
+ set(NNG_SANITIZER_FLAGS "-fsanitize=${NNG_SANITIZER}")
+endif ()
if (NNG_ENABLE_COVERAGE)
# NB: This only works for GCC and Clang 3.0 and newer. If your stuff
# is older than that, you will need to find something newer. For
# correct reporting, we always turn off all optimizations.
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
- set(NNG_COVERAGE_FLAGS "-g -O0 --coverage")
+ set(NNG_COVERAGE_FLAGS "-g -O0 --coverage")
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
- set(NNG_COVERAGE_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
+ set(NNG_COVERAGE_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
elseif (CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
- set(NNG_COVERAGE_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
- else()
+ set(NNG_COVERAGE_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
+ else ()
message(FATAL_ERROR "Unable to enable coverage for your compiler.")
- endif()
-endif()
+ endif ()
+endif ()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NNG_WARN_FLAGS} ${NNG_COVERAGE_FLAGS} ${NNG_SANITIZER_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NNG_WARN_FLAGS} ${NNG_COVERAGE_FLAGS} ${NNG_SANITIZER_FLAGS}")
TEST_BIG_ENDIAN(NNG_BIG_ENDIAN)
if (NNG_BIG_ENDIAN)
- add_definitions (-DNNG_BIG_ENDIAN)
-else()
- add_definitions (-DNNG_LITTLE_ENDIAN)
-endif()
+ add_definitions(-DNNG_BIG_ENDIAN)
+else ()
+ add_definitions(-DNNG_LITTLE_ENDIAN)
+endif ()
# If the compiler is not on Windows, does it support hiding the
# symbols by default? For shared libraries we would like to do this.
if (NOT WIN32 AND NOT CYGWIN)
check_c_compiler_flag(-fvisibility=hidden NNG_HIDDEN_VISIBILITY)
if (NNG_HIDDEN_VISIBILITY)
- add_definitions (-DNNG_HIDDEN_VISIBILITY)
- endif()
-endif()
+ add_definitions(-DNNG_HIDDEN_VISIBILITY)
+ endif ()
+endif ()
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_LINUX)
- add_definitions (-DNNG_USE_EVENTFD)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_LINUX)
+ add_definitions(-DNNG_USE_EVENTFD)
# Windows subsystem for Linux -- smells like Linux, but it has
# some differences (SO_REUSEADDR for one).
if (CMAKE_SYSTEM_VERSION MATCHES "Microsoft")
- add_definitions (-DNNG_PLATFORM_WSL)
- endif()
+ add_definitions(-DNNG_PLATFORM_WSL)
+ endif ()
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "Android")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_LINUX)
- add_definitions (-DNNG_PLATFORM_ANDROID)
- add_definitions (-DNNG_USE_EVENTFD)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_LINUX)
+ add_definitions(-DNNG_PLATFORM_ANDROID)
+ add_definitions(-DNNG_USE_EVENTFD)
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_DARWIN)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_DARWIN)
# macOS 10.12 and later have getentropy, but the older releases
# have ARC4_RANDOM, and that is sufficient to our needs.
- add_definitions (-DNNG_USE_ARC4RANDOM)
-
- # macOS added some of CLOCK_MONOTONIC, but the implementation is
- # broken and unreliable, so don't use it.
- add_definitions (-DNNG_USE_CLOCKID=CLOCK_REALTIME)
+ add_definitions(-DNNG_USE_ARC4RANDOM)
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_FREEBSD)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_FREEBSD)
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_NETBSD)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_NETBSD)
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_OPENBSD)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_OPENBSD)
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "SunOS")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-DNNG_PLATFORM_SUNOS)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_SUNOS)
set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "Windows")
- add_definitions (-DNNG_PLATFORM_WINDOWS)
- add_definitions (-D_CRT_SECURE_NO_WARNINGS)
- add_definitions (-D_CRT_RAND_S)
+ add_definitions(-DNNG_PLATFORM_WINDOWS)
+ add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+ add_definitions(-D_CRT_RAND_S)
set(NNG_PLATFORM_WINDOWS ON)
# Target Windows Vista and later
- add_definitions (-D_WIN32_WINNT=0x0600)
- list (APPEND CMAKE_REQUIRED_DEFINITIONS -D_WIN32_WINNT=0x0600)
+ add_definitions(-D_WIN32_WINNT=0x0600)
+ list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_WIN32_WINNT=0x0600)
elseif (CMAKE_SYSTEM_NAME MATCHES "QNX")
- add_definitions (-DNNG_PLATFORM_POSIX)
- add_definitions (-D__EXT_BSD)
- add_definitions (-D_QNX_SOURCE)
- add_definitions (-DNNG_PLATFORM_QNX)
+ add_definitions(-DNNG_PLATFORM_POSIX)
+ add_definitions(-D__EXT_BSD)
+ add_definitions(-D_QNX_SOURCE)
+ add_definitions(-DNNG_PLATFORM_QNX)
set(NNG_PLATFORM_POSIX ON)
else ()
- message (AUTHOR_WARNING "WARNING: This platform may not be supported: ${CMAKE_SYSTEM_NAME}")
- message (AUTHOR_WARNING "${ISSUE_REPORT_MSG}")
+ message(AUTHOR_WARNING "WARNING: This platform may not be supported: ${CMAKE_SYSTEM_NAME}")
+ message(AUTHOR_WARNING "${ISSUE_REPORT_MSG}")
# blithely hope for POSIX to work
- add_definitions (-DNNG_PLATFORM_POSIX)
+ add_definitions(-DNNG_PLATFORM_POSIX)
endif ()
-macro (nng_check_func SYM DEF)
- check_function_exists (${SYM} ${DEF})
+macro(nng_check_func SYM DEF)
+ check_function_exists(${SYM} ${DEF})
if (${DEF})
- add_definitions (-D${DEF}=1)
+ add_definitions(-D${DEF}=1)
endif ()
-endmacro (nng_check_func)
+endmacro(nng_check_func)
-macro (nng_check_sym SYM HDR DEF)
- check_symbol_exists (${SYM} ${HDR} ${DEF})
+macro(nng_check_sym SYM HDR DEF)
+ check_symbol_exists(${SYM} ${HDR} ${DEF})
if (${DEF})
- add_definitions (-D${DEF}=1)
+ add_definitions(-D${DEF}=1)
endif ()
-endmacro (nng_check_sym)
+endmacro(nng_check_sym)
-macro (nng_check_lib LIB SYM DEF)
- check_library_exists (${LIB} ${SYM} "" ${DEF})
+macro(nng_check_lib LIB SYM DEF)
+ check_library_exists(${LIB} ${SYM} "" ${DEF})
if (${DEF})
- add_definitions (-D${DEF}=1)
+ add_definitions(-D${DEF}=1)
list(APPEND NNG_LIBS ${LIB})
endif ()
-endmacro (nng_check_lib)
+endmacro(nng_check_lib)
-macro (nng_check_struct_member STR MEM HDR DEF)
- check_struct_has_member ("struct ${STR}" ${MEM} ${HDR} ${DEF})
+macro(nng_check_struct_member STR MEM HDR DEF)
+ check_struct_has_member("struct ${STR}" ${MEM} ${HDR} ${DEF})
if (${DEF})
- add_definitions (-D${DEF}=1)
+ add_definitions(-D${DEF}=1)
endif ()
-endmacro (nng_check_struct_member)
+endmacro(nng_check_struct_member)
if (WIN32)
# Windows is a special snowflake.
list(APPEND NNG_LIBS ws2_32 mswsock advapi32)
- nng_check_sym (InitializeConditionVariable windows.h NNG_HAVE_CONDVAR)
- nng_check_sym (snprintf stdio.h NNG_HAVE_SNPRINTF)
+ nng_check_sym(InitializeConditionVariable windows.h NNG_HAVE_CONDVAR)
+ nng_check_sym(snprintf stdio.h NNG_HAVE_SNPRINTF)
if (NOT NNG_HAVE_CONDVAR OR NOT NNG_HAVE_SNPRINTF)
- message (FATAL_ERROR
- "Modern Windows API support is missing. "
- "Versions of Windows prior to Vista are not supported. "
- "Further, the 32-bit MinGW environment is not supported. "
- "Ensure you have at least Windows Vista or newer, and are "
- "using either Visual Studio 2013 or newer or MinGW-W64.")
- endif()
+ message(FATAL_ERROR
+ "Modern Windows API support is missing. "
+ "Versions of Windows prior to Vista are not supported. "
+ "Further, the 32-bit MinGW environment is not supported. "
+ "Ensure you have at least Windows Vista or newer, and are "
+ "using either Visual Studio 2013 or newer or MinGW-W64.")
+ endif ()
else ()
# Unconditionally declare the following feature test macros. These are
# needed for some platforms (glibc and SunOS/illumos) and are harmless
# on the others.
- add_definitions (-D_GNU_SOURCE)
- add_definitions (-D_REENTRANT)
- add_definitions (-D_THREAD_SAFE)
- add_definitions (-D_POSIX_PTHREAD_SEMANTICS)
+ add_definitions(-D_GNU_SOURCE)
+ add_definitions(-D_REENTRANT)
+ add_definitions(-D_THREAD_SAFE)
+ add_definitions(-D_POSIX_PTHREAD_SEMANTICS)
list(APPEND NNG_PKGS Threads)
find_package(Threads REQUIRED)
- nng_check_func (lockf NNG_HAVE_LOCKF)
- nng_check_func (flock NNG_HAVE_FLOCK)
+ nng_check_func(lockf NNG_HAVE_LOCKF)
+ nng_check_func(flock NNG_HAVE_FLOCK)
- nng_check_lib (rt clock_gettime NNG_HAVE_CLOCK_GETTIME)
- nng_check_lib (pthread sem_wait NNG_HAVE_SEMAPHORE_PTHREAD)
- nng_check_lib (pthread pthread_atfork NNG_HAVE_PTHREAD_ATFORK_PTHREAD)
- nng_check_lib (nsl gethostbyname NNG_HAVE_LIBNSL)
- nng_check_lib (socket socket NNG_HAVE_LIBSOCKET)
+ nng_check_lib(rt clock_gettime NNG_HAVE_CLOCK_GETTIME)
+ nng_check_lib(pthread sem_wait NNG_HAVE_SEMAPHORE_PTHREAD)
+ nng_check_lib(pthread pthread_atfork NNG_HAVE_PTHREAD_ATFORK_PTHREAD)
+ nng_check_lib(nsl gethostbyname NNG_HAVE_LIBNSL)
+ nng_check_lib(socket socket NNG_HAVE_LIBSOCKET)
- nng_check_sym (AF_UNIX sys/socket.h NNG_HAVE_UNIX_SOCKETS)
- nng_check_sym (backtrace_symbols_fd execinfo.h NNG_HAVE_BACKTRACE)
+ nng_check_sym(AF_UNIX sys/socket.h NNG_HAVE_UNIX_SOCKETS)
+ nng_check_sym(backtrace_symbols_fd execinfo.h NNG_HAVE_BACKTRACE)
nng_check_struct_member(msghdr msg_control sys/socket.h NNG_HAVE_MSG_CONTROL)
- nng_check_sym (eventfd sys/eventfd.h NNG_HAVE_EVENTFD)
- nng_check_sym (kqueue sys/event.h NNG_HAVE_KQUEUE)
- nng_check_sym (port_create port.h NNG_HAVE_PORT_CREATE)
- nng_check_sym (epoll_create sys/epoll.h NNG_HAVE_EPOLL)
- nng_check_sym (epoll_create1 sys/epoll.h NNG_HAVE_EPOLL_CREATE1)
- nng_check_sym (getpeereid unistd.h NNG_HAVE_GETPEEREID)
- nng_check_sym (SO_PEERCRED sys/socket.h NNG_HAVE_SOPEERCRED)
- nng_check_struct_member (sockpeercred uid sys/socket.h NNG_HAVE_SOCKPEERCRED)
- nng_check_sym (LOCAL_PEERCRED sys/un.h NNG_HAVE_LOCALPEERCRED)
- nng_check_sym (getpeerucred ucred.h NNG_HAVE_GETPEERUCRED)
- nng_check_sym (atomic_flag_test_and_set stdatomic.h NNG_HAVE_STDATOMIC)
+ nng_check_sym(eventfd sys/eventfd.h NNG_HAVE_EVENTFD)
+ nng_check_sym(kqueue sys/event.h NNG_HAVE_KQUEUE)
+ nng_check_sym(port_create port.h NNG_HAVE_PORT_CREATE)
+ nng_check_sym(epoll_create sys/epoll.h NNG_HAVE_EPOLL)
+ nng_check_sym(epoll_create1 sys/epoll.h NNG_HAVE_EPOLL_CREATE1)
+ nng_check_sym(getpeereid unistd.h NNG_HAVE_GETPEEREID)
+ nng_check_sym(SO_PEERCRED sys/socket.h NNG_HAVE_SOPEERCRED)
+ nng_check_struct_member(sockpeercred uid sys/socket.h NNG_HAVE_SOCKPEERCRED)
+ nng_check_sym(LOCAL_PEERCRED sys/un.h NNG_HAVE_LOCALPEERCRED)
+ nng_check_sym(getpeerucred ucred.h NNG_HAVE_GETPEERUCRED)
+ nng_check_sym(atomic_flag_test_and_set stdatomic.h NNG_HAVE_STDATOMIC)
endif ()
-nng_check_sym (strlcat string.h NNG_HAVE_STRLCAT)
-nng_check_sym (strlcpy string.h NNG_HAVE_STRLCPY)
-nng_check_sym (strnlen string.h NNG_HAVE_STRNLEN)
-nng_check_sym (strcasecmp string.h NNG_HAVE_STRCASECMP)
-nng_check_sym (strncasecmp string.h NNG_HAVE_STRNCASECMP)
+nng_check_sym(strlcat string.h NNG_HAVE_STRLCAT)
+nng_check_sym(strlcpy string.h NNG_HAVE_STRLCPY)
+nng_check_sym(strnlen string.h NNG_HAVE_STRNLEN)
+nng_check_sym(strcasecmp string.h NNG_HAVE_STRCASECMP)
+nng_check_sym(strncasecmp string.h NNG_HAVE_STRNCASECMP)
# Set a static symbol. We do this for testing, so that tests can
# be skipped if they would rely on symbols that might not be exported.
# For example, idhash depends on private symbols, so don't test it
# when using a shared library on Windows because the symbols won't
# resolve.
-if (NOT(BUILD_SHARED_LIBS))
- set (NNG_STATIC_LIB ON)
+if (NOT (BUILD_SHARED_LIBS))
+ set(NNG_STATIC_LIB ON)
message(STATUS "Building static libs")
-endif()
+endif ()
+
+# In order to facilitate testing, we want to add a library that includes
+# our common test code. We do this before iterating everywhere else so
+# that we can locate our tests inside the directories where we want.
+if (NNG_TESTS)
+ enable_testing()
+ set(all_tests, "")
+
+
+ macro(nng_test NAME)
+ add_executable(${NAME} ${NAME}.c ${ARGN})
+ target_link_libraries(${NAME} ${PROJECT_NAME}_testlib)
+ target_include_directories(${NAME} PRIVATE
+ ${PROJECT_SOURCE_DIR}/tests
+ ${PROJECT_SOURCE_DIR}/src
+ ${PROJECT_SOURCE_DIR}/include)
+ add_test(NAME ${NAME} COMMAND ${NAME} -t)
+ set_tests_properties(${NAME} PROPERTIES TIMEOUT 180)
+ endmacro()
+
+ function(nng_sources_testlib)
+ foreach (f ${ARGN})
+ target_sources(${PROJECT_NAME}_testlib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${f})
+ endforeach ()
+ endfunction()
+
+ function(nng_headers_testlib)
+ foreach (f ${ARGN})
+ target_sources(${PROJECT_NAME}_testlib PRIVATE ${PROJECT_SOURCE_DIR}/include/${f})
+ endforeach ()
+ endfunction()
+
+ function(nng_defines_testlib)
+ target_compile_definitions(${PROJECT_NAME}_testlib PRIVATE ${ARGN})
+ endfunction()
+
+else ()
+ function(nng_test NAME)
+ endfunction()
-add_subdirectory (src)
+ function(nng_sources_testlib)
+ endfunction()
-foreach(_PKG IN ITEMS ${NNG_PKGS})
- find_package(${_PKG} REQUIRED)
+ function(nng_headers_testlib)
+ endfunction()
+
+ function(nng_defines_testlib)
+ endfunction()
+endif ()
+
+function(nng_sources)
+ foreach (f ${ARGN})
+ target_sources(${PROJECT_NAME}_testlib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${f})
+ endforeach ()
+ nng_sources_testlib(${ARGN})
+endfunction()
+
+function(nng_headers)
+ foreach (f ${ARGN})
+ target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/include/${f})
+ endforeach ()
+ nng_headers_testlib(${ARGN})
+endfunction()
+
+function(nng_defines)
+ target_compile_definitions(${PROJECT_NAME} PRIVATE ${ARGN})
+ nng_defines_testlib(${ARGN})
+endfunction()
+
+# nng_sources_if adds the sources unconditionally to the test library,
+# but conditionally to the production library. This allows us to get
+# full test coverage while allowing a minimized delivery.
+function(nng_sources_if COND)
+ if (${COND})
+ foreach (f ${ARGN})
+ target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${f})
+ endforeach ()
+ endif ()
+ nng_sources_testlib(${ARGN})
+endfunction()
+
+function(nng_headers_if COND)
+ if (COND)
+ foreach (f ${ARGN})
+ target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/include/${f})
+ endforeach ()
+ endif ()
+ nng_headers_testlib(${ARGN})
+endfunction()
+
+function(nng_defines_if COND)
+ if (${COND})
+ # Revisit this one
+ target_compile_definitions(${PROJECT_NAME} PUBLIC ${ARGN})
+ endif ()
+ nng_defines_testlib(${ARGN})
+endfunction()
+
+add_subdirectory(src)
+
+foreach (_PKG IN ITEMS ${NNG_PKGS})
+ find_package(${_PKG} REQUIRED)
endforeach ()
add_definitions(${NNG_DEFS})
if (NNG_TESTS)
- enable_testing()
- set(all_tests, "")
- add_subdirectory (tests)
- add_subdirectory (perf)
-endif()
+ add_subdirectory(tests)
+ add_subdirectory(perf)
+endif ()
# Build the tools
if (NNG_ENABLE_NNGCAT)
- add_subdirectory (tools/nngcat)
+ add_subdirectory(tools/nngcat)
endif ()
-add_subdirectory (docs/man)
-
-set (CPACK_PACKAGE_NAME ${PROJECT_NAME})
-set (CPACK_PACKAGE_VERSION ${NNG_PACKAGE_VERSION})
-set (CPACK_PACKAGE_CONTACT "nanomsg@freelists.org")
-set (CPACK_PACKAGE_VENDOR "nanomsg.org")
-set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "nanomsg next generation library")
-set (CPACK_SOURCE_GENERATOR "TBZ2;TGZ;ZIP")
-set (CPACK_SOURCE_IGNORE_FILES "/build/;/.git/;~$;${CPACK_SOURCE_IGNORE_FILES}")
-set (CPACK_SOURCE_PACKAGE_FILE_NAME
- "${PROJECT_NAME}-v${NNG_PACKAGE_VERSION}-src")
-set (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt)
-set (CPACK_PACKAGE_INSTALL_DIRECTORY "nng")
-set (CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-v${NNG_PACKAGE_VERSION}")
+add_subdirectory(docs/man)
+
+set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
+set(CPACK_PACKAGE_VERSION ${NNG_PACKAGE_VERSION})
+set(CPACK_PACKAGE_CONTACT "nanomsg@freelists.org")
+set(CPACK_PACKAGE_VENDOR "nanomsg.org")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "nanomsg next generation library")
+set(CPACK_SOURCE_GENERATOR "TBZ2;TGZ;ZIP")
+set(CPACK_SOURCE_IGNORE_FILES "/build/;/.git/;~$;${CPACK_SOURCE_IGNORE_FILES}")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME
+ "${PROJECT_NAME}-v${NNG_PACKAGE_VERSION}-src")
+set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt)
+set(CPACK_PACKAGE_INSTALL_DIRECTORY "nng")
+set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-v${NNG_PACKAGE_VERSION}")
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
-include (CPack)
+include(CPack)