CMakeLists.txt 30.1 KB
Newer Older
1 2
# CMake build script for ZeroMQ

3 4 5 6 7
cmake_minimum_required (VERSION 2.8.12)
project (ZeroMQ)

list (INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}")

8 9 10
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=gnu++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX11)
11
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
12 13 14 15
endif()
include(CheckCCompilerFlag)
CHECK_C_COMPILER_FLAG("-std=gnu11" COMPILER_SUPPORTS_C11)
if(COMPILER_SUPPORTS_C11)
16
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
17 18
endif()

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
option (WITH_OPENPGM "Build with support for OpenPGM" OFF)
option (WITH_VMCI "Build with support for VMware VMCI socket" OFF)

if (APPLE)
    option (ZMQ_BUILD_FRAMEWORK "Build as OS X framework" ON)
endif ()

# Select curve encryption library, defaults to tweetnacl
# To use libsodium instead, use --with-libsodium (must be installed)
# To disable curve, use --disable-curve

option (WITH_LIBSODIUM "Use libsodium instead of built-in tweetnacl" OFF)
option (ENABLE_CURVE "Enable CURVE security" ON)

if (NOT ENABLE_CURVE)
    message (STATUS "CURVE security is disabled")

36
elseif (WITH_LIBSODIUM)
37 38 39 40 41 42
    find_package (Sodium)
    if (SODIUM_FOUND)
        message (STATUS "Using libsodium for CURVE security")
        include_directories (${SODIUM_INCLUDE_DIRS})

        # On Solaris, libsodium depends on libssp
43
        if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
44 45
            target_link_libraries (libzmq ssp)
        endif ()
46
        set (ZMQ_USE_LIBSODIUM 1)
47
        set (ZMQ_HAVE_CURVE 1)
48 49 50 51 52 53 54
    else ()
        message (FATAL_ERROR
            "libsodium is not installed. Install it, then run CMake again")
    endif ()

else ()
    message (STATUS "Using tweetnacl for CURVE security")
55 56 57
    list (APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/src/tweetnacl.c)
    set (ZMQ_USE_TWEETNACL 1)
    set (ZMQ_HAVE_CURVE 1)
58 59
endif ()

60 61 62 63 64 65 66 67 68 69 70 71 72 73
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")

if (EXISTS "${SOURCE_DIR}/.git")
    OPTION (ENABLE_DRAFTS "Build and install draft classes and methods" ON)
else ()
    OPTION (ENABLE_DRAFTS "Build and install draft classes and methods" OFF)
endif ()
IF (ENABLE_DRAFTS)
    ADD_DEFINITIONS (-DZMQ_BUILD_DRAFT_API)
    set (pkg_config_defines "-DZMQ_BUILD_DRAFT_API=1")
ELSE (ENABLE_DRAFTS)
    set (pkg_config_defines "")
ENDIF (ENABLE_DRAFTS)

74 75 76 77 78
option (WITH_MILITANT "Enable militant assertions" OFF)
if (WITH_MILITANT)
    add_definitions(-DZMQ_ACT_MILITANT)
endif()

79
set (POLLER "" CACHE STRING "Choose polling system. valid values are
Laughing's avatar
Laughing committed
80
                            kqueue, pollset, epoll, devpoll, poll or select [default=autodetect]")
81

82 83 84 85 86 87 88 89 90
include (CheckFunctionExists)
include (CheckTypeSize)

if (POLLER STREQUAL "")
    set (CMAKE_REQUIRED_INCLUDES sys/event.h)
    check_function_exists (kqueue HAVE_KQUEUE)
    set (CMAKE_REQUIRED_INCLUDES)
    if (HAVE_KQUEUE)
        set (POLLER "kqueue")
91
    endif()
92 93
endif ()

Laughing's avatar
Laughing committed
94 95 96 97 98 99 100 101 102
if (POLLER STREQUAL "")
    set (CMAKE_REQUIRED_INCLUDES sys/pollset.h)
    check_function_exists (pollset_create HAVE_POLLSET)
    set (CMAKE_REQUIRED_INCLUDES)
    if (HAVE_POLLSET)
        set (POLLER "pollset")
    endif()
endif ()

103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
if (POLLER STREQUAL "")
    set (CMAKE_REQUIRED_INCLUDES sys/epoll.h)
    check_function_exists (epoll_create HAVE_EPOLL)
    set (CMAKE_REQUIRED_INCLUDES)
    if (HAVE_EPOLL)
        set (POLLER "epoll")
    endif ()
endif ()

if (POLLER STREQUAL "")
    set (CMAKE_REQUIRED_INCLUDES sys/devpoll.h)
    check_type_size ("struct pollfd" DEVPOLL)
    set (CMAKE_REQUIRED_INCLUDES)
    if (HAVE_DEVPOLL)
        set (POLLER "devpoll")
    endif ()
endif ()

if (POLLER STREQUAL "")
    set (CMAKE_REQUIRED_INCLUDES poll.h)
    check_function_exists (poll HAVE_POLL)
    set (CMAKE_REQUIRED_INCLUDES)
    if (HAVE_POLL)
        set (POLLER "poll")
    endif ()
endif ()
129

130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
if (POLLER STREQUAL "")
    if (WIN32)
        set (CMAKE_REQUIRED_INCLUDES winsock2.h)
        set (HAVE_SELECT 1)
    else ()
        set (CMAKE_REQUIRED_INCLUDES sys/select.h)
        check_function_exists (select HAVE_SELECT)
        set (CMAKE_REQUIRED_INCLUDES)
    endif ()
    if (HAVE_SELECT)
        set (POLLER "select")
    else ()
        message (FATAL_ERROR
            "Could not autodetect polling method")
    endif ()
endif ()
146

147
if (POLLER STREQUAL "kqueue"
Laughing's avatar
Laughing committed
148
 OR POLLER STREQUAL "pollset"
149 150 151 152 153 154 155 156 157 158
 OR POLLER STREQUAL "epoll"
 OR POLLER STREQUAL "devpoll"
 OR POLLER STREQUAL "poll"
 OR POLLER STREQUAL "select")
    message (STATUS "Detected ${POLLER} polling method")
    string (TOUPPER ${POLLER} UPPER_POLLER)
    set (ZMQ_USE_${UPPER_POLLER} 1)
else ()
    message (FATAL_ERROR "Invalid polling method")
endif ()
159

160 161
set (ZMQ_CMAKE_MODULES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/Modules)
list (APPEND CMAKE_MODULE_PATH ${ZMQ_CMAKE_MODULES_DIR})
162

163 164 165 166 167 168 169 170 171 172
include (TestZMQVersion)
include (ZMQSourceRunChecks)
include (CheckIncludeFiles)
include (CheckLibraryExists)
include (CheckCCompilerFlag)
include (CheckCXXCompilerFlag)
include (CheckCSourceCompiles)
include (CheckCSourceRuns)
include (CMakeDependentOption)
include (CheckCXXSymbolExists)
173

174 175 176 177
check_include_files (ifaddrs.h ZMQ_HAVE_IFADDRS)
check_include_files (windows.h ZMQ_HAVE_WINDOWS)
check_include_files (sys/uio.h ZMQ_HAVE_UIO)
check_include_files (sys/eventfd.h ZMQ_HAVE_EVENTFD)
178

179 180 181 182
check_library_exists (ws2_32 fopen "" HAVE_WS2_32) # TODO: Why doesn't something logical like WSAStartup work?
check_library_exists (ws2 fopen "" HAVE_WS2)
check_library_exists (rpcrt4 fopen "" HAVE_RPCRT4) # UuidCreateSequential
check_library_exists (iphlpapi fopen "" HAVE_IPHLAPI) # GetAdaptersAddresses
183

184 185
check_cxx_symbol_exists (SO_PEERCRED sys/socket.h ZMQ_HAVE_SO_PEERCRED)
check_cxx_symbol_exists (LOCAL_PEERCRED sys/socket.h ZMQ_HAVE_LOCAL_PEERCRED)
186

187
find_library (RT_LIBRARY rt)
188

189
find_package (Threads)
Matt Arsenault's avatar
Matt Arsenault committed
190

191

192 193 194 195 196 197 198 199
if (WIN32 AND NOT CYGWIN)
  if (NOT HAVE_WS2_32 AND NOT HAVE_WS2)
    message (FATAL_ERROR "Cannot link to ws2_32 or ws2")
  endif ()

  if (NOT HAVE_RPCRT4)
    message (FATAL_ERROR "Cannot link to rpcrt4")
  endif ()
200

201 202 203 204
  if (NOT HAVE_IPHLAPI)
    message (FATAL_ERROR "Cannot link to iphlapi")
  endif ()
endif ()
205

206 207 208
set (CMAKE_REQUIRED_LIBRARIES rt)
check_function_exists (clock_gettime HAVE_CLOCK_GETTIME)
set (CMAKE_REQUIRED_LIBRARIES)
209

210 211 212
set (CMAKE_REQUIRED_INCLUDES unistd.h)
check_function_exists (fork HAVE_FORK)
set (CMAKE_REQUIRED_INCLUDES)
Frank's avatar
Frank committed
213

214 215 216
set (CMAKE_REQUIRED_INCLUDES sys/time.h)
check_function_exists (gethrtime HAVE_GETHRTIME)
set (CMAKE_REQUIRED_INCLUDES)
217

218 219 220 221
set (CMAKE_REQUIRED_INCLUDES stdlib.h)
check_function_exists (mkdtemp HAVE_MKDTEMP)
set (CMAKE_REQUIRED_INCLUDES)

222
add_definitions (-D_REENTRANT -D_THREAD_SAFE)
223
add_definitions (-DZMQ_CUSTOM_PLATFORM_HPP)
224

225
option (ENABLE_EVENTFD "Enable/disable eventfd" ZMQ_HAVE_EVENTFD)
226

227 228
macro (zmq_check_cxx_flag_prepend flag)
  check_cxx_compiler_flag ("${flag}" HAVE_FLAG_${flag})
229

230 231 232 233
  if (HAVE_FLAG_${flag})
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
  endif ()
endmacro ()
234 235


236 237
if (MSVC)
  zmq_check_cxx_flag_prepend ("/W3")
238

239 240 241 242 243 244 245 246
  if (MSVC_IDE)
    set (MSVC_TOOLSET "-${CMAKE_VS_PLATFORM_TOOLSET}")
  else ()
    set (MSVC_TOOLSET "")
  endif ()
else ()
  zmq_check_cxx_flag_prepend ("-Wall")
endif ()
247

248 249 250
if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  zmq_check_cxx_flag_prepend ("-Wextra")
endif ()
251

252 253 254
#   TODO: why is -Wno-long-long defined differently than in configure.ac?
zmq_check_cxx_flag_prepend ("-Wno-long-long")
zmq_check_cxx_flag_prepend ("-Wno-uninitialized")
255

256 257
option (LIBZMQ_PEDANTIC "" ON)
option (LIBZMQ_WERROR "" OFF)
258

259 260
if (LIBZMQ_PEDANTIC)
  zmq_check_cxx_flag_prepend ("-pedantic")
261

262 263 264
  if (${CMAKE_CXX_COMPILER_ID} MATCHES "Intel")
    zmq_check_cxx_flag_prepend ("-strict-ansi")
  endif ()
265

266 267 268 269
  if (${CMAKE_CXX_COMPILER_ID} MATCHES "SunPro")
    zmq_check_cxx_flag_prepend ("-compat=5")
  endif ()
endif ()
270

271 272 273 274
if (LIBZMQ_WERROR)
  zmq_check_cxx_flag_prepend ("-Werror")
  zmq_check_cxx_flag_prepend ("-errwarn=%all")
endif ()
275 276


277 278 279
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
  zmq_check_cxx_flag_prepend ("-mcpu=v9")
endif ()
280

281 282 283
if (${CMAKE_CXX_COMPILER_ID} MATCHES "SunPro")
  zmq_check_cxx_flag_prepend ("-features=zla")
endif ()
284

285

286 287 288
if (CMAKE_SYSTEM_NAME MATCHES "SunOS" OR CMAKE_SYSTEM_NAME MATCHES "NetBSD")
  message (STATUS "Checking whether atomic operations can be used")
  check_c_source_compiles (
289 290 291
  "
   #include <atomic.h>

292
    int main ()
293 294
    {
      uint32_t value;
295
      atomic_cas_32 (&value, 0, 0);
296 297 298 299 300
      return 0;
    }
    "
    HAVE_ATOMIC_H)

301 302 303 304
  if (NOT HAVE_ATOMIC_H)
    set (ZMQ_FORCE_MUTEXES 1)
  endif ()
endif ()
305 306 307


#-----------------------------------------------------------------------------
308 309 310 311 312 313
zmq_check_sock_cloexec ()
zmq_check_so_keepalive ()
zmq_check_tcp_keepcnt ()
zmq_check_tcp_keepidle ()
zmq_check_tcp_keepintvl ()
zmq_check_tcp_keepalive ()
314
zmq_check_tcp_tipc ()
315 316


317
if (    CMAKE_SYSTEM_NAME MATCHES "Linux"
318 319 320
    OR CMAKE_SYSTEM_NAME MATCHES "GNU/kFreeBSD"
    OR CMAKE_SYSTEM_NAME MATCHES "GNU/Hurd"
    OR CYGWIN)
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
  add_definitions (-D_GNU_SOURCE)
elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
  add_definitions (-D__BSD_VISIBLE)
elseif (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
  add_definitions (-D_NETBSD_SOURCE)
elseif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
  add_definitions (-D_OPENBSD_SOURCE)
elseif (CMAKE_SYSTEM_NAME MATCHES "SunOS")
  add_definitions (-D_PTHREADS)
elseif (CMAKE_SYSTEM_NAME MATCHES "HP-UX")
  add_definitions (-D_POSIX_C_SOURCE=200112L)
  zmq_check_cxx_flag_prepend (-Ae)
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
  add_definitions (-D_DARWIN_C_SOURCE)
endif ()

set (CMAKE_PYTHON_VERSION 2.7 2.6 2.5 2.4)
find_package (PythonInterp)
find_package (AsciiDoc)

cmake_dependent_option (WITH_DOC "Build Reference Guide documentation (requires DocBook)" ON
342
                       "PYTHONINTERP_FOUND;ASCIIDOC_FOUND" OFF)
343

344 345 346 347 348 349 350 351
if (MSVC)
  if (WITH_OPENPGM)
    #   set (OPENPGM_ROOT "" CACHE PATH "Location of OpenPGM")
    set (OPENPGM_VERSION_MAJOR 5)
    set (OPENPGM_VERSION_MINOR 2)
    set (OPENPGM_VERSION_MICRO 122)
    if (CMAKE_CL_64)
      find_path (OPENPGM_ROOT include/pgm/pgm.h
352 353 354
                PATHS
                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]"
                NO_DEFAULT_PATH
355 356 357 358
               )
      message (STATUS "OpenPGM x64 detected - ${OPENPGM_ROOT}")
    else ()
      find_path (OPENPGM_ROOT include/pgm/pgm.h
359 360 361 362
                PATHS
                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]"
                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]"
                NO_DEFAULT_PATH
363 364 365 366 367 368
               )
      message (STATUS "OpenPGM x86 detected - ${OPENPGM_ROOT}")
    endif (CMAKE_CL_64)
    set (OPENPGM_INCLUDE_DIRS ${OPENPGM_ROOT}/include)
    set (OPENPGM_LIBRARY_DIRS ${OPENPGM_ROOT}/lib)
    set (OPENPGM_LIBRARIES
369 370
      optimized libpgm${MSVC_TOOLSET}-mt-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib
      debug libpgm${MSVC_TOOLSET}-mt-gd-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib)
371 372 373 374
  endif ()
else ()
  if (WITH_OPENPGM)
    message (FATAL_ERROR "WITH_OPENPGM not implemented")
375
    # DSO symbol visibility for openpgm
376
    if (HAVE_FLAG_VISIBILITY_HIDDEN)
377

378 379 380 381
    elseif (HAVE_FLAG_LDSCOPE_HIDDEN)
    endif ()
  endif ()
endif ()
382

383 384 385 386

#-----------------------------------------------------------------------------
# force off-tree build

387 388
if (${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
message (FATAL_ERROR "CMake generation is not allowed within the source directory!
389 390
Remove the CMakeCache.txt file and try again from another folder, e.g.:

391
   rm CMakeCache.txt
392 393 394 395
   mkdir cmake-make
   cd cmake-make
   cmake ..
")
396
endif ()
397 398 399 400

#-----------------------------------------------------------------------------
# default to Release build

401
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
402 403
  # CMAKE_BUILD_TYPE is not used for multi-configuration generators like Visual Studio/XCode
  # which instead use CMAKE_CONFIGURATION_TYPES
404
  set (CMAKE_BUILD_TYPE Release CACHE STRING
405 406
      "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
      FORCE)
407
endif ()
408

409 410
set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
set (LIBRARY_OUTPUT_PATH  ${CMAKE_CURRENT_BINARY_DIR}/lib)
Doron Somech's avatar
Doron Somech committed
411

412 413 414
#-----------------------------------------------------------------------------
# platform specifics

xantares's avatar
xantares committed
415
if (WIN32)
416 417
    #   Socket limit is 16K (can be raised arbitrarily)
    add_definitions (-DFD_SETSIZE=16384)
418
    add_definitions (-D_CRT_SECURE_NO_WARNINGS)
419
    add_definitions (-D_WINSOCK_DEPRECATED_NO_WARNINGS)
xantares's avatar
xantares committed
420
endif ()
421

422
if (MSVC)
423
  # Parallel make.
424
  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
425

426 427
  # Optimization flags.
  # http://msdn.microsoft.com/en-us/magazine/cc301698.aspx
428 429 430 431 432 433 434
  if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GL")
    set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG")
    set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG")
    set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /LTCG")
  endif ()
endif ()
435 436


437 438 439
#-----------------------------------------------------------------------------
# source files

440
set (cxx-sources
441
        address.cpp
somdoron's avatar
somdoron committed
442
        client.cpp
443 444
        clock.cpp
        ctx.cpp
445 446
        curve_client.cpp
        curve_server.cpp
447 448
        dealer.cpp
        devpoll.cpp
449
        dgram.cpp
450 451 452 453 454 455 456 457 458 459 460 461 462
        dist.cpp
        epoll.cpp
        err.cpp
        fq.cpp
        io_object.cpp
        io_thread.cpp
        ip.cpp
        ipc_address.cpp
        ipc_connecter.cpp
        ipc_listener.cpp
        kqueue.cpp
        lb.cpp
        mailbox.cpp
463
        mailbox_safe.cpp
464
        mechanism.cpp
Frank's avatar
Frank committed
465
        metadata.cpp
466 467 468 469 470
        msg.cpp
        mtrie.cpp
        object.cpp
        options.cpp
        own.cpp
471
        null_mechanism.cpp
472 473 474 475 476
        pair.cpp
        pgm_receiver.cpp
        pgm_sender.cpp
        pgm_socket.cpp
        pipe.cpp
477 478
        plain_client.cpp
        plain_server.cpp
479 480
        poll.cpp
        poller_base.cpp
Laughing's avatar
Laughing committed
481
		pollset.cpp
482 483 484 485 486 487 488 489 490 491 492 493 494
        precompiled.cpp
        proxy.cpp
        pub.cpp
        pull.cpp
        push.cpp
        random.cpp
        raw_encoder.cpp
        raw_decoder.cpp
        reaper.cpp
        rep.cpp
        req.cpp
        router.cpp
        select.cpp
somdoron's avatar
somdoron committed
495
        server.cpp
496 497 498
        session_base.cpp
        signaler.cpp
        socket_base.cpp
Richard Newton's avatar
Richard Newton committed
499 500
        socks.cpp
        socks_connecter.cpp
Richard Newton's avatar
Richard Newton committed
501
        stream.cpp
502 503 504 505 506 507 508 509 510 511
        stream_engine.cpp
        sub.cpp
        tcp.cpp
        tcp_address.cpp
        tcp_connecter.cpp
        tcp_listener.cpp
        thread.cpp
        trie.cpp
        v1_decoder.cpp
        v1_encoder.cpp
512 513
        v2_decoder.cpp
        v2_encoder.cpp
514 515 516
        xpub.cpp
        xsub.cpp
        zmq.cpp
Jens Auer's avatar
Jens Auer committed
517
        zmq_utils.cpp
518
        decoder_allocators.cpp
519
        socket_poller.cpp
somdoron's avatar
somdoron committed
520
        timers.cpp
somdoron's avatar
somdoron committed
521 522
        config.hpp
        radio.cpp
523 524
        dish.cpp
        udp_engine.cpp
somdoron's avatar
somdoron committed
525 526 527
        udp_address.cpp
        scatter.cpp
        gather.cpp)
Matt Arsenault's avatar
Matt Arsenault committed
528

529
set (rc-sources version.rc)
Matt Arsenault's avatar
Matt Arsenault committed
530

531
if (MINGW)
Matt Arsenault's avatar
Matt Arsenault committed
532
  # Generate the right type when using -m32 or -m64
533 534 535 536
  macro (set_rc_arch rc_target)
    set (CMAKE_RC_COMPILER_INIT windres)
    enable_language (RC)
    set (CMAKE_RC_COMPILE_OBJECT
Maarten Ditzel's avatar
Maarten Ditzel committed
537
        "<CMAKE_RC_COMPILER> <FLAGS> -O coff --target=${rc_target} <DEFINES> -i <SOURCE> -o <OBJECT>")
538
  endmacro ()
Matt Arsenault's avatar
Matt Arsenault committed
539

540 541
  if (NOT CMAKE_SYSTEM_PROCESSOR)
    set (CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
542 543
  endif ()

544
  if (    CMAKE_SYSTEM_PROCESSOR MATCHES "i386"
545 546 547
      OR CMAKE_SYSTEM_PROCESSOR MATCHES "i486"
      OR CMAKE_SYSTEM_PROCESSOR MATCHES "i586"
      OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686"
Matt Arsenault's avatar
Matt Arsenault committed
548
     # This also happens on x86_64 systems...what a worthless variable
549 550 551
      OR CMAKE_SYSTEM_PROCESSOR MATCHES "x86"
      OR CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64"
      OR CMAKE_SYSTEM_PROCESSOR MATCHES "amd64")
Matt Arsenault's avatar
Matt Arsenault committed
552

553 554 555 556 557 558 559
    if (CMAKE_SIZEOF_VOID_P EQUAL 8)
      set_rc_arch ("pe-x86-64")
    else ()
      set_rc_arch ("pe-i386")
    endif ()
  endif ()
endif ()
Matt Arsenault's avatar
Matt Arsenault committed
560

561
include_directories (include ${CMAKE_CURRENT_BINARY_DIR})
Min RK's avatar
Min RK committed
562 563
set (public_headers include/zmq.h
                    include/zmq_utils.h)
Matt Arsenault's avatar
Matt Arsenault committed
564

565
set (readme-docs AUTHORS
Matt Arsenault's avatar
Matt Arsenault committed
566 567
                COPYING
                COPYING.LESSER
568
                NEWS)
569 570 571 572

#-----------------------------------------------------------------------------
# optional modules

573 574 575 576 577 578
if (WITH_OPENPGM)
  add_definitions (-DZMQ_HAVE_OPENPGM)
  include_directories (${OPENPGM_INCLUDE_DIRS})
  link_directories (${OPENPGM_LIBRARY_DIRS})
  set (OPTIONAL_LIBRARIES ${OPENPGM_LIBRARIES})
endif (WITH_OPENPGM)
579

580 581 582 583 584
if (WITH_VMCI)
    add_definitions (-DZMQ_HAVE_VMCI)
    include_directories (${VMCI_INCLUDE_DIRS})
    list (APPEND cxx-sources vmci_address.cpp vmci_connecter.cpp vmci_listener.cpp vmci.cpp)
endif (WITH_VMCI)
Ilya Kulakov's avatar
Ilya Kulakov committed
585

586 587
if (ZMQ_HAVE_TIPC)
    add_definitions (-DZMQ_HAVE_TIPC)
588
    list (APPEND cxx-sources tipc_address.cpp tipc_connecter.cpp tipc_listener.cpp)
589 590
endif (ZMQ_HAVE_TIPC)

591 592 593
#-----------------------------------------------------------------------------
# source generators

594 595 596
foreach (source ${cxx-sources})
  list (APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/src/${source})
endforeach ()
597

598 599 600 601
foreach (source ${rc-sources})
  list (APPEND sources ${CMAKE_CURRENT_BINARY_DIR}/${source})
  configure_file (${CMAKE_CURRENT_SOURCE_DIR}/src/${source}.in ${CMAKE_CURRENT_BINARY_DIR}/${source})
endforeach ()
Frank's avatar
Frank committed
602

603 604 605
#   Delete any src/platform.hpp left by configure
file (REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.hpp)

606 607
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/platform.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/platform.hpp)
list (APPEND sources ${CMAKE_CURRENT_BINARY_DIR}/platform.hpp)
608

609 610
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/src/libzmq.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/libzmq.pc @ONLY)
set (zmq-pkgconfig ${CMAKE_CURRENT_BINARY_DIR}/libzmq.pc)
611

612 613 614
if (NOT ZMQ_BUILD_FRAMEWORK)
  install (FILES ${CMAKE_CURRENT_BINARY_DIR}/libzmq.pc DESTINATION lib/pkgconfig)
endif ()
615

616 617 618 619 620 621
if (MSVC)
  if (CMAKE_CL_64)
    set (nsis-template ${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/NSIS.template64.in)
  else ()
    set (nsis-template ${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/NSIS.template32.in)
  endif ()
622

623
  add_custom_command (
Matt Arsenault's avatar
Matt Arsenault committed
624 625 626 627 628 629 630
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in
    COMMAND ${CMAKE_COMMAND}
    ARGS -E
    copy
    ${nsis-template}
    ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in
    DEPENDS ${nsis-template})
631 632 633 634 635 636
endif ()

file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc)
file (GLOB docs RELATIVE ${CMAKE_CURRENT_BINARY_DIR}/ "${CMAKE_CURRENT_SOURCE_DIR}/doc/*.txt")
set (html-docs)
foreach (txt ${docs})
637
  string (REGEX REPLACE ".*/(.*)\\.txt" "\\1.html" html ${txt})
638 639 640
  set (src ${txt})
  set (dst doc/${html})
  add_custom_command (
641 642 643 644 645 646
    OUTPUT  ${dst}
    COMMAND ${PYTHON_EXECUTABLE}
    ARGS    -x
    ${ASCIIDOC_EXECUTABLE}
    -d manpage
    -b xhtml11
647 648
    -f ${CMAKE_CURRENT_SOURCE_DIR}/doc/asciidoc.conf
    -azmq_version=${ZMQ_VERSION}
649 650
    -o ${dst}
    ${src}
651 652
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${src}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
653
    COMMENT "Generating ${html}")
654 655 656 657
  if (WITH_DOC)
    list (APPEND html-docs ${CMAKE_CURRENT_BINARY_DIR}/${dst})
  endif ()
endforeach ()
658

659 660
if (ZMQ_BUILD_FRAMEWORK)
  add_custom_command (
661 662 663 664 665
    TARGET libzmq
    POST_BUILD
    COMMAND ${CMAKE_COMMAND}
    ARGS -E make_directory "${CMAKE_LIBRARY_OUTPUT_PATH}/ZeroMQ.framework/Versions/${ZMQ_VERSION}/MacOS"
    COMMENT "Perf tools")
666
endif ()
667

668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687
if (MSVC)
    # default for all sources is to use precompiled headers
    foreach(source ${sources})
        set_source_files_properties(${source}
            PROPERTIES
            COMPILE_FLAGS "/Yuprecompiled.hpp"
            )
    endforeach()
    # create precompiled header
    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/precompiled.cpp
        PROPERTIES
        COMPILE_FLAGS "/Ycprecompiled.hpp"
        )
    # C and C++ can not use the same precompiled header
    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tweetnacl.c
        PROPERTIES
        COMPILE_FLAGS "/Y-"
        )
endif ()

688 689 690 691

#-----------------------------------------------------------------------------
# output

692 693 694 695
if (MSVC)
  add_library (libzmq SHARED ${sources} ${public_headers} ${html-docs} ${readme-docs} ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in)
  target_link_libraries (libzmq ${OPTIONAL_LIBRARIES})
  set_target_properties (libzmq PROPERTIES
696
    PUBLIC_HEADER "${public_headers}"
697
    RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}"
698
    RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}"
699
    DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}"
700 701
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
    COMPILE_DEFINITIONS "DLL_EXPORT")
702 703
  add_library (libzmq-static STATIC ${sources})
  set_target_properties (libzmq-static PROPERTIES
704
    PUBLIC_HEADER "${public_headers}"
705
    RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-s-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}"
706
    RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-s-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}"
707
    DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-sgd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}"
708
    COMPILE_FLAGS "/DZMQ_STATIC"
709
    OUTPUT_NAME "libzmq-static")
710 711 712
else ()
    add_library (libzmq SHARED ${sources} ${public_headers} ${html-docs} ${readme-docs} ${zmq-pkgconfig})
    set_target_properties (libzmq PROPERTIES
713 714 715
                          COMPILE_DEFINITIONS "DLL_EXPORT"
                          PUBLIC_HEADER "${public_headers}"
                          VERSION ${ZMQ_VERSION}
716
                          SOVERSION "${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.0"
717 718
                          OUTPUT_NAME "libzmq"
                          PREFIX "")
719 720
    if (ZMQ_BUILD_FRAMEWORK)
      set_target_properties (libzmq PROPERTIES
Doron Somech's avatar
Doron Somech committed
721 722 723
                            FRAMEWORK TRUE
                            MACOSX_FRAMEWORK_IDENTIFIER "org.zeromq.libzmq"
                            MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${ZMQ_VERSION}
724
                            MACOSX_FRAMEWORK_BUNDLE_VERSION ${ZMQ_VERSION})
725
      set_source_files_properties (${html-docs} PROPERTIES
Doron Somech's avatar
Doron Somech committed
726
                                  MACOSX_PACKAGE_LOCATION doc)
727
      set_source_files_properties (${readme-docs} PROPERTIES
Doron Somech's avatar
Doron Somech committed
728
                                  MACOSX_PACKAGE_LOCATION etc)
729
      set_source_files_properties (${zmq-pkgconfig} PROPERTIES
Doron Somech's avatar
Doron Somech committed
730
                                  MACOSX_PACKAGE_LOCATION lib/pkgconfig)
731 732 733
    endif ()
    add_library (libzmq-static STATIC ${sources} ${public_headers} ${html-docs} ${readme-docs} ${zmq-pkgconfig})
    set_target_properties (libzmq-static PROPERTIES
734
      PUBLIC_HEADER "${public_headers}"
735
      COMPILE_DEFINITIONS "ZMQ_STATIC"
736 737
      OUTPUT_NAME "libzmq-static"
      PREFIX "")
738
endif ()
739

740
target_link_libraries (libzmq ${CMAKE_THREAD_LIBS_INIT})
741

742 743 744 745 746 747 748 749
if (SODIUM_FOUND)
  target_link_libraries (libzmq ${SODIUM_LIBRARIES})
endif ()
if (HAVE_WS2_32)
  target_link_libraries (libzmq ws2_32)
elseif (HAVE_WS2)
  target_link_libraries (libzmq ws2)
endif ()
750

751 752 753
if (HAVE_RPCRT4)
  target_link_libraries (libzmq rpcrt4)
endif ()
754

755 756 757
if (HAVE_IPHLAPI)
  target_link_libraries (libzmq iphlpapi)
endif ()
758

759 760 761
if (RT_LIBRARY)
  target_link_libraries (libzmq ${RT_LIBRARY})
endif ()
762

763
set (perf-tools local_lat
764 765 766 767 768 769
               remote_lat
               local_thr
               remote_thr
               inproc_lat
               inproc_thr)

770 771 772 773 774
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") # Why?
option (WITH_PERF_TOOL "Build with perf-tools" ON)
else ()
option (WITH_PERF_TOOL "Build with perf-tools" OFF)
endif ()
775

776 777 778 779
if (WITH_PERF_TOOL)
  foreach (perf-tool ${perf-tools})
    add_executable (${perf-tool} perf/${perf-tool}.cpp)
    target_link_libraries (${perf-tool} libzmq)
780

781 782 783
    if (RT_LIBRARY)
      target_link_libraries (${perf-tool} ${RT_LIBRARY})
    endif ()
784

785
    if (ZMQ_BUILD_FRAMEWORK)
Doron Somech's avatar
Doron Somech committed
786
      # Copy perf-tools binaries into Framework
787
      add_custom_command (
Doron Somech's avatar
Doron Somech committed
788 789 790 791 792 793
        TARGET libzmq ${perf-tool}
        POST_BUILD
        COMMAND ${CMAKE_COMMAND}
        ARGS -E copy "$<TARGET_FILE:${perf-tool}>" "${LIBRARY_OUTPUT_PATH}/ZeroMQ.framework/Versions/${ZMQ_VERSION_STRING}/MacOS/${perf-tool}"
        VERBATIM
        COMMENT "Perf tools")
794 795
    else ()
      install (TARGETS ${perf-tool}
Doron Somech's avatar
Doron Somech committed
796 797
              RUNTIME DESTINATION bin
              COMPONENT PerfTools)
798 799 800
    endif ()
  endforeach ()
endif ()
801

802 803 804
#-----------------------------------------------------------------------------
# tests

805
set (ZMQ_BUILD_TESTS ON CACHE BOOL "Build the tests for ZeroMQ")
806

807 808 809 810
if (ZMQ_BUILD_TESTS)
  enable_testing () # Enable testing only works in root scope
  ADD_SUBDIRECTORY (tests)
endif ()
811

812 813
#-----------------------------------------------------------------------------
# installer
814

815 816
if (MSVC)
  install (TARGETS libzmq libzmq-static
Doron Somech's avatar
Doron Somech committed
817 818 819 820
          ARCHIVE DESTINATION lib
          LIBRARY DESTINATION lib
          PUBLIC_HEADER DESTINATION include
          COMPONENT SDK)
821 822
  if (CMAKE_BUILD_TYPE STREQUAL "Debug")
    install (TARGETS libzmq libzmq-static
823
            RUNTIME DESTINATION bin
824
            ARCHIVE DESTINATION lib
825 826
            PUBLIC_HEADER DESTINATION include
            COMPONENT SDK)
827 828
    if (NOT CMAKE_PDB_OUTPUT_DIRECTORY)
      install (FILES ${CMAKE_CURRENT_BINARY_DIR}/bin/libzmq${MSVC_TOOLSET}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}.pdb DESTINATION lib
Doron Somech's avatar
Doron Somech committed
829
            COMPONENT SDK)
830 831 832
    endif ()
  else ()
    install (TARGETS libzmq
833
            RUNTIME DESTINATION bin
Doron Somech's avatar
Doron Somech committed
834 835
            PUBLIC_HEADER DESTINATION include
            COMPONENT Runtime)
836 837 838
  endif ()
else ()
  install (TARGETS libzmq libzmq-static
Doron Somech's avatar
Doron Somech committed
839 840 841 842 843
          RUNTIME DESTINATION bin
          ARCHIVE DESTINATION lib
          LIBRARY DESTINATION lib
          FRAMEWORK DESTINATION "Library/Frameworks"
          PUBLIC_HEADER DESTINATION include)
844
endif ()
845

846
# install (FILES ${public_headers}
Doron Somech's avatar
Doron Somech committed
847 848
#          DESTINATION include
#          COMPONENT SDK)
849

850 851 852
#if (NOT ZMQ_BUILD_FRAMEWORK)
#  file (GLOB private_headers "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hpp")
#  install (FILES ${sources} ${private_headers} DESTINATION src/zmq
xantares's avatar
xantares committed
853
#          COMPONENT SourceCode)
854
#endif ()
855

856 857
foreach (readme ${readme-docs})
  configure_file (${CMAKE_CURRENT_SOURCE_DIR}/${readme} ${CMAKE_CURRENT_BINARY_DIR}/${readme}.txt)
858

859 860 861 862 863 864 865 866
  if (NOT ZMQ_BUILD_FRAMEWORK)
    if (MSVC)
      install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${readme}.txt DESTINATION .)
    else ()
      install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${readme}.txt DESTINATION share/zmq)
    endif ()
  endif ()
endforeach ()
867

868 869 870 871 872
if (WITH_DOC)
  if (NOT ZMQ_BUILD_FRAMEWORK)
    install (FILES ${html-docs} DESTINATION doc/zmq COMPONENT RefGuide)
  endif ()
endif ()
Doron Somech's avatar
Doron Somech committed
873 874


875 876
if (MSVC)
  include (InstallRequiredSystemLibraries)
Doron Somech's avatar
Doron Somech committed
877

878 879 880 881 882
  if (CMAKE_CL_64)
    set (arch_name "x64")
  else ()
    set (arch_name "x86")
  endif ()
Doron Somech's avatar
Doron Somech committed
883

884 885
  set (CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH} (${arch_name})")
  set (CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-${arch_name}")
Doron Somech's avatar
Doron Somech committed
886 887 888 889

  # TODO: I think this part was intended to be used when running cpack
  # separately from cmake but I don't know how that works.
  #
890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914
  # macro (add_crt_version version)
  #   set (rel_dir "${CMAKE_CURRENT_BINARY_DIR}/build/${arch_name}/${version};ZeroMQ;ALL;/")
  #   set (debug_dir "${CMAKE_CURRENT_BINARY_DIR}/debug/${arch_name}/${version};ZeroMQ;ALL;/")
  #   if (EXISTS ${rel_dir})
  #     list (APPEND CPACK_INSTALL_CMAKE_PROJECTS ${rel_dir})
  #   endif ()

  #   if (EXISTS ${debug_dir})
  #     list (APPEND CPACK_INSTALL_CMAKE_PROJECTS ${rel_dir})
  #   endmacro ()
  # endmacro ()

  # add_crt_version (v110)
  # add_crt_version (v100)
  # add_crt_version (v90)

  set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}")
  set (CPACK_GENERATOR "NSIS")
  set (CPACK_PACKAGE_NAME "ZeroMQ")
  set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "ZeroMQ lightweight messaging kernel")
  set (CPACK_PACKAGE_VENDOR "Miru")
  set (CPACK_NSIS_CONTACT "Steven McCoy <Steven.McCoy@miru.hk>")
  set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}\\\\COPYING.txt")
#  set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_BINARY_DIR}\\\\README.txt")
#  set (CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_BINARY_DIR}\\\\WELCOME.txt")
Doron Somech's avatar
Doron Somech committed
915
  # There is a bug in NSI that does not handle full unix paths properly. Make
916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931
  # sure there is at least one set of four (4) backslashes.
  set (CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\installer.ico")
  set (CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\installer.ico")

  set (CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\branding.bmp")
  set (CPACK_NSIS_COMPRESSOR "/SOLID lzma")
  set (CPACK_PACKAGE_VERSION ${ZMQ_VERSION})
  set (CPACK_PACKAGE_VERSION_MAJOR ${ZMQ_VERSION_MAJOR})
  set (CPACK_PACKAGE_VERSION_MINOR ${ZMQ_VERSION_MINOR})
  set (CPACK_PACKAGE_VERSION_PATCH ${ZMQ_VERSION_PATCH})
#  set (CPACK_PACKAGE_INSTALL_DIRECTORY "ZMQ Install Directory")
#  set (CPACK_TEMPORARY_DIRECTORY "ZMQ Temporary CPack Directory")

  include (CPack)

  cpack_add_component_group (Development
Doron Somech's avatar
Doron Somech committed
932 933
    DISPLAY_NAME "ZeroMQ software development kit"
    EXPANDED)
934
  cpack_add_component (PerfTools
Doron Somech's avatar
Doron Somech committed
935 936
    DISPLAY_NAME "ZeroMQ performance tools"
    INSTALL_TYPES FullInstall DevInstall)
937
  cpack_add_component (SourceCode
Doron Somech's avatar
Doron Somech committed
938 939 940
    DISPLAY_NAME "ZeroMQ source code"
    DISABLED
    INSTALL_TYPES FullInstall)
941
  cpack_add_component (SDK
Doron Somech's avatar
Doron Somech committed
942 943 944
    DISPLAY_NAME "ZeroMQ headers and libraries"
    INSTALL_TYPES FullInstall DevInstall
    GROUP Development)
945 946
  if (WITH_DOC)
    cpack_add_component (RefGuide
Doron Somech's avatar
Doron Somech committed
947 948 949
      DISPLAY_NAME "ZeroMQ reference guide"
      INSTALL_TYPES FullInstall DevInstall
      GROUP Development)
950 951
  endif ()
  cpack_add_component (Runtime
Doron Somech's avatar
Doron Somech committed
952 953 954
    DISPLAY_NAME "ZeroMQ runtime files"
    REQUIRED
    INSTALL_TYPES FullInstall DevInstall MinInstall)
955
  cpack_add_install_type (FullInstall
Doron Somech's avatar
Doron Somech committed
956
    DISPLAY_NAME "Full install, including source code")
957
  cpack_add_install_type (DevInstall
Doron Somech's avatar
Doron Somech committed
958
    DISPLAY_NAME "Developer install, headers and libraries")
959
  cpack_add_install_type (MinInstall
Doron Somech's avatar
Doron Somech committed
960
    DISPLAY_NAME "Minimal install, runtime only")
961
endif ()
Doron Somech's avatar
Doron Somech committed
962 963

# Export this for library to help build this as a sub-project
964
set (ZEROMQ_LIBRARY libzmq CACHE STRING "ZeroMQ library")
Doron Somech's avatar
Doron Somech committed
965 966 967

# Workaround for MSVS10 to avoid the Dialog Hell
# FIXME: This could be removed with future version of CMake.
968 969 970 971 972 973
if (MSVC_VERSION EQUAL 1600)
  set (ZMQ_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/ZeroMQ.sln")
  if (EXISTS "${ZMQ_SLN_FILENAME}")
    file (APPEND "${ZMQ_SLN_FILENAME}" "\n# This should be regenerated!\n")
  endif ()
endif ()