aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordundargoc <gocdundar@gmail.com>2023-10-10 23:18:45 +0200
committerdundargoc <33953936+dundargoc@users.noreply.github.com>2023-10-16 20:15:41 +0200
commitb80a8e2c16b6d6eb16ac84232c27eb7cfa4a434a (patch)
treecc6137ccacac04ae6f9d7674bfe4fc1fbf9a5bcd
parenta4c4b39d55db087af19a5ed8b6a1e5ecacb0c615 (diff)
downloadrneovim-b80a8e2c16b6d6eb16ac84232c27eb7cfa4a434a.tar.gz
rneovim-b80a8e2c16b6d6eb16ac84232c27eb7cfa4a434a.tar.bz2
rneovim-b80a8e2c16b6d6eb16ac84232c27eb7cfa4a434a.zip
build: adjust how find order is prioritized
Ensure bundled libraries and include directories are always searched first before any others. This will provide a more consistent experience as the search order of the builtin find_ functions can vary depending on system. This should make the build process faster when building with bundled deps as we limit the search to only the .deps directory. Separating the search between .deps and everything makes debugging find_-related problems simpler if you need to check how dependencies are found. For libraries, we divide the search process into the following order: 1. Only search in .deps directory and only search for static libraries. 2. Only search in .deps directory and search for all libraries. 3. Search everywhere and search for all libraries. Make an exception for FindLibintl.cmake as changing the search order seems to break some tests on macos.
-rw-r--r--CMakeLists.txt1
-rw-r--r--cmake.deps/cmake/BuildLuajit.cmake8
-rw-r--r--cmake.deps/cmake/RemoveFiles.cmake5
-rw-r--r--cmake/Find.cmake39
-rw-r--r--cmake/FindIconv.cmake4
-rw-r--r--cmake/FindLibtermkey.cmake4
-rw-r--r--cmake/FindLibuv.cmake4
-rw-r--r--cmake/FindLibvterm.cmake4
-rw-r--r--cmake/FindLpeg.cmake2
-rw-r--r--cmake/FindLuajit.cmake4
-rw-r--r--cmake/FindLuv.cmake4
-rw-r--r--cmake/FindMsgpack.cmake4
-rw-r--r--cmake/FindTreesitter.cmake4
-rw-r--r--cmake/FindUnibilium.cmake4
14 files changed, 59 insertions, 32 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f0303be3eb..1ca6e7ce59 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -31,6 +31,7 @@ include(FindPackageHandleStandardArgs)
include(GNUInstallDirs)
include(Deps)
+include(Find)
include(InstallHelpers)
include(PreventInTreeBuilds)
include(Util)
diff --git a/cmake.deps/cmake/BuildLuajit.cmake b/cmake.deps/cmake/BuildLuajit.cmake
index c0f9c1ab8e..e97d773c3c 100644
--- a/cmake.deps/cmake/BuildLuajit.cmake
+++ b/cmake.deps/cmake/BuildLuajit.cmake
@@ -141,11 +141,3 @@ elseif(MSVC)
else()
message(FATAL_ERROR "Trying to build luajit in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
endif()
-
-if (NOT MSVC)
- add_custom_target(clean_shared_libraries_luajit ALL
- COMMAND ${CMAKE_COMMAND}
- -D REMOVE_FILE_GLOB=${DEPS_LIB_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}*${CMAKE_SHARED_LIBRARY_SUFFIX}*
- -P ${PROJECT_SOURCE_DIR}/cmake/RemoveFiles.cmake)
- add_dependencies(clean_shared_libraries_luajit luajit)
-endif()
diff --git a/cmake.deps/cmake/RemoveFiles.cmake b/cmake.deps/cmake/RemoveFiles.cmake
deleted file mode 100644
index 88e2bc70a6..0000000000
--- a/cmake.deps/cmake/RemoveFiles.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-file(GLOB_RECURSE FILES_TO_REMOVE ${REMOVE_FILE_GLOB})
-
-if(FILES_TO_REMOVE)
- file(REMOVE ${FILES_TO_REMOVE})
-endif()
diff --git a/cmake/Find.cmake b/cmake/Find.cmake
new file mode 100644
index 0000000000..b363052510
--- /dev/null
+++ b/cmake/Find.cmake
@@ -0,0 +1,39 @@
+# Functions to aid the built-in find_ functions
+
+# Same as find_path, but always search in .deps directory first and then everything else.
+function(find_path2)
+ find_path_nvim(${ARGV})
+ find_path(${ARGV})
+endfunction()
+
+function(find_path_nvim)
+ set(CMAKE_FIND_FRAMEWORK NEVER)
+ set(CMAKE_FIND_APPBUNDLE NEVER)
+ find_path(${ARGV} NO_CMAKE_SYSTEM_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+endfunction()
+
+# Same as find_library, but with the following search order:
+# 1. Only search in .deps directory. Only search for static libraries.
+# 2. Only search in .deps directory. Search all libraries
+# 3. Search everywhere, all libraries
+function(find_library2)
+ find_library_nvim(STATIC ${ARGV})
+ find_library_nvim(${ARGV})
+ find_library(${ARGV})
+endfunction()
+
+function(find_library_nvim)
+ cmake_parse_arguments(ARG
+ "STATIC"
+ ""
+ ""
+ ${ARGN})
+ list(REMOVE_ITEM ARGN STATIC)
+
+ if(ARG_STATIC)
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
+ endif()
+ set(CMAKE_FIND_FRAMEWORK NEVER)
+ set(CMAKE_FIND_APPBUNDLE NEVER)
+ find_library(${ARGN} NO_CMAKE_SYSTEM_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+endfunction()
diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake
index 48c1514ff2..e607c59cf6 100644
--- a/cmake/FindIconv.cmake
+++ b/cmake/FindIconv.cmake
@@ -1,8 +1,8 @@
# TODO(dundargoc): FindIconv is shipped by default on cmake version 3.11+. This
# file can be removed once we decide to upgrade minimum cmake version.
-find_path(ICONV_INCLUDE_DIR NAMES iconv.h)
-find_library(ICONV_LIBRARY NAMES iconv libiconv)
+find_path2(ICONV_INCLUDE_DIR NAMES iconv.h)
+find_library2(ICONV_LIBRARY NAMES iconv libiconv)
find_package_handle_standard_args(Iconv DEFAULT_MSG
ICONV_INCLUDE_DIR)
mark_as_advanced(ICONV_INCLUDE_DIR ICONV_LIBRARY)
diff --git a/cmake/FindLibtermkey.cmake b/cmake/FindLibtermkey.cmake
index 1fc8ac78f2..8039ae7994 100644
--- a/cmake/FindLibtermkey.cmake
+++ b/cmake/FindLibtermkey.cmake
@@ -1,5 +1,5 @@
-find_path(LIBTERMKEY_INCLUDE_DIR termkey.h)
-find_library(LIBTERMKEY_LIBRARY NAMES termkey)
+find_path2(LIBTERMKEY_INCLUDE_DIR termkey.h)
+find_library2(LIBTERMKEY_LIBRARY NAMES termkey)
find_package_handle_standard_args(Libtermkey DEFAULT_MSG
LIBTERMKEY_LIBRARY LIBTERMKEY_INCLUDE_DIR)
mark_as_advanced(LIBTERMKEY_INCLUDE_DIR LIBTERMKEY_LIBRARY)
diff --git a/cmake/FindLibuv.cmake b/cmake/FindLibuv.cmake
index fa1d51370f..19315388dd 100644
--- a/cmake/FindLibuv.cmake
+++ b/cmake/FindLibuv.cmake
@@ -1,5 +1,5 @@
-find_path(LIBUV_INCLUDE_DIR uv.h)
-find_library(LIBUV_LIBRARY NAMES uv_a uv)
+find_path2(LIBUV_INCLUDE_DIR uv.h)
+find_library2(LIBUV_LIBRARY NAMES uv_a uv)
set(LIBUV_LIBRARIES ${LIBUV_LIBRARY})
diff --git a/cmake/FindLibvterm.cmake b/cmake/FindLibvterm.cmake
index ad2e682b30..f591f6853f 100644
--- a/cmake/FindLibvterm.cmake
+++ b/cmake/FindLibvterm.cmake
@@ -1,5 +1,5 @@
-find_path(LIBVTERM_INCLUDE_DIR vterm.h)
-find_library(LIBVTERM_LIBRARY vterm)
+find_path2(LIBVTERM_INCLUDE_DIR vterm.h)
+find_library2(LIBVTERM_LIBRARY vterm)
if(LIBVTERM_INCLUDE_DIR AND EXISTS "${LIBVTERM_INCLUDE_DIR}/vterm.h")
file(STRINGS ${LIBVTERM_INCLUDE_DIR}/vterm.h VTERM_VERSION_MAJOR REGEX "#define VTERM_VERSION_MAJOR")
diff --git a/cmake/FindLpeg.cmake b/cmake/FindLpeg.cmake
index 43c839da9a..3d0ff5929d 100644
--- a/cmake/FindLpeg.cmake
+++ b/cmake/FindLpeg.cmake
@@ -1,4 +1,4 @@
-find_library(LPEG_LIBRARY NAMES lpeg_a lpeg liblpeg_a lpeg${CMAKE_SHARED_LIBRARY_SUFFIX} PATH_SUFFIXES lua/5.1)
+find_library2(LPEG_LIBRARY NAMES lpeg_a lpeg liblpeg_a lpeg${CMAKE_SHARED_LIBRARY_SUFFIX} PATH_SUFFIXES lua/5.1)
find_package_handle_standard_args(Lpeg DEFAULT_MSG LPEG_LIBRARY)
mark_as_advanced(LPEG_LIBRARY)
diff --git a/cmake/FindLuajit.cmake b/cmake/FindLuajit.cmake
index f06b7ca6ad..457ceafdd4 100644
--- a/cmake/FindLuajit.cmake
+++ b/cmake/FindLuajit.cmake
@@ -1,4 +1,4 @@
-find_path(LUAJIT_INCLUDE_DIR luajit.h
+find_path2(LUAJIT_INCLUDE_DIR luajit.h
PATH_SUFFIXES luajit-2.1)
if(MSVC)
@@ -9,7 +9,7 @@ else()
list(APPEND LUAJIT_NAMES luajit-5.1)
endif()
-find_library(LUAJIT_LIBRARY NAMES ${LUAJIT_NAMES})
+find_library2(LUAJIT_LIBRARY NAMES ${LUAJIT_NAMES})
find_package_handle_standard_args(Luajit DEFAULT_MSG
LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR)
diff --git a/cmake/FindLuv.cmake b/cmake/FindLuv.cmake
index 7544859ceb..a4408fe659 100644
--- a/cmake/FindLuv.cmake
+++ b/cmake/FindLuv.cmake
@@ -1,5 +1,5 @@
-find_path(LUV_INCLUDE_DIR luv/luv.h PATH_SUFFIXES lua5.1)
-find_library(LUV_LIBRARY NAMES luv_a luv libluv_a luv${CMAKE_SHARED_LIBRARY_SUFFIX} PATH_SUFFIXES lua/5.1)
+find_path2(LUV_INCLUDE_DIR luv/luv.h PATH_SUFFIXES lua5.1)
+find_library2(LUV_LIBRARY NAMES luv_a luv libluv_a luv${CMAKE_SHARED_LIBRARY_SUFFIX} PATH_SUFFIXES lua/5.1)
find_package_handle_standard_args(Luv DEFAULT_MSG
LUV_LIBRARY LUV_INCLUDE_DIR)
diff --git a/cmake/FindMsgpack.cmake b/cmake/FindMsgpack.cmake
index a2b0174f8d..9ef18122ab 100644
--- a/cmake/FindMsgpack.cmake
+++ b/cmake/FindMsgpack.cmake
@@ -1,4 +1,4 @@
-find_path(MSGPACK_INCLUDE_DIR msgpack/version_master.h)
+find_path2(MSGPACK_INCLUDE_DIR msgpack/version_master.h)
if(MSGPACK_INCLUDE_DIR)
file(READ ${MSGPACK_INCLUDE_DIR}/msgpack/version_master.h msgpack_version_h)
@@ -10,7 +10,7 @@ else()
set(MSGPACK_VERSION_STRING)
endif()
-find_library(MSGPACK_LIBRARY NAMES msgpackc msgpack msgpackc_import msgpack-c
+find_library2(MSGPACK_LIBRARY NAMES msgpackc msgpack msgpackc_import msgpack-c
NAMES_PER_DIR)
mark_as_advanced(MSGPACK_INCLUDE_DIR MSGPACK_LIBRARY)
diff --git a/cmake/FindTreesitter.cmake b/cmake/FindTreesitter.cmake
index 23214283c0..8dac13337b 100644
--- a/cmake/FindTreesitter.cmake
+++ b/cmake/FindTreesitter.cmake
@@ -1,5 +1,5 @@
-find_path(TREESITTER_INCLUDE_DIR tree_sitter/api.h)
-find_library(TREESITTER_LIBRARY NAMES tree-sitter)
+find_path2(TREESITTER_INCLUDE_DIR tree_sitter/api.h)
+find_library2(TREESITTER_LIBRARY NAMES tree-sitter)
find_package_handle_standard_args(Treesitter DEFAULT_MSG
TREESITTER_LIBRARY TREESITTER_INCLUDE_DIR)
mark_as_advanced(TREESITTER_LIBRARY TREESITTER_INCLUDE_DIR)
diff --git a/cmake/FindUnibilium.cmake b/cmake/FindUnibilium.cmake
index 91906e6660..4f62815793 100644
--- a/cmake/FindUnibilium.cmake
+++ b/cmake/FindUnibilium.cmake
@@ -1,5 +1,5 @@
-find_path(UNIBILIUM_INCLUDE_DIR unibilium.h)
-find_library(UNIBILIUM_LIBRARY unibilium)
+find_path2(UNIBILIUM_INCLUDE_DIR unibilium.h)
+find_library2(UNIBILIUM_LIBRARY unibilium)
find_package_handle_standard_args(Unibilium
REQUIRED_VARS UNIBILIUM_INCLUDE_DIR UNIBILIUM_LIBRARY)