Explorar o código

build uv.hdll with cmake (probably broken on unixes)

Dan Korostelev %!s(int64=7) %!d(string=hai) anos
pai
achega
72e4108018
Modificáronse 2 ficheiros con 195 adicións e 3 borrados
  1. 74 3
      CMakeLists.txt
  2. 121 0
      cmake/FindLibUV.cmake

+ 74 - 3
CMakeLists.txt

@@ -1,13 +1,18 @@
-cmake_minimum_required(VERSION 2.8.12)
+cmake_minimum_required(VERSION 3.1)
 
 cmake_policy(SET CMP0042 NEW)
 
 include(GNUInstallDirs)
 include(FindPkgConfig)
-project(hashlink C CXX)
+
+if (WIN32)
+    project(hashlink C CXX) # C++ required for directx
+else()
+    project(hashlink C)
+endif()
 
 # force Unicode over Multi-byte
-if(MSVC)
+if (MSVC)
     add_definitions(-DUNICODE -D_UNICODE)
 endif()
 
@@ -385,6 +390,72 @@ target_link_libraries(sqlite.hdll
     libhl
 )
 
+#####################
+# uv.hdll
+
+find_package(LibUV)
+
+add_library(uv.hdll MODULE
+    libs/uv/uv.c
+)
+
+if (WIN32)
+    target_sources(uv.hdll
+        PRIVATE
+            include/libuv/src/fs-poll.c
+            include/libuv/src/inet.c
+            include/libuv/src/threadpool.c
+            include/libuv/src/uv-common.c
+            include/libuv/src/version.c
+            include/libuv/src/win/async.c
+            include/libuv/src/win/core.c
+            include/libuv/src/win/dl.c
+            include/libuv/src/win/error.c
+            include/libuv/src/win/fs-event.c
+            include/libuv/src/win/fs.c
+            include/libuv/src/win/getaddrinfo.c
+            include/libuv/src/win/getnameinfo.c
+            include/libuv/src/win/handle.c
+            include/libuv/src/win/loop-watcher.c
+            include/libuv/src/win/pipe.c
+            include/libuv/src/win/poll.c
+            include/libuv/src/win/process-stdio.c
+            include/libuv/src/win/process.c
+            include/libuv/src/win/req.c
+            include/libuv/src/win/signal.c
+            include/libuv/src/win/snprintf.c
+            include/libuv/src/win/stream.c
+            include/libuv/src/win/tcp.c
+            include/libuv/src/win/thread.c
+            include/libuv/src/win/timer.c
+            include/libuv/src/win/tty.c
+            include/libuv/src/win/udp.c
+            include/libuv/src/win/util.c
+            include/libuv/src/win/winapi.c
+            include/libuv/src/win/winsock.c
+    )
+endif()
+
+set_target_properties(uv.hdll
+    PROPERTIES
+    PREFIX ""
+    OUTPUT_NAME uv
+    SUFFIX .hdll
+)
+target_include_directories(uv.hdll
+    PRIVATE
+    include/libuv/include
+)
+target_link_libraries(uv.hdll
+    libhl
+)
+if (WIN32)
+    target_link_libraries(uv.hdll
+        psapi
+        iphlpapi
+        userenv
+    )
+endif()
 
 #####################
 # directx.hdll

+ 121 - 0
cmake/FindLibUV.cmake

@@ -0,0 +1,121 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLibUV
+---------
+
+Find libuv includes and library.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+An :ref:`imported target <Imported targets>` named
+``LibUV::LibUV`` is provided if libuv has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``LibUV_FOUND``
+  True if libuv was found, false otherwise.
+``LibUV_INCLUDE_DIRS``
+  Include directories needed to include libuv headers.
+``LibUV_LIBRARIES``
+  Libraries needed to link to libuv.
+``LibUV_VERSION``
+  The version of libuv found.
+``LibUV_VERSION_MAJOR``
+  The major version of libuv.
+``LibUV_VERSION_MINOR``
+  The minor version of libuv.
+``LibUV_VERSION_PATCH``
+  The patch version of libuv.
+
+Cache Variables
+^^^^^^^^^^^^^^^
+
+This module uses the following cache variables:
+
+``LibUV_LIBRARY``
+  The location of the libuv library file.
+``LibUV_INCLUDE_DIR``
+  The location of the libuv include directory containing ``uv.h``.
+
+The cache variables should not be used by project code.
+They may be set by end users to point at libuv components.
+#]=======================================================================]
+
+#-----------------------------------------------------------------------------
+find_library(LibUV_LIBRARY
+  NAMES uv libuv
+  )
+mark_as_advanced(LibUV_LIBRARY)
+
+find_path(LibUV_INCLUDE_DIR
+  NAMES uv.h
+  )
+mark_as_advanced(LibUV_INCLUDE_DIR)
+
+#-----------------------------------------------------------------------------
+# Extract version number if possible.
+set(_LibUV_H_REGEX "#[ \t]*define[ \t]+UV_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+")
+if(LibUV_INCLUDE_DIR AND EXISTS "${LibUV_INCLUDE_DIR}/uv-version.h")
+  file(STRINGS "${LibUV_INCLUDE_DIR}/uv-version.h" _LibUV_H REGEX "${_LibUV_H_REGEX}")
+elseif(LibUV_INCLUDE_DIR AND EXISTS "${LibUV_INCLUDE_DIR}/uv.h")
+  file(STRINGS "${LibUV_INCLUDE_DIR}/uv.h" _LibUV_H REGEX "${_LibUV_H_REGEX}")
+else()
+  set(_LibUV_H "")
+endif()
+foreach(c MAJOR MINOR PATCH)
+  if(_LibUV_H MATCHES "#[ \t]*define[ \t]+UV_VERSION_${c}[ \t]+([0-9]+)")
+    set(_LibUV_VERSION_${c} "${CMAKE_MATCH_1}")
+  else()
+    unset(_LibUV_VERSION_${c})
+  endif()
+endforeach()
+if(DEFINED _LibUV_VERSION_MAJOR AND DEFINED _LibUV_VERSION_MINOR)
+  set(LibUV_VERSION_MAJOR "${_LibUV_VERSION_MAJOR}")
+  set(LibUV_VERSION_MINOR "${_LibUV_VERSION_MINOR}")
+  set(LibUV_VERSION "${LibUV_VERSION_MAJOR}.${LibUV_VERSION_MINOR}")
+  if(DEFINED _LibUV_VERSION_PATCH)
+    set(LibUV_VERSION_PATCH "${_LibUV_VERSION_PATCH}")
+    set(LibUV_VERSION "${LibUV_VERSION}.${LibUV_VERSION_PATCH}")
+  else()
+    unset(LibUV_VERSION_PATCH)
+  endif()
+else()
+  set(LibUV_VERSION_MAJOR "")
+  set(LibUV_VERSION_MINOR "")
+  set(LibUV_VERSION_PATCH "")
+  set(LibUV_VERSION "")
+endif()
+unset(_LibUV_VERSION_MAJOR)
+unset(_LibUV_VERSION_MINOR)
+unset(_LibUV_VERSION_PATCH)
+unset(_LibUV_H_REGEX)
+unset(_LibUV_H)
+
+#-----------------------------------------------------------------------------
+include(${CMAKE_CURRENT_LIST_DIR}/../../Modules/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibUV
+  FOUND_VAR LibUV_FOUND
+  REQUIRED_VARS LibUV_LIBRARY LibUV_INCLUDE_DIR
+  VERSION_VAR LibUV_VERSION
+  )
+set(LIBUV_FOUND ${LibUV_FOUND})
+
+#-----------------------------------------------------------------------------
+# Provide documented result variables and targets.
+if(LibUV_FOUND)
+  set(LibUV_INCLUDE_DIRS ${LibUV_INCLUDE_DIR})
+  set(LibUV_LIBRARIES ${LibUV_LIBRARY})
+  if(NOT TARGET LibUV::LibUV)
+    add_library(LibUV::LibUV UNKNOWN IMPORTED)
+    set_target_properties(LibUV::LibUV PROPERTIES
+      IMPORTED_LOCATION "${LibUV_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES "${LibUV_INCLUDE_DIRS}"
+      )
+  endif()
+endif()