diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
| commit | 1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (patch) | |
| tree | cd08258054db80bb9a11b1061bb091c70b76926a /cmake | |
| parent | eaa89c11d0f8aefbb512de769c6c82f61a8baca3 (diff) | |
| parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
| download | rneovim-aucmd_textputpost.tar.gz rneovim-aucmd_textputpost.tar.bz2 rneovim-aucmd_textputpost.zip | |
Merge remote-tracking branch 'upstream/master' into aucmd_textputpostaucmd_textputpost
Diffstat (limited to 'cmake')
29 files changed, 272 insertions, 693 deletions
diff --git a/cmake/CheckUncrustifyVersion.cmake b/cmake/CheckUncrustifyVersion.cmake deleted file mode 100644 index 4812c24ace..0000000000 --- a/cmake/CheckUncrustifyVersion.cmake +++ /dev/null @@ -1,13 +0,0 @@ -if(UNCRUSTIFY_PRG) - execute_process(COMMAND uncrustify --version - OUTPUT_VARIABLE user_version - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REGEX REPLACE "[A-Za-z_#-]" "" user_version ${user_version}) - - file(STRINGS ${CONFIG_FILE} required_version LIMIT_COUNT 1) - string(REGEX REPLACE "[A-Za-z_# -]" "" required_version ${required_version}) - - if(NOT user_version STREQUAL required_version) - message(FATAL_ERROR "Wrong uncrustify version! Required version is ${required_version} but found ${user_version}") - endif() -endif() diff --git a/cmake/ConvertPo.cmake b/cmake/ConvertPo.cmake index 2282b96f56..202cd3fbb3 100644 --- a/cmake/ConvertPo.cmake +++ b/cmake/ConvertPo.cmake @@ -6,7 +6,7 @@ execute_process( OUTPUT_VARIABLE trans ERROR_VARIABLE err RESULT_VARIABLE res) -if(NOT res EQUAL 0) +if(res) message(FATAL_ERROR "iconv failed to run correctly: ${err}") endif() diff --git a/cmake/Deps.cmake b/cmake/Deps.cmake new file mode 100644 index 0000000000..9966e42084 --- /dev/null +++ b/cmake/Deps.cmake @@ -0,0 +1,56 @@ +set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/usr") +set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin") +set(DEPS_LIB_DIR "${DEPS_INSTALL_DIR}/lib") +set(DEPS_SHARE_DIR "${DEPS_INSTALL_DIR}/share/lua/5.1") + +set(DEPS_BUILD_DIR "${CMAKE_BINARY_DIR}/build") +set(DEPS_DOWNLOAD_DIR "${DEPS_BUILD_DIR}/downloads") + +set(DEPS_CMAKE_ARGS + -D CMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -D CMAKE_C_STANDARD=99 + -D CMAKE_GENERATOR=${CMAKE_GENERATOR} + -D CMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -D BUILD_SHARED_LIBS=OFF + -D CMAKE_POSITION_INDEPENDENT_CODE=ON + -D CMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}) +if(APPLE) + list(APPEND DEPS_CMAKE_ARGS -D CMAKE_FIND_FRAMEWORK=${CMAKE_FIND_FRAMEWORK}) +endif() + +set(DEPS_CMAKE_CACHE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}) +set(EXTERNALPROJECT_OPTIONS DOWNLOAD_NO_PROGRESS TRUE) + +# MAKE_PRG +if(UNIX) + find_program(MAKE_PRG NAMES gmake make) + if(NOT MAKE_PRG) + message(FATAL_ERROR "GNU Make is required to build the dependencies.") + else() + message(STATUS "Found GNU Make at ${MAKE_PRG}") + endif() +endif() +# When using make, use the $(MAKE) variable to avoid warning about the job +# server. +if(CMAKE_GENERATOR MATCHES "Makefiles") + set(MAKE_PRG "$(MAKE)") +endif() +if(MINGW AND CMAKE_GENERATOR MATCHES "Ninja") + find_program(MAKE_PRG NAMES mingw32-make) + if(NOT MAKE_PRG) + message(FATAL_ERROR "GNU Make for mingw32 is required to build the dependencies.") + else() + message(STATUS "Found GNU Make for mingw32: ${MAKE_PRG}") + endif() +endif() + +# DEPS_C_COMPILER +set(DEPS_C_COMPILER "${CMAKE_C_COMPILER}") +if(CMAKE_OSX_SYSROOT) + set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -isysroot${CMAKE_OSX_SYSROOT}") +endif() +if(CMAKE_OSX_ARCHITECTURES) + foreach(ARCH IN LISTS CMAKE_OSX_ARCHITECTURES) + set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -arch ${ARCH}") + endforeach() +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 63290fe889..e607c59cf6 100644 --- a/cmake/FindIconv.cmake +++ b/cmake/FindIconv.cmake @@ -1,21 +1,14 @@ # 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. -# - Try to find iconv -# Once done, this will define -# -# Iconv_FOUND - system has iconv -# Iconv_INCLUDE_DIRS - the iconv include directories -# Iconv_LIBRARIES - link these to use iconv - -include(LibFindMacros) - -find_path(ICONV_INCLUDE_DIR NAMES iconv.h) -find_library(ICONV_LIBRARY NAMES iconv libiconv) - -set(Iconv_PROCESS_INCLUDES ICONV_INCLUDE_DIR) +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) + +add_library(iconv INTERFACE) +target_include_directories(iconv SYSTEM BEFORE INTERFACE ${ICONV_INCLUDE_DIR}) if(ICONV_LIBRARY) - set(Iconv_PROCESS_LIBS ICONV_LIBRARY) + target_link_libraries(iconv INTERFACE ${ICONV_LIBRARY}) endif() - -libfind_process(Iconv) diff --git a/cmake/FindLibLUV.cmake b/cmake/FindLibLUV.cmake deleted file mode 100644 index 23b62b66d3..0000000000 --- a/cmake/FindLibLUV.cmake +++ /dev/null @@ -1,32 +0,0 @@ -# - Try to find luv -# Once done this will define -# LIBLUV_FOUND - System has libluv -# LIBLUV_INCLUDE_DIRS - The libluv include directories -# LIBLUV_LIBRARIES - The libraries needed to use libluv - -find_package(PkgConfig) -if (PKG_CONFIG_FOUND) - pkg_check_modules(PC_LIBLUV QUIET luv) -endif() - -set(LIBLUV_DEFINITIONS ${PC_LIBLUV_CFLAGS_OTHER}) - -find_path(LIBLUV_INCLUDE_DIR luv/luv.h - PATHS ${PC_LIBLUV_INCLUDEDIR} ${PC_LIBLUV_INCLUDE_DIRS}) - -# Explicitly look for luv.so. #10407 -list(APPEND LIBLUV_NAMES luv_a luv libluv_a luv${CMAKE_SHARED_LIBRARY_SUFFIX}) - -find_library(LIBLUV_LIBRARY NAMES ${LIBLUV_NAMES} - HINTS ${PC_LIBLUV_LIBDIR} ${PC_LIBLUV_LIBRARY_DIRS}) - -set(LIBLUV_LIBRARIES ${LIBLUV_LIBRARY}) -set(LIBLUV_INCLUDE_DIRS ${LIBLUV_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LIBLUV_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(LibLUV DEFAULT_MSG - LIBLUV_LIBRARY LIBLUV_INCLUDE_DIR) - -mark_as_advanced(LIBLUV_INCLUDE_DIR LIBLUV_LIBRARY) diff --git a/cmake/FindLibTermkey.cmake b/cmake/FindLibTermkey.cmake deleted file mode 100644 index 3e0c7f1bfd..0000000000 --- a/cmake/FindLibTermkey.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# - Try to find libtermkey -# Once done this will define -# LIBTERMKEY_FOUND - System has libtermkey -# LIBTERMKEY_INCLUDE_DIRS - The libtermkey include directories -# LIBTERMKEY_LIBRARIES - The libraries needed to use libtermkey - -find_package(PkgConfig) -if (PKG_CONFIG_FOUND) - pkg_check_modules(PC_LIBTERMKEY QUIET termkey) -endif() - -set(LIBTERMKEY_DEFINITIONS ${PC_LIBTERMKEY_CFLAGS_OTHER}) - -find_path(LIBTERMKEY_INCLUDE_DIR termkey.h - PATHS ${PC_LIBTERMKEY_INCLUDEDIR} ${PC_LIBTERMKEY_INCLUDE_DIRS}) - -list(APPEND LIBTERMKEY_NAMES termkey) - -find_library(LIBTERMKEY_LIBRARY NAMES ${LIBTERMKEY_NAMES} - HINTS ${PC_LIBTERMKEY_LIBDIR} ${PC_LIBTERMKEY_LIBRARY_DIRS}) - -set(LIBTERMKEY_LIBRARIES ${LIBTERMKEY_LIBRARY}) -set(LIBTERMKEY_INCLUDE_DIRS ${LIBTERMKEY_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LIBTERMKEY_FOUND to TRUE -# if all listed variables are TRUE -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/FindLibIntl.cmake b/cmake/FindLibintl.cmake index 8cc5cb7dd2..630a3545fc 100644 --- a/cmake/FindLibIntl.cmake +++ b/cmake/FindLibintl.cmake @@ -1,42 +1,34 @@ -# - Try to find libintl -# Once done, this will define -# -# LibIntl_FOUND - system has libintl -# LibIntl_INCLUDE_DIRS - the libintl include directories -# LibIntl_LIBRARIES - link these to use libintl - include(CheckCSourceCompiles) include(CheckVariableExists) -include(LibFindMacros) # Append custom gettext path to CMAKE_PREFIX_PATH -# if installed via Mac Hombrew -if (CMAKE_HOST_APPLE) - find_program(HOMEBREW_PROG brew) - if (EXISTS ${HOMEBREW_PROG}) - execute_process(COMMAND ${HOMEBREW_PROG} --prefix gettext +# if installed via Mac Homebrew +if (APPLE) + find_program(HOMEBREW_PRG brew) + if (EXISTS ${HOMEBREW_PRG}) + execute_process(COMMAND ${HOMEBREW_PRG} --prefix gettext OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE HOMEBREW_GETTEXT_PREFIX) list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_GETTEXT_PREFIX}") endif() endif() -find_path(LibIntl_INCLUDE_DIR +find_path(LIBINTL_INCLUDE_DIR NAMES libintl.h PATH_SUFFIXES gettext ) -find_library(LibIntl_LIBRARY +find_library(LIBINTL_LIBRARY NAMES intl libintl ) -if (LibIntl_INCLUDE_DIR) - list(APPEND CMAKE_REQUIRED_INCLUDES "${LibIntl_INCLUDE_DIR}") +if (LIBINTL_INCLUDE_DIR) + list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBINTL_INCLUDE_DIR}") endif() # On some systems (linux+glibc) libintl is passively available. # So only specify the library if one was found. -if (LibIntl_LIBRARY) - list(APPEND CMAKE_REQUIRED_LIBRARIES "${LibIntl_LIBRARY}") +if (LIBINTL_LIBRARY) + list(APPEND CMAKE_REQUIRED_LIBRARIES "${LIBINTL_LIBRARY}") endif() if (MSVC) list(APPEND CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARY}) @@ -44,7 +36,7 @@ endif() # On macOS, if libintl is a static library then we also need # to link libiconv and CoreFoundation. -get_filename_component(LibIntl_EXT "${LibIntl_LIBRARY}" EXT) +get_filename_component(LibIntl_EXT "${LIBINTL_LIBRARY}" EXT) if (APPLE AND (LibIntl_EXT STREQUAL ".a")) set(LibIntl_STATIC TRUE) find_library(CoreFoundation_FRAMEWORK CoreFoundation) @@ -67,25 +59,22 @@ endif() if (LibIntl_STATIC) list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${ICONV_LIBRARY}" "${CoreFoundation_FRAMEWORK}") endif() -if (LibIntl_INCLUDE_DIR) - list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${LibIntl_INCLUDE_DIR}") +if (LIBINTL_INCLUDE_DIR) + list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${LIBINTL_INCLUDE_DIR}") endif() -if (LibIntl_LIBRARY) - list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${LibIntl_LIBRARY}") +if (LIBINTL_LIBRARY) + list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${LIBINTL_LIBRARY}") endif() +set(REQUIRED_VARIABLES LIBINTL_LIBRARY LIBINTL_INCLUDE_DIR) if (HAVE_WORKING_LIBINTL) # On some systems (linux+glibc) libintl is passively available. # If HAVE_WORKING_LIBINTL then we consider the requirement satisfied. - # Unset REQUIRED so that libfind_process(LibIntl) can proceed. - if(LibIntl_FIND_REQUIRED) - unset(LibIntl_FIND_REQUIRED) - endif() - set(LibIntl_FIND_QUIETLY ON) + unset(REQUIRED_VARIABLES) check_variable_exists(_nl_msg_cat_cntr HAVE_NL_MSG_CAT_CNTR) endif() -set(LibIntl_PROCESS_INCLUDES LibIntl_INCLUDE_DIR) -set(LibIntl_PROCESS_LIBS LibIntl_LIBRARY) -libfind_process(LibIntl) +find_package_handle_standard_args(Libintl DEFAULT_MSG + ${REQUIRED_VARIABLES}) +mark_as_advanced(LIBINTL_LIBRARY LIBINTL_INCLUDE_DIR) diff --git a/cmake/FindLibtermkey.cmake b/cmake/FindLibtermkey.cmake new file mode 100644 index 0000000000..8039ae7994 --- /dev/null +++ b/cmake/FindLibtermkey.cmake @@ -0,0 +1,9 @@ +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) + +add_library(libtermkey INTERFACE) +target_include_directories(libtermkey SYSTEM BEFORE INTERFACE ${LIBTERMKEY_INCLUDE_DIR}) +target_link_libraries(libtermkey INTERFACE ${LIBTERMKEY_LIBRARY}) diff --git a/cmake/FindLibUV.cmake b/cmake/FindLibuv.cmake index d6c4e9cbef..19315388dd 100644 --- a/cmake/FindLibUV.cmake +++ b/cmake/FindLibuv.cmake @@ -1,35 +1,7 @@ -# - Try to find libuv -# Once done, this will define -# -# LIBUV_FOUND - system has libuv -# LIBUV_INCLUDE_DIRS - the libuv include directories -# LIBUV_LIBRARIES - link these to use libuv +find_path2(LIBUV_INCLUDE_DIR uv.h) +find_library2(LIBUV_LIBRARY NAMES uv_a uv) -find_package(PkgConfig) -if (PKG_CONFIG_FOUND) - pkg_check_modules(PC_LIBUV QUIET libuv) -endif() - -find_path(LIBUV_INCLUDE_DIR uv.h - HINTS ${PC_LIBUV_INCLUDEDIR} ${PC_LIBUV_INCLUDE_DIRS}) - -list(APPEND LIBUV_NAMES uv_a uv) - -find_library(LIBUV_LIBRARY NAMES ${LIBUV_NAMES} - HINTS ${PC_LIBUV_LIBDIR} ${PC_LIBUV_LIBRARY_DIRS}) - -mark_as_advanced(LIBUV_INCLUDE_DIR LIBUV_LIBRARY) - -if(PC_LIBUV_LIBRARIES) - list(REMOVE_ITEM PC_LIBUV_LIBRARIES uv) -endif() - -set(LIBUV_LIBRARIES ${LIBUV_LIBRARY} ${PC_LIBUV_LIBRARIES}) -set(LIBUV_INCLUDE_DIRS ${LIBUV_INCLUDE_DIR}) - -# Deal with the fact that libuv.pc is missing important dependency information. - -include(CheckLibraryExists) +set(LIBUV_LIBRARIES ${LIBUV_LIBRARY}) check_library_exists(dl dlopen "dlfcn.h" HAVE_LIBDL) if(HAVE_LIBDL) @@ -83,11 +55,7 @@ if(Threads_FOUND) list(APPEND LIBUV_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) endif() -include(FindPackageHandleStandardArgs) - -# handle the QUIETLY and REQUIRED arguments and set LIBUV_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(LibUV DEFAULT_MSG +find_package_handle_standard_args(Libuv DEFAULT_MSG LIBUV_LIBRARY LIBUV_INCLUDE_DIR) mark_as_advanced(LIBUV_INCLUDE_DIR LIBUV_LIBRARY) diff --git a/cmake/Findlibvterm.cmake b/cmake/FindLibvterm.cmake index d8536ca894..68c2646d47 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") @@ -8,13 +8,24 @@ if(LIBVTERM_INCLUDE_DIR AND EXISTS "${LIBVTERM_INCLUDE_DIR}/vterm.h") file(STRINGS ${LIBVTERM_INCLUDE_DIR}/vterm.h VTERM_VERSION_MINOR REGEX "#define VTERM_VERSION_MINOR") string(REGEX MATCH "[0-9]+" VTERM_VERSION_MINOR ${VTERM_VERSION_MINOR}) - set(VTERM_VERSION ${VTERM_VERSION_MAJOR}.${VTERM_VERSION_MINOR}) + file(STRINGS ${LIBVTERM_INCLUDE_DIR}/vterm.h VTERM_VERSION_PATCH REGEX "#define VTERM_VERSION_PATCH") + + # The following is needed to give a coherent error for versions 0.3.2 and + # smaller. + if(VTERM_VERSION_PATCH) + string(REGEX MATCH "[0-9]+" VTERM_VERSION_PATCH ${VTERM_VERSION_PATCH}) + string(PREPEND VTERM_VERSION_PATCH ".") + endif() + + set(VTERM_VERSION ${VTERM_VERSION_MAJOR}.${VTERM_VERSION_MINOR}${VTERM_VERSION_PATCH}) endif() -find_package_handle_standard_args(libvterm +find_package_handle_standard_args(Libvterm REQUIRED_VARS LIBVTERM_INCLUDE_DIR LIBVTERM_LIBRARY VERSION_VAR VTERM_VERSION) add_library(libvterm INTERFACE) -target_include_directories(libvterm SYSTEM BEFORE INTERFACE INTERFACE ${LIBVTERM_INCLUDE_DIR}) +target_include_directories(libvterm SYSTEM BEFORE INTERFACE ${LIBVTERM_INCLUDE_DIR}) target_link_libraries(libvterm INTERFACE ${LIBVTERM_LIBRARY}) + +mark_as_advanced(LIBVTERM_INCLUDE_DIR LIBVTERM_LIBRARY) diff --git a/cmake/FindLpeg.cmake b/cmake/FindLpeg.cmake new file mode 100644 index 0000000000..3d0ff5929d --- /dev/null +++ b/cmake/FindLpeg.cmake @@ -0,0 +1,9 @@ +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) + +# Workaround: use an imported library to prevent cmake from modifying library +# link path. See #23395. +add_library(lpeg UNKNOWN IMPORTED) +set_target_properties(lpeg PROPERTIES IMPORTED_LOCATION ${LPEG_LIBRARY}) diff --git a/cmake/FindLuaJit.cmake b/cmake/FindLuaJit.cmake deleted file mode 100644 index 72795afefd..0000000000 --- a/cmake/FindLuaJit.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# - Try to find luajit -# Once done this will define -# LUAJIT_FOUND - System has luajit -# LUAJIT_INCLUDE_DIRS - The luajit include directories -# LUAJIT_LIBRARIES - The libraries needed to use luajit - -find_package(PkgConfig) -if (PKG_CONFIG_FOUND) - pkg_check_modules(PC_LUAJIT QUIET luajit) -endif() - -set(LUAJIT_DEFINITIONS ${PC_LUAJIT_CFLAGS_OTHER}) - -find_path(LUAJIT_INCLUDE_DIR luajit.h - PATHS ${PC_LUAJIT_INCLUDEDIR} ${PC_LUAJIT_INCLUDE_DIRS} - PATH_SUFFIXES luajit-2.0 luajit-2.1) - -if(MSVC) - list(APPEND LUAJIT_NAMES lua51) -elseif(MINGW) - list(APPEND LUAJIT_NAMES libluajit libluajit-5.1) -else() - list(APPEND LUAJIT_NAMES luajit-5.1) -endif() - -find_library(LUAJIT_LIBRARY NAMES ${LUAJIT_NAMES} - PATHS ${PC_LUAJIT_LIBDIR} ${PC_LUAJIT_LIBRARY_DIRS}) - -set(LUAJIT_LIBRARIES ${LUAJIT_LIBRARY}) -set(LUAJIT_INCLUDE_DIRS ${LUAJIT_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LUAJIT_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(LuaJit DEFAULT_MSG - LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR) - -mark_as_advanced(LUAJIT_INCLUDE_DIR LUAJIT_LIBRARY) diff --git a/cmake/FindLuajit.cmake b/cmake/FindLuajit.cmake new file mode 100644 index 0000000000..457ceafdd4 --- /dev/null +++ b/cmake/FindLuajit.cmake @@ -0,0 +1,17 @@ +find_path2(LUAJIT_INCLUDE_DIR luajit.h + PATH_SUFFIXES luajit-2.1) + +if(MSVC) + list(APPEND LUAJIT_NAMES lua51) +elseif(MINGW) + list(APPEND LUAJIT_NAMES libluajit libluajit-5.1) +else() + list(APPEND LUAJIT_NAMES luajit-5.1) +endif() + +find_library2(LUAJIT_LIBRARY NAMES ${LUAJIT_NAMES}) + +find_package_handle_standard_args(Luajit DEFAULT_MSG + LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR) + +mark_as_advanced(LUAJIT_INCLUDE_DIR LUAJIT_LIBRARY) diff --git a/cmake/FindLuv.cmake b/cmake/FindLuv.cmake new file mode 100644 index 0000000000..a4408fe659 --- /dev/null +++ b/cmake/FindLuv.cmake @@ -0,0 +1,6 @@ +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) +mark_as_advanced(LUV_INCLUDE_DIR LUV_LIBRARY) diff --git a/cmake/FindMsgpack.cmake b/cmake/FindMsgpack.cmake index 26eb19d498..9ef18122ab 100644 --- a/cmake/FindMsgpack.cmake +++ b/cmake/FindMsgpack.cmake @@ -1,20 +1,4 @@ -# - Try to find msgpack -# Once done this will define -# MSGPACK_FOUND - System has msgpack -# MSGPACK_INCLUDE_DIRS - The msgpack include directories -# MSGPACK_LIBRARIES - The libraries needed to use msgpack - -find_package(PkgConfig) -if (PKG_CONFIG_FOUND) - pkg_search_module(PC_MSGPACK QUIET - msgpackc>=${Msgpack_FIND_VERSION} - msgpack>=${Msgpack_FIND_VERSION}) -endif() - -set(MSGPACK_DEFINITIONS ${PC_MSGPACK_CFLAGS_OTHER}) - -find_path(MSGPACK_INCLUDE_DIR msgpack/version_master.h - HINTS ${PC_MSGPACK_INCLUDEDIR} ${PC_MSGPACK_INCLUDE_DIRS}) +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) @@ -26,28 +10,15 @@ else() set(MSGPACK_VERSION_STRING) endif() -if(MSVC) - # The import library for the msgpack DLL has a different name - list(APPEND MSGPACK_NAMES msgpackc_import) -else() - list(APPEND MSGPACK_NAMES msgpackc msgpack) -endif() - -find_library(MSGPACK_LIBRARY NAMES ${MSGPACK_NAMES} - # Check each directory for all names to avoid using headers/libraries from - # different places. - NAMES_PER_DIR - HINTS ${PC_MSGPACK_LIBDIR} ${PC_MSGPACK_LIBRARY_DIRS}) +find_library2(MSGPACK_LIBRARY NAMES msgpackc msgpack msgpackc_import msgpack-c + NAMES_PER_DIR) mark_as_advanced(MSGPACK_INCLUDE_DIR MSGPACK_LIBRARY) -set(MSGPACK_LIBRARIES ${MSGPACK_LIBRARY}) -set(MSGPACK_INCLUDE_DIRS ${MSGPACK_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set MSGPACK_FOUND to TRUE -# if all listed variables are TRUE find_package_handle_standard_args(Msgpack REQUIRED_VARS MSGPACK_LIBRARY MSGPACK_INCLUDE_DIR VERSION_VAR MSGPACK_VERSION_STRING) +add_library(msgpack INTERFACE) +target_include_directories(msgpack SYSTEM BEFORE INTERFACE ${MSGPACK_INCLUDE_DIR}) +target_link_libraries(msgpack INTERFACE ${MSGPACK_LIBRARY}) diff --git a/cmake/FindTreeSitter.cmake b/cmake/FindTreeSitter.cmake deleted file mode 100644 index ae0928e9f7..0000000000 --- a/cmake/FindTreeSitter.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# - Try to find tree-sitter -# Once done, this will define -# -# TreeSitter_FOUND - system has tree-sitter -# TreeSitter_INCLUDE_DIRS - the tree-sitter include directories -# TreeSitter_LIBRARIES - link these to use tree-sitter - -include(LibFindMacros) - -libfind_pkg_detect(TreeSitter tree-sitter FIND_PATH tree_sitter/api.h FIND_LIBRARY tree-sitter) -libfind_process(TreeSitter) diff --git a/cmake/FindTreesitter.cmake b/cmake/FindTreesitter.cmake new file mode 100644 index 0000000000..8dac13337b --- /dev/null +++ b/cmake/FindTreesitter.cmake @@ -0,0 +1,29 @@ +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) + +add_library(treesitter INTERFACE) +target_include_directories(treesitter SYSTEM BEFORE INTERFACE ${TREESITTER_INCLUDE_DIR}) +target_link_libraries(treesitter INTERFACE ${TREESITTER_LIBRARY}) + +# TODO(lewis6991): remove when min TS version is 0.20.9 +list(APPEND CMAKE_REQUIRED_INCLUDES "${TREESITTER_INCLUDE_DIR}") +list(APPEND CMAKE_REQUIRED_LIBRARIES "${TREESITTER_LIBRARY}") +check_c_source_compiles(" +#include <tree_sitter/api.h> +int +main(void) +{ + TSQueryCursor *cursor = ts_query_cursor_new(); + ts_query_cursor_set_max_start_depth(cursor, 32); + return 0; +} +" TS_HAS_SET_MAX_START_DEPTH) +list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${TREESITTER_INCLUDE_DIR}") +list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${TREESITTER_LIBRARY}") + +if(TS_HAS_SET_MAX_START_DEPTH) + target_compile_definitions(treesitter INTERFACE NVIM_TS_HAS_SET_MAX_START_DEPTH) +endif() diff --git a/cmake/FindUnibilium.cmake b/cmake/FindUnibilium.cmake new file mode 100644 index 0000000000..4f62815793 --- /dev/null +++ b/cmake/FindUnibilium.cmake @@ -0,0 +1,11 @@ +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) + +add_library(unibilium INTERFACE) +target_include_directories(unibilium SYSTEM BEFORE INTERFACE ${UNIBILIUM_INCLUDE_DIR}) +target_link_libraries(unibilium INTERFACE ${UNIBILIUM_LIBRARY}) + +mark_as_advanced(UNIBILIUM_INCLUDE_DIR UNIBILIUM_LIBRARY) diff --git a/cmake/Findunibilium.cmake b/cmake/Findunibilium.cmake deleted file mode 100644 index 7bfbcba942..0000000000 --- a/cmake/Findunibilium.cmake +++ /dev/null @@ -1,27 +0,0 @@ -find_path(UNIBILIUM_INCLUDE_DIR unibilium.h) -find_library(UNIBILIUM_LIBRARY unibilium) - -find_package_handle_standard_args(unibilium - REQUIRED_VARS UNIBILIUM_INCLUDE_DIR UNIBILIUM_LIBRARY) - -add_library(unibilium INTERFACE) -target_include_directories(unibilium SYSTEM BEFORE INTERFACE ${UNIBILIUM_INCLUDE_DIR}) -target_link_libraries(unibilium INTERFACE ${UNIBILIUM_LIBRARY}) - -list(APPEND CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIR}") -list(APPEND CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARY}") -check_c_source_compiles(" -#include <unibilium.h> - -int -main(void) -{ - unibi_str_from_var(unibi_var_from_str(\"\")); - return unibi_num_from_var(unibi_var_from_num(0)); -} -" UNIBI_HAS_VAR_FROM) -list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIR}") -list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARY}") -if(UNIBI_HAS_VAR_FROM) - target_compile_definitions(unibilium INTERFACE NVIM_UNIBI_HAS_VAR_FROM) -endif() diff --git a/cmake/Format.cmake b/cmake/Format.cmake index 4115e66705..7097e5766f 100644 --- a/cmake/Format.cmake +++ b/cmake/Format.cmake @@ -1,35 +1,33 @@ # Returns a list of all files that has been changed in current branch compared # to master branch. This includes unstaged, staged and committed files. function(get_changed_files outvar) - set(default_branch master) - execute_process( COMMAND git branch --show-current OUTPUT_VARIABLE current_branch OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process( - COMMAND git merge-base ${default_branch} ${current_branch} + COMMAND git merge-base master HEAD OUTPUT_VARIABLE ancestor_commit OUTPUT_STRIP_TRAILING_WHITESPACE) # Changed files that have been committed execute_process( - COMMAND git diff --name-only ${ancestor_commit}...${current_branch} + COMMAND git diff --diff-filter=d --name-only ${ancestor_commit}...${current_branch} OUTPUT_VARIABLE committed_files OUTPUT_STRIP_TRAILING_WHITESPACE) separate_arguments(committed_files NATIVE_COMMAND ${committed_files}) # Unstaged files execute_process( - COMMAND git diff --name-only + COMMAND git diff --diff-filter=d --name-only OUTPUT_VARIABLE unstaged_files OUTPUT_STRIP_TRAILING_WHITESPACE) separate_arguments(unstaged_files NATIVE_COMMAND ${unstaged_files}) # Staged files execute_process( - COMMAND git diff --cached --name-only + COMMAND git diff --diff-filter=d --cached --name-only OUTPUT_VARIABLE staged_files OUTPUT_STRIP_TRAILING_WHITESPACE) separate_arguments(staged_files NATIVE_COMMAND ${staged_files}) diff --git a/cmake/GenerateVersion.cmake b/cmake/GenerateVersion.cmake index c092645140..a52dca970f 100644 --- a/cmake/GenerateVersion.cmake +++ b/cmake/GenerateVersion.cmake @@ -5,14 +5,17 @@ execute_process( COMMAND git --git-dir=${NVIM_SOURCE_DIR}/.git --work-tree=${NVIM_SOURCE_DIR} describe --first-parent --dirty --always OUTPUT_VARIABLE GIT_TAG OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET RESULT_VARIABLE RES) - if(RES) message(STATUS "Using NVIM_VERSION: ${NVIM_VERSION}") file(WRITE "${OUTPUT}" "") return() endif() +# Extract build info: "v0.9.0-145-g0f9113907" => "g0f9113907" +string(REGEX REPLACE ".*\\-" "" NVIM_VERSION_BUILD "${GIT_TAG}") + # `git describe` annotates the most recent tagged release; for pre-release # builds we append that to the dev version. if(NVIM_VERSION_PRERELEASE) |