diff --git a/CMakeLists.txt b/CMakeLists.txt index 3aef61973..958beb633 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -463,6 +463,19 @@ macro (CMAKE_BUILD_UTILITIES) CMAKE_SET_TARGET_FOLDER(cmjsoncpp "Utilities/3rdParty") endif() + #--------------------------------------------------------------------- + # Build libuv library. + if(NOT DEFINED CMAKE_USE_LIBUV) + set(CMAKE_USE_LIBUV 1) + endif() + if(CMAKE_USE_LIBUV) + set(CMAKE_LIBUV_LIBRARIES cmlibuv) + add_subdirectory(Utilities/cmlibuv) + CMAKE_SET_TARGET_FOLDER(cmlibuv "Utilities/3rdParty") + else() + set(CMAKE_LIBUV_LIBRARIES) + endif() + #--------------------------------------------------------------------- # Build XMLRPC library for CMake and CTest. if(CTEST_USE_XMLRPC) diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 3b94df737..8c74f6074 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -582,6 +582,7 @@ target_link_libraries(CMakeLib cmsys ${CMAKE_TAR_LIBRARIES} ${CMAKE_COMPRESS_LIBRARIES} ${CMAKE_CURL_LIBRARIES} ${CMAKE_JSONCPP_LIBRARIES} + ${CMAKE_LIBUV_LIBRARIES} ${CMake_KWIML_LIBRARIES} ) diff --git a/Source/cmConfigure.cmake.h.in b/Source/cmConfigure.cmake.h.in index 7e48b2d9a..cb671ddea 100644 --- a/Source/cmConfigure.cmake.h.in +++ b/Source/cmConfigure.cmake.h.in @@ -28,6 +28,7 @@ #cmakedefine HAVE_UNSETENV #cmakedefine CMAKE_USE_ELF_PARSER #cmakedefine CMAKE_USE_MACH_PARSER +#cmakedefine CMAKE_USE_LIBUV #cmakedefine CMAKE_ENCODING_UTF8 #cmakedefine CMake_HAVE_CXX_NULLPTR #cmakedefine CMake_HAVE_CXX_OVERRIDE diff --git a/Utilities/cm_uv.h b/Utilities/cm_uv.h new file mode 100644 index 000000000..63ff59715 --- /dev/null +++ b/Utilities/cm_uv.h @@ -0,0 +1,17 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2016 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cm_uv_h +#define cm_uv_h + +#include + +#endif diff --git a/Utilities/cmlibuv/CMakeLists.txt b/Utilities/cmlibuv/CMakeLists.txt new file mode 100644 index 000000000..7f2d587fc --- /dev/null +++ b/Utilities/cmlibuv/CMakeLists.txt @@ -0,0 +1,217 @@ +project(libuv C) + +find_package(Threads) + +set(uv_libraries ${CMAKE_THREAD_LIBS_INIT}) +set(uv_includes include src) +set(uv_headers + include/uv.h + include/uv-errno.h + include/uv-threadpool.h + include/uv-version.h + ) +set(uv_sources + src/fs-poll.c + src/heap-inl.h + src/inet.c + src/queue.h + src/threadpool.c + src/uv-common.c + src/uv-common.h + src/version.c + ) +if(WIN32) + list(APPEND uv_libraries + ws2_32 + psapi + iphlpapi + shell32 + userenv + ) + list(APPEND uv_includes + src/win + ) + list(APPEND uv_defines + WIN32_LEAN_AND_MEAN + _WIN32_WINNT=0x0600 + ) + list(APPEND uv_headers + include/uv-win.h + include/tree.h + ) + list(APPEND uv_sources + src/win/async.c + src/win/atomicops-inl.h + src/win/core.c + src/win/detect-wakeup.c + src/win/dl.c + src/win/error.c + src/win/fs-event.c + src/win/fs.c + src/win/getaddrinfo.c + src/win/getnameinfo.c + src/win/handle.c + src/win/handle-inl.h + src/win/internal.h + src/win/loop-watcher.c + src/win/pipe.c + src/win/poll.c + src/win/process-stdio.c + src/win/process.c + src/win/req.c + src/win/req-inl.h + src/win/signal.c + src/win/snprintf.c + src/win/stream.c + src/win/stream-inl.h + src/win/tcp.c + src/win/thread.c + src/win/timer.c + src/win/tty.c + src/win/udp.c + src/win/util.c + src/win/winapi.c + src/win/winapi.h + src/win/winsock.c + src/win/winsock.h + ) +else() + list(APPEND uv_includes + src/unix + ) + list(APPEND uv_headers + include/uv-unix.h + ) + list(APPEND uv_sources + src/unix/async.c + src/unix/atomic-ops.h + src/unix/core.c + src/unix/dl.c + src/unix/fs.c + src/unix/getaddrinfo.c + src/unix/getnameinfo.c + src/unix/internal.h + src/unix/loop-watcher.c + src/unix/loop.c + src/unix/pipe.c + src/unix/poll.c + src/unix/process.c + src/unix/signal.c + src/unix/spinlock.h + src/unix/stream.c + src/unix/tcp.c + src/unix/thread.c + src/unix/timer.c + src/unix/tty.c + src/unix/udp.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "AIX") + list(APPEND uv_libraries + perfstat + ) + list(APPEND uv_headers + include/uv-aix.h + ) + list(APPEND uv_defines + _ALL_SOURCE + _XOPEN_SOURCE=500 + _LINUX_SOURCE_COMPAT + _THREAD_SAFE + ) + list(APPEND uv_sources + src/unix/aix.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + list(APPEND uv_headers + include/uv-darwin.h + include/pthread-barrier.h + ) + list(APPEND uv_defines + _DARWIN_USE_64_BIT_INODE=1 + _DARWIN_UNLIMITED_SELECT=1 + ) + list(APPEND uv_sources + src/unix/darwin.c + src/unix/darwin-proctitle.c + src/unix/fsevents.c + src/unix/kqueue.c + src/unix/proctitle.c + src/unix/pthread-barrier.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + list(APPEND uv_libraries dl rt) + list(APPEND uv_headers + include/uv-linux.h + ) + list(APPEND uv_defines _GNU_SOURCE) + list(APPEND uv_sources + src/unix/linux-core.c + src/unix/linux-inotify.c + src/unix/linux-syscalls.c + src/unix/linux-syscalls.h + src/unix/proctitle.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + list(APPEND uv_headers + include/uv-bsd.h + ) + list(APPEND uv_sources + src/unix/freebsd.c + src/unix/kqueue.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") + list(APPEND uv_headers + include/uv-bsd.h + ) + list(APPEND uv_sources + src/unix/netbsd.c + src/unix/kqueue.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + list(APPEND uv_headers + include/uv-bsd.h + ) + list(APPEND uv_sources + src/unix/openbsd.c + src/unix/kqueue.c + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + list(APPEND uv_libraries + kstat + nsl + sendfile + socket + ) + list(APPEND uv_headers + include/uv-sunos.h + ) + list(APPEND uv_defines + __EXTENSIONS__ + _XOPEN_SOURCE=500 + ) + list(APPEND uv_sources + src/unix/sunos.c + ) +endif() + +include_directories( + ${uv_includes} + ${KWSYS_HEADER_ROOT} + ) +add_library(cmlibuv STATIC ${uv_sources}) +target_link_libraries(cmlibuv ${uv_libraries}) +set_property(TARGET cmlibuv PROPERTY COMPILE_DEFINITIONS ${uv_defines}) diff --git a/Utilities/cmlibuv/include/uv.h b/Utilities/cmlibuv/include/uv.h index baa0b2812..e3e20dc19 100644 --- a/Utilities/cmlibuv/include/uv.h +++ b/Utilities/cmlibuv/include/uv.h @@ -23,6 +23,10 @@ #ifndef UV_H #define UV_H + +/* Include KWSys Large File Support configuration. */ +#include + #ifdef __cplusplus extern "C" { #endif