blob: 4d0839e1c627ab18e76dc60c87aafb765a571f69 [file] [log] [blame]
#
# Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
# Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
# Copyright (c) 2015-2016 Jack R. Dunaway. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom
# the Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
set (NN_SOURCES
nn.h
inproc.h
ipc.h
tcp.h
ws.h
pair.h
pubsub.h
reqrep.h
pipeline.h
survey.h
bus.h
core/ep.h
core/ep.c
core/epbase.c
core/global.h
core/global.c
core/pipe.c
core/poll.c
core/sock.h
core/sock.c
core/sockbase.c
core/symbol.c
aio/ctx.h
aio/ctx.c
aio/fsm.h
aio/fsm.c
aio/pool.h
aio/pool.c
aio/timer.h
aio/timer.c
aio/timerset.h
aio/timerset.c
aio/usock.h
aio/usock.c
aio/worker.h
aio/worker.c
utils/alloc.h
utils/alloc.c
utils/atomic.h
utils/atomic.c
utils/attr.h
utils/chunk.h
utils/chunk.c
utils/chunkref.h
utils/chunkref.c
utils/clock.h
utils/clock.c
utils/closefd.h
utils/closefd.c
utils/cont.h
utils/efd.h
utils/efd.c
utils/err.h
utils/err.c
utils/fast.h
utils/fd.h
utils/hash.h
utils/hash.c
utils/list.h
utils/list.c
utils/msg.h
utils/msg.c
utils/condvar.h
utils/condvar.c
utils/mutex.h
utils/mutex.c
utils/once.h
utils/once.c
utils/queue.h
utils/queue.c
utils/random.h
utils/random.c
utils/sem.h
utils/sem.c
utils/sleep.h
utils/sleep.c
utils/thread.h
utils/thread.c
utils/wire.h
utils/wire.c
devices/device.h
devices/device.c
protocols/utils/dist.h
protocols/utils/dist.c
protocols/utils/excl.h
protocols/utils/excl.c
protocols/utils/fq.h
protocols/utils/fq.c
protocols/utils/lb.h
protocols/utils/lb.c
protocols/utils/priolist.h
protocols/utils/priolist.c
protocols/bus/bus.h
protocols/bus/bus.c
protocols/bus/xbus.h
protocols/bus/xbus.c
protocols/pipeline/push.h
protocols/pipeline/push.c
protocols/pipeline/pull.h
protocols/pipeline/pull.c
protocols/pipeline/xpull.h
protocols/pipeline/xpull.c
protocols/pipeline/xpush.h
protocols/pipeline/xpush.c
protocols/pair/pair.h
protocols/pair/pair.c
protocols/pair/xpair.h
protocols/pair/xpair.c
protocols/pubsub/pub.h
protocols/pubsub/pub.c
protocols/pubsub/sub.h
protocols/pubsub/sub.c
protocols/pubsub/trie.h
protocols/pubsub/trie.c
protocols/pubsub/xpub.h
protocols/pubsub/xpub.c
protocols/pubsub/xsub.h
protocols/pubsub/xsub.c
protocols/reqrep/req.h
protocols/reqrep/req.c
protocols/reqrep/rep.h
protocols/reqrep/rep.c
protocols/reqrep/task.h
protocols/reqrep/task.c
protocols/reqrep/xrep.h
protocols/reqrep/xrep.c
protocols/reqrep/xreq.h
protocols/reqrep/xreq.c
protocols/survey/respondent.h
protocols/survey/respondent.c
protocols/survey/surveyor.h
protocols/survey/surveyor.c
protocols/survey/xrespondent.h
protocols/survey/xrespondent.c
protocols/survey/xsurveyor.h
protocols/survey/xsurveyor.c
transports/utils/backoff.h
transports/utils/backoff.c
transports/utils/dns.h
transports/utils/dns.c
transports/utils/dns_getaddrinfo.h
transports/utils/dns_getaddrinfo.inc
transports/utils/dns_getaddrinfo_a.h
transports/utils/dns_getaddrinfo_a.inc
transports/utils/iface.h
transports/utils/iface.c
transports/utils/literal.h
transports/utils/literal.c
transports/utils/port.h
transports/utils/port.c
transports/utils/streamhdr.h
transports/utils/streamhdr.c
transports/utils/base64.h
transports/utils/base64.c
transports/inproc/binproc.h
transports/inproc/binproc.c
transports/inproc/cinproc.h
transports/inproc/cinproc.c
transports/inproc/inproc.h
transports/inproc/inproc.c
transports/inproc/ins.h
transports/inproc/ins.c
transports/inproc/msgqueue.h
transports/inproc/msgqueue.c
transports/inproc/sinproc.h
transports/inproc/sinproc.c
transports/ipc/aipc.h
transports/ipc/aipc.c
transports/ipc/bipc.h
transports/ipc/bipc.c
transports/ipc/cipc.h
transports/ipc/cipc.c
transports/ipc/ipc.h
transports/ipc/ipc.c
transports/ipc/sipc.h
transports/ipc/sipc.c
transports/tcp/atcp.h
transports/tcp/atcp.c
transports/tcp/btcp.h
transports/tcp/btcp.c
transports/tcp/ctcp.h
transports/tcp/ctcp.c
transports/tcp/stcp.h
transports/tcp/stcp.c
transports/tcp/tcp.h
transports/tcp/tcp.c
transports/ws/aws.h
transports/ws/aws.c
transports/ws/bws.h
transports/ws/bws.c
transports/ws/cws.h
transports/ws/cws.c
transports/ws/sws.h
transports/ws/sws.c
transports/ws/ws.h
transports/ws/ws.c
transports/ws/ws_handshake.h
transports/ws/ws_handshake.c
transports/ws/sha1.h
transports/ws/sha1.c
)
if (WIN32)
list (APPEND NN_SOURCES
aio/usock_win.h
aio/usock_win.inc
aio/worker_win.h
aio/worker_win.inc
utils/thread_win.h
utils/thread_win.inc
utils/win.h
)
elseif (UNIX)
list (APPEND NN_SOURCES
aio/usock_posix.h
aio/usock_posix.inc
aio/worker_posix.h
aio/worker_posix.inc
utils/thread_posix.h
utils/thread_posix.inc
)
else ()
message (FATAL_ERROR "Assertion failed; this path is unreachable.")
endif ()
if (NN_HAVE_EPOLL)
add_definitions (-DNN_USE_EPOLL)
list (APPEND NN_SOURCES
aio/poller.h
aio/poller.c
aio/poller_epoll.h
aio/poller_epoll.inc
)
elseif (NN_HAVE_KQUEUE)
add_definitions (-DNN_USE_KQUEUE)
list (APPEND NN_SOURCES
aio/poller.h
aio/poller.c
aio/poller_kqueue.h
aio/poller_kqueue.inc
)
elseif (NN_HAVE_POLL)
add_definitions (-DNN_USE_POLL)
list (APPEND NN_SOURCES
aio/poller.h
aio/poller.c
aio/poller_poll.h
aio/poller_poll.inc
)
elseif (NN_HAVE_WINSOCK)
# No operation
else ()
message (SEND_ERROR "ERROR: could not determine socket polling method.")
message (SEND_ERROR "${ISSUE_REPORT_MSG}" )
endif ()
if (NN_HAVE_EVENTFD)
add_definitions (-DNN_USE_EVENTFD)
list (APPEND NN_SOURCES
utils/efd_eventfd.h
utils/efd_eventfd.inc
)
elseif (NN_HAVE_PIPE)
add_definitions (-DNN_USE_PIPE)
list (APPEND NN_SOURCES
utils/efd_pipe.h
utils/efd_pipe.inc
)
elseif (NN_HAVE_SOCKETPAIR)
add_definitions (-DNN_USE_SOCKETPAIR)
list (APPEND NN_SOURCES
utils/efd_socketpair.h
utils/efd_socketpair.inc
)
elseif (NN_HAVE_WINSOCK)
add_definitions (-DNN_USE_WINSOCK)
list (APPEND NN_SOURCES
utils/efd_win.h
utils/efd_win.inc
)
else ()
message (SEND_ERROR "ERROR: could not determine socket signaling method.")
message (SEND_ERROR "${ISSUE_REPORT_MSG}" )
endif ()
# Provide same folder structure in IDE as on disk
foreach (f ${NN_SOURCES})
# Get the path of the file relative to source directory
if (IS_ABSOLUTE "${f}")
file (RELATIVE_PATH f ${CMAKE_CURRENT_SOURCE_DIR} ${f})
endif ()
set (SRC_GROUP "${f}")
set (f "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
# Remove the filename part
string (REGEX REPLACE "(.*)(/[^/]*)$" "\\1" SRC_GROUP ${SRC_GROUP})
# CMake source_group expects \\, not /
string (REPLACE / \\ SRC_GROUP ${SRC_GROUP})
source_group ("${SRC_GROUP}" FILES ${f})
endforeach ()
if (NN_STATIC_LIB)
add_library (${PROJECT_NAME} STATIC ${NN_SOURCES})
else ()
add_library (${PROJECT_NAME} SHARED ${NN_SOURCES})
add_definitions (-DNN_SHARED_LIB)
set_target_properties (${PROJECT_NAME} PROPERTIES
VERSION "${NN_PACKAGE_VERSION}"
SOVERSION "${NN_ABI_VERSION}")
endif ()
# Set library outputs same as top-level project binary outputs
set_target_properties (${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
set_target_properties (${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
set_target_properties (${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
target_link_libraries (${PROJECT_NAME} ${NN_REQUIRED_LIBRARIES})
if(THREADS_HAVE_PTHREAD_ARG)
add_definitions (-pthread)
endif()
if(CMAKE_THREAD_LIBS_INIT)
target_link_libraries (${PROJECT_NAME} "${CMAKE_THREAD_LIBS_INIT}")
endif()
# pkg-config file
if(NN_REQUIRED_LIBRARIES)
foreach (lib ${NN_REQUIRED_LIBRARIES})
set (NN_REQUIRED_LFLAGS "${NN_REQUIRED_LFLAGS} -l${lib}")
endforeach()
endif()
configure_file (pkgconfig.in ${PROJECT_NAME}.pc @ONLY)
install (
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
install (TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)