diff options
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | cmake/FindLibUV.cmake | 39 | ||||
-rw-r--r-- | src/CMakeLists.txt | 24 |
3 files changed, 49 insertions, 18 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index b32bd5e2de..38fa216010 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,10 +40,6 @@ if(NOT CMAKE_USE_PTHREADS_INIT) message(SEND_ERROR "The pthread library must be installed on your system.") endif(NOT CMAKE_USE_PTHREADS_INIT) -# Detect if clock_gettime exists in -lrt. If so we need to link with it because -# the static libuv doesn't but uses clock_gettime. -check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) - find_package(LibIntl) if(LibIntl_FOUND) include_directories(${LibIntl_INCLUDE_DIR}) diff --git a/cmake/FindLibUV.cmake b/cmake/FindLibUV.cmake index b11d2b1949..357f12c3fd 100644 --- a/cmake/FindLibUV.cmake +++ b/cmake/FindLibUV.cmake @@ -46,6 +46,45 @@ mark_as_advanced(LIBUV_INCLUDE_DIR LIBUV_LIBRARY) set(LIBUV_LIBRARIES ${LIBUV_LIBRARY}) set(LIBUV_INCLUDE_DIRS ${LIBUV_INCLUDE_DIR}) +# Deal with the fact that libuv.pc is missing important dependency information. + +include(CheckLibraryExists) + +check_library_exists(dl dlopen "dlfcn.h" HAVE_LIBDL) +if(HAVE_LIBDL) + list(APPEND LIBUV_LIBRARIES dl) +endif() + +check_library_exists(kstat kstat_lookup "kstat.h" HAVE_LIBKSTAT) +if(HAVE_LIBKSTAT) + list(APPEND LIBUV_LIBRARIES kstat) +endif() + +check_library_exists(kvm kvm_open "kvm.h" HAVE_LIBKVM) +if(HAVE_LIBKVM) + list(APPEND LIBUV_LIBRARIES kvm) +endif() + +check_library_exists(nsl gethostbyname "nsl.h" HAVE_LIBNSL) +if(HAVE_LIBNSL) + list(APPEND LIBUV_LIBRARIES nsl) +endif() + +check_library_exists(perfstat perfstat_cpu "libperfstat.h" HAVE_LIBPERFSTAT) +if(HAVE_LIBPERFSTAT) + list(APPEND LIBUV_LIBRARIES perfstat) +endif() + +check_library_exists(rt clock_gettime "time.h" HAVE_LIBRT) +if(HAVE_LIBRT) + list(APPEND LIBUV_LIBRARIES rt) +endif() + +check_library_exists(sendfile sendfile "" HAVE_LIBSENDFILE) +if(HAVE_LIBSENDFILE) + list(APPEND LIBUV_LIBRARIES sendfile) +endif() + include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set LIBUV_FOUND to TRUE diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 86be94238a..e89672a91f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,5 @@ +include(CheckLibraryExists) + file( GLOB NEOVIM_SOURCES *.c ) foreach(sfile ${NEOVIM_SOURCES}) @@ -25,25 +27,12 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang") endif() endif() -# The libraries we link against for nvim -set(NVIM_LINK_LIBRARIES - m - ${LIBUV_LIBRARIES} - ${LUAJIT_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT}) - -# Add any libraries needed for a specific platform -if(HAVE_CLOCK_GETTIME) - # Work around libuv.a not linking in rt. - list(APPEND NVIM_LINK_LIBRARIES rt) -endif(HAVE_CLOCK_GETTIME) +# Our dependencies come first. if (LibIntl_FOUND) list(APPEND NVIM_LINK_LIBRARIES ${LibIntl_LIBRARY}) endif() -include(CheckLibraryExists) - check_library_exists(curses tgetent "" HAVE_LIBCURSES) if (HAVE_LIBCURSES) list(APPEND NVIM_LINK_LIBRARIES curses) @@ -52,6 +41,13 @@ else() list(APPEND NVIM_LINK_LIBRARIES ${CURSES_LIBRARIES}) endif() +# Put these last on the link line, since multiple things may depend on them. +list(APPEND NVIM_LINK_LIBRARIES + ${LIBUV_LIBRARIES} + ${LUAJIT_LIBRARIES} + m + ${CMAKE_THREAD_LIBS_INIT}) + if(NOT DEFINED ENV{SKIP_EXEC}) add_executable(nvim ${NEOVIM_SOURCES} ${OS_SOURCES}) target_link_libraries(nvim ${NVIM_LINK_LIBRARIES}) |