Blame CMakeLists.txt

Packit b5b901
# TODO: determine CMAKE_SYSTEM_NAME on OS/390.  Currently assumes "OS/390".
Packit b5b901
cmake_minimum_required(VERSION 3.0)
Packit b5b901
project(libuv)
Packit b5b901
enable_testing()
Packit b5b901
Packit b5b901
if(MSVC)
Packit b5b901
  list(APPEND uv_cflags /W4)
Packit b5b901
elseif(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU")
Packit b5b901
  list(APPEND uv_cflags -fvisibility=hidden --std=gnu89)
Packit b5b901
  list(APPEND uv_cflags -Wall -Wextra -Wstrict-prototypes)
Packit b5b901
  list(APPEND uv_cflags -Wno-unused-parameter)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
set(uv_sources
Packit b5b901
    src/fs-poll.c
Packit b5b901
    src/inet.c
Packit b5b901
    src/threadpool.c
Packit b5b901
    src/timer.c
Packit b5b901
    src/uv-common.c
Packit b5b901
    src/uv-data-getter-setters.c
Packit b5b901
    src/version.c)
Packit b5b901
Packit b5b901
set(uv_test_sources
Packit b5b901
    test/blackhole-server.c
Packit b5b901
    test/echo-server.c
Packit b5b901
    test/run-tests.c
Packit b5b901
    test/runner.c
Packit b5b901
    test/test-active.c
Packit b5b901
    test/test-async-null-cb.c
Packit b5b901
    test/test-async.c
Packit b5b901
    test/test-barrier.c
Packit b5b901
    test/test-callback-order.c
Packit b5b901
    test/test-callback-stack.c
Packit b5b901
    test/test-close-fd.c
Packit b5b901
    test/test-close-order.c
Packit b5b901
    test/test-condvar.c
Packit b5b901
    test/test-connect-unspecified.c
Packit b5b901
    test/test-connection-fail.c
Packit b5b901
    test/test-cwd-and-chdir.c
Packit b5b901
    test/test-default-loop-close.c
Packit b5b901
    test/test-delayed-accept.c
Packit b5b901
    test/test-dlerror.c
Packit b5b901
    test/test-eintr-handling.c
Packit b5b901
    test/test-embed.c
Packit b5b901
    test/test-emfile.c
Packit b5b901
    test/test-env-vars.c
Packit b5b901
    test/test-error.c
Packit b5b901
    test/test-fail-always.c
Packit b5b901
    test/test-fork.c
Packit b5b901
    test/test-fs-copyfile.c
Packit b5b901
    test/test-fs-event.c
Packit b5b901
    test/test-fs-poll.c
Packit b5b901
    test/test-fs.c
Packit b5b901
    test/test-get-currentexe.c
Packit b5b901
    test/test-get-loadavg.c
Packit b5b901
    test/test-get-memory.c
Packit b5b901
    test/test-get-passwd.c
Packit b5b901
    test/test-getaddrinfo.c
Packit b5b901
    test/test-gethostname.c
Packit b5b901
    test/test-getnameinfo.c
Packit b5b901
    test/test-getsockname.c
Packit b5b901
    test/test-getters-setters.c
Packit b5b901
    test/test-handle-fileno.c
Packit b5b901
    test/test-homedir.c
Packit b5b901
    test/test-hrtime.c
Packit b5b901
    test/test-idle.c
Packit b5b901
    test/test-ip4-addr.c
Packit b5b901
    test/test-ip6-addr.c
Packit b5b901
    test/test-ip6-addr.c
Packit b5b901
    test/test-ipc-heavy-traffic-deadlock-bug.c
Packit b5b901
    test/test-ipc-send-recv.c
Packit b5b901
    test/test-ipc.c
Packit b5b901
    test/test-loop-alive.c
Packit b5b901
    test/test-loop-close.c
Packit b5b901
    test/test-loop-configure.c
Packit b5b901
    test/test-loop-handles.c
Packit b5b901
    test/test-loop-stop.c
Packit b5b901
    test/test-loop-time.c
Packit b5b901
    test/test-multiple-listen.c
Packit b5b901
    test/test-mutexes.c
Packit b5b901
    test/test-osx-select.c
Packit b5b901
    test/test-pass-always.c
Packit b5b901
    test/test-ping-pong.c
Packit b5b901
    test/test-pipe-bind-error.c
Packit b5b901
    test/test-pipe-close-stdout-read-stdin.c
Packit b5b901
    test/test-pipe-connect-error.c
Packit b5b901
    test/test-pipe-connect-multiple.c
Packit b5b901
    test/test-pipe-connect-prepare.c
Packit b5b901
    test/test-pipe-getsockname.c
Packit b5b901
    test/test-pipe-pending-instances.c
Packit b5b901
    test/test-pipe-sendmsg.c
Packit b5b901
    test/test-pipe-server-close.c
Packit b5b901
    test/test-pipe-set-fchmod.c
Packit b5b901
    test/test-pipe-set-non-blocking.c
Packit b5b901
    test/test-platform-output.c
Packit b5b901
    test/test-poll-close-doesnt-corrupt-stack.c
Packit b5b901
    test/test-poll-close.c
Packit b5b901
    test/test-poll-closesocket.c
Packit b5b901
    test/test-poll-oob.c
Packit b5b901
    test/test-poll.c
Packit b5b901
    test/test-process-priority.c
Packit b5b901
    test/test-process-title-threadsafe.c
Packit b5b901
    test/test-process-title.c
Packit b5b901
    test/test-queue-foreach-delete.c
Packit b5b901
    test/test-ref.c
Packit b5b901
    test/test-run-nowait.c
Packit b5b901
    test/test-run-once.c
Packit b5b901
    test/test-semaphore.c
Packit b5b901
    test/test-shutdown-close.c
Packit b5b901
    test/test-shutdown-eof.c
Packit b5b901
    test/test-shutdown-twice.c
Packit b5b901
    test/test-signal-multiple-loops.c
Packit b5b901
    test/test-signal.c
Packit b5b901
    test/test-socket-buffer-size.c
Packit b5b901
    test/test-spawn.c
Packit b5b901
    test/test-stdio-over-pipes.c
Packit b5b901
    test/test-tcp-alloc-cb-fail.c
Packit b5b901
    test/test-tcp-bind-error.c
Packit b5b901
    test/test-tcp-bind6-error.c
Packit b5b901
    test/test-tcp-close-accept.c
Packit b5b901
    test/test-tcp-close-while-connecting.c
Packit b5b901
    test/test-tcp-close.c
Packit b5b901
    test/test-tcp-connect-error-after-write.c
Packit b5b901
    test/test-tcp-connect-error.c
Packit b5b901
    test/test-tcp-connect-timeout.c
Packit b5b901
    test/test-tcp-connect6-error.c
Packit b5b901
    test/test-tcp-create-socket-early.c
Packit b5b901
    test/test-tcp-flags.c
Packit b5b901
    test/test-tcp-oob.c
Packit b5b901
    test/test-tcp-open.c
Packit b5b901
    test/test-tcp-read-stop.c
Packit b5b901
    test/test-tcp-shutdown-after-write.c
Packit b5b901
    test/test-tcp-try-write.c
Packit b5b901
    test/test-tcp-unexpected-read.c
Packit b5b901
    test/test-tcp-write-after-connect.c
Packit b5b901
    test/test-tcp-write-fail.c
Packit b5b901
    test/test-tcp-write-queue-order.c
Packit b5b901
    test/test-tcp-write-to-half-open-connection.c
Packit b5b901
    test/test-tcp-writealot.c
Packit b5b901
    test/test-thread-equal.c
Packit b5b901
    test/test-thread.c
Packit b5b901
    test/test-threadpool-cancel.c
Packit b5b901
    test/test-threadpool.c
Packit b5b901
    test/test-timer-again.c
Packit b5b901
    test/test-timer-from-check.c
Packit b5b901
    test/test-timer.c
Packit b5b901
    test/test-tmpdir.c
Packit b5b901
    test/test-tty.c
Packit b5b901
    test/test-udp-alloc-cb-fail.c
Packit b5b901
    test/test-udp-bind.c
Packit b5b901
    test/test-udp-create-socket-early.c
Packit b5b901
    test/test-udp-dgram-too-big.c
Packit b5b901
    test/test-udp-ipv6.c
Packit b5b901
    test/test-udp-multicast-interface.c
Packit b5b901
    test/test-udp-multicast-interface6.c
Packit b5b901
    test/test-udp-multicast-join.c
Packit b5b901
    test/test-udp-multicast-join6.c
Packit b5b901
    test/test-udp-multicast-ttl.c
Packit b5b901
    test/test-udp-open.c
Packit b5b901
    test/test-udp-options.c
Packit b5b901
    test/test-udp-send-and-recv.c
Packit b5b901
    test/test-udp-send-hang-loop.c
Packit b5b901
    test/test-udp-send-immediate.c
Packit b5b901
    test/test-udp-send-unreachable.c
Packit b5b901
    test/test-udp-try-send.c
Packit b5b901
    test/test-walk-handles.c
Packit b5b901
    test/test-watcher-cross-stop.c)
Packit b5b901
Packit b5b901
if(WIN32)
Packit b5b901
  list(APPEND uv_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0600)
Packit b5b901
  list(APPEND uv_libraries
Packit b5b901
       advapi32
Packit b5b901
       iphlpapi
Packit b5b901
       psapi
Packit b5b901
       shell32
Packit b5b901
       user32
Packit b5b901
       userenv
Packit b5b901
       ws2_32)
Packit b5b901
  list(APPEND uv_sources
Packit b5b901
       src/win/async.c
Packit b5b901
       src/win/core.c
Packit b5b901
       src/win/detect-wakeup.c
Packit b5b901
       src/win/dl.c
Packit b5b901
       src/win/error.c
Packit b5b901
       src/win/fs.c
Packit b5b901
       src/win/fs-event.c
Packit b5b901
       src/win/getaddrinfo.c
Packit b5b901
       src/win/getnameinfo.c
Packit b5b901
       src/win/handle.c
Packit b5b901
       src/win/loop-watcher.c
Packit b5b901
       src/win/pipe.c
Packit b5b901
       src/win/thread.c
Packit b5b901
       src/win/poll.c
Packit b5b901
       src/win/process.c
Packit b5b901
       src/win/process-stdio.c
Packit b5b901
       src/win/req.c
Packit b5b901
       src/win/signal.c
Packit b5b901
       src/win/snprintf.c
Packit b5b901
       src/win/stream.c
Packit b5b901
       src/win/tcp.c
Packit b5b901
       src/win/tty.c
Packit b5b901
       src/win/udp.c
Packit b5b901
       src/win/util.c
Packit b5b901
       src/win/winapi.c
Packit b5b901
       src/win/winsock.c)
Packit b5b901
  list(APPEND uv_test_libraries ws2_32)
Packit b5b901
  list(APPEND uv_test_sources src/win/snprintf.c test/runner-win.c)
Packit b5b901
else()
Packit b5b901
  list(APPEND uv_defines _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE)
Packit b5b901
  list(APPEND uv_libraries pthread)
Packit b5b901
  list(APPEND uv_sources
Packit b5b901
       src/unix/async.c
Packit b5b901
       src/unix/core.c
Packit b5b901
       src/unix/dl.c
Packit b5b901
       src/unix/fs.c
Packit b5b901
       src/unix/getaddrinfo.c
Packit b5b901
       src/unix/getnameinfo.c
Packit b5b901
       src/unix/loop-watcher.c
Packit b5b901
       src/unix/loop.c
Packit b5b901
       src/unix/pipe.c
Packit b5b901
       src/unix/poll.c
Packit b5b901
       src/unix/process.c
Packit b5b901
       src/unix/signal.c
Packit b5b901
       src/unix/stream.c
Packit b5b901
       src/unix/tcp.c
Packit b5b901
       src/unix/thread.c
Packit b5b901
       src/unix/tty.c
Packit b5b901
       src/unix/udp.c)
Packit b5b901
  list(APPEND uv_test_sources test/runner-unix.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
Packit b5b901
  list(APPEND uv_defines
Packit b5b901
       _ALL_SOURCE
Packit b5b901
       _LINUX_SOURCE_COMPAT
Packit b5b901
       _THREAD_SAFE
Packit b5b901
       _XOPEN_SOURCE=500)
Packit b5b901
  list(APPEND uv_libraries perfstat)
Packit b5b901
  list(APPEND uv_sources src/unix/aix.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
Packit b5b901
  list(APPEND uv_libs dl)
Packit b5b901
  list(APPEND uv_sources
Packit b5b901
       src/unix/android-ifaddrs.c
Packit b5b901
       src/unix/linux-core.c
Packit b5b901
       src/unix/linux-inotify.c
Packit b5b901
       src/unix/linux-syscalls.c
Packit b5b901
       src/unix/procfs-exepath.c
Packit b5b901
       src/unix/pthread-fixes.c
Packit b5b901
       src/unix/sysinfo-loadavg.c
Packit b5b901
       src/unix/sysinfo-memory.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME MATCHES "Android|Darwin|Linux|OS/390")
Packit b5b901
  list(APPEND uv_sources src/unix/proctitle.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD")
Packit b5b901
  list(APPEND uv_sources src/unix/freebsd.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD")
Packit b5b901
  list(APPEND uv_sources src/unix/posix-hrtime.c)
Packit b5b901
  list(APPEND uv_libraries kvm)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME MATCHES "Darwin|DragonFly|FreeBSD|NetBSD|OpenBSD")
Packit b5b901
  list(APPEND uv_sources src/unix/bsd-ifaddrs.c src/unix/kqueue.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
Packit b5b901
  list(APPEND uv_defines _DARWIN_UNLIMITED_SELECT=1 _DARWIN_USE_64_BIT_INODE=1)
Packit b5b901
  list(APPEND uv_sources
Packit b5b901
       src/unix/darwin-proctitle.c
Packit b5b901
       src/unix/darwin.c
Packit b5b901
       src/unix/fsevents.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
Packit b5b901
  list(APPEND uv_defines _GNU_SOURCE _POSIX_C_SOURCE=200112)
Packit b5b901
  list(APPEND uv_libraries dl rt)
Packit b5b901
  list(APPEND uv_sources
Packit b5b901
       src/unix/linux-core.c
Packit b5b901
       src/unix/linux-inotify.c
Packit b5b901
       src/unix/linux-syscalls.c
Packit b5b901
       src/unix/procfs-exepath.c
Packit b5b901
       src/unix/sysinfo-loadavg.c
Packit b5b901
       src/unix/sysinfo-memory.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
Packit b5b901
  list(APPEND uv_sources src/unix/netbsd.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
Packit b5b901
  list(APPEND uv_sources src/unix/openbsd.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "OS/390")
Packit b5b901
  list(APPEND uv_defines PATH_MAX=255)
Packit b5b901
  list(APPEND uv_defines _AE_BIMODAL)
Packit b5b901
  list(APPEND uv_defines _ALL_SOURCE)
Packit b5b901
  list(APPEND uv_defines _LARGE_TIME_API)
Packit b5b901
  list(APPEND uv_defines _OPEN_MSGQ_EXT)
Packit b5b901
  list(APPEND uv_defines _OPEN_SYS_FILE_EXT)
Packit b5b901
  list(APPEND uv_defines _OPEN_SYS_IF_EXT)
Packit b5b901
  list(APPEND uv_defines _OPEN_SYS_SOCK_IPV6)
Packit b5b901
  list(APPEND uv_defines _UNIX03_SOURCE)
Packit b5b901
  list(APPEND uv_defines _UNIX03_THREADS)
Packit b5b901
  list(APPEND uv_defines _UNIX03_WITHDRAWN)
Packit b5b901
  list(APPEND uv_defines _XOPEN_SOURCE_EXTENDED)
Packit b5b901
  list(APPEND uv_sources
Packit b5b901
       src/unix/pthread-fixes.c
Packit b5b901
       src/unix/pthread-barrier.c
Packit b5b901
       src/unix/os390.c
Packit b5b901
       src/unix/os390-syscalls.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
Packit b5b901
  list(APPEND uv_defines __EXTENSIONS__ _XOPEN_SOURCE=500)
Packit b5b901
  list(APPEND uv_libraries kstat nsl sendfile socket)
Packit b5b901
  list(APPEND uv_sources src/unix/no-proctitle.c src/unix/sunos.c)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(CMAKE_SYSTEM_NAME MATCHES "Darwin|DragonFly|FreeBSD|Linux|NetBSD|OpenBSD")
Packit b5b901
  list(APPEND uv_test_libraries util)
Packit b5b901
endif()
Packit b5b901
Packit b5b901
add_library(uv SHARED ${uv_sources})
Packit b5b901
target_compile_definitions(uv PRIVATE ${uv_defines} BUILDING_UV_SHARED=1)
Packit b5b901
target_compile_options(uv PRIVATE ${uv_cflags})
Packit b5b901
target_include_directories(uv PRIVATE include src)
Packit b5b901
target_link_libraries(uv ${uv_libraries})
Packit b5b901
Packit b5b901
add_library(uv_a STATIC ${uv_sources})
Packit b5b901
target_compile_definitions(uv_a PRIVATE ${uv_defines})
Packit b5b901
target_compile_options(uv_a PRIVATE ${uv_cflags})
Packit b5b901
target_include_directories(uv_a PRIVATE include src)
Packit b5b901
target_link_libraries(uv_a ${uv_libraries})
Packit b5b901
Packit b5b901
if(BUILD_TESTING)
Packit b5b901
  include(CTest)
Packit b5b901
  add_executable(uv_run_tests ${uv_test_sources})
Packit b5b901
  target_compile_definitions(uv_run_tests PRIVATE ${uv_defines})
Packit b5b901
  target_compile_options(uv_run_tests PRIVATE ${uv_cflags})
Packit b5b901
  target_include_directories(uv_run_tests PRIVATE include)
Packit b5b901
  target_link_libraries(uv_run_tests uv ${uv_test_libraries})
Packit b5b901
  add_test(NAME uv_test
Packit b5b901
           COMMAND uv_run_tests
Packit b5b901
           WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit b5b901
  add_executable(uv_run_tests_a ${uv_test_sources})
Packit b5b901
  target_compile_definitions(uv_run_tests_a PRIVATE ${uv_defines})
Packit b5b901
  target_compile_options(uv_run_tests_a PRIVATE ${uv_cflags})
Packit b5b901
  target_include_directories(uv_run_tests_a PRIVATE include)
Packit b5b901
  target_link_libraries(uv_run_tests_a uv_a ${uv_test_libraries})
Packit b5b901
  add_test(NAME uv_test_a
Packit b5b901
           COMMAND uv_run_tests_a
Packit b5b901
           WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Packit b5b901
endif()
Packit b5b901
Packit b5b901
if(UNIX)
Packit b5b901
  # Now for some gibbering horrors from beyond the stars...
Packit b5b901
  include(GNUInstallDirs)
Packit b5b901
  foreach(x ${uv_libraries})
Packit b5b901
    set(LIBS "${LIBS} -l${x}")
Packit b5b901
  endforeach(x)
Packit b5b901
  file(STRINGS configure.ac configure_ac REGEX ^AC_INIT)
Packit b5b901
  string(REGEX MATCH [0-9]+[.][0-9]+[.][0-9]+ PACKAGE_VERSION "${configure_ac}")
Packit b5b901
  set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
Packit b5b901
  set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
Packit b5b901
  set(prefix ${CMAKE_INSTALL_PREFIX})
Packit b5b901
  configure_file(libuv.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libuv.pc @ONLY)
Packit b5b901
Packit b5b901
  install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
Packit b5b901
  install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
Packit b5b901
  install(FILES LICENSE ${CMAKE_CURRENT_BINARY_DIR}/libuv.pc
Packit b5b901
          DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Packit b5b901
  install(TARGETS uv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
Packit b5b901
  install(TARGETS uv_a ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
Packit b5b901
endif()