aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt171
-rw-r--r--cmake/nng-config.cmake.in26
-rw-r--r--perf/CMakeLists.txt7
-rw-r--r--src/CMakeLists.txt96
-rw-r--r--src/compat/nanomsg/CMakeLists.txt4
-rw-r--r--src/protocol/bus0/CMakeLists.txt14
-rw-r--r--src/protocol/pair0/CMakeLists.txt14
-rw-r--r--src/protocol/pair1/CMakeLists.txt14
-rw-r--r--src/protocol/pipeline0/CMakeLists.txt26
-rw-r--r--src/protocol/pubsub0/CMakeLists.txt24
-rw-r--r--src/protocol/reqrep0/CMakeLists.txt30
-rw-r--r--src/protocol/survey0/CMakeLists.txt30
-rw-r--r--src/supplemental/base64/CMakeLists.txt6
-rw-r--r--src/supplemental/http/CMakeLists.txt30
-rw-r--r--src/supplemental/sha1/CMakeLists.txt6
-rw-r--r--src/supplemental/tls/CMakeLists.txt40
-rw-r--r--src/supplemental/util/CMakeLists.txt8
-rw-r--r--src/supplemental/websocket/CMakeLists.txt6
-rw-r--r--src/transport/inproc/CMakeLists.txt14
-rw-r--r--src/transport/ipc/CMakeLists.txt14
-rw-r--r--src/transport/tcp/CMakeLists.txt14
-rw-r--r--src/transport/tls/CMakeLists.txt15
-rw-r--r--src/transport/ws/CMakeLists.txt30
-rw-r--r--src/transport/zerotier/CMakeLists.txt21
-rw-r--r--tests/CMakeLists.txt8
-rw-r--r--tools/nngcat/CMakeLists.txt3
26 files changed, 359 insertions, 312 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf697a3a..15fe015d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,6 +46,11 @@ if (POLICY CMP0042)
cmake_policy (SET CMP0042 NEW)
endif ()
+if (POLICY CMP0028)
+ # Double colon targets are only alias or imports.
+ 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)
@@ -86,7 +91,13 @@ elseif (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
else ()
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()
+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}")
+string(REGEX REPLACE "[0-9]+.[0-9]+.([0-9]+).*" "\\1" NNG_VERSION_PATCH "${NNG_PACKAGE_VERSION}")
# User-defined options.
@@ -121,153 +132,18 @@ if (NOT WIN32)
mark_as_advanced(NNG_SETSTACKSIZE)
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()
-option (NNG_ENABLE_HTTP "Enable HTTP API" ON)
-if (NNG_ENABLE_HTTP)
- set(NNG_SUPP_HTTP ON)
-endif()
-mark_as_advanced(NNG_ENABLE_HTTP)
-
option (NNG_ENABLE_STATS "Enable statistics" ON)
if (NNG_ENABLE_STATS)
add_definitions(-DNNG_ENABLE_STATS)
endif()
mark_as_advanced(NNG_ENABLE_STATS)
-option (NNG_PROTO_BUS0 "Enable BUSv0 protocol." ON)
-if (NNG_PROTO_BUS0)
- add_definitions (-DNNG_HAVE_BUS0)
-endif ()
-mark_as_advanced(NNG_PROTO_BUS0)
-
-option (NNG_PROTO_PAIR0 "Enable PAIRv0 protocol." ON)
-if (NNG_PROTO_PAIR0)
- add_definitions (-DNNG_HAVE_PAIR0)
-endif ()
-mark_as_advanced(NNG_PROTO_PAIR0)
-
-option (NNG_PROTO_PAIR1 "Enable PAIRv1 protocol." ON)
-if (NNG_PROTO_PAIR1)
- add_definitions (-DNNG_HAVE_PAIR1)
-endif ()
-mark_as_advanced(NNG_PROTO_PAIR1)
-
-option (NNG_PROTO_REQ0 "Enable REQv0 protocol." ON)
-if (NNG_PROTO_REQ0)
- add_definitions (-DNNG_HAVE_REQ0)
-endif ()
-mark_as_advanced(NNG_PROTO_REQ0)
-
-option (NNG_PROTO_REP0 "Enable REPv0 protocol." ON)
-if (NNG_PROTO_REP0)
- add_definitions (-DNNG_HAVE_REP0)
-endif ()
-mark_as_advanced(NNG_PROTO_REP0)
-
-option (NNG_PROTO_PUB0 "Enable PUBv0 protocol." ON)
-if (NNG_PROTO_PUB0)
- add_definitions (-DNNG_HAVE_PUB0)
-endif ()
-mark_as_advanced(NNG_PROTO_PUB0)
-
-option (NNG_PROTO_SUB0 "Enable SUBv0 protocol." ON)
-if (NNG_PROTO_SUB0)
- add_definitions (-DNNG_HAVE_SUB0)
-endif ()
-mark_as_advanced(NNG_PROTO_SUB0)
-
-option (NNG_PROTO_PUSH0 "Enable PUSHv0 protocol." ON)
-if (NNG_PROTO_PUSH0)
- add_definitions (-DNNG_HAVE_PUSH0)
-endif ()
-mark_as_advanced(NNG_PROTO_PUSH0)
-
-option (NNG_PROTO_PULL0 "Enable PULLv0 protocol." ON)
-if (NNG_PROTO_PULL0)
- add_definitions (-DNNG_HAVE_PULL0)
-endif ()
-mark_as_advanced(NNG_PROTO_PULL0)
-
-option (NNG_PROTO_SURVEYOR0 "Enable SURVEYORv0 protocol." ON)
-if (NNG_PROTO_SURVEYOR0)
- add_definitions (-DNNG_HAVE_SURVEYOR0)
-endif ()
-mark_as_advanced(NNG_PROTO_SURVEYOR0)
-
-option (NNG_PROTO_RESPONDENT0 "Enable RESPONDENTv0 protocol." ON)
-if (NNG_PROTO_RESPONDENT0)
- add_definitions (-DNNG_HAVE_RESPONDENT0)
-endif ()
-mark_as_advanced(NNG_PROTO_RESPONDENT0)
-
-option (NNG_TRANSPORT_INPROC "Enable inproc transport." ON)
-if (NNG_TRANSPORT_INPROC)
- add_definitions (-DNNG_TRANSPORT_INPROC)
-endif ()
-mark_as_advanced(NNG_TRANSPORT_INPROC)
-
-option (NNG_TRANSPORT_IPC "Enable IPC transport." ON)
-if (NNG_TRANSPORT_IPC)
- add_definitions (-DNNG_TRANSPORT_IPC)
-endif ()
-mark_as_advanced(NNG_TRANSPORT_IPC)
-
-option (NNG_TRANSPORT_TCP "Enable TCP transport." ON)
-if (NNG_TRANSPORT_TCP)
- add_definitions (-DNNG_TRANSPORT_TCP)
-endif ()
-mark_as_advanced(NNG_TRANSPORT_TCP)
-
-CMAKE_DEPENDENT_OPTION(NNG_TRANSPORT_TLS "Enable TLS transport" ON
- "NNG_ENABLE_TLS" OFF)
-
-if (NNG_TRANSPORT_TLS)
- set(NNG_SUPP_TLS ON)
- add_definitions (-DNNG_TRANSPORT_TLS)
-endif()
-mark_as_advanced(NNG_TRANSPORT_TLS)
-
-option (NNG_TRANSPORT_WS "Enable WebSocket transport." ON)
-if (NNG_TRANSPORT_WS)
- add_definitions (-DNNG_TRANSPORT_WS)
- set(NNG_SUPP_WEBSOCKET ON)
-endif ()
-mark_as_advanced(NNG_TRANSPORT_WS)
-
-CMAKE_DEPENDENT_OPTION(NNG_TRANSPORT_WSS "Enable WSS transport" ON
- "NNG_ENABLE_TLS" OFF)
-if (NNG_TRANSPORT_WSS)
- add_definitions (-DNNG_TRANSPORT_WSS)
- set(NNG_SUPP_WEBSOCKET ON)
-endif ()
-mark_as_advanced(NNG_TRANSPORT_WSS)
-
-option (NNG_TRANSPORT_ZEROTIER "Enable ZeroTier transport (requires libzerotiercore)." OFF)
-if (NNG_TRANSPORT_ZEROTIER)
- find_package(zerotiercore REQUIRED)
- add_definitions (-DNNG_TRANSPORT_ZEROTIER)
-endif ()
-mark_as_advanced(NNG_TRANSPORT_ZEROTIER)
-
-
-# dependencies
-if (NNG_SUPP_WEBSOCKET)
- set(NNG_SUPP_HTTP ON)
- set(NNG_SUPP_BASE64 ON)
- set(NNG_SUPP_SHA1 ON)
-endif()
-
-# Extra defines.
-if (NNG_SUPP_TLS)
- add_definitions (-DNNG_SUPP_TLS)
-endif()
-
# Platform checks.
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
@@ -318,10 +194,6 @@ if (NOT WIN32 AND NOT CYGWIN)
endif()
endif()
-
-
-find_package (Threads REQUIRED)
-
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
add_definitions (-DNNG_PLATFORM_POSIX)
add_definitions (-DNNG_PLATFORM_LINUX)
@@ -393,7 +265,6 @@ else ()
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
- find_package (Threads REQUIRED)
add_definitions (-DPLATFORM_POSIX)
endif ()
@@ -415,7 +286,7 @@ macro (nng_check_lib LIB SYM DEF)
check_library_exists (${LIB} ${SYM} "" ${DEF})
if (${DEF})
add_definitions (-D${DEF}=1)
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} ${LIB})
+ list(APPEND NNG_LIBS ${LIB})
endif ()
endmacro (nng_check_lib)
@@ -428,9 +299,7 @@ endmacro (nng_check_struct_member)
if (WIN32)
# Windows is a special snowflake.
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} ws2_32)
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} mswsock)
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} advapi32)
+ 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)
if (NOT NNG_HAVE_CONDVAR OR NOT NNG_HAVE_SNPRINTF)
@@ -449,6 +318,8 @@ else ()
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)
@@ -494,6 +365,11 @@ endif()
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, "")
@@ -501,7 +377,6 @@ if (NNG_TESTS)
add_subdirectory (perf)
endif()
-
# Build the tools
if (NNG_ENABLE_NNGCAT)
@@ -518,10 +393,10 @@ 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}-${NNG_PACKAGE_VERSION}-src")
+ "${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}-${NNG_PACKAGE_VERSION}")
+set (CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-v${NNG_PACKAGE_VERSION}")
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
include (CPack)
diff --git a/cmake/nng-config.cmake.in b/cmake/nng-config.cmake.in
new file mode 100644
index 00000000..c3ec7f25
--- /dev/null
+++ b/cmake/nng-config.cmake.in
@@ -0,0 +1,26 @@
+# Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+#
+# This software is supplied under the terms of the MIT License, a
+# copy of which should be located in the distribution where this
+# file was obtained (LICENSE.txt). A copy of the license may also be
+# found online at https://opensource.org/licenses/MIT.
+
+
+@PACKAGE_INIT@
+
+set(NNG_VERSION_MAJOR "@NNG_VERSION_MAJOR@")
+set(NNG_VERSION_MINOR "@NNG_VERSION_MINOR@")
+set(NNG_VERSION_PATCH "@NNG_VERSION_PATCH@")
+
+set_and_check(NNG_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIRS@")
+
+include("${CMAKE_CURRENT_LIST_DIR}/nng-targets.cmake")
+
+# Make sure we find packages for our dependencies
+foreach(_PKG IN ITEMS @NNG_PKGS@)
+ find_package(${_PKG} REQUIRED)
+endforeach ()
+
+set(NNG_LIBRARY nng::nng)
+
+check_required_components(@PROJECT_NAME@)
diff --git a/perf/CMakeLists.txt b/perf/CMakeLists.txt
index 83e08e88..64bc3b34 100644
--- a/perf/CMakeLists.txt
+++ b/perf/CMakeLists.txt
@@ -4,6 +4,7 @@
# Copyright (c) 2015-2016 Jack R. Dunaway. All rights reserved.
# Copyright 2016 Garrett D'Amore <garrett@damore.org>
# Copyright 2016 Franklin "Snaipe" Mathieu <franklinmathieu@gmail.com>
+# Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"),
@@ -24,7 +25,7 @@
# IN THE SOFTWARE.
#
-# Build unit tests.
+# Build performance tests.
include_directories(AFTER SYSTEM ${PROJECT_SOURCE_DIR}/src)
@@ -32,11 +33,7 @@ if (NNG_TESTS)
macro (add_nng_perf NAME)
add_executable (${NAME} perf.c)
target_link_libraries (${NAME} ${PROJECT_NAME})
- target_link_libraries (${NAME} ${NNG_REQUIRED_LIBRARIES})
target_compile_definitions(${NAME} PUBLIC)
- if (CMAKE_THREAD_LIBS_INIT)
- target_link_libraries (${NAME} "${CMAKE_THREAD_LIBS_INIT}")
- endif()
endmacro (add_nng_perf)
add_nng_perf(remote_lat)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d58f0b2e..428fb56d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,7 +24,8 @@
# IN THE SOFTWARE.
#
-set (NNG_SOURCES
+set (NNG_HDRS nng.h)
+set (NNG_SRCS
nng.c
nng.h
@@ -87,7 +88,10 @@ set (NNG_SOURCES
)
if (NNG_PLATFORM_POSIX)
- set (NNG_SOURCES ${NNG_SOURCES}
+ find_package (Threads REQUIRED)
+ set(NNG_LIBS Threads::Threads)
+
+ set (NNG_SRCS ${NNG_SRCS}
platform/posix/posix_impl.h
platform/posix/posix_ipc.h
platform/posix/posix_config.h
@@ -114,26 +118,26 @@ if (NNG_PLATFORM_POSIX)
)
if (NNG_HAVE_PORT_CREATE)
- set (NNG_SOURCES ${NNG_SOURCES}
+ set (NNG_SRCS ${NNG_SRCS}
platform/posix/posix_pollq_port.c
)
elseif (NNG_HAVE_KQUEUE)
- set (NNG_SOURCES ${NNG_SOURCES}
+ set (NNG_SRCS ${NNG_SRCS}
platform/posix/posix_pollq_kqueue.c
)
elseif (NNG_HAVE_EPOLL AND NNG_HAVE_EVENTFD)
- set (NNG_SOURCES ${NNG_SOURCES}
+ set (NNG_SRCS ${NNG_SRCS}
platform/posix/posix_pollq_epoll.c
)
else()
- set (NNG_SOURCES ${NNG_SOURCES}
+ set (NNG_SRCS ${NNG_SRCS}
platform/posix/posix_pollq_poll.c
)
endif()
endif()
if (NNG_PLATFORM_WINDOWS)
- set (NNG_SOURCES ${NNG_SOURCES}
+ set (NNG_SRCS ${NNG_SRCS}
platform/windows/win_impl.h
platform/windows/win_ipc.h
platform/windows/win_tcp.h
@@ -158,17 +162,9 @@ if (NNG_PLATFORM_WINDOWS)
)
endif()
-set (NNG_HEADERS nng.h)
add_subdirectory(compat/nanomsg)
-add_subdirectory(supplemental/base64)
-add_subdirectory(supplemental/http)
-add_subdirectory(supplemental/sha1)
-add_subdirectory(supplemental/tls)
-add_subdirectory(supplemental/util)
-add_subdirectory(supplemental/websocket)
-
add_subdirectory(protocol/bus0)
add_subdirectory(protocol/pair0)
add_subdirectory(protocol/pair1)
@@ -184,14 +180,24 @@ add_subdirectory(transport/tls)
add_subdirectory(transport/ws)
add_subdirectory(transport/zerotier)
-include_directories(AFTER SYSTEM ${PROJECT_SOURCE_DIR}/src
- ${NNG_REQUIRED_INCLUDES})
+add_subdirectory(supplemental/base64)
+add_subdirectory(supplemental/http)
+add_subdirectory(supplemental/sha1)
+add_subdirectory(supplemental/tls)
+add_subdirectory(supplemental/util)
+add_subdirectory(supplemental/websocket)
+
+include_directories(AFTER SYSTEM ${PROJECT_SOURCE_DIR}/src ${NNG_INCS})
+
+add_definitions(${NNG_DEFS})
-add_definitions(${NNG_DEFINES})
+foreach(_PKG IN ITEMS ${NNG_PKGS})
+ find_package(${_PKG} REQUIRED)
+endforeach ()
# Provide same folder structure in IDE as on disk
# XXX: Consider replacing this with source_group(TREE...)
-foreach (f ${NNG_SOURCES})
+foreach (f ${NNG_SRCS})
# Get the path of the file relative to source directory
if (IS_ABSOLUTE "${f}")
file (RELATIVE_PATH f ${CMAKE_CURRENT_SOURCE_DIR} ${f})
@@ -207,8 +213,9 @@ foreach (f ${NNG_SOURCES})
source_group ("${SRC_GROUP}" FILES ${f})
endforeach ()
+
# Library
-add_library (${PROJECT_NAME} ${NNG_SOURCES})
+add_library (${PROJECT_NAME} ${NNG_SRCS})
# When building shared libraries we prefer to suppress default symbol
# visibility, so that only the symbols that should be exposed in the
@@ -237,33 +244,62 @@ set_target_properties (${PROJECT_NAME}
set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}
PROPERTIES FRAMEWORK OFF)
-target_link_libraries (${PROJECT_NAME} PRIVATE ${NNG_REQUIRED_LIBRARIES})
-target_link_libraries (${PROJECT_NAME} PRIVATE Threads::Threads)
+target_link_libraries (${PROJECT_NAME} PRIVATE ${NNG_LIBS})
target_include_directories (${PROJECT_NAME} INTERFACE $<INSTALL_INTERFACE:include>)
install (TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}-target
- FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT tools
+ FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Library
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Library
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Library
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Tools
)
install (EXPORT ${PROJECT_NAME}-target
- FILE ${PROJECT_NAME}-config.cmake
+ FILE ${PROJECT_NAME}-targets.cmake
NAMESPACE nng::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+ COMPONENT Library
)
# Install the header files. It would be much better if we could use
# the PUBLIC_HEADER facility, but it stupidly flattens the directories.
-foreach (f ${NNG_HEADERS})
+foreach (f ${NNG_HDRS})
get_filename_component(d ${f} DIRECTORY)
install(FILES ${f}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/nng/${d}
- COMPONENT headers)
+ COMPONENT Headers)
endforeach()
# Promote settings to parent
-set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} PARENT_SCOPE)
+set(NNG_LIBS ${NNG_LIBS} PARENT_SCOPE)
+set(NNG_PKGS ${NNG_PKGS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} PARENT_SCOPE)
+
+# These are promoted for testing
+set(NNG_SUPP_BASE64 ${NNG_SUPP_BASE64} PARENT_SCOPE)
+set(NNG_SUPP_HTTP ${NNG_SUPP_HTTP} PARENT_SCOPE)
+set(NNG_SUPP_SHA1 ${NNG_SUPP_SHA1} PARENT_SCOPE)
+set(NNG_SUPP_TLS ${NNG_SUPP_TLS} PARENT_SCOPE)
+set(NNG_SUPP_WEBSOCKET ${NNG_SUPP_WEBSOCKET} PARENT_SCOPE)
+
+# Configure files
+
+set(INCLUDE_INSTALL_DIRS "${CMAKE_INSTALL_INCLUDEDIR}/nng")
+
+include(CMakePackageConfigHelpers)
+set(version_config "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake")
+set(project_config "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake")
+
+write_basic_package_version_file("${version_config}"
+ VERSION ${NNG_PACKAGE_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in "${project_config}"
+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
+ PATH_VARS INCLUDE_INSTALL_DIRS)
+
+install(FILES "${project_config}" "${version_config}"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
+ COMPONENT Library)
diff --git a/src/compat/nanomsg/CMakeLists.txt b/src/compat/nanomsg/CMakeLists.txt
index 9bac8ede..cdd6fb01 100644
--- a/src/compat/nanomsg/CMakeLists.txt
+++ b/src/compat/nanomsg/CMakeLists.txt
@@ -22,5 +22,5 @@ set(COMPAT_HEADERS compat/nanomsg/nn.h
compat/nanomsg/ws.h
)
-set(NNG_SOURCES ${NNG_SOURCES} ${COMPAT_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${COMPAT_HEADERS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${COMPAT_SOURCES} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${COMPAT_HEADERS} PARENT_SCOPE)
diff --git a/src/protocol/bus0/CMakeLists.txt b/src/protocol/bus0/CMakeLists.txt
index 06c44111..73acdf11 100644
--- a/src/protocol/bus0/CMakeLists.txt
+++ b/src/protocol/bus0/CMakeLists.txt
@@ -9,11 +9,15 @@
#
# Bus protocol
+option (NNG_PROTO_BUS0 "Enable BUSv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_BUS0)
if (NNG_PROTO_BUS0)
- set(BUS0_SOURCES protocol/bus0/bus.c protocol/bus0/bus.h)
- set(BUS0_HEADERS protocol/bus0/bus.h)
-endif()
+ set(_DEFS -DNNG_HAVE_BUS0)
+ set(_SRCS protocol/bus0/bus.c protocol/bus0/bus.h)
+ set(_HDRS protocol/bus0/bus.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${BUS0_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${BUS0_HEADERS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+endif()
diff --git a/src/protocol/pair0/CMakeLists.txt b/src/protocol/pair0/CMakeLists.txt
index 2ba8d374..c453b07f 100644
--- a/src/protocol/pair0/CMakeLists.txt
+++ b/src/protocol/pair0/CMakeLists.txt
@@ -9,11 +9,15 @@
#
# PAIRv0 protocol
+option (NNG_PROTO_PAIR0 "Enable PAIRv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_PAIR0)
if (NNG_PROTO_PAIR0)
- set(PAIR0_SOURCES protocol/pair0/pair.c protocol/pair0/pair.h)
- set(PAIR0_HEADERS protocol/pair0/pair.h)
-endif()
+ set(_DEFS -DNNG_HAVE_PAIR0)
+ set(_SRCS protocol/pair0/pair.c protocol/pair0/pair.h)
+ set(_HDRS protocol/pair0/pair.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${PAIR0_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${PAIR0_HEADERS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+endif()
diff --git a/src/protocol/pair1/CMakeLists.txt b/src/protocol/pair1/CMakeLists.txt
index 9c0ca09f..5c8813bf 100644
--- a/src/protocol/pair1/CMakeLists.txt
+++ b/src/protocol/pair1/CMakeLists.txt
@@ -9,11 +9,15 @@
#
# PAIRv1 protocol
+option (NNG_PROTO_PAIR1 "Enable PAIRv1 protocol." ON)
+mark_as_advanced(NNG_PROTO_PAIR1)
if (NNG_PROTO_PAIR1)
- set(PAIR1_SOURCES protocol/pair1/pair.c protocol/pair1/pair.h)
- set(PAIR1_HEADERS protocol/pair1/pair.h)
-endif()
+ set(_DEFS -DNNG_HAVE_PAIR1)
+ set(_SRCS protocol/pair1/pair.c protocol/pair1/pair.h)
+ set(_HDRS protocol/pair1/pair.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${PAIR1_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${PAIR1_HEADERS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+endif()
diff --git a/src/protocol/pipeline0/CMakeLists.txt b/src/protocol/pipeline0/CMakeLists.txt
index 669fb9dc..675cb961 100644
--- a/src/protocol/pipeline0/CMakeLists.txt
+++ b/src/protocol/pipeline0/CMakeLists.txt
@@ -8,17 +8,29 @@
# found online at https://opensource.org/licenses/MIT.
#
-# Pub/Sub protocol
+# Pipeline protocol
+option (NNG_PROTO_PUSH0 "Enable PUSHv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_PUSH0)
+
+option (NNG_PROTO_PULL0 "Enable PULLv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_PULL0)
+
+set(_DEFS)
+set(_HDRS)
+set(_SRCS)
if (NNG_PROTO_PUSH0)
- set(PUSH0_SOURCES protocol/pipeline0/push.c protocol/pipeline0/push.h)
- set(PUSH0_HEADERS protocol/pipeline0/push.h)
+ list(APPEND _SRCS protocol/pipeline0/push.c protocol/pipeline0/push.h)
+ list(APPEND _HDRS protocol/pipeline0/push.h)
+ list(APPEND _DEFS -DNNG_HAVE_PUSH0)
endif()
if (NNG_PROTO_PULL0)
- set(PULL0_SOURCES protocol/pipeline0/pull.c protocol/pipeline0/pull.h)
- set(PULL0_HEADERS protocol/pipeline0/pull.h)
+ list(APPEND _SRCS protocol/pipeline0/pull.c protocol/pipeline0/pull.h)
+ list(APPEND _HDRS protocol/pipeline0/pull.h)
+ list(APPEND _DEFS -DNNG_HAVE_PULL0)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${PUSH0_SOURCES} ${PULL0_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${PUSH0_HEADERS} ${PULL0_HEADERS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
diff --git a/src/protocol/pubsub0/CMakeLists.txt b/src/protocol/pubsub0/CMakeLists.txt
index 49ec8913..29f64049 100644
--- a/src/protocol/pubsub0/CMakeLists.txt
+++ b/src/protocol/pubsub0/CMakeLists.txt
@@ -9,16 +9,28 @@
#
# Pub/Sub protocol
+option (NNG_PROTO_PUB0 "Enable PUBv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_PUB0)
+
+option (NNG_PROTO_SUB0 "Enable SUBv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_SUB0)
+
+set(_DEFS)
+set(_SRCS)
+set(_HDRS)
if (NNG_PROTO_PUB0)
- set(PUB0_SOURCES protocol/pubsub0/pub.c protocol/pubsub0/pub.h)
- set(PUB0_HEADERS protocol/pubsub0/pub.h)
+ list(APPEND _DEFS -DNNG_HAVE_PUB0)
+ list(APPEND _SRCS protocol/pubsub0/pub.c protocol/pubsub0/pub.h)
+ list(APPEND _HDRS protocol/pubsub0/pub.h)
endif()
if (NNG_PROTO_SUB0)
- set(SUB0_SOURCES protocol/pubsub0/sub.c protocol/pubsub0/sub.h)
- set(SUB0_HEADERS protocol/pubsub0/sub.h)
+ list(APPEND _DEFS -DNNG_HAVE_SUB0)
+ list(APPEND _SRCS protocol/pubsub0/sub.c protocol/pubsub0/sub.h)
+ list(APPEND _HDRS protocol/pubsub0/sub.h)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${PUB0_SOURCES} ${SUB0_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${PUB0_HEADERS} ${SUB0_HEADERS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
diff --git a/src/protocol/reqrep0/CMakeLists.txt b/src/protocol/reqrep0/CMakeLists.txt
index 071c28f1..70c075c1 100644
--- a/src/protocol/reqrep0/CMakeLists.txt
+++ b/src/protocol/reqrep0/CMakeLists.txt
@@ -9,18 +9,32 @@
#
# Req/Rep protocol
+option (NNG_PROTO_REQ0 "Enable REQv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_REQ0)
+
+option (NNG_PROTO_REP0 "Enable REPv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_REP0)
+
+set(_DEFS)
+set(_SRCS)
+set(_HDRS)
if (NNG_PROTO_REQ0)
- set(REQ0_SOURCES protocol/reqrep0/req.c protocol/reqrep0/xreq.c
- protocol/reqrep0/req.h)
- set(REQ0_HEADERS protocol/reqrep0/req.h)
+ list(APPEND _DEFS -DNNG_HAVE_REQ0)
+ list(APPEND _SRCS
+ protocol/reqrep0/req.c protocol/reqrep0/xreq.c
+ protocol/reqrep0/req.h)
+ list(APPEND _HDRS protocol/reqrep0/req.h)
endif()
if (NNG_PROTO_REP0)
- set(REP0_SOURCES protocol/reqrep0/rep.c protocol/reqrep0/xrep.c
- protocol/reqrep0/rep.h)
- set(REP0_HEADERS protocol/reqrep0/rep.h)
+ list(APPEND _DEFS -DNNG_HAVE_REP0)
+ list(APPEND _SRCS
+ protocol/reqrep0/rep.c protocol/reqrep0/xrep.c
+ protocol/reqrep0/rep.h)
+ list(APPEND _HDRS protocol/reqrep0/rep.h)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${REQ0_SOURCES} ${REP0_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${REQ0_HEADERS} ${REP0_HEADERS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
diff --git a/src/protocol/survey0/CMakeLists.txt b/src/protocol/survey0/CMakeLists.txt
index 0a82463c..b6104a54 100644
--- a/src/protocol/survey0/CMakeLists.txt
+++ b/src/protocol/survey0/CMakeLists.txt
@@ -9,18 +9,32 @@
#
# Surveyor/Respondent protocol
+option (NNG_PROTO_RESPONDENT0 "Enable RESPONDENTv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_RESPONDENT0)
+
+option (NNG_PROTO_SURVEYOR0 "Enable SURVEYORv0 protocol." ON)
+mark_as_advanced(NNG_PROTO_SURVEYOR0)
+
+set(_DEFS)
+set(_HDRS)
+set(_SRCS)
if (NNG_PROTO_SURVEYOR0)
- set(SURV0_SOURCES protocol/survey0/survey.c protocol/survey0/xsurvey.c
- protocol/survey0/survey.h)
- set(SURV0_HEADERS protocol/survey0/survey.h)
+ list(APPEND _DEFS -DNNG_HAVE_SURVEYOR0)
+ list(APPEND _SRCS
+ protocol/survey0/survey.c protocol/survey0/xsurvey.c
+ protocol/survey0/survey.h)
+ list(APPEND _HDRS protocol/survey0/survey.h)
endif()
if (NNG_PROTO_RESPONDENT0)
- set(RESP0_SOURCES protocol/survey0/respond.c protocol/survey0/xrespond.c
- protocol/survey0/respond.h)
- set(RESP0_HEADERS protocol/survey0/respond.h)
+ list(APPEND _DEFS -DNNG_HAVE_RESPONDENT0)
+ list(APPEND _SRCS
+ protocol/survey0/respond.c protocol/survey0/xrespond.c
+ protocol/survey0/respond.h)
+ list(APPEND _HDRS protocol/survey0/respond.h)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${SURV0_SOURCES} ${RESP0_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${SURV0_HEADERS} ${RESP0_HEADERS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
diff --git a/src/supplemental/base64/CMakeLists.txt b/src/supplemental/base64/CMakeLists.txt
index 297a5478..83740c83 100644
--- a/src/supplemental/base64/CMakeLists.txt
+++ b/src/supplemental/base64/CMakeLists.txt
@@ -1,6 +1,6 @@
#
# Copyright 2017 Capitar IT Group BV <info@capitar.com>
-# Copyright 2017 Staysail Systems, Inc. <info@staysail.tech>
+# Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
#
# This software is supplied under the terms of the MIT License, a
# copy of which should be located in the distribution where this
@@ -9,8 +9,8 @@
#
if (NNG_SUPP_BASE64)
- set(BASE64_SOURCES
+ set(_SRCS
supplemental/base64/base64.c
supplemental/base64/base64.h)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${BASE64_SOURCES} PARENT_SCOPE)
diff --git a/src/supplemental/http/CMakeLists.txt b/src/supplemental/http/CMakeLists.txt
index ed7d5ae2..0fe9e7c5 100644
--- a/src/supplemental/http/CMakeLists.txt
+++ b/src/supplemental/http/CMakeLists.txt
@@ -8,28 +8,26 @@
# found online at https://opensource.org/licenses/MIT.
#
+option (NNG_ENABLE_HTTP "Enable HTTP API" ON)
+if (NNG_ENABLE_HTTP)
+ set(NNG_SUPP_HTTP ON)
+endif()
+mark_as_advanced(NNG_ENABLE_HTTP)
+
+set(_HDRS supplemental/http/http.h)
+set(_SRCS ${_HDRS} supplemental/http/http_public.c supplemental/http/http_api.h)
+
if (NNG_SUPP_HTTP)
- set(HTTP_DEFINES -DNNG_SUPP_HTTP)
- set(HTTP_HEADERS
- supplemental/http/http.h)
- set(HTTP_SOURCES
- supplemental/http/http.h
- supplemental/http/http_api.h
+ set(_DEFS -DNNG_SUPP_HTTP)
+ list(APPEND _SRCS
supplemental/http/http_client.c
supplemental/http/http_chunk.c
supplemental/http/http_conn.c
supplemental/http/http_msg.c
supplemental/http/http_public.c
supplemental/http/http_server.c)
-else()
- set(HTTP_SOURCES
- supplemental/http/http.h
- supplemental/http/http_api.h
- supplemental/http/http_public.c)
- set(HTTP_HEADERS
- supplemental/http/http.h)
endif()
-set(NNG_DEFINES ${NNG_DEFINES} ${HTTP_DEFINES} PARENT_SCOPE)
-set(NNG_SOURCES ${NNG_SOURCES} ${HTTP_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${HTTP_HEADERS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
diff --git a/src/supplemental/sha1/CMakeLists.txt b/src/supplemental/sha1/CMakeLists.txt
index 9600a268..370dc7c2 100644
--- a/src/supplemental/sha1/CMakeLists.txt
+++ b/src/supplemental/sha1/CMakeLists.txt
@@ -1,6 +1,6 @@
#
# Copyright 2017 Capitar IT Group BV <info@capitar.com>
-# Copyright 2017 Staysail Systems, Inc. <info@staysail.tech>
+# Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
#
# This software is supplied under the terms of the MIT License, a
# copy of which should be located in the distribution where this
@@ -9,8 +9,8 @@
#
if (NNG_SUPP_SHA1)
- set(SHA1_SOURCES
+ set(_SRCS
supplemental/sha1/sha1.c
supplemental/sha1/sha1.h)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${SHA1_SOURCES} PARENT_SCOPE)
diff --git a/src/supplemental/tls/CMakeLists.txt b/src/supplemental/tls/CMakeLists.txt
index a16745bd..3d1e6d02 100644
--- a/src/supplemental/tls/CMakeLists.txt
+++ b/src/supplemental/tls/CMakeLists.txt
@@ -10,36 +10,32 @@
if (NNG_SUPP_TLS)
set(NNG_SUPP_TLS_MBEDTLS ON)
- set(TLS_DEFINES -DNNG_SUPP_TLS)
+ set(_DEFS -DNNG_SUPP_TLS)
endif()
-set(TLS_SOURCES supplemental/tls/tls.h)
+
+set(_SRCS supplemental/tls/tls.h)
+set(_HDRS supplemental/tls/tls.h)
# For now we only support the ARM mbedTLS library.
if (NNG_SUPP_TLS_MBEDTLS)
Find_Package(mbedTLS REQUIRED)
+ set(_LIBS ${MBEDTLS_LIBRARIES})
+ set(_INCS ${MBEDTLS_INCLUDE_DIR})
+ list(APPEND _SRCS supplemental/tls/mbedtls/tls.c)
- # If it isn't already in the link list, add the TLS libraries there.
- # or something, so we take care not to duplicate it).
- list(FIND NNG_REQUIRED_LIBRARIES ${MBEDTLS_TLS_LIBRARY} _index)
- if (_index EQUAL -1)
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} ${MBEDTLS_LIBRARIES})
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} PARENT_SCOPE)
- endif()
-
- # Likewise for the include search path.
- list(FIND NNG_REQUIRED_INCLUDES ${MBEDTLS_INCLUDE_DIR} _index)
- if (_index EQUAL -1)
- set(NNG_REQUIRED_INCLUDES ${NNG_REQUIRED_INCLUDES} ${MBEDTLS_INCLUDE_DIR})
- set(NNG_REQUIRED_INCLUDES ${NNG_REQUIRED_INCLUDES} PARENT_SCOPE)
- endif()
- set(TLS_SOURCES ${TLS_SOURCES} supplemental/tls/mbedtls/tls.c)
else()
- set(TLS_SOURCES ${TLS_SOURCES} supplemental/tls/none/tls.c)
+ list(APPEND _SRCS supplemental/tls/none/tls.c)
endif()
-set(TLS_HEADERS supplemental/tls/tls.h)
+list(APPEND NNG_DEFS ${_DEFS})
+list(APPEND NNG_SRCS ${_SRCS})
+list(APPEND NNG_HDRS ${_HDRS})
+list(APPEND NNG_LIBS ${_LIBS})
+list(APPEND NNG_INCS ${_INCS})
-set(NNG_DEFINES ${NNG_DEFINES} ${TLS_DEFINES} PARENT_SCOPE)
-set(NNG_SOURCES ${NNG_SOURCES} ${TLS_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${TLS_HEADERS} PARENT_SCOPE)
+set(NNG_DEFS ${NNG_DEFS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} PARENT_SCOPE)
+set(NNG_LIBS ${NNG_LIBS} PARENT_SCOPE)
+set(NNG_INCS ${NNG_INCS} PARENT_SCOPE)
diff --git a/src/supplemental/util/CMakeLists.txt b/src/supplemental/util/CMakeLists.txt
index f94e2b45..c61d8a09 100644
--- a/src/supplemental/util/CMakeLists.txt
+++ b/src/supplemental/util/CMakeLists.txt
@@ -8,8 +8,8 @@
# found online at https://opensource.org/licenses/MIT.
#
-set(SUPP_UTIL_SOURCES supplemental/util/options.c supplemental/util/platform.c)
-set(SUPP_UTIL_HEADERS supplemental/util/options.h supplemental/util/platform.h)
+set(_SRCS supplemental/util/options.c supplemental/util/platform.c)
+set(_HDRS supplemental/util/options.h supplemental/util/platform.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${SUPP_UTIL_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${SUPP_UTIL_HEADERS} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
diff --git a/src/supplemental/websocket/CMakeLists.txt b/src/supplemental/websocket/CMakeLists.txt
index 5ddd6cb1..22ee955d 100644
--- a/src/supplemental/websocket/CMakeLists.txt
+++ b/src/supplemental/websocket/CMakeLists.txt
@@ -1,6 +1,6 @@
#
# Copyright 2017 Capitar IT Group BV <info@capitar.com>
-# Copyright 2017 Staysail Systems, Inc. <info@staysail.tech>
+# Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
#
# This software is supplied under the terms of the MIT License, a
# copy of which should be located in the distribution where this
@@ -9,8 +9,8 @@
#
if (NNG_SUPP_WEBSOCKET)
- set(WEBSOCKET_SOURCES
+ set(_SRCS
supplemental/websocket/websocket.c
supplemental/websocket/websocket.h)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${WEBSOCKET_SOURCES} PARENT_SCOPE)
+set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
diff --git a/src/transport/inproc/CMakeLists.txt b/src/transport/inproc/CMakeLists.txt
index 7c016bce..79264253 100644
--- a/src/transport/inproc/CMakeLists.txt
+++ b/src/transport/inproc/CMakeLists.txt
@@ -9,11 +9,15 @@
#
# inproc protocol
+option (NNG_TRANSPORT_INPROC "Enable inproc transport." ON)
+mark_as_advanced(NNG_TRANSPORT_INPROC)
if (NNG_TRANSPORT_INPROC)
- set(INPROC_SOURCES transport/inproc/inproc.c transport/inproc/inproc.h)
- set(INPROC_HEADERS transport/inproc/inproc.h)
-endif()
+ set(_SRCS transport/inproc/inproc.c transport/inproc/inproc.h)
+ set(_HDRS transport/inproc/inproc.h)
+ set(_DEFS -DNNG_TRANSPORT_INPROC)
-set(NNG_SOURCES ${NNG_SOURCES} ${INPROC_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${INPROC_HEADERS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+endif()
diff --git a/src/transport/ipc/CMakeLists.txt b/src/transport/ipc/CMakeLists.txt
index fbae69ef..885b62b6 100644
--- a/src/transport/ipc/CMakeLists.txt
+++ b/src/transport/ipc/CMakeLists.txt
@@ -9,11 +9,15 @@
#
# ipc protocol
+option (NNG_TRANSPORT_IPC "Enable IPC transport." ON)
+mark_as_advanced(NNG_TRANSPORT_IPC)
if (NNG_TRANSPORT_IPC)
- set(IPC_SOURCES transport/ipc/ipc.c transport/ipc/ipc.h)
- set(IPC_HEADERS transport/ipc/ipc.h)
-endif()
+ set(_DEFS -DNNG_TRANSPORT_IPC)
+ set(_SRCS transport/ipc/ipc.c transport/ipc/ipc.h)
+ set(_HDRS transport/ipc/ipc.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${IPC_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${IPC_HEADERS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+endif()
diff --git a/src/transport/tcp/CMakeLists.txt b/src/transport/tcp/CMakeLists.txt
index 27b62e10..9390c048 100644
--- a/src/transport/tcp/CMakeLists.txt
+++ b/src/transport/tcp/CMakeLists.txt
@@ -9,11 +9,15 @@
#
# TCP protocol
+option (NNG_TRANSPORT_TCP "Enable TCP transport." ON)
+mark_as_advanced(NNG_TRANSPORT_TCP)
if (NNG_TRANSPORT_TCP)
- set(TCP_SOURCES transport/tcp/tcp.c transport/tcp/tcp.h)
- set(TCP_HEADERS transport/tcp/tcp.h)
-endif()
+ set(_DEFS -DNNG_TRANSPORT_TCP)
+ set(_SRCS transport/tcp/tcp.c transport/tcp/tcp.h)
+ set(_HDRS transport/tcp/tcp.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${TCP_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${TCP_HEADERS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+endif()
diff --git a/src/transport/tls/CMakeLists.txt b/src/transport/tls/CMakeLists.txt
index d55a9e92..80bc60af 100644
--- a/src/transport/tls/CMakeLists.txt
+++ b/src/transport/tls/CMakeLists.txt
@@ -9,11 +9,16 @@
#
# TLS transport
+CMAKE_DEPENDENT_OPTION(NNG_TRANSPORT_TLS "Enable TLS transport" ON
+ "NNG_ENABLE_TLS" OFF)
+mark_as_advanced(NNG_TRANSPORT_TLS)
if (NNG_TRANSPORT_TLS)
- set(TLS_SOURCES transport/tls/tls.c transport/tls/tls.h)
- set(TLS_HEADERS transport/tls/tls.h)
-endif()
+ set(_DEFS -DNNG_TRANSPORT_TLS)
+ set(_SRCS transport/tls/tls.c transport/tls/tls.h)
+ set(_HDRS transport/tls/tls.h)
-set(NNG_SOURCES ${NNG_SOURCES} ${TLS_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${TLS_HEADERS} PARENT_SCOPE)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+endif()
diff --git a/src/transport/ws/CMakeLists.txt b/src/transport/ws/CMakeLists.txt
index 71e2aefa..8104d83c 100644
--- a/src/transport/ws/CMakeLists.txt
+++ b/src/transport/ws/CMakeLists.txt
@@ -9,11 +9,33 @@
#
# WebSocket transport
+option (NNG_TRANSPORT_WS "Enable WebSocket transport." ON)
+mark_as_advanced(NNG_TRANSPORT_WS)
+
+CMAKE_DEPENDENT_OPTION(NNG_TRANSPORT_WSS "Enable WSS transport" ON
+ "NNG_ENABLE_TLS" OFF)
+mark_as_advanced(NNG_TRANSPORT_WSS)
+
+set(_DEFS)
if (NNG_TRANSPORT_WS)
- set(WS_SOURCES transport/ws/websocket.c transport/ws/websocket.h)
- set(WS_HEADERS transport/ws/websocket.h)
+ list(APPEND _DEFS -DNNG_TRANSPORT_WS)
+endif()
+if (NNG_TRANSPORT_WSS)
+ list(APPEND _DEFS -DNNG_TRANSPORT_WSS)
endif()
-set(NNG_SOURCES ${NNG_SOURCES} ${WS_SOURCES} PARENT_SCOPE)
-set(NNG_HEADERS ${NNG_HEADERS} ${WS_HEADERS} PARENT_SCOPE)
+if (NNG_TRANSPORT_WS OR NNG_TRANSPORT_WSS)
+
+ # Make sure things we *MUST* have are enabled.
+ set(NNG_SUPP_WEBSOCKET ON PARENT_SCOPE)
+ set(NNG_SUPP_HTTP ON PARENT_SCOPE)
+ set(NNG_SUPP_BASE64 ON PARENT_SCOPE)
+ set(NNG_SUPP_SHA1 ON PARENT_SCOPE)
+
+ set(_SRCS transport/ws/websocket.c transport/ws/websocket.h)
+ set(_HDRS transport/ws/websocket.h)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
+endif()
diff --git a/src/transport/zerotier/CMakeLists.txt b/src/transport/zerotier/CMakeLists.txt
index d8dbb566..686a0a8a 100644
--- a/src/transport/zerotier/CMakeLists.txt
+++ b/src/transport/zerotier/CMakeLists.txt
@@ -10,6 +10,9 @@
# ZeroTier protocol
+option (NNG_TRANSPORT_ZEROTIER "Enable ZeroTier transport (requires libzerotiercore)." OFF)
+mark_as_advanced(NNG_TRANSPORT_ZEROTIER)
+
if (NNG_TRANSPORT_ZEROTIER)
# The zerotiercore project will have been found at the top level
@@ -27,12 +30,18 @@ if (NNG_TRANSPORT_ZEROTIER)
Consult a lawyer and the license files for details.
************************************************************")
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} zerotiercore::zerotiercore)
- set(NNG_REQUIRED_LIBRARIES ${NNG_REQUIRED_LIBRARIES} PARENT_SCOPE)
+ find_package(zerotiercore REQUIRED)
+ set(_PKGS zerotiercore)
+ set(_LIBS zerotiercore::zerotiercore)
+ set(_DEFS -DNNG_TRANSPORT_ZEROTIER)
+
+ set(_SRCS transport/zerotier/zerotier.c transport/zerotier/zerotier.h)
+ set(_HDRS transport/zerotier/zerotier.h)
- set(ZT_SOURCES transport/zerotier/zerotier.c transport/zerotier/zerotier.h)
- set(ZT_HEADERS transport/zerotier/zerotier.h)
+ set(NNG_DEFS ${NNG_DEFS} ${_DEFS} PARENT_SCOPE)
+ set(NNG_LIBS ${NNG_LIBS} ${_LIBS} PARENT_SCOPE)
+ set(NNG_PKGS ${NNG_PKGS} ${_PKGS} PARENT_SCOPE)
+ set(NNG_SRCS ${NNG_SRCS} ${_SRCS} PARENT_SCOPE)
+ set(NNG_HDRS ${NNG_HDRS} ${_HDRS} PARENT_SCOPE)
- set(NNG_SOURCES ${NNG_SOURCES} ${ZT_SOURCES} PARENT_SCOPE)
- set(NNG_HEADERS ${NNG_HEADERS} ${ZT_HEADERS} PARENT_SCOPE)
endif()
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 031c15cd..1c33272e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -36,6 +36,12 @@
include_directories(AFTER SYSTEM ${PROJECT_SOURCE_DIR}/src)
+# convey.c needs its own link to pthreads.
+if (NOT WIN32)
+ find_package(Threads)
+ set(THRLIB Threads::Threads)
+endif()
+
if (NNG_TESTS)
if (NOT NNG_SANITIZER STREQUAL "none")
@@ -46,7 +52,7 @@ if (NNG_TESTS)
set (NNG_TEST_PORT 13000)
macro (add_nng_test NAME TIMEOUT)
add_executable (${NAME} ${NAME}.c convey.c)
- target_link_libraries (${NAME} ${PROJECT_NAME} Threads::Threads)
+ target_link_libraries (${NAME} ${PROJECT_NAME} ${THRLIB})
add_test (NAME ${NAME} COMMAND ${NAME} -v -p TEST_PORT=${NNG_TEST_PORT})
math (EXPR TIMEOUT ${TIMEOUT}*${TIMEOUT_FACTOR})
set_tests_properties (${NAME} PROPERTIES TIMEOUT ${TIMEOUT})
diff --git a/tools/nngcat/CMakeLists.txt b/tools/nngcat/CMakeLists.txt
index e6d4278c..6edf3bda 100644
--- a/tools/nngcat/CMakeLists.txt
+++ b/tools/nngcat/CMakeLists.txt
@@ -12,7 +12,8 @@ if (NNG_ENABLE_NNGCAT)
add_executable (nngcat nngcat.c)
target_include_directories (nngcat PUBLIC ${PROJECT_SOURCE_DIR}/src)
target_link_libraries (nngcat ${PROJECT_NAME})
- install (TARGETS nngcat RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+ install (TARGETS nngcat RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ COMPONENT Tools)
if (NNG_TESTS AND NNG_PLATFORM_POSIX AND BASH)
macro(add_nngcat_test NAME TIMEOUT)