From f05a2891d3da9f9fcd9c7457ca0c2a54ff65078b Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Mon, 27 Jun 2022 03:08:59 -0700 Subject: build: rename build-related dirs Problem: Dirs "config", "packaging", and "third-party" are all closely related but this is not obvious from the layout. This adds friction for new contributors. Solution: - rename config/ to cmake.config/ - rename test/config/ to test/cmakeconfig/ because it is used in Lua tests: require('test.cmakeconfig.paths'). - rename packaging/ to cmake.packaging/ - rename third-party/ to cmake.deps/ (parallel with .deps/) --- .builds/openbsd.yml | 2 +- .github/labeler.yml | 2 +- .github/workflows/ci.yml | 10 +- CMakeLists.txt | 18 +- MAINTAIN.md | 2 +- Makefile | 8 +- README.md | 7 +- ci/build.ps1 | 4 +- ci/common/build.sh | 2 +- cmake.config/CMakeLists.txt | 163 ++++++++++ cmake.config/config.h.in | 73 +++++ cmake.config/pathdef.c.in | 8 + cmake.config/versiondef.h.in | 21 ++ cmake.deps/CMakeLists.txt | 293 ++++++++++++++++++ cmake.deps/cmake/BuildGettext.cmake | 37 +++ cmake.deps/cmake/BuildLibiconv.cmake | 32 ++ cmake.deps/cmake/BuildLibtermkey.cmake | 57 ++++ cmake.deps/cmake/BuildLibuv.cmake | 77 +++++ cmake.deps/cmake/BuildLibvterm.cmake | 69 +++++ cmake.deps/cmake/BuildLua.cmake | 96 ++++++ cmake.deps/cmake/BuildLuajit.cmake | 163 ++++++++++ cmake.deps/cmake/BuildLuarocks.cmake | 227 ++++++++++++++ cmake.deps/cmake/BuildLuv.cmake | 133 +++++++++ cmake.deps/cmake/BuildMsgpack.cmake | 66 +++++ cmake.deps/cmake/BuildTreesitter.cmake | 59 ++++ cmake.deps/cmake/BuildTreesitterParsers.cmake | 29 ++ cmake.deps/cmake/BuildUnibilium.cmake | 48 +++ cmake.deps/cmake/CopyFilesGlob.cmake | 20 ++ cmake.deps/cmake/DownloadAndExtractFile.cmake | 195 ++++++++++++ cmake.deps/cmake/GetBinaryDeps.cmake | 43 +++ cmake.deps/cmake/GettextCMakeLists.txt | 329 +++++++++++++++++++++ cmake.deps/cmake/LibiconvCMakeLists.txt | 97 ++++++ cmake.deps/cmake/LibuvCMakeLists.txt | 33 +++ cmake.deps/cmake/Libvterm-tbl2inc_c.cmake | 163 ++++++++++ cmake.deps/cmake/LibvtermCMakeLists.txt | 92 ++++++ cmake.deps/cmake/RemoveFiles.cmake | 5 + cmake.deps/cmake/TargetArch.cmake | 23 ++ cmake.deps/cmake/TreesitterCMakeLists.txt | 21 ++ cmake.deps/cmake/TreesitterParserCMakeLists.txt | 19 ++ cmake.deps/cmake/UnibiliumCMakeLists.txt | 25 ++ cmake.deps/cmake/libtermkeyCMakeLists.txt | 34 +++ .../patches/libvterm-Remove-VLAs-for-MSVC.patch | 50 ++++ cmake.packaging/CMakeLists.txt | 64 ++++ cmake.packaging/WixPatch.xml | 14 + cmake.packaging/neovim.icns | Bin 0 -> 86517 bytes cmake.packaging/neovim.ico | Bin 0 -> 122355 bytes cmake.packaging/neovim.png | Bin 0 -> 6758 bytes cmake.packaging/neovim.svg | 147 +++++++++ config/CMakeLists.txt | 163 ---------- config/config.h.in | 73 ----- config/pathdef.c.in | 8 - config/versiondef.h.in | 21 -- packaging/CMakeLists.txt | 64 ---- packaging/WixPatch.xml | 14 - packaging/neovim.icns | Bin 86517 -> 0 bytes packaging/neovim.ico | Bin 122355 -> 0 bytes packaging/neovim.png | Bin 6758 -> 0 bytes packaging/neovim.svg | 147 --------- scripts/bump_deps.lua | 6 +- src/nvim/CMakeLists.txt | 8 +- test/cmakeconfig/paths.lua.in | 24 ++ test/config/paths.lua.in | 24 -- test/functional/shada/shada_spec.lua | 2 +- test/helpers.lua | 2 +- test/symbolic/klee/run.sh | 2 +- test/unit/helpers.lua | 2 +- third-party/CMakeLists.txt | 292 ------------------ third-party/cmake/BuildGettext.cmake | 37 --- third-party/cmake/BuildLibiconv.cmake | 32 -- third-party/cmake/BuildLibtermkey.cmake | 57 ---- third-party/cmake/BuildLibuv.cmake | 77 ----- third-party/cmake/BuildLibvterm.cmake | 69 ----- third-party/cmake/BuildLua.cmake | 96 ------ third-party/cmake/BuildLuajit.cmake | 163 ---------- third-party/cmake/BuildLuarocks.cmake | 227 -------------- third-party/cmake/BuildLuv.cmake | 133 --------- third-party/cmake/BuildMsgpack.cmake | 66 ----- third-party/cmake/BuildTreesitter.cmake | 59 ---- third-party/cmake/BuildTreesitterParsers.cmake | 29 -- third-party/cmake/BuildUnibilium.cmake | 48 --- third-party/cmake/CopyFilesGlob.cmake | 20 -- third-party/cmake/DownloadAndExtractFile.cmake | 195 ------------ third-party/cmake/GetBinaryDeps.cmake | 43 --- third-party/cmake/GettextCMakeLists.txt | 329 --------------------- third-party/cmake/LibiconvCMakeLists.txt | 97 ------ third-party/cmake/LibuvCMakeLists.txt | 33 --- third-party/cmake/Libvterm-tbl2inc_c.cmake | 163 ---------- third-party/cmake/LibvtermCMakeLists.txt | 92 ------ third-party/cmake/RemoveFiles.cmake | 5 - third-party/cmake/TargetArch.cmake | 23 -- third-party/cmake/TreesitterCMakeLists.txt | 21 -- third-party/cmake/TreesitterParserCMakeLists.txt | 19 -- third-party/cmake/UnibiliumCMakeLists.txt | 25 -- third-party/cmake/libtermkeyCMakeLists.txt | 34 --- .../patches/libvterm-Remove-VLAs-for-MSVC.patch | 50 ---- 95 files changed, 3088 insertions(+), 3086 deletions(-) create mode 100644 cmake.config/CMakeLists.txt create mode 100644 cmake.config/config.h.in create mode 100644 cmake.config/pathdef.c.in create mode 100644 cmake.config/versiondef.h.in create mode 100644 cmake.deps/CMakeLists.txt create mode 100644 cmake.deps/cmake/BuildGettext.cmake create mode 100644 cmake.deps/cmake/BuildLibiconv.cmake create mode 100644 cmake.deps/cmake/BuildLibtermkey.cmake create mode 100644 cmake.deps/cmake/BuildLibuv.cmake create mode 100644 cmake.deps/cmake/BuildLibvterm.cmake create mode 100644 cmake.deps/cmake/BuildLua.cmake create mode 100644 cmake.deps/cmake/BuildLuajit.cmake create mode 100644 cmake.deps/cmake/BuildLuarocks.cmake create mode 100644 cmake.deps/cmake/BuildLuv.cmake create mode 100644 cmake.deps/cmake/BuildMsgpack.cmake create mode 100644 cmake.deps/cmake/BuildTreesitter.cmake create mode 100644 cmake.deps/cmake/BuildTreesitterParsers.cmake create mode 100644 cmake.deps/cmake/BuildUnibilium.cmake create mode 100644 cmake.deps/cmake/CopyFilesGlob.cmake create mode 100644 cmake.deps/cmake/DownloadAndExtractFile.cmake create mode 100644 cmake.deps/cmake/GetBinaryDeps.cmake create mode 100644 cmake.deps/cmake/GettextCMakeLists.txt create mode 100644 cmake.deps/cmake/LibiconvCMakeLists.txt create mode 100644 cmake.deps/cmake/LibuvCMakeLists.txt create mode 100644 cmake.deps/cmake/Libvterm-tbl2inc_c.cmake create mode 100644 cmake.deps/cmake/LibvtermCMakeLists.txt create mode 100644 cmake.deps/cmake/RemoveFiles.cmake create mode 100644 cmake.deps/cmake/TargetArch.cmake create mode 100644 cmake.deps/cmake/TreesitterCMakeLists.txt create mode 100644 cmake.deps/cmake/TreesitterParserCMakeLists.txt create mode 100644 cmake.deps/cmake/UnibiliumCMakeLists.txt create mode 100644 cmake.deps/cmake/libtermkeyCMakeLists.txt create mode 100644 cmake.deps/patches/libvterm-Remove-VLAs-for-MSVC.patch create mode 100644 cmake.packaging/CMakeLists.txt create mode 100644 cmake.packaging/WixPatch.xml create mode 100644 cmake.packaging/neovim.icns create mode 100644 cmake.packaging/neovim.ico create mode 100644 cmake.packaging/neovim.png create mode 100644 cmake.packaging/neovim.svg delete mode 100644 config/CMakeLists.txt delete mode 100644 config/config.h.in delete mode 100644 config/pathdef.c.in delete mode 100644 config/versiondef.h.in delete mode 100644 packaging/CMakeLists.txt delete mode 100644 packaging/WixPatch.xml delete mode 100644 packaging/neovim.icns delete mode 100644 packaging/neovim.ico delete mode 100644 packaging/neovim.png delete mode 100644 packaging/neovim.svg create mode 100644 test/cmakeconfig/paths.lua.in delete mode 100644 test/config/paths.lua.in delete mode 100644 third-party/CMakeLists.txt delete mode 100644 third-party/cmake/BuildGettext.cmake delete mode 100644 third-party/cmake/BuildLibiconv.cmake delete mode 100644 third-party/cmake/BuildLibtermkey.cmake delete mode 100644 third-party/cmake/BuildLibuv.cmake delete mode 100644 third-party/cmake/BuildLibvterm.cmake delete mode 100644 third-party/cmake/BuildLua.cmake delete mode 100644 third-party/cmake/BuildLuajit.cmake delete mode 100644 third-party/cmake/BuildLuarocks.cmake delete mode 100644 third-party/cmake/BuildLuv.cmake delete mode 100644 third-party/cmake/BuildMsgpack.cmake delete mode 100644 third-party/cmake/BuildTreesitter.cmake delete mode 100644 third-party/cmake/BuildTreesitterParsers.cmake delete mode 100644 third-party/cmake/BuildUnibilium.cmake delete mode 100644 third-party/cmake/CopyFilesGlob.cmake delete mode 100644 third-party/cmake/DownloadAndExtractFile.cmake delete mode 100644 third-party/cmake/GetBinaryDeps.cmake delete mode 100644 third-party/cmake/GettextCMakeLists.txt delete mode 100644 third-party/cmake/LibiconvCMakeLists.txt delete mode 100644 third-party/cmake/LibuvCMakeLists.txt delete mode 100644 third-party/cmake/Libvterm-tbl2inc_c.cmake delete mode 100644 third-party/cmake/LibvtermCMakeLists.txt delete mode 100644 third-party/cmake/RemoveFiles.cmake delete mode 100644 third-party/cmake/TargetArch.cmake delete mode 100644 third-party/cmake/TreesitterCMakeLists.txt delete mode 100644 third-party/cmake/TreesitterParserCMakeLists.txt delete mode 100644 third-party/cmake/UnibiliumCMakeLists.txt delete mode 100644 third-party/cmake/libtermkeyCMakeLists.txt delete mode 100644 third-party/patches/libvterm-Remove-VLAs-for-MSVC.patch diff --git a/.builds/openbsd.yml b/.builds/openbsd.yml index 6263c436ae..60548f4f58 100644 --- a/.builds/openbsd.yml +++ b/.builds/openbsd.yml @@ -33,7 +33,7 @@ tasks: export AUTOMAKE_VERSION=1.16 mkdir neovim/.deps cd neovim/.deps - cmake -G Ninja ../third-party/ + cmake -G Ninja ../cmake.deps/ cmake --build . --config RelWithDebInfo - build: | mkdir neovim/build diff --git a/.github/labeler.yml b/.github/labeler.yml index fb06b0b379..04e7b281d1 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -18,7 +18,7 @@ - runtime/lua/vim/diagnostic.lua "dependencies": - - third-party/**/* + - cmake.deps/**/* "spell": - src/nvim/spell* diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef70fdfc3c..bdc487894e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,9 +98,9 @@ jobs: path: | ${{ env.CACHE_NVIM_DEPS_DIR }} ~/.ccache - key: lint-${{ hashFiles('cmake/*', '**/CMakeLists.txt', '!third-party/**CMakeLists.txt') }}-${{ github.base_ref }} + key: lint-${{ hashFiles('cmake/*', '**/CMakeLists.txt', '!cmake.deps/**CMakeLists.txt') }}-${{ github.base_ref }} - - name: Build third-party + - name: Build third-party deps run: ./ci/before_script.sh - name: Build nvim @@ -236,9 +236,9 @@ jobs: path: | ${{ env.CACHE_NVIM_DEPS_DIR }} ~/.ccache - key: ${{ matrix.runner }}-${{ matrix.flavor }}-${{ matrix.cc }}-${{ hashFiles('cmake/*', 'third-party/**', '**/CMakeLists.txt') }}-${{ github.base_ref }} + key: ${{ matrix.runner }}-${{ matrix.flavor }}-${{ matrix.cc }}-${{ hashFiles('cmake/*', 'cmake.deps/**', '**/CMakeLists.txt') }}-${{ github.base_ref }} - - name: Build third-party + - name: Build third-party deps run: ./ci/before_script.sh - name: Build @@ -276,7 +276,7 @@ jobs: - uses: actions/cache@v3 with: path: ${{ env.DEPS_BUILD_DIR }} - key: ${{ hashFiles('third-party\**') }} + key: ${{ hashFiles('cmake.deps\**') }} - name: Run CI run: powershell ci\build.ps1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8434a8824c..5fd99b59f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ if(DEFINED ENV{DEPS_BUILD_DIR}) # pkg-config 29.2 has a bug on OpenBSD which causes it to drop any paths that # *contain* system include paths. To avoid this, we prefix what would be # "/usr/include" as "/_usr/include". - # This check is also performed in the third-party/CMakeLists.txt and in the + # This check is also performed in the cmake.deps/CMakeLists.txt and in the # else clause following here. # https://github.com/neovim/neovim/pull/14745#issuecomment-860201794 set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/_usr" CACHE PATH "Path prefix for finding dependencies") @@ -62,7 +62,7 @@ else() -DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO} -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - ${PROJECT_SOURCE_DIR}/third-party + ${PROJECT_SOURCE_DIR}/cmake.deps WORKING_DIRECTORY ${DEPS_BUILD_DIR}) execute_process( COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR} @@ -400,7 +400,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT P "${CMAKE_MODULE_LINKER_FLAGS} -image_base 100000000") endif() -include_directories("${PROJECT_BINARY_DIR}/config") +include_directories("${PROJECT_BINARY_DIR}/cmake.config") include_directories("${PROJECT_SOURCE_DIR}/src") find_package(LibUV 1.28.0 REQUIRED) @@ -651,7 +651,7 @@ install_helper( add_subdirectory(src/nvim) get_directory_property(NVIM_VERSION_CFLAGS DIRECTORY src/nvim DEFINITION NVIM_VERSION_CFLAGS) add_subdirectory(test/includes) -add_subdirectory(config) +add_subdirectory(cmake.config) add_subdirectory(test/functional/fixtures) # compile test programs add_subdirectory(runtime) get_directory_property(GENERATED_HELP_TAGS DIRECTORY runtime DEFINITION GENERATED_HELP_TAGS) @@ -702,11 +702,11 @@ if(BUSTED_PRG) set(TEST_LIBNVIM_PATH "") endif() configure_file( - ${CMAKE_SOURCE_DIR}/test/config/paths.lua.in - ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen) + ${CMAKE_SOURCE_DIR}/test/cmakeconfig/paths.lua.in + ${CMAKE_BINARY_DIR}/test/cmakeconfig/paths.lua.gen) file(GENERATE - OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua - INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen) + OUTPUT ${CMAKE_BINARY_DIR}/test/cmakeconfig/paths.lua + INPUT ${CMAKE_BINARY_DIR}/test/cmakeconfig/paths.lua.gen) add_custom_target(functionaltest COMMAND ${CMAKE_COMMAND} @@ -760,5 +760,5 @@ add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/UninstallHelper.cmake) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - add_subdirectory(packaging) + add_subdirectory(cmake.packaging) endif() diff --git a/MAINTAIN.md b/MAINTAIN.md index 3bf5ab3c85..9a8531fbd9 100644 --- a/MAINTAIN.md +++ b/MAINTAIN.md @@ -63,7 +63,7 @@ or the backport will fail. Third-party dependencies -------------- -These "bundled" dependencies can be updated by bumping their versions in `third-party/CMakeLists.txt`: +These "bundled" dependencies can be updated by bumping their versions in `cmake.deps/CMakeLists.txt`: - [Lua](https://www.lua.org/download.html) - [LuaJIT](https://github.com/LuaJIT/LuaJIT) - [Luv](https://github.com/luvit/luv) diff --git a/Makefile b/Makefile index 5a5bd80763..417d631a77 100644 --- a/Makefile +++ b/Makefile @@ -96,7 +96,7 @@ build/.ran-cmake: | deps cd build && $(CMAKE_PRG) -G '$(CMAKE_GENERATOR)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) $(MAKEFILE_DIR) touch $@ -deps: | build/.ran-third-party-cmake +deps: | build/.ran-deps-cmake ifeq ($(call filter-true,$(USE_BUNDLED)),) +$(BUILD_TOOL) -C $(DEPS_BUILD_DIR) endif @@ -104,12 +104,12 @@ endif ifeq ($(call filter-true,$(USE_BUNDLED)),) $(DEPS_BUILD_DIR): mkdir -p "$@" -build/.ran-third-party-cmake:: $(DEPS_BUILD_DIR) +build/.ran-deps-cmake:: $(DEPS_BUILD_DIR) cd $(DEPS_BUILD_DIR) && \ $(CMAKE_PRG) -G '$(CMAKE_GENERATOR)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \ - $(DEPS_CMAKE_FLAGS) $(MAKEFILE_DIR)/third-party + $(DEPS_CMAKE_FLAGS) $(MAKEFILE_DIR)/cmake.deps endif -build/.ran-third-party-cmake:: +build/.ran-deps-cmake:: mkdir -p build touch $@ diff --git a/README.md b/README.md index 718b369012..e3c3c12104 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,10 @@ Project layout -------------- ├─ ci/ build automation - ├─ cmake/ build scripts - ├─ runtime/ user plugins/docs + ├─ cmake/ CMake utils + ├─ cmake.config/ CMake defines + ├─ cmake.deps/ subproject to fetch and build dependencies (optional) + ├─ runtime/ plugins and docs ├─ src/nvim/ application source code (see src/nvim/README.md) │ ├─ api/ API subsystem │ ├─ eval/ VimL subsystem @@ -93,7 +95,6 @@ Project layout │ ├─ msgpack_rpc/ RPC subsystem │ ├─ os/ low-level platform code │ └─ tui/ built-in UI - ├─ third-party/ CMake subproject to build dependencies └─ test/ tests (see test/README.md) License diff --git a/ci/build.ps1 b/ci/build.ps1 index 99f66f7de2..767f812091 100644 --- a/ci/build.ps1 +++ b/ci/build.ps1 @@ -71,9 +71,9 @@ function convertToCmakeArgs($vars) { cd $env:DEPS_BUILD_DIR if ($bits -eq 32) { - cmake -G $cmakeGenerator -A Win32 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed + cmake -G $cmakeGenerator -A Win32 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/cmake.deps/" ; exitIfFailed } else { - cmake -G $cmakeGenerator -A x64 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/third-party/" ; exitIfFailed + cmake -G $cmakeGenerator -A x64 $(convertToCmakeArgs($depsCmakeVars)) "$buildDir/cmake.deps/" ; exitIfFailed } cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed cd $buildDir diff --git a/ci/common/build.sh b/ci/common/build.sh index b8bbff0b16..f083796a28 100644 --- a/ci/common/build.sh +++ b/ci/common/build.sh @@ -35,7 +35,7 @@ build_deps() { # update CMake configuration and update to newer deps versions. cd "${DEPS_BUILD_DIR}" echo "Configuring with '${DEPS_CMAKE_FLAGS}'." - CC= cmake -G Ninja ${DEPS_CMAKE_FLAGS} "${CI_BUILD_DIR}/third-party/" + CC= cmake -G Ninja ${DEPS_CMAKE_FLAGS} "${CI_BUILD_DIR}/cmake.deps/" if ! top_make; then exit 1 diff --git a/cmake.config/CMakeLists.txt b/cmake.config/CMakeLists.txt new file mode 100644 index 0000000000..8c86b89e43 --- /dev/null +++ b/cmake.config/CMakeLists.txt @@ -0,0 +1,163 @@ +include(CheckTypeSize) +include(CheckSymbolExists) +include(CheckFunctionExists) +include(CheckIncludeFiles) +include(CheckCSourceRuns) +include(CheckCSourceCompiles) + +check_type_size("int" SIZEOF_INT LANGUAGE C) +check_type_size("long" SIZEOF_LONG LANGUAGE C) +check_type_size("intmax_t" SIZEOF_INTMAX_T LANGUAGE C) +check_type_size("int32_t" SIZEOF_INT32_T LANGUAGE C) +check_type_size("size_t" SIZEOF_SIZE_T LANGUAGE C) +check_type_size("long long" SIZEOF_LONG_LONG LANGUAGE C) +check_type_size("void *" SIZEOF_VOID_PTR LANGUAGE C) + +check_symbol_exists(_NSGetEnviron crt_externs.h HAVE__NSGETENVIRON) + +# Headers +check_include_files(langinfo.h HAVE_LANGINFO_H) +check_include_files(locale.h HAVE_LOCALE_H) +check_include_files(pwd.h HAVE_PWD_H) +check_include_files(strings.h HAVE_STRINGS_H) +check_include_files(sys/wait.h HAVE_SYS_WAIT_H) +if(NOT HAVE_SYS_WAIT_H AND UNIX) + # See if_cscope.c + message(SEND_ERROR "header sys/wait.h is required for Unix") +endif() +check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H) +check_include_files(termios.h HAVE_TERMIOS_H) +check_include_files(sys/uio.h HAVE_SYS_UIO_H) +check_include_files(sys/sdt.h HAVE_SYS_SDT_H) + +# Functions +check_function_exists(fseeko HAVE_FSEEKO) +check_function_exists(getpwent HAVE_GETPWENT) +check_function_exists(getpwnam HAVE_GETPWNAM) +check_function_exists(getpwuid HAVE_GETPWUID) +check_function_exists(readv HAVE_READV) + +if(Iconv_FOUND) + set(HAVE_ICONV 1) +endif() + +check_function_exists(opendir HAVE_OPENDIR) +check_function_exists(readlink HAVE_READLINK) +check_function_exists(setpgid HAVE_SETPGID) +check_function_exists(setsid HAVE_SETSID) +check_function_exists(sigaction HAVE_SIGACTION) +check_function_exists(strnlen HAVE_STRNLEN) +check_function_exists(strcasecmp HAVE_STRCASECMP) +check_function_exists(strncasecmp HAVE_STRNCASECMP) +check_function_exists(strptime HAVE_STRPTIME) + +if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + check_c_source_compiles(" +#include +int +main(void) +{ + return forkpty(0, NULL, NULL, NULL); +} +" HAVE_FORKPTY) +else() + set(HAVE_FORKPTY 1) +endif() + +# Symbols +check_symbol_exists(FD_CLOEXEC "fcntl.h" HAVE_FD_CLOEXEC) +if(HAVE_LANGINFO_H) + check_symbol_exists(CODESET "langinfo.h" HAVE_NL_LANGINFO_CODESET) +endif() + +check_include_files("endian.h" HAVE_ENDIAN_H) +check_include_files("sys/endian.h" HAVE_SYS_ENDIAN_H) + +set(ENDIAN_INCLUDE_FILE "endian.h") +if(HAVE_SYS_ENDIAN_H AND NOT HAVE_ENDIAN_H) + set(ENDIAN_INCLUDE_FILE "sys/endian.h") +endif() + +set(SI "#include \n") +set(MS "int main(int argc,char**argv)\n{\n uint64_t i=0x0102030405060708ULL;") +set(ME "}") +check_c_source_compiles(" + #define _BSD_SOURCE 1 + #define _DEFAULT_SOURCE 1 + ${SI} + #include <${ENDIAN_INCLUDE_FILE}> + #ifndef be64toh + # error No be64toh macros + #endif + ${MS} + uint64_t j = be64toh(i); + return (j == 0); // j must not be zero + ${ME}" + HAVE_BE64TOH_MACROS) +if(NOT "${HAVE_BE64TOH_MACROS}") + check_function_exists(be64toh HAVE_BE64TOH_FUNC) +endif() +if("${HAVE_BE64TOH_MACROS}" OR "${HAVE_BE64TOH_FUNC}") + set(HAVE_BE64TOH 1) +endif() +if (NOT "${HAVE_BE64TOH}") + if (NOT "${CMAKE_CROSSCOMPILING}") + # It is safe to make ORDER_BIG_ENDIAN not defined if + # - HAVE_BE64TOH is true. In this case be64toh will be used unconditionally in + # any case and ORDER_BIG_ENDIAN will not be examined. + # - CMAKE_CROSSCOMPILING *and* HAVE_BE64TOH are both false. In this case + # be64toh function which uses cycle and arithmetic operations is used which + # will work regardless of endianness. Function is sub-optimal though. + check_c_source_runs(" + ${SI} + ${MS} + char *s = (char *) &i; + return ( + s[0] == 0x01 + && s[1] == 0x02 + && s[2] == 0x03 + && s[3] == 0x04 + && s[4] == 0x05 + && s[5] == 0x06 + && s[6] == 0x07 + && s[7] == 0x08) ? 0 : 1; + ${ME}" + ORDER_BIG_ENDIAN) + endif() +endif() + +# generate configuration header and update include directories +configure_file ( + "${PROJECT_SOURCE_DIR}/cmake.config/config.h.in" + "${PROJECT_BINARY_DIR}/cmake.config/auto/config.h" + ) + +# generate version definitions +configure_file ( + "${PROJECT_SOURCE_DIR}/cmake.config/versiondef.h.in" + "${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef.h" + ) + +# generate pathdef.c +find_program(WHOAMI_PROG whoami) +find_program(HOSTNAME_PROG hostname) + +if (DEFINED ENV{USERNAME}) + set(USERNAME $ENV{USERNAME}) +elseif (NOT DEFINED USERNAME AND EXISTS ${WHOAMI_PROG}) + execute_process(COMMAND ${WHOAMI_PROG} + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE USERNAME) +endif() +if (DEFINED ENV{HOSTNAME}) + set(HOSTNAME $ENV{HOSTNAME}) +elseif (EXISTS ${HOSTNAME_PROG}) + execute_process(COMMAND ${HOSTNAME_PROG} + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE HOSTNAME) +endif() + +configure_file ( + "${PROJECT_SOURCE_DIR}/cmake.config/pathdef.c.in" + "${PROJECT_BINARY_DIR}/cmake.config/auto/pathdef.c" + ESCAPE_QUOTES) diff --git a/cmake.config/config.h.in b/cmake.config/config.h.in new file mode 100644 index 0000000000..59be83fb5e --- /dev/null +++ b/cmake.config/config.h.in @@ -0,0 +1,73 @@ +#ifndef AUTO_CONFIG_H +#define AUTO_CONFIG_H + +#cmakedefine DEBUG + +#cmakedefine SIZEOF_INT @SIZEOF_INT@ +#cmakedefine SIZEOF_INTMAX_T @SIZEOF_INTMAX_T@ +#cmakedefine SIZEOF_INT32_T @SIZEOF_INT32_T@ +#cmakedefine SIZEOF_LONG @SIZEOF_LONG@ +#cmakedefine SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ +#cmakedefine SIZEOF_SIZE_T @SIZEOF_SIZE_T@ + +#if @SIZEOF_VOID_PTR@ == 8 +#define ARCH_64 +#elif @SIZEOF_VOID_PTR@ == 4 +#define ARCH_32 +#endif + +#cmakedefine PROJECT_NAME "@PROJECT_NAME@" + +#cmakedefine HAVE__NSGETENVIRON +#cmakedefine HAVE_FD_CLOEXEC +#cmakedefine HAVE_FSEEKO +#cmakedefine HAVE_GETPWENT +#cmakedefine HAVE_GETPWNAM +#cmakedefine HAVE_GETPWUID +#cmakedefine HAVE_ICONV +#cmakedefine HAVE_LANGINFO_H +#cmakedefine HAVE_LOCALE_H +#cmakedefine HAVE_NL_LANGINFO_CODESET +#cmakedefine HAVE_NL_MSG_CAT_CNTR +#cmakedefine HAVE_PWD_H +#cmakedefine HAVE_READLINK +#cmakedefine HAVE_SETPGID +#cmakedefine HAVE_SETSID +#cmakedefine HAVE_SIGACTION +#cmakedefine HAVE_STRNLEN +#cmakedefine HAVE_STRCASECMP +#cmakedefine HAVE_STRINGS_H +#cmakedefine HAVE_STRNCASECMP +#cmakedefine HAVE_STRPTIME +#cmakedefine HAVE_SYS_SDT_H +#cmakedefine HAVE_SYS_UTSNAME_H +#cmakedefine HAVE_SYS_WAIT_H +#cmakedefine HAVE_TERMIOS_H +#cmakedefine HAVE_WORKING_LIBINTL +#cmakedefine UNIX +#cmakedefine CASE_INSENSITIVE_FILENAME +#cmakedefine USE_FNAME_CASE +#cmakedefine HAVE_SYS_UIO_H +#ifdef HAVE_SYS_UIO_H +#cmakedefine HAVE_READV +# ifndef HAVE_READV +# undef HAVE_SYS_UIO_H +# endif +#endif +#cmakedefine HAVE_FORKPTY + +#cmakedefine FEAT_TUI + +#ifndef UNIT_TESTING +#cmakedefine LOG_LIST_ACTIONS +#endif + +#cmakedefine HAVE_BE64TOH +#cmakedefine ORDER_BIG_ENDIAN +#define ENDIAN_INCLUDE_FILE <@ENDIAN_INCLUDE_FILE@> + +#cmakedefine HAVE_EXECINFO_BACKTRACE +#cmakedefine HAVE_BUILTIN_ADD_OVERFLOW +#cmakedefine HAVE_WIMPLICIT_FALLTHROUGH_FLAG + +#endif // AUTO_CONFIG_H diff --git a/cmake.config/pathdef.c.in b/cmake.config/pathdef.c.in new file mode 100644 index 0000000000..6a8a2b205a --- /dev/null +++ b/cmake.config/pathdef.c.in @@ -0,0 +1,8 @@ +// This is an open source non-commercial project. Dear PVS-Studio, please check +// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +#include "${PROJECT_SOURCE_DIR}/src/nvim/vim.h" +char *default_vim_dir = "${CMAKE_INSTALL_FULL_DATAROOTDIR}/nvim"; +char *default_vimruntime_dir = ""; +char *default_lib_dir = "${CMAKE_INSTALL_FULL_LIBDIR}/nvim"; +char_u *compiled_user = (char_u *)"${USERNAME}"; +char_u *compiled_sys = (char_u *)"${HOSTNAME}"; diff --git a/cmake.config/versiondef.h.in b/cmake.config/versiondef.h.in new file mode 100644 index 0000000000..22cad87249 --- /dev/null +++ b/cmake.config/versiondef.h.in @@ -0,0 +1,21 @@ +#ifndef AUTO_VERSIONDEF_H +#define AUTO_VERSIONDEF_H + +#define NVIM_VERSION_MAJOR @NVIM_VERSION_MAJOR@ +#define NVIM_VERSION_MINOR @NVIM_VERSION_MINOR@ +#define NVIM_VERSION_PATCH @NVIM_VERSION_PATCH@ +#define NVIM_VERSION_PRERELEASE "@NVIM_VERSION_PRERELEASE@" + +#cmakedefine NVIM_VERSION_MEDIUM "@NVIM_VERSION_MEDIUM@" +#ifndef NVIM_VERSION_MEDIUM +# include "auto/versiondef_git.h" +#endif + +#define NVIM_API_LEVEL @NVIM_API_LEVEL@ +#define NVIM_API_LEVEL_COMPAT @NVIM_API_LEVEL_COMPAT@ +#define NVIM_API_PRERELEASE @NVIM_API_PRERELEASE@ + +#define NVIM_VERSION_CFLAGS "@NVIM_VERSION_CFLAGS@" +#define NVIM_VERSION_BUILD_TYPE "@NVIM_VERSION_BUILD_TYPE@" + +#endif // AUTO_VERSIONDEF_H diff --git a/cmake.deps/CMakeLists.txt b/cmake.deps/CMakeLists.txt new file mode 100644 index 0000000000..27374a2a9a --- /dev/null +++ b/cmake.deps/CMakeLists.txt @@ -0,0 +1,293 @@ +# This is not meant to be included by the top-level. +cmake_minimum_required (VERSION 2.8.12) +project(NVIM_DEPS C) + +# Needed for: check_c_compiler_flag() +include(CheckCCompilerFlag) + +# Point CMake at any custom modules we may ship +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/../cmake") + +# In Windows/MSVC CMAKE_BUILD_TYPE changes the paths/linking of the build +# recipes (libuv, msgpack), make sure it is set +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +set(DEFAULT_MAKE_CFLAGS CFLAGS+=-g) + +check_c_compiler_flag(-Og HAS_OG_FLAG) +if(HAS_OG_FLAG) + set(DEFAULT_MAKE_CFLAGS CFLAGS+=-Og ${DEFAULT_MAKE_CFLAGS}) +endif() + +if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") + # pkg-config 29.2 has a bug on OpenBSD which causes it to drop any paths that + # *contain* system include paths. To avoid this, we prefix what would be + # "/usr/include" as "/_usr/include". + # This check is also performed in the root CMakeLists.txt + # https://github.com/neovim/neovim/pull/14745#issuecomment-860201794 + set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/_usr" CACHE PATH "Dependencies install directory.") +else() + set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/usr" CACHE PATH "Dependencies install directory.") +endif() + +set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin" CACHE PATH "Dependencies binary install directory.") +set(DEPS_LIB_DIR "${DEPS_INSTALL_DIR}/lib" CACHE PATH "Dependencies library install directory.") +set(DEPS_BUILD_DIR "${CMAKE_BINARY_DIR}/build" CACHE PATH "Dependencies build directory.") +set(DEPS_DOWNLOAD_DIR "${DEPS_BUILD_DIR}/downloads" CACHE PATH "Dependencies download directory.") + +option(USE_BUNDLED "Use bundled dependencies." ON) + +option(USE_BUNDLED_UNIBILIUM "Use the bundled unibilium." ${USE_BUNDLED}) +option(USE_BUNDLED_LIBTERMKEY "Use the bundled libtermkey." ${USE_BUNDLED}) +option(USE_BUNDLED_LIBVTERM "Use the bundled libvterm." ${USE_BUNDLED}) +option(USE_BUNDLED_LIBUV "Use the bundled libuv." ${USE_BUNDLED}) +option(USE_BUNDLED_MSGPACK "Use the bundled msgpack." ${USE_BUNDLED}) +option(USE_BUNDLED_LUAJIT "Use the bundled version of luajit." ${USE_BUNDLED}) +option(USE_BUNDLED_LUAROCKS "Use the bundled version of luarocks." ${USE_BUNDLED}) +option(USE_BUNDLED_LUV "Use the bundled version of luv." ${USE_BUNDLED}) +#XXX(tarruda): Lua is only used for debugging the functional test client, no +# build it unless explicitly requested +option(USE_BUNDLED_LUA "Use the bundled version of lua." OFF) +option(USE_BUNDLED_TS_PARSERS "Use the bundled treesitter parsers." ${USE_BUNDLED}) +option(USE_BUNDLED_TS "Use the bundled treesitter runtime." ${USE_BUNDLED}) + +if(USE_BUNDLED AND MSVC) + option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." ON) + option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." ON) +else() + option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." OFF) + option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." OFF) +endif() + +option(USE_EXISTING_SRC_DIR "Skip download of deps sources in case of existing source directory." OFF) + +if(WIN32) + find_package(Git) + if(NOT Git_FOUND) + message(FATAL_ERROR "Git is required to apply patches for Windows.") + endif() +endif() + +if(UNIX) + find_program(MAKE_PRG NAMES gmake make) + if(MAKE_PRG) + execute_process( + COMMAND "${MAKE_PRG}" --version + OUTPUT_VARIABLE MAKE_VERSION_INFO) + if(NOT "${OUTPUT_VARIABLE}" MATCHES ".*GNU.*") + unset(MAKE_PRG) + endif() + endif() + 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() + +if(CMAKE_C_COMPILER_ARG1) + set(DEPS_C_COMPILER "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}") +else() + set(DEPS_C_COMPILER "${CMAKE_C_COMPILER}") +endif() + +if(CMAKE_CXX_COMPILER) + set(DEPS_CXX_COMPILER "${CMAKE_CXX_COMPILER}") +endif() + +if(CMAKE_OSX_SYSROOT) + set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -isysroot${CMAKE_OSX_SYSROOT}") + if(DEPS_CXX_COMPILER) + set(DEPS_CXX_COMPILER "${DEPS_CXX_COMPILER} -isysroot${CMAKE_OSX_SYSROOT}") + endif() +endif() + +if(CMAKE_OSX_ARCHITECTURES) + string(REPLACE ";" "|" CMAKE_OSX_ARCHITECTURES_ALT_SEP "${CMAKE_OSX_ARCHITECTURES}") + # The LuaJIT build does not like being passed multiple `-arch` flags + # so we handle a universal build the old-fashioned way. + set(LUAJIT_C_COMPILER "${DEPS_C_COMPILER}") + foreach(ARCH IN LISTS CMAKE_OSX_ARCHITECTURES) + set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -arch ${ARCH}") + if(DEPS_CXX_COMPILER) + set(DEPS_CXX_COMPILER "${DEPS_CXX_COMPILER} -arch ${ARCH}") + endif() + endforeach() +endif() + +set(HOSTDEPS_INSTALL_DIR "${DEPS_INSTALL_DIR}") +set(HOSTDEPS_BIN_DIR "${DEPS_BIN_DIR}") +set(HOSTDEPS_LIB_DIR "${DEPS_LIB_DIR}") +set(HOSTDEPS_C_COMPILER "${DEPS_C_COMPILER}") +set(HOSTDEPS_CXX_COMPILER "${DEPS_CXX_COMPILER}") + +include(ExternalProject) + +set(LIBUV_URL https://github.com/libuv/libuv/archive/730e07e2f77a4001bdf6894112271c926399f5a8.tar.gz) +set(LIBUV_SHA256 271869759a7dbdaf1d1bf75f1ec388a7307592153b34ebb52d3934715cbaac8a) + +set(MSGPACK_URL https://github.com/msgpack/msgpack-c/releases/download/c-4.0.0/msgpack-c-4.0.0.tar.gz) +set(MSGPACK_SHA256 420fe35e7572f2a168d17e660ef981a589c9cbe77faa25eb34a520e1fcc032c8) + +# https://github.com/LuaJIT/LuaJIT/tree/v2.1 +set(LUAJIT_URL https://github.com/LuaJIT/LuaJIT/archive/4ef96cff887c268cc676f9b4b1dc9c54a693efd5.tar.gz) +set(LUAJIT_SHA256 ae913e33be80dded08a2fc368787f168305c22808519c962553bf4c8668e9856) + +set(LUA_URL https://www.lua.org/ftp/lua-5.1.5.tar.gz) +set(LUA_SHA256 2640fc56a795f29d28ef15e13c34a47e223960b0240e8cb0a82d9b0738695333) + +set(LUAROCKS_URL https://github.com/luarocks/luarocks/archive/v3.8.0.tar.gz) +set(LUAROCKS_SHA256 ab6612ca9ab87c6984871d2712d05525775e8b50172701a0a1cabddf76de2be7) + +set(UNIBILIUM_URL https://github.com/neovim/unibilium/archive/92d929f.tar.gz) +set(UNIBILIUM_SHA256 29815283c654277ef77a3adcc8840db79ddbb20a0f0b0c8f648bd8cd49a02e4b) + +set(LIBTERMKEY_URL https://www.leonerd.org.uk/code/libtermkey/libtermkey-0.22.tar.gz) +set(LIBTERMKEY_SHA256 6945bd3c4aaa83da83d80a045c5563da4edd7d0374c62c0d35aec09eb3014600) + +set(LIBVTERM_URL https://www.leonerd.org.uk/code/libvterm/libvterm-0.1.4.tar.gz) +set(LIBVTERM_SHA256 bc70349e95559c667672fc8c55b9527d9db9ada0fb80a3beda533418d782d3dd) + +set(LUV_VERSION 1.43.0-0) +set(LUV_URL https://github.com/luvit/luv/archive/9f80386338af7d164ff1f47d480ee1ae775cb0ef.tar.gz) +set(LUV_SHA256 a6fe420f06944c0d84a173fccff2eb0d14dfd1293bc24666a580b98dd1a7254f) + +set(LUA_COMPAT53_URL https://github.com/keplerproject/lua-compat-5.3/archive/v0.9.tar.gz) +set(LUA_COMPAT53_SHA256 ad05540d2d96a48725bb79a1def35cf6652a4e2ec26376e2617c8ce2baa6f416) + +# cat.exe curl.exe curl-ca-bundle.crt diff.exe tee.exe xxd.exe +set(WINTOOLS_URL https://github.com/neovim/deps/raw/d66e306abf5b846484b4f2adffd896bce7e065d2/opt/win32tools.zip) +set(WINTOOLS_SHA256 2fb2f8d69070b3f16e029913fb95008e6be33893d77fc358012396c275a0fdb7) + +set(WINGUI_URL https://github.com/equalsraf/neovim-qt/releases/download/v0.2.16.1/neovim-qt.zip) +set(WINGUI_SHA256 ddb4492db03da407703fb0ab271c4eb060250d1a7d71200e2b3b981cb0de59de) + +set(WIN32YANK_X86_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x86.zip) +set(WIN32YANK_X86_SHA256 62f34e5a46c5d4a7b3f3b512e1ff7b77fedd432f42581cbe825233a996eed62c) +set(WIN32YANK_X86_64_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x64.zip) +set(WIN32YANK_X86_64_SHA256 33a747a92da60fb65e668edbf7661d3d902411a2d545fe9dc08623cecd142a20) + +set(GETTEXT_URL https://ftp.gnu.org/pub/gnu/gettext/gettext-0.20.1.tar.gz) +set(GETTEXT_SHA256 66415634c6e8c3fa8b71362879ec7575e27da43da562c798a8a2f223e6e47f5c) + +set(LIBICONV_URL https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz) +set(LIBICONV_SHA256 ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178) + +set(TREESITTER_C_URL https://github.com/tree-sitter/tree-sitter-c/archive/v0.20.1.tar.gz) +set(TREESITTER_C_SHA256 ffcc2ef0eded59ad1acec9aec4f9b0c7dd209fc1a85d85f8b0e81298e3dddcc2) + +set(TREESITTER_URL https://github.com/tree-sitter/tree-sitter/archive/v0.20.6.tar.gz) +set(TREESITTER_SHA256 4d37eaef8a402a385998ff9aca3e1043b4a3bba899bceeff27a7178e1165b9de) + +if(USE_BUNDLED_UNIBILIUM) + include(BuildUnibilium) +endif() + +if(USE_BUNDLED_LIBTERMKEY) + include(BuildLibtermkey) + if(USE_BUNDLED_UNIBILIUM) + add_dependencies(libtermkey unibilium) + endif() +endif() + +if(USE_BUNDLED_LIBVTERM) + include(BuildLibvterm) +endif() + +if(USE_BUNDLED_LIBUV) + include(BuildLibuv) +endif() + +if(USE_BUNDLED_MSGPACK) + include(BuildMsgpack) +endif() + +if(USE_BUNDLED_LUAJIT) + include(BuildLuajit) +endif() + +if(USE_BUNDLED_LUA) + include(BuildLua) +endif() + +if(USE_BUNDLED_LUAROCKS) + include(BuildLuarocks) +endif() + +if(USE_BUNDLED_LUV) + include(BuildLuv) +endif() + +if(USE_BUNDLED_GETTEXT) + include(BuildGettext) +endif() + +if(USE_BUNDLED_LIBICONV) + include(BuildLibiconv) +endif() + +if(USE_BUNDLED_TS_PARSERS) + include(BuildTreesitterParsers) +endif() + +if(USE_BUNDLED_TS) + include(BuildTreesitter) +endif() + +if(WIN32) + include(GetBinaryDeps) + + GetBinaryDep(TARGET wintools + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory . ${DEPS_INSTALL_DIR}/bin) + + GetBinaryDep(TARGET wingui + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory bin ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy_directory share ${DEPS_INSTALL_DIR}/share) + + include(TargetArch) + GetBinaryDep(TARGET "win32yank_${TARGET_ARCH}" + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy win32yank.exe ${DEPS_INSTALL_DIR}/bin) + + if("${TARGET_ARCH}" STREQUAL "X86_64") + set(TARGET_ARCH x64) + elseif(TARGET_ARCH STREQUAL "X86") + set(TARGET_ARCH ia32) + endif() +endif() + +# clean-shared-libraries removes ${DEPS_INSTALL_DIR}/lib/nvim/parser/c.dll, +# resulting in MSVC build failure in CI. +if (MSVC) + set(ALL_DEPS ${THIRD_PARTY_DEPS}) +else() + add_custom_target(clean-shared-libraries + COMMAND ${CMAKE_COMMAND} + -DREMOVE_FILE_GLOB=${DEPS_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}*${CMAKE_SHARED_LIBRARY_SUFFIX}* + -P ${PROJECT_SOURCE_DIR}/cmake/RemoveFiles.cmake + DEPENDS ${THIRD_PARTY_DEPS} + ) + set(ALL_DEPS clean-shared-libraries) +endif() + +# TODO(justinmk): does anyone use this target? +add_custom_target(third-party ALL + COMMAND ${CMAKE_COMMAND} -E touch .third-party + DEPENDS ${ALL_DEPS} +) diff --git a/cmake.deps/cmake/BuildGettext.cmake b/cmake.deps/cmake/BuildGettext.cmake new file mode 100644 index 0000000000..6128ecfa69 --- /dev/null +++ b/cmake.deps/cmake/BuildGettext.cmake @@ -0,0 +1,37 @@ +if(MSVC) + + ExternalProject_Add(gettext + PREFIX ${DEPS_BUILD_DIR} + URL ${GETTEXT_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/gettext + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/gettext + -DURL=${GETTEXT_URL} + -DEXPECTED_SHA256=${GETTEXT_SHA256} + -DTARGET=gettext + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/GettextCMakeLists.txt + ${DEPS_BUILD_DIR}/src/gettext/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/gettext + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DLIBICONV_INCLUDE_DIRS=${DEPS_INSTALL_DIR}/include + -DLIBICONV_LIBRARIES=${DEPS_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}libcharset${CMAKE_STATIC_LIBRARY_SUFFIX}$${DEPS_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}libiconv${CMAKE_STATIC_LIBRARY_SUFFIX} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) + +else() + message(FATAL_ERROR "Trying to build gettext in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") +endif() + +list(APPEND THIRD_PARTY_DEPS gettext) +if(USE_BUNDLED_LIBICONV) + add_dependencies(gettext libiconv) +endif() diff --git a/cmake.deps/cmake/BuildLibiconv.cmake b/cmake.deps/cmake/BuildLibiconv.cmake new file mode 100644 index 0000000000..5ff33e0cd3 --- /dev/null +++ b/cmake.deps/cmake/BuildLibiconv.cmake @@ -0,0 +1,32 @@ +if(MSVC) + + ExternalProject_Add(libiconv + PREFIX ${DEPS_BUILD_DIR} + URL ${LIBICONV_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libiconv + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libiconv + -DURL=${LIBICONV_URL} + -DEXPECTED_SHA256=${LIBICONV_SHA256} + -DTARGET=libiconv + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibiconvCMakeLists.txt + ${DEPS_BUILD_DIR}/src/libiconv/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libiconv + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) + +else() + message(FATAL_ERROR "Trying to build libiconv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") +endif() + +list(APPEND THIRD_PARTY_DEPS libiconv) diff --git a/cmake.deps/cmake/BuildLibtermkey.cmake b/cmake.deps/cmake/BuildLibtermkey.cmake new file mode 100644 index 0000000000..d44e09d734 --- /dev/null +++ b/cmake.deps/cmake/BuildLibtermkey.cmake @@ -0,0 +1,57 @@ +if(WIN32) +ExternalProject_Add(libtermkey + PREFIX ${DEPS_BUILD_DIR} + URL ${LIBTERMKEY_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libtermkey + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libtermkey + -DURL=${LIBTERMKEY_URL} + -DEXPECTED_SHA256=${LIBTERMKEY_SHA256} + -DTARGET=libtermkey + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libtermkeyCMakeLists.txt + ${DEPS_BUILD_DIR}/src/libtermkey/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libtermkey + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + # Hack to avoid -rdynamic in Mingw + -DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="" + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DUNIBILIUM_INCLUDE_DIRS=${DEPS_INSTALL_DIR}/include + -DUNIBILIUM_LIBRARIES=${DEPS_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}unibilium${CMAKE_STATIC_LIBRARY_SUFFIX} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) +else() +find_package(PkgConfig REQUIRED) + +ExternalProject_Add(libtermkey + PREFIX ${DEPS_BUILD_DIR} + URL ${LIBTERMKEY_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libtermkey + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libtermkey + -DURL=${LIBTERMKEY_URL} + -DEXPECTED_SHA256=${LIBTERMKEY_SHA256} + -DTARGET=libtermkey + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "" + BUILD_IN_SOURCE 1 + BUILD_COMMAND "" + INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} + PREFIX=${DEPS_INSTALL_DIR} + PKG_CONFIG_PATH=${DEPS_LIB_DIR}/pkgconfig + CFLAGS=-fPIC + LDFLAGS+=-static + ${DEFAULT_MAKE_CFLAGS} + install) +endif() + +list(APPEND THIRD_PARTY_DEPS libtermkey) diff --git a/cmake.deps/cmake/BuildLibuv.cmake b/cmake.deps/cmake/BuildLibuv.cmake new file mode 100644 index 0000000000..ba5de38714 --- /dev/null +++ b/cmake.deps/cmake/BuildLibuv.cmake @@ -0,0 +1,77 @@ +# BuildLibuv(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build libuv, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLibuv) + cmake_parse_arguments(_libuv + "BUILD_IN_SOURCE" + "TARGET" + "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _libuv_CONFIGURE_COMMAND AND NOT _libuv_BUILD_COMMAND + AND NOT _libuv_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + if(NOT _libuv_TARGET) + set(_libuv_TARGET "libuv") + endif() + + ExternalProject_Add(${_libuv_TARGET} + PREFIX ${DEPS_BUILD_DIR} + URL ${LIBUV_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv + -DURL=${LIBUV_URL} + -DEXPECTED_SHA256=${LIBUV_SHA256} + -DTARGET=${_libuv_TARGET} + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + PATCH_COMMAND "${_libuv_PATCH_COMMAND}" + BUILD_IN_SOURCE ${_libuv_BUILD_IN_SOURCE} + CONFIGURE_COMMAND "${_libuv_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_libuv_BUILD_COMMAND}" + INSTALL_COMMAND "${_libuv_INSTALL_COMMAND}") +endfunction() + +set(UNIX_CFGCMD sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh && + ${DEPS_BUILD_DIR}/src/libuv/configure --with-pic --disable-shared + --prefix=${DEPS_INSTALL_DIR} --libdir=${DEPS_INSTALL_DIR}/lib + CC=${DEPS_C_COMPILER}) + +if(UNIX) + BuildLibuv( + CONFIGURE_COMMAND ${UNIX_CFGCMD} MAKE=${MAKE_PRG} + INSTALL_COMMAND ${MAKE_PRG} V=1 install) + +elseif(WIN32) + + set(UV_OUTPUT_DIR ${DEPS_BUILD_DIR}/src/libuv/${CMAKE_BUILD_TYPE}) + if(MSVC) + set(BUILD_SHARED ON) + elseif(MINGW) + set(BUILD_SHARED OFF) + else() + message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") + endif() + BuildLibUv(BUILD_IN_SOURCE + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibuvCMakeLists.txt + ${DEPS_BUILD_DIR}/src/libuv/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libuv/CMakeLists.txt + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DBUILD_SHARED_LIBS=${BUILD_SHARED} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + PATCH_COMMAND ${LIBUV_PATCH_COMMAND} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) + +else() + message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") +endif() + +list(APPEND THIRD_PARTY_DEPS libuv) diff --git a/cmake.deps/cmake/BuildLibvterm.cmake b/cmake.deps/cmake/BuildLibvterm.cmake new file mode 100644 index 0000000000..2c300dda7c --- /dev/null +++ b/cmake.deps/cmake/BuildLibvterm.cmake @@ -0,0 +1,69 @@ +# BuildLibvterm(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Failing to pass a command argument will result in no command being run +function(BuildLibvterm) + cmake_parse_arguments(_libvterm + "" + "" + "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _libvterm_CONFIGURE_COMMAND AND NOT _libvterm_BUILD_COMMAND + AND NOT _libvterm_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(libvterm + PREFIX ${DEPS_BUILD_DIR} + URL ${LIBVTERM_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libvterm + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libvterm + -DURL=${LIBVTERM_URL} + -DEXPECTED_SHA256=${LIBVTERM_SHA256} + -DTARGET=libvterm + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + PATCH_COMMAND "${_libvterm_PATCH_COMMAND}" + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "${_libvterm_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_libvterm_BUILD_COMMAND}" + INSTALL_COMMAND "${_libvterm_INSTALL_COMMAND}") +endfunction() + +if(WIN32) + if(MSVC) + set(LIBVTERM_PATCH_COMMAND + ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm init + COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm apply --ignore-whitespace + ${CMAKE_CURRENT_SOURCE_DIR}/patches/libvterm-Remove-VLAs-for-MSVC.patch) + endif() + set(LIBVTERM_CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibvtermCMakeLists.txt + ${DEPS_BUILD_DIR}/src/libvterm/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Libvterm-tbl2inc_c.cmake + ${DEPS_BUILD_DIR}/src/libvterm/tbl2inc_c.cmake + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libvterm + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC" + -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) + set(LIBVTERM_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) + set(LIBVTERM_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) +else() + set(LIBVTERM_INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} + PREFIX=${DEPS_INSTALL_DIR} + CFLAGS=-fPIC + LDFLAGS+=-static + ${DEFAULT_MAKE_CFLAGS} + install) +endif() + +BuildLibvterm(PATCH_COMMAND ${LIBVTERM_PATCH_COMMAND} + CONFIGURE_COMMAND ${LIBVTERM_CONFIGURE_COMMAND} + BUILD_COMMAND ${LIBVTERM_BUILD_COMMAND} + INSTALL_COMMAND ${LIBVTERM_INSTALL_COMMAND}) + +list(APPEND THIRD_PARTY_DEPS libvterm) diff --git a/cmake.deps/cmake/BuildLua.cmake b/cmake.deps/cmake/BuildLua.cmake new file mode 100644 index 0000000000..a40cb7dcb2 --- /dev/null +++ b/cmake.deps/cmake/BuildLua.cmake @@ -0,0 +1,96 @@ +# BuildLua(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build lua, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLua) + cmake_parse_arguments(_lua + "" + "" + "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _lua_CONFIGURE_COMMAND AND NOT _lua_BUILD_COMMAND + AND NOT _lua_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(lua + PREFIX ${DEPS_BUILD_DIR} + URL ${LUA_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua + -DURL=${LUA_URL} + -DEXPECTED_SHA256=${LUA_SHA256} + -DTARGET=lua + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "${_lua_CONFIGURE_COMMAND}" + BUILD_IN_SOURCE 1 + BUILD_COMMAND "${_lua_BUILD_COMMAND}" + INSTALL_COMMAND "${_lua_INSTALL_COMMAND}") +endfunction() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(LUA_TARGET linux) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(LUA_TARGET macosx) +elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(LUA_TARGET freebsd) +elseif(CMAKE_SYSTEM_NAME MATCHES "BSD") + set(CMAKE_LUA_TARGET bsd) +elseif(CMAKE_SYSTEM_NAME MATCHES "^MINGW") + set(CMAKE_LUA_TARGET mingw) +else() + if(UNIX) + set(LUA_TARGET posix) + else() + set(LUA_TARGET generic) + endif() +endif() + +set(LUA_CFLAGS "-O0 -g3 -fPIC") +set(LUA_LDFLAGS "") + +if(CLANG_ASAN_UBSAN) + set(LUA_CFLAGS "${LUA_CFLAGS} -fsanitize=address") + set(LUA_CFLAGS "${LUA_CFLAGS} -fno-omit-frame-pointer") + set(LUA_CFLAGS "${LUA_CFLAGS} -fno-optimize-sibling-calls") + + set(LUA_LDFLAGS "${LUA_LDFLAGS} -fsanitize=address") +endif() + +set(LUA_CONFIGURE_COMMAND + sed -e "/^CC/s@gcc@${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}@" + -e "/^CFLAGS/s@-O2@${LUA_CFLAGS}@" + -e "/^MYLDFLAGS/s@$@${LUA_LDFLAGS}@" + -e "s@-lreadline@@g" + -e "s@-lhistory@@g" + -e "s@-lncurses@@g" + -i ${DEPS_BUILD_DIR}/src/lua/src/Makefile && + sed -e "/#define LUA_USE_READLINE/d" + -e "s@\\(#define LUA_ROOT[ ]*\"\\)/usr/local@\\1${DEPS_INSTALL_DIR}@" + -i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h) +set(LUA_INSTALL_TOP_ARG "INSTALL_TOP=${DEPS_INSTALL_DIR}") +set(LUA_BUILD_COMMAND + ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} ${LUA_TARGET}) +set(LUA_INSTALL_COMMAND + ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} install) + +message(STATUS "Lua target is ${LUA_TARGET}") + +BuildLua(CONFIGURE_COMMAND ${LUA_CONFIGURE_COMMAND} + BUILD_COMMAND ${LUA_BUILD_COMMAND} + INSTALL_COMMAND ${LUA_INSTALL_COMMAND}) +list(APPEND THIRD_PARTY_DEPS lua) + +set(BUSTED ${DEPS_INSTALL_DIR}/bin/busted) +set(BUSTED_LUA ${BUSTED}-lua) + +add_custom_command(OUTPUT ${BUSTED_LUA} + COMMAND sed -e 's/^exec/exec $$LUA_DEBUGGER/' -e 's/jit//g' < ${BUSTED} > ${BUSTED_LUA} && chmod +x ${BUSTED_LUA} + DEPENDS lua busted ${BUSTED}) +add_custom_target(busted-lua + DEPENDS ${DEPS_INSTALL_DIR}/bin/busted-lua) + +list(APPEND THIRD_PARTY_DEPS busted-lua) diff --git a/cmake.deps/cmake/BuildLuajit.cmake b/cmake.deps/cmake/BuildLuajit.cmake new file mode 100644 index 0000000000..c8d5b39398 --- /dev/null +++ b/cmake.deps/cmake/BuildLuajit.cmake @@ -0,0 +1,163 @@ +# BuildLuajit(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build luajit, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLuajit) + cmake_parse_arguments(_luajit + "" + "TARGET" + "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND;DEPENDS" + ${ARGN}) + if(NOT _luajit_CONFIGURE_COMMAND AND NOT _luajit_BUILD_COMMAND + AND NOT _luajit_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + if(NOT _luajit_TARGET) + set(_luajit_TARGET "luajit") + endif() + + ExternalProject_Add(${_luajit_TARGET} + PREFIX ${DEPS_BUILD_DIR} + URL ${LUAJIT_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luajit + -DURL=${LUAJIT_URL} + -DEXPECTED_SHA256=${LUAJIT_SHA256} + -DTARGET=${_luajit_TARGET} + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}" + BUILD_IN_SOURCE 1 + BUILD_COMMAND "${_luajit_BUILD_COMMAND}" + INSTALL_COMMAND "${_luajit_INSTALL_COMMAND}" + DEPENDS "${_luajit_DEPENDS}") + + # Create symlink for development version manually. + if(UNIX) + add_custom_command( + TARGET ${_luajit_TARGET} + COMMAND ${CMAKE_COMMAND} -E create_symlink luajit-2.1.0-beta3 ${DEPS_BIN_DIR}/${_luajit_TARGET}) + endif() +endfunction() + +check_c_compiler_flag(-fno-stack-check HAS_NO_STACK_CHECK) +if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND HAS_NO_STACK_CHECK) + set(NO_STACK_CHECK "CFLAGS+=-fno-stack-check") +else() + set(NO_STACK_CHECK "") +endif() +if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") + set(AMD64_ABI "LDFLAGS=-lpthread -lc++abi") +else() + set(AMD64_ABI "") +endif() +set(BUILDCMD_UNIX ${MAKE_PRG} CFLAGS=-fPIC + CFLAGS+=-DLUA_USE_APICHECK + CFLAGS+=-funwind-tables + ${NO_STACK_CHECK} + ${AMD64_ABI} + CCDEBUG+=-g + Q=) + +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + if(CMAKE_OSX_DEPLOYMENT_TARGET) + set(DEPLOYMENT_TARGET "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") + else() + execute_process(COMMAND sw_vers -productVersion + OUTPUT_VARIABLE MACOS_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(DEPLOYMENT_TARGET "MACOSX_DEPLOYMENT_TARGET=${MACOS_VERSION}") + endif() +else() + set(DEPLOYMENT_TARGET "") +endif() + +if((UNIX AND NOT APPLE) OR (APPLE AND NOT CMAKE_OSX_ARCHITECTURES)) + BuildLuaJit(INSTALL_COMMAND ${BUILDCMD_UNIX} + CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} + ${DEPLOYMENT_TARGET} install) + +elseif(CMAKE_OSX_ARCHITECTURES AND APPLE) + + # Passing multiple `-arch` flags to the LuaJIT build will cause it to fail. + # To get a working universal build, we build each requested architecture slice + # individually then `lipo` them all up. + set(LUAJIT_SRC_DIR "${DEPS_BUILD_DIR}/src/luajit") + foreach(ARCH IN LISTS CMAKE_OSX_ARCHITECTURES) + set(STATIC_CC "${LUAJIT_C_COMPILER} -arch ${ARCH}") + set(DYNAMIC_CC "${LUAJIT_C_COMPILER} -arch ${ARCH} -fPIC") + set(TARGET_LD "${LUAJIT_C_COMPILER} -arch ${ARCH}") + list(APPEND LUAJIT_THIN_EXECUTABLES "${LUAJIT_SRC_DIR}-${ARCH}/src/luajit") + list(APPEND LUAJIT_THIN_STATIC_LIBS "${LUAJIT_SRC_DIR}-${ARCH}/src/libluajit.a") + list(APPEND LUAJIT_THIN_DYLIBS "${LUAJIT_SRC_DIR}-${ARCH}/src/libluajit.so") + list(APPEND LUAJIT_THIN_TARGETS "luajit-${ARCH}") + + # See https://luajit.org/install.html#cross. + BuildLuaJit(TARGET "luajit-${ARCH}" + BUILD_COMMAND ${BUILDCMD_UNIX} + CC=${LUAJIT_C_COMPILER} STATIC_CC=${STATIC_CC} + DYNAMIC_CC=${DYNAMIC_CC} TARGET_LD=${TARGET_LD} + PREFIX=${DEPS_INSTALL_DIR} + ${DEPLOYMENT_TARGET}) + endforeach() + BuildLuaJit( + CONFIGURE_COMMAND ${BUILDCMD_UNIX} CC=${LUAJIT_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} ${DEPLOYMENT_TARGET} + COMMAND ${CMAKE_COMMAND} -E rm -f ${LUAJIT_SRC_DIR}/src/luajit ${LUAJIT_SRC_DIR}/src/libluajit.so ${LUAJIT_SRC_DIR}/src/libluajit.a + BUILD_COMMAND lipo ${LUAJIT_THIN_EXECUTABLES} -create -output ${LUAJIT_SRC_DIR}/src/luajit + COMMAND lipo ${LUAJIT_THIN_STATIC_LIBS} -create -output ${LUAJIT_SRC_DIR}/src/libluajit.a + COMMAND lipo ${LUAJIT_THIN_DYLIBS} -create -output ${LUAJIT_SRC_DIR}/src/libluajit.so + INSTALL_COMMAND ${BUILDCMD_UNIX} CC=${LUAJIT_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} ${DEPLOYMENT_TARGET} install + DEPENDS ${LUAJIT_THIN_TARGETS} + ) + +elseif(MINGW) + + if(CMAKE_GENERATOR MATCHES "Ninja") + set(LUAJIT_MAKE_PRG ${MAKE_PRG}) + else() + set(LUAJIT_MAKE_PRG ${CMAKE_MAKE_PROGRAM}) + endif() + BuildLuaJit(BUILD_COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} + PREFIX=${DEPS_INSTALL_DIR} + CFLAGS+=-DLUA_USE_APICHECK + CFLAGS+=-funwind-tables + CCDEBUG+=-g + BUILDMODE=static + # Build a DLL too + COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic + + INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib + # Luarocks searches for lua51.dll in lib + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/lib + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/libluajit.a ${DEPS_INSTALL_DIR}/lib + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 + COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin/lua/jit + COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/bin/lua/jit + ) +elseif(MSVC) + + BuildLuaJit( + BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${DEPS_BUILD_DIR}/src/luajit/src ${DEPS_BUILD_DIR}/src/luajit/src/msvcbuild.bat + INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/bin + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib + # Luarocks searches for lua51.lib + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_INSTALL_DIR}/lib/lua51.lib + # Luv searches for luajit.lib + COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_INSTALL_DIR}/lib/luajit.lib + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 + COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin/lua/jit + COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/bin/lua/jit + ) +else() + message(FATAL_ERROR "Trying to build luajit in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") +endif() + +list(APPEND THIRD_PARTY_DEPS luajit) diff --git a/cmake.deps/cmake/BuildLuarocks.cmake b/cmake.deps/cmake/BuildLuarocks.cmake new file mode 100644 index 0000000000..6933d263f2 --- /dev/null +++ b/cmake.deps/cmake/BuildLuarocks.cmake @@ -0,0 +1,227 @@ +# Luarocks recipe. Luarocks is only required when building Neovim, when +# cross compiling we still want to build for the HOST system, whenever +# writing a recipe that is meant for cross-compile, use the HOSTDEPS_* variables +# instead of DEPS_* - check the main CMakeLists.txt for a list. +# +# NOTE: LuaRocks rocks need to "DEPENDS" on the previous module, because +# running luarocks in parallel will break, e.g. when some rocks have +# the same dependency.. + +option(USE_BUNDLED_BUSTED "Use the bundled version of busted to run tests." ON) + +# BuildLuarocks(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build luarocks, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLuarocks) + cmake_parse_arguments(_luarocks + "" + "" + "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _luarocks_CONFIGURE_COMMAND AND NOT _luarocks_BUILD_COMMAND + AND NOT _luarocks_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(luarocks + PREFIX ${DEPS_BUILD_DIR} + URL ${LUAROCKS_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luarocks + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luarocks + -DURL=${LUAROCKS_URL} + -DEXPECTED_SHA256=${LUAROCKS_SHA256} + -DTARGET=luarocks + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "${_luarocks_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_luarocks_BUILD_COMMAND}" + INSTALL_COMMAND "${_luarocks_INSTALL_COMMAND}") +endfunction() + +# The luarocks binary location +set(LUAROCKS_BINARY ${HOSTDEPS_BIN_DIR}/luarocks) + +# Arguments for calls to 'luarocks build' +if(NOT MSVC) + # In MSVC don't pass the compiler/linker to luarocks, the bundled + # version already knows, and passing them here breaks the build + set(LUAROCKS_BUILDARGS CC=${HOSTDEPS_C_COMPILER} LD=${HOSTDEPS_C_COMPILER}) +endif() + +# Lua version, used with rocks directories. +# Defaults to 5.1 for bundled LuaJIT/Lua. +set(LUA_VERSION "5.1") + +if(UNIX) + + if(USE_BUNDLED_LUAJIT) + list(APPEND LUAROCKS_OPTS + --with-lua=${HOSTDEPS_INSTALL_DIR} + --with-lua-include=${HOSTDEPS_INSTALL_DIR}/include/luajit-2.1 + --with-lua-interpreter=luajit) + elseif(USE_BUNDLED_LUA) + list(APPEND LUAROCKS_OPTS + --with-lua=${HOSTDEPS_INSTALL_DIR}) + else() + find_package(LuaJit) + if(LUAJIT_FOUND) + list(APPEND LUAROCKS_OPTS + --with-lua-include=${LUAJIT_INCLUDE_DIRS} + --with-lua-interpreter=luajit) + endif() + + # Get LUA_VERSION used with rocks output. + if(LUAJIT_FOUND) + set(LUA_EXE "luajit") + else() + set(LUA_EXE "lua") + endif() + execute_process( + COMMAND ${LUA_EXE} -e "print(string.sub(_VERSION, 5))" + OUTPUT_VARIABLE LUA_VERSION + ERROR_VARIABLE ERR + RESULT_VARIABLE RES) + if(NOT RES EQUAL 0) + message(FATAL_ERROR "Could not get LUA_VERSION with ${LUA_EXE}: ${ERR}") + endif() + endif() + + BuildLuarocks( + CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/luarocks/configure + --prefix=${HOSTDEPS_INSTALL_DIR} --force-config ${LUAROCKS_OPTS} + INSTALL_COMMAND ${MAKE_PRG} -j1 bootstrap) +elseif(MSVC OR MINGW) + + if(MINGW) + set(COMPILER_FLAG /MW) + elseif(MSVC) + set(COMPILER_FLAG /MSVC) + endif() + + # Ignore USE_BUNDLED_LUAJIT - always ON for native Win32 + BuildLuarocks(INSTALL_COMMAND install.bat /FORCECONFIG /NOREG /NOADMIN /Q /F + /LUA ${DEPS_INSTALL_DIR} + /LIB ${DEPS_LIB_DIR} + /BIN ${DEPS_BIN_DIR} + /INC ${DEPS_INSTALL_DIR}/include/luajit-2.1 + /P ${DEPS_INSTALL_DIR}/luarocks /TREE ${DEPS_INSTALL_DIR} + /SCRIPTS ${DEPS_BIN_DIR} + /CMOD ${DEPS_BIN_DIR} + ${COMPILER_FLAG} + /LUAMOD ${DEPS_BIN_DIR}/lua) + + set(LUAROCKS_BINARY ${DEPS_INSTALL_DIR}/luarocks/luarocks.bat) +else() + message(FATAL_ERROR "Trying to build luarocks in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") +endif() + +list(APPEND THIRD_PARTY_DEPS luarocks) + +if(USE_BUNDLED_LUAJIT) + add_dependencies(luarocks luajit) +elseif(USE_BUNDLED_LUA) + add_dependencies(luarocks lua) +endif() +set(ROCKS_DIR ${HOSTDEPS_LIB_DIR}/luarocks/rocks-${LUA_VERSION}) + +# mpack +add_custom_command(OUTPUT ${ROCKS_DIR}/mpack + COMMAND ${LUAROCKS_BINARY} + ARGS build mpack 1.0.8-0 ${LUAROCKS_BUILDARGS} + DEPENDS luarocks) +add_custom_target(mpack DEPENDS ${ROCKS_DIR}/mpack) +list(APPEND THIRD_PARTY_DEPS mpack) + +# lpeg +add_custom_command(OUTPUT ${ROCKS_DIR}/lpeg + COMMAND ${LUAROCKS_BINARY} + ARGS build lpeg 1.0.2-1 ${LUAROCKS_BUILDARGS} + DEPENDS mpack) +add_custom_target(lpeg DEPENDS ${ROCKS_DIR}/lpeg) +list(APPEND THIRD_PARTY_DEPS lpeg) + +if((NOT USE_BUNDLED_LUAJIT) AND USE_BUNDLED_LUA) + # luabitop + add_custom_command(OUTPUT ${ROCKS_DIR}/luabitop + COMMAND ${LUAROCKS_BINARY} + ARGS build luabitop 1.0.2-3 ${LUAROCKS_BUILDARGS} + DEPENDS lpeg) + add_custom_target(luabitop DEPENDS ${ROCKS_DIR}/luabitop) + list(APPEND THIRD_PARTY_DEPS luabitop) +endif() + +if(USE_BUNDLED_BUSTED) + if((NOT USE_BUNDLED_LUAJIT) AND USE_BUNDLED_LUA) + set(PENLIGHT_DEPENDS luabitop) + else() + set(PENLIGHT_DEPENDS lpeg) + endif() + + # penlight + add_custom_command(OUTPUT ${ROCKS_DIR}/penlight + COMMAND ${LUAROCKS_BINARY} + ARGS build penlight 1.5.4-1 ${LUAROCKS_BUILDARGS} + DEPENDS ${PENLIGHT_DEPENDS}) + add_custom_target(penlight DEPENDS ${ROCKS_DIR}/penlight) + + # busted + if(WIN32) + set(BUSTED_EXE "${HOSTDEPS_BIN_DIR}/busted.bat") + set(LUACHECK_EXE "${HOSTDEPS_BIN_DIR}/luacheck.bat") + else() + set(BUSTED_EXE "${HOSTDEPS_BIN_DIR}/busted") + set(LUACHECK_EXE "${HOSTDEPS_BIN_DIR}/luacheck") + endif() + add_custom_command(OUTPUT ${BUSTED_EXE} + COMMAND ${LUAROCKS_BINARY} + ARGS build busted 2.0.0 ${LUAROCKS_BUILDARGS} + DEPENDS penlight) + add_custom_target(busted DEPENDS ${BUSTED_EXE}) + + # luacheck + add_custom_command(OUTPUT ${LUACHECK_EXE} + COMMAND ${LUAROCKS_BINARY} + ARGS build luacheck 0.23.0-1 ${LUAROCKS_BUILDARGS} + DEPENDS busted) + add_custom_target(luacheck DEPENDS ${LUACHECK_EXE}) + + # luv + set(LUV_DEPS luacheck) + if(USE_BUNDLED_LUV) + list(APPEND LUV_DEPS luv-static lua-compat-5.3) + set(LUV_ARGS "CFLAGS=-O0 -g3 -fPIC") + if(USE_BUNDLED_LIBUV) + list(APPEND LUV_ARGS LIBUV_DIR=${HOSTDEPS_INSTALL_DIR}) + # workaround for bug introduced in + # https://github.com/luarocks/luarocks/commit/83126ba324846b754ffc5e0345341f01262b3f86 + if(MSVC) + list(APPEND LUV_ARGS LIBUV_LIBDIR=${HOSTDEPS_INSTALL_DIR}/lib) + endif() + endif() + SET(LUV_PRIVATE_ARGS LUA_COMPAT53_INCDIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3/c-api) + add_custom_command(OUTPUT ${ROCKS_DIR}/luv + COMMAND ${LUAROCKS_BINARY} + ARGS make ${LUAROCKS_BUILDARGS} ${LUV_ARGS} ${LUV_PRIVATE_ARGS} + WORKING_DIRECTORY ${DEPS_BUILD_DIR}/src/luv + DEPENDS ${LUV_DEPS}) + else() + add_custom_command(OUTPUT ${ROCKS_DIR}/luv + COMMAND ${LUAROCKS_BINARY} + ARGS build luv ${LUV_VERSION} ${LUAROCKS_BUILDARGS} + DEPENDS ${LUV_DEPS}) + endif() + add_custom_target(luv DEPENDS ${ROCKS_DIR}/luv) + + # nvim-client: https://github.com/neovim/lua-client + add_custom_command(OUTPUT ${ROCKS_DIR}/nvim-client + COMMAND ${LUAROCKS_BINARY} + ARGS build nvim-client 0.2.4-1 ${LUAROCKS_BUILDARGS} + DEPENDS luv) + add_custom_target(nvim-client DEPENDS ${ROCKS_DIR}/nvim-client) + + list(APPEND THIRD_PARTY_DEPS busted luacheck nvim-client) +endif() diff --git a/cmake.deps/cmake/BuildLuv.cmake b/cmake.deps/cmake/BuildLuv.cmake new file mode 100644 index 0000000000..6e9a333dc8 --- /dev/null +++ b/cmake.deps/cmake/BuildLuv.cmake @@ -0,0 +1,133 @@ +# BuildLuv(PATCH_COMMAND ... CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build luv, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildLuv) + cmake_parse_arguments(_luv + "" + "" + "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _luv_CONFIGURE_COMMAND AND NOT _luv_BUILD_COMMAND + AND NOT _luv_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(lua-compat-5.3 + PREFIX ${DEPS_BUILD_DIR} + URL ${LUA_COMPAT53_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua-compat-5.3 + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua-compat-5.3 + -DURL=${LUA_COMPAT53_URL} + -DEXPECTED_SHA256=${LUA_COMPAT53_SHA256} + -DTARGET=lua-compat-5.3 + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + PATCH_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "") + + ExternalProject_Add(luv-static + PREFIX ${DEPS_BUILD_DIR} + DEPENDS lua-compat-5.3 + URL ${LUV_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luv + -DURL=${LUV_URL} + -DEXPECTED_SHA256=${LUV_SHA256} + -DTARGET=luv-static + # The source is shared with BuildLuarocks (with USE_BUNDLED_LUV). + -DSRC_DIR=${DEPS_BUILD_DIR}/src/luv + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + PATCH_COMMAND "${_luv_PATCH_COMMAND}" + CONFIGURE_COMMAND "${_luv_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_luv_BUILD_COMMAND}" + INSTALL_COMMAND "${_luv_INSTALL_COMMAND}" + LIST_SEPARATOR |) +endfunction() + +set(LUV_SRC_DIR ${DEPS_BUILD_DIR}/src/luv) +set(LUV_INCLUDE_FLAGS + "-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1") + +# Replace luv default rockspec with the alternate one under the "rockspecs" +# directory +set(LUV_PATCH_COMMAND + ${CMAKE_COMMAND} -E copy_directory ${LUV_SRC_DIR}/rockspecs ${LUV_SRC_DIR}) + +set(LUV_CONFIGURE_COMMAND_COMMON + ${CMAKE_COMMAND} ${LUV_SRC_DIR} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP} + -DLUA_BUILD_TYPE=System + -DLUA_COMPAT53_DIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3 + -DWITH_SHARED_LIBUV=ON + -DBUILD_SHARED_LIBS=OFF + -DBUILD_STATIC_LIBS=ON + -DBUILD_MODULE=OFF) + +if(USE_BUNDLED_LUAJIT) + list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=LuaJit) +elseif(USE_BUNDLED_LUA) + list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=Lua) +else() + find_package(LuaJit) + if(LUAJIT_FOUND) + list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=LuaJit) + else() + list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=Lua) + endif() +endif() + +if(USE_BUNDLED_LIBUV) + set(LUV_CONFIGURE_COMMAND_COMMON + ${LUV_CONFIGURE_COMMAND_COMMON} + -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR}) +endif() + +if(MSVC) + set(LUV_CONFIGURE_COMMAND + ${LUV_CONFIGURE_COMMAND_COMMON} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + # Same as Unix without fPIC + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS}" + # Make sure we use the same generator, otherwise we may + # accidentally end up using different MSVC runtimes + -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) +else() + set(LUV_CONFIGURE_COMMAND + ${LUV_CONFIGURE_COMMAND_COMMON} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS} -fPIC") + if(CMAKE_GENERATOR MATCHES "Unix Makefiles" AND + (CMAKE_SYSTEM_NAME MATCHES ".*BSD" OR CMAKE_SYSTEM_NAME MATCHES "DragonFly")) + set(LUV_CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND} -DCMAKE_MAKE_PROGRAM=gmake) + endif() +endif() + +set(LUV_BUILD_COMMAND + ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) +set(LUV_INSTALL_COMMAND + ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) + +BuildLuv(PATCH_COMMAND ${LUV_PATCH_COMMAND} + CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND} + BUILD_COMMAND ${LUV_BUILD_COMMAND} + INSTALL_COMMAND ${LUV_INSTALL_COMMAND}) + +list(APPEND THIRD_PARTY_DEPS luv-static) +if(USE_BUNDLED_LUAJIT) + add_dependencies(luv-static luajit) +endif() +if(USE_BUNDLED_LIBUV) + add_dependencies(luv-static libuv) +endif() diff --git a/cmake.deps/cmake/BuildMsgpack.cmake b/cmake.deps/cmake/BuildMsgpack.cmake new file mode 100644 index 0000000000..10bf1c8e37 --- /dev/null +++ b/cmake.deps/cmake/BuildMsgpack.cmake @@ -0,0 +1,66 @@ +# BuildMsgpack(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +# Reusable function to build msgpack, wraps ExternalProject_Add. +# Failing to pass a command argument will result in no command being run +function(BuildMsgpack) + cmake_parse_arguments(_msgpack + "" + "" + "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _msgpack_CONFIGURE_COMMAND AND NOT _msgpack_BUILD_COMMAND + AND NOT _msgpack_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + + ExternalProject_Add(msgpack + PREFIX ${DEPS_BUILD_DIR} + URL ${MSGPACK_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/msgpack + -DURL=${MSGPACK_URL} + -DEXPECTED_SHA256=${MSGPACK_SHA256} + -DTARGET=msgpack + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "${_msgpack_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_msgpack_BUILD_COMMAND}" + INSTALL_COMMAND "${_msgpack_INSTALL_COMMAND}" + LIST_SEPARATOR |) +endfunction() + +set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack + -DMSGPACK_BUILD_TESTS=OFF + -DMSGPACK_BUILD_EXAMPLES=OFF + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP} + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC" + -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) + +set(MSGPACK_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) +set(MSGPACK_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) + +if(MSVC) + # Same as Unix without fPIC + set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack + -DMSGPACK_BUILD_TESTS=OFF + -DMSGPACK_BUILD_EXAMPLES=OFF + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1}" + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + # Make sure we use the same generator, otherwise we may + # accidentally end up using different MSVC runtimes + -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) +endif() + +BuildMsgpack(CONFIGURE_COMMAND ${MSGPACK_CONFIGURE_COMMAND} + BUILD_COMMAND ${MSGPACK_BUILD_COMMAND} + INSTALL_COMMAND ${MSGPACK_INSTALL_COMMAND}) + +list(APPEND THIRD_PARTY_DEPS msgpack) diff --git a/cmake.deps/cmake/BuildTreesitter.cmake b/cmake.deps/cmake/BuildTreesitter.cmake new file mode 100644 index 0000000000..01fdb837e2 --- /dev/null +++ b/cmake.deps/cmake/BuildTreesitter.cmake @@ -0,0 +1,59 @@ +# BuildTreeSitter(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) +function(BuildTreeSitter) + cmake_parse_arguments(_treesitter + "BUILD_IN_SOURCE" + "TARGET" + "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" + ${ARGN}) + + if(NOT _treesitter_CONFIGURE_COMMAND AND NOT _treesitter_BUILD_COMMAND + AND NOT _treesitter_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") + endif() + if(NOT _treesitter_TARGET) + set(_treesitter_TARGET "tree-sitter") + endif() + + ExternalProject_Add(tree-sitter + PREFIX ${DEPS_BUILD_DIR} + URL ${TREESITTER_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/tree-sitter + INSTALL_DIR ${DEPS_INSTALL_DIR} + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/tree-sitter + -DURL=${TREESITTER_URL} + -DEXPECTED_SHA256=${TREESITTER_SHA256} + -DTARGET=tree-sitter + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + BUILD_IN_SOURCE ${_treesitter_BUILD_IN_SOURCE} + PATCH_COMMAND "" + CONFIGURE_COMMAND "${_treesitter_CONFIGURE_COMMAND}" + BUILD_COMMAND "${_treesitter_BUILD_COMMAND}" + INSTALL_COMMAND "${_treesitter_INSTALL_COMMAND}") +endfunction() + +if(MSVC) + BuildTreeSitter(BUILD_IN_SOURCE + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterCMakeLists.txt + ${DEPS_BUILD_DIR}/src/tree-sitter/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/tree-sitter/CMakeLists.txt + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE} + ) +else() + set(TS_CFLAGS "-O3 -Wall -Wextra") + BuildTreeSitter(BUILD_IN_SOURCE + CONFIGURE_COMMAND "" + BUILD_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} CFLAGS=${TS_CFLAGS} + INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} install) +endif() + +list(APPEND THIRD_PARTY_DEPS tree-sitter) diff --git a/cmake.deps/cmake/BuildTreesitterParsers.cmake b/cmake.deps/cmake/BuildTreesitterParsers.cmake new file mode 100644 index 0000000000..11ffb792de --- /dev/null +++ b/cmake.deps/cmake/BuildTreesitterParsers.cmake @@ -0,0 +1,29 @@ +ExternalProject_Add(treesitter-c +PREFIX ${DEPS_BUILD_DIR} +URL ${TREESITTER_C_URL} +DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/treesitter-c +DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/treesitter-c + -DURL=${TREESITTER_C_URL} + -DEXPECTED_SHA256=${TREESITTER_C_SHA256} + -DTARGET=treesitter-c + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake +PATCH_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterParserCMakeLists.txt + ${DEPS_BUILD_DIR}/src/treesitter-c/CMakeLists.txt +CMAKE_ARGS + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DPARSERLANG=c + +BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} +INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE} +LIST_SEPARATOR |) diff --git a/cmake.deps/cmake/BuildUnibilium.cmake b/cmake.deps/cmake/BuildUnibilium.cmake new file mode 100644 index 0000000000..2f940bdfd3 --- /dev/null +++ b/cmake.deps/cmake/BuildUnibilium.cmake @@ -0,0 +1,48 @@ +if(WIN32) + ExternalProject_Add(unibilium + PREFIX ${DEPS_BUILD_DIR} + URL ${UNIBILIUM_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/unibilium + -DURL=${UNIBILIUM_URL} + -DEXPECTED_SHA256=${UNIBILIUM_SHA256} + -DTARGET=unibilium + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UnibiliumCMakeLists.txt + ${DEPS_BUILD_DIR}/src/unibilium/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/unibilium + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + # Pass toolchain + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) +else() + ExternalProject_Add(unibilium + PREFIX ${DEPS_BUILD_DIR} + URL ${UNIBILIUM_URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/unibilium + -DURL=${UNIBILIUM_URL} + -DEXPECTED_SHA256=${UNIBILIUM_SHA256} + -DTARGET=unibilium + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "" + BUILD_IN_SOURCE 1 + BUILD_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} + PREFIX=${DEPS_INSTALL_DIR} + CFLAGS=-fPIC + LDFLAGS+=-static + INSTALL_COMMAND ${MAKE_PRG} PREFIX=${DEPS_INSTALL_DIR} install) +endif() + +list(APPEND THIRD_PARTY_DEPS unibilium) diff --git a/cmake.deps/cmake/CopyFilesGlob.cmake b/cmake.deps/cmake/CopyFilesGlob.cmake new file mode 100644 index 0000000000..8950ead1e5 --- /dev/null +++ b/cmake.deps/cmake/CopyFilesGlob.cmake @@ -0,0 +1,20 @@ +# Copy multiple files to destination, based on a glob expression +# - FROM_GLOB +# - TO + +if(NOT FROM_GLOB) + message(FATAL_ERROR "FROM_GLOB must be set") +endif() +if(NOT TO) + message(FATAL_ERROR "TO must be set") +endif() + +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${TO}) + +file(GLOB files ${FROM_GLOB}) +foreach(file ${files}) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${file} ${TO} RESULT_VARIABLE rv) + if(NOT rv EQUAL 0) + message(FATAL_ERROR "Error copying ${file}") + endif() +endforeach() diff --git a/cmake.deps/cmake/DownloadAndExtractFile.cmake b/cmake.deps/cmake/DownloadAndExtractFile.cmake new file mode 100644 index 0000000000..abb1ddc81a --- /dev/null +++ b/cmake.deps/cmake/DownloadAndExtractFile.cmake @@ -0,0 +1,195 @@ +if(NOT DEFINED PREFIX) + message(FATAL_ERROR "PREFIX must be defined.") +endif() + +if(NOT DEFINED URL) + message(FATAL_ERROR "URL must be defined.") +endif() + +if(NOT DEFINED DOWNLOAD_DIR) + message(FATAL_ERROR "DOWNLOAD_DIR must be defined.") +endif() + +if(NOT DEFINED EXPECTED_SHA256) + message(FATAL_ERROR "EXPECTED_SHA256 must be defined.") +endif() + +if(NOT DEFINED TARGET) + message(FATAL_ERROR "TARGET must be defined.") +endif() + +if(NOT DEFINED SRC_DIR) + set(SRC_DIR ${PREFIX}/src/${TARGET}) +endif() +set(BINARY_DIR ${PREFIX}/src/${TARGET}-build) + +# Check whether the source has been downloaded. If true, skip it. +# Useful for external downloads like homebrew. +if(USE_EXISTING_SRC_DIR) + if(EXISTS "${SRC_DIR}" AND IS_DIRECTORY "${SRC_DIR}") + file(GLOB EXISTED_FILES "${SRC_DIR}/*") + if(EXISTED_FILES) + message(STATUS "${SRC_DIR} is found and not empty, skipping download and extraction. ") + return() + endif() + endif() + message(FATAL_ERROR "USE_EXISTING_SRC_DIR set to ON, but '${SRC_DIR}' does not exist or is empty.") +endif() + +# Taken from ExternalProject_Add. Let's hope we can drop this one day when +# ExternalProject_Add allows you to disable SHOW_PROGRESS on the file download. +if(TIMEOUT) + set(timeout_args TIMEOUT ${timeout}) + set(timeout_msg "${timeout} seconds") +else() + set(timeout_args "") + set(timeout_msg "none") +endif() + +string(REGEX MATCH "[^/\\?]*$" fname "${URL}") +if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$") + string(REGEX MATCH "([^/\\?]+(\\.|=)(bz2|tar|tgz|tar\\.gz|zip))/.*$" match_result "${URL}") + set(fname "${CMAKE_MATCH_1}") +endif() +if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$") + message(FATAL_ERROR "Could not extract tarball filename from url:\n ${url}") +endif() +string(REPLACE ";" "-" fname "${fname}") + +set(file ${DOWNLOAD_DIR}/${fname}) +message(STATUS "file: ${file}") + +set(EXISTING_SHA256 "") +if(EXISTS ${file}) + file(SHA256 ${file} EXISTING_SHA256) +endif() + +if(NOT EXISTING_SHA256 STREQUAL ${EXPECTED_SHA256}) + message(STATUS "downloading... + src='${URL}' + dst='${file}' + timeout='${timeout_msg}'") + + file(DOWNLOAD ${URL} ${file} + ${timeout_args} + ${hash_args} + STATUS status + LOG log) + + list(GET status 0 status_code) + list(GET status 1 status_string) + + if(NOT status_code EQUAL 0) + # Retry on certain errors, e.g. CURLE_COULDNT_RESOLVE_HOST, which is often + # seen with libtermkey (www.leonerd.org.uk). + if((status_code EQUAL 6) # "Couldn't resolve host name" + OR (status_code EQUAL 7)) # "Couldn't connect to server" + message(STATUS "warning: retrying '${URL}' (${status_string}, status ${status_code})") + execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 10) + file(DOWNLOAD ${URL} ${file} + ${timeout_args} + ${hash_args} + STATUS status + LOG log) + list(GET status 0 status_code) + list(GET status 1 status_string) + endif() + if(NOT status_code EQUAL 0) + message(FATAL_ERROR "error: downloading '${URL}' failed + status_code: ${status_code} + status_string: ${status_string} + log: ${log} + ") + endif() + endif() +endif() + +set(NULL_SHA256 "0000000000000000000000000000000000000000000000000000000000000000") + +# Allow users to use "SKIP" or "skip" as the sha256 to skip checking the hash. +# You can still use the all zeros hash too. +if((EXPECTED_SHA256 STREQUAL "SKIP") OR (EXPECTED_SHA256 STREQUAL "skip")) + set(EXPECTED_SHA256 ${NULL_SHA256}) +endif() + +# We could avoid computing the SHA256 entirely if a NULL_SHA256 was given, +# but we want to warn users of an empty file. +file(SHA256 ${file} ACTUAL_SHA256) +if(ACTUAL_SHA256 STREQUAL "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") + # File was empty. It's likely due to lack of SSL support. + message(FATAL_ERROR + "Failed to download ${URL}. The file is empty and likely means CMake " + "was built without SSL support. Please use a version of CMake with " + "proper SSL support. See " + "https://github.com/neovim/neovim/wiki/Building-Neovim#build-prerequisites " + "for more information.") +elseif((NOT EXPECTED_SHA256 STREQUAL NULL_SHA256) AND + (NOT EXPECTED_SHA256 STREQUAL ACTUAL_SHA256)) + # Wasn't a NULL SHA256 and we didn't match, so we fail. + message(FATAL_ERROR + "Failed to download ${URL}. Expected a SHA256 of " + "${EXPECTED_SHA256} but got ${ACTUAL_SHA256} instead.") +endif() + +message(STATUS "downloading... done") + +# Slurped from a generated extract-TARGET.cmake file. +message(STATUS "extracting... + src='${file}' + dst='${SRC_DIR}'") + +if(NOT EXISTS "${file}") + message(FATAL_ERROR "error: file to extract does not exist: '${file}'") +endif() + +# Prepare a space for extracting: +# +set(i 1234) +while(EXISTS "${SRC_DIR}/../ex-${TARGET}${i}") + math(EXPR i "${i} + 1") +endwhile() +set(ut_dir "${SRC_DIR}/../ex-${TARGET}${i}") +file(MAKE_DIRECTORY "${ut_dir}") + +# Extract it: +# +message(STATUS "extracting... [tar xfz]") +execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${file} + WORKING_DIRECTORY ${ut_dir} + RESULT_VARIABLE rv) + +if(NOT rv EQUAL 0) + message(STATUS "extracting... [error clean up]") + file(REMOVE_RECURSE "${ut_dir}") + message(FATAL_ERROR "error: extract of '${file}' failed") +endif() + +# Analyze what came out of the tar file: +# +message(STATUS "extracting... [analysis]") +file(GLOB contents "${ut_dir}/*") +list(LENGTH contents n) +if(NOT n EQUAL 1 OR NOT IS_DIRECTORY "${contents}") + set(contents "${ut_dir}") +endif() + +# Move "the one" directory to the final directory: +# +message(STATUS "extracting... [rename]") +file(REMOVE_RECURSE ${SRC_DIR}) +get_filename_component(contents ${contents} ABSOLUTE) +file(RENAME ${contents} ${SRC_DIR}) + +# Remove any existing BINARY_DIR, to force a new build. +# Without this a necessary output (e.g. libluv.a) might not be updated/installed. +# +message(STATUS "extracting... [clean binary dir]") +file(REMOVE_RECURSE ${BINARY_DIR}) +file(MAKE_DIRECTORY ${BINARY_DIR}) + +# Clean up: +# +message(STATUS "extracting... [clean up]") +file(REMOVE_RECURSE "${ut_dir}") + +message(STATUS "extracting... done") diff --git a/cmake.deps/cmake/GetBinaryDeps.cmake b/cmake.deps/cmake/GetBinaryDeps.cmake new file mode 100644 index 0000000000..04e3f95a29 --- /dev/null +++ b/cmake.deps/cmake/GetBinaryDeps.cmake @@ -0,0 +1,43 @@ +# This is similar to the build recipes, but instead downloads a third party +# binary and installs it under the DEPS_PREFIX. +# The INSTALL_COMMAND is executed in the folder where downloaded files are +# extracted and the ${DEPS_INSTALL_DIR} holds the path to the third-party +# install root. +function(GetBinaryDep) + cmake_parse_arguments(_gettool + "BUILD_IN_SOURCE" + "TARGET" + "INSTALL_COMMAND" + ${ARGN}) + + if(NOT _gettool_TARGET OR NOT _gettool_INSTALL_COMMAND) + message(FATAL_ERROR "Must pass INSTALL_COMMAND and TARGET") + endif() + + string(TOUPPER "${_gettool_TARGET}_URL" URL_VARNAME) + string(TOUPPER "${_gettool_TARGET}_SHA256" HASH_VARNAME) + set(URL ${${URL_VARNAME}}) + set(HASH ${${HASH_VARNAME}}) + if(NOT URL OR NOT HASH ) + message(FATAL_ERROR "${URL_VARNAME} and ${HASH_VARNAME} must be set") + endif() + + ExternalProject_Add(${_gettool_TARGET} + PREFIX ${DEPS_BUILD_DIR} + URL ${URL} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR} + DOWNLOAD_COMMAND ${CMAKE_COMMAND} + -DPREFIX=${DEPS_BUILD_DIR} + -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR} + -DURL=${URL} + -DEXPECTED_SHA256=${HASH} + -DTARGET=${_gettool_TARGET} + -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake + CONFIGURE_COMMAND "" + BUILD_IN_SOURCE 1 + BUILD_COMMAND "" + INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin + COMMAND "${_gettool_INSTALL_COMMAND}") + list(APPEND THIRD_PARTY_DEPS ${__gettool_TARGET}) +endfunction() diff --git a/cmake.deps/cmake/GettextCMakeLists.txt b/cmake.deps/cmake/GettextCMakeLists.txt new file mode 100644 index 0000000000..c3f78716d0 --- /dev/null +++ b/cmake.deps/cmake/GettextCMakeLists.txt @@ -0,0 +1,329 @@ +cmake_minimum_required(VERSION 2.8.12) +project(gettext C) + +# Adds PREFIX to each item in LIST +macro(PREFIX_LIST_ITEMS LIST PREFIX) + string(REPLACE ";" ";${PREFIX}" ${LIST} ";${${LIST}}") +endmacro() + +file(READ gettext-runtime/config.h.in CONFIG_CONTENT) +string(REPLACE "#undef HAVE_GETCWD" "#define HAVE_GETCWD 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_LONG_LONG_INT" "#define HAVE_LONG_LONG_INT 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_ICONV_H" "#define HAVE_ICONV_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_ICONV" "#define HAVE_ICONV 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef uintmax_t" " + #if _WIN64 + # define intmax_t long long + # define uintmax_t unsigned long long + #elif _WIN32 + # define intmax_t long + # define uintmax_t unsigned long + #endif" + CONFIG_CONTENT ${CONFIG_CONTENT}) +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/config.h ${CONFIG_CONTENT}) + +set(HAVE_NEWLOCALE 0) +set(HAVE_POSIX_PRINTF 0) +set(HAVE_SNPRINTF 0) +set(HAVE_ASPRINTF 0) +set(HAVE_WPRINTF 0) +set(HAVE_NAMELESS_LOCALES 0) +set(HAVE_LONG_LONG_INT 1) +configure_file(gettext-runtime/intl/libgnuintl.in.h + ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl/libgnuintl.h) + +set(LOCALDIR "gettext") +set(LIBDIR "gettext") +set(PKGDATADIR "gettext") +set(PACKAGE_SUFFIX "gettext") +add_definitions(-DLOCALEDIR=\"${LOCALDIR}\" + -DLOCALE_ALIAS_PATH=\"${LOCALDIR}\" + -DLIBDIR=\"${LOCALDIR}\" + -DINSTALLDIR=\"${LOCALDIR}\" + -DEXEEXT=\".exe\" + -DLOCALEDIR=\"${LOCALDIR}\" + -DLIBDIR=\"${LIBDIR}\" + -DPACKAGE_SUFFIX=\"${PACKAGE_SUFFIX}\" + -DGETTEXTDATADIR=\"${PKGDATADIR}\" + -DBISON_LOCALEDIR=\"${LOCALDIR}\" + -DHAVE_CONFIG_H) + +set(libintl_SOURCES + bindtextdom.c dcgettext.c dcigettext.c dcngettext.c dgettext.c dngettext.c + explodename.c finddomain.c gettext.c hash-string.c intl-compat.c l10nflist.c + langprefs.c loadmsgcat.c localcharset.c localealias.c localename-table.c + localename.c lock.c log.c ngettext.c osdep.c + plural-exp.c plural.c printf.c relocatable.c setlocale.c textdomain.c + threadlib.c version.c xsize.c) + +PREFIX_LIST_ITEMS(libintl_SOURCES "gettext-runtime/intl/") + +add_library(libintl ${libintl_SOURCES}) +target_link_libraries(libintl ${LIBICONV_LIBRARIES}) +set_property(TARGET libintl APPEND PROPERTY INCLUDE_DIRECTORIES + ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime + ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl + ${LIBICONV_INCLUDE_DIRS}) +set_property(TARGET libintl APPEND PROPERTY COMPILE_DEFINITIONS + BUILDING_LIBINTL + IN_LIBINTL + ENABLE_RELOCATABLE=1 + IN_LIBRARY + NO_XMALLOC + set_relocation_prefix=libintl_set_relocation_prefix + relocate=libintl_relocate + HAVE_CONFIG_H + _CRT_SECURE_NO_WARNINGS) + + +file(READ gettext-tools/config.h.in CONFIG_CONTENT) +string(REPLACE "#undef FLEXIBLE_ARRAY_MEMBER" "#define FLEXIBLE_ARRAY_MEMBER 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "__declspec (dllimport)" "" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef ENDIANNESS" "#define ENDIANNESS 0" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef GNULIB_FWRITEERROR" "#define GNULIB_FWRITEERROR 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_DECL_STRERROR_R" "#define HAVE_DECL_STRERROR_R 0" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_DUP2" "#define HAVE_DUP2 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_ICONV_H" "#define HAVE_ICONV_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_ICONV" "#define HAVE_ICONV 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_LIBUNISTRING" "#define HAVE_LIBUNISTRING 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_STDINT_H_WITH_UINTMAX" "#define HAVE_STDINT_H_WITH_UINTMAX 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_STDINT_H" "#define HAVE_STDINT_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_LONG_LONG_INT" "#define HAVE_LONG_LONG_INT 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_STRING_H" "#define HAVE_STRING_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_SYS_TIMEB_H" "#define HAVE_SYS_TIMEB_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE__FTIME" "#define HAVE__FTIME 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_FLOAT_H" "#define HAVE_FLOAT_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef PACKAGE" "#define PACKAGE \"gettext\"\n#define gettext_VERSION" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef VERSION" "#define VERSION \"\"" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef mode_t" "#define mode_t int" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef pid_t" "#define pid_t int" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef restrict" "#define restrict __restrict" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef ssize_t" "#include \n#define ssize_t SSIZE_T" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef uid_t" "#define uid_t int" CONFIG_CONTENT ${CONFIG_CONTENT}) +string(REPLACE "#undef HAVE_DECL___ARGV" "#define HAVE_DECL___ARGV 1" CONFIG_CONTENT ${CONFIG_CONTENT}) +set(CONFIG_CONTENT "${CONFIG_CONTENT}\n#define isatty libtextstyle_isatty") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools/config.h ${CONFIG_CONTENT}) + +set(libgettextsrc_COMMON_SOURCE + message.c po-error.c po-xerror.c read-catalog-abstract.c po-lex.c + po-gram-gen.c po-charset.c read-po.c read-properties.c read-stringtable.c + open-catalog.c dir-list.c str-list.c) + +set(libgettextsrc_FORMAT_SOURCE + format.c format-invalid.h format-c.c format-c-parse.h format-sh.c + format-python.c format-python-brace.c format-lisp.c format-elisp.c + format-librep.c format-scheme.c format-java.c format-csharp.c format-awk.c + format-pascal.c format-ycp.c format-tcl.c format-perl.c format-perl-brace.c + format-php.c format-gcc-internal.c format-gfc-internal.c format-qt.c + format-qt-plural.c format-kde.c format-kde-kuit.c format-boost.c format-lua.c + format-javascript.c) + +set(libgettextsrc_SOURCES + ${libgettextsrc_COMMON_SOURCE} read-catalog.c + write-catalog.c write-properties.c write-stringtable.c write-po.c + msgl-ascii.c msgl-iconv.c msgl-equal.c msgl-cat.c msgl-header.c msgl-english.c + msgl-check.c file-list.c msgl-charset.c po-time.c plural-exp.c plural-eval.c + plural-table.c quote.h sentence.h sentence.c + ${libgettextsrc_FORMAT_SOURCE} + read-desktop.c locating-rule.c its.c search-path.c) +PREFIX_LIST_ITEMS(libgettextsrc_SOURCES "gettext-tools/src/") + +set(GLIBC_SOURCE + uniname/uniname.c javaexec.c unsetenv.c classpath.c setenv.c xsetenv.c + sh-quote.c execute.c javaversion.c csharpcomp.c csharpexec.c javacomp.c + gettimeofday.c getdtablesize.c fcntl.c dup-safer-flag.c cloexec.c + fd-safer-flag.c fd-safer.c pipe2.c pipe2-safer.c spawn-pipe.c xmemdup0.c + secure_getenv.c tmpdir.c tempname.c mkdtemp.c fnmatch.c clean-temp.c + wait-process.c waitpid.c getdelim.c getline.c sigprocmask.c sigaction.c + addext.c argmatch.c backupfile.c basename.c c-strcasecmp.c c-strncasecmp.c + c-strstr.c closeout.c concat-filename.c error-progname.c error.c exitfail.c + fstrcmp.c full-write.c fwriteerror.c getopt.c getopt1.c hash.c libxml/buf.c + localcharset.c malloca.c mbchar.c mbslen.c mbsstr.c mbswidth.c obstack.c + progname.c printf-args.c printf-parse.c propername.c quotearg.c rawmemchr.c + safe-read.c safe-write.c stpcpy.c stpncpy.c strchrnul.c striconv.c + striconveh.c striconveha.c strnlen1.c trim.c gcd.c gl_linkedhash_list.c + uniconv/u8-conv-from-enc.c unictype/ctype_space.c unilbrk/lbrktables.c + unilbrk/u8-possible-linebreaks.c unilbrk/u8-width-linebreaks.c + unilbrk/ulc-common.c unilbrk/ulc-width-linebreaks.c unistr/u16-mbtouc-aux.c + unistr/u16-mbtouc.c unistr/u8-check.c unistr/u8-mblen.c + unistr/u8-mbtouc-aux.c unistr/u8-mbtouc-unsafe-aux.c + unistr/u8-mbtouc-unsafe.c unistr/u8-mbtouc.c unistr/u8-mbtoucr.c + unistr/u8-prev.c unistr/u8-uctomb-aux.c unistr/u8-uctomb.c uniwidth/width.c + vasnprintf.c vasprintf.c wcwidth.c xasprintf.c xconcat-filename.c xerror.c + xmalloc.c xstrdup.c xstriconv.c xstriconveh.c xvasprintf.c + libxml/DOCBparser.c libxml/HTMLparser.c libxml/HTMLtree.c libxml/SAX.c + libxml/SAX2.c libxml/c14n.c libxml/catalog.c libxml/chvalid.c + libxml/debugXML.c libxml/dict.c libxml/encoding.c libxml/entities.c + libxml/error.c libxml/globals.c libxml/hash.c libxml/legacy.c libxml/list.c + libxml/nanoftp.c libxml/nanohttp.c libxml/parser.c libxml/parserInternals.c + libxml/pattern.c libxml/relaxng.c libxml/schematron.c libxml/threads.c + libxml/tree.c libxml/trionan.c libxml/uri.c libxml/valid.c libxml/xinclude.c + libxml/xlink.c libxml/xmlIO.c libxml/xmlmemory.c libxml/xmlmodule.c + libxml/xmlreader.c libxml/xmlregexp.c libxml/xmlsave.c libxml/xmlschemas.c + libxml/xmlschemastypes.c libxml/xmlstring.c libxml/xmlunicode.c + libxml/xmlwriter.c libxml/xpath.c libxml/xpointer.c fatal-signal.c + copy-file.c read-file.c ftello.c utime.c gettime.c utimens.c) +PREFIX_LIST_ITEMS(GLIBC_SOURCE "gettext-tools/gnulib-lib/") + +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools/gnulib-lib/configmake.h "#define PKGDATADIR \"gettext\"") + +set(LIBGLIB_SOURCES + ghash.c glist.c gmessages.c gprimes.c gstrfuncs.c gstring.c) +PREFIX_LIST_ITEMS(LIBGLIB_SOURCES "libtextstyle/lib/glib/") + +set(LIBTEXTSTYLE_SOURCE + gl_array_list.h gl_array_list.c binary-io.h + binary-io.c c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c + c-strncasecmp.c concat-filename.c dirname-lgpl.c + basename-lgpl.c stripslash.c exitfail.c fatal-signal.h + fatal-signal.c fd-hook.c fd-ostream.c file-ostream.c + full-write.h full-write.c getprogname.h getprogname.c + gettext.h hash.h hash.c html-ostream.c html-styled-ostream.c + iconv-ostream.c gl_list.h gl_list.c math.c memory-ostream.c + minmax.h noop-styled-ostream.c ostream.c safe-read.c + safe-write.c sig-handler.c size_max.h styled-ostream.c + term-ostream.c term-style-control.c term-styled-ostream.c + unistd.c xalloc.h xmalloc.c xstrdup.c + xconcat-filename.c gl_xlist.h gl_xlist.c xsize.h xsize.c + xvasprintf.h xvasprintf.c xasprintf.c color.h color.c misc.h + misc.c version.c isatty.c fsync.c tparm.c tputs.c) +PREFIX_LIST_ITEMS(LIBTEXTSTYLE_SOURCE "libtextstyle/lib/") + +configure_file( + libtextstyle/lib/stdbool.mini.h + ${CMAKE_CURRENT_BINARY_DIR}/libtextstyle/lib/textstyle/stdbool.h + COPYONLY) + +set(LIBCROCO_SOURCES + cr-additional-sel.c cr-attr-sel.c cr-cascade.c cr-declaration.c + cr-doc-handler.c cr-enc-handler.c cr-fonts.c cr-input.c cr-num.c + cr-om-parser.c cr-parser.c cr-parsing-location.c cr-prop-list.c cr-pseudo.c + cr-rgb.c cr-sel-eng.c cr-selector.c cr-simple-sel.c cr-statement.c + cr-string.c cr-style.c cr-stylesheet.c cr-term.c cr-tknzr.c cr-token.c + cr-utils.c) +PREFIX_LIST_ITEMS(LIBCROCO_SOURCES "libtextstyle/lib/libcroco/") + +set(libgettextsrc_SOURCES + ${libgettextsrc_SOURCES} ${GLIBC_SOURCE} ${LIBGLIB_SOURCES} + ${LIBTEXTSTYLE_SOURCE} ${LIBCROCO_SOURCES}) + +macro(CONFIGURE_HEADER_FILES HEADER_TEMPLATES_PATH) + set(HEADER_TEMPLATES_ABS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_TEMPLATES_PATH}") + file(GLOB_RECURSE HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/*.in.h") + list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/stdint.in.h") + list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/wchar.in.h") + foreach(HEADER_TEMPLATE ${HEADER_TEMPLATES}) + file(READ ${HEADER_TEMPLATE} HEADER_CONTENT) + string(REPLACE "/* The definition of _GL_ARG_NONNULL is copied here. */" "#include \"arg-nonnull.h\"" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "/* The definition of _GL_WARN_ON_USE is copied here. */" "#include \"warn-on-use.h\"" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */" "#include \"c++defs.h\"" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_LSTAT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_MBSINIT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_SIGACTION@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_SIGPROCMASK@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_STPCPY@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_STPNCPY@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_STRCHRNUL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_ISWCNTRL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_WCTYPE_T@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_STRUCT_TIMEVAL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_WINSOCK2_H@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@DLL_VARIABLE@" "" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_NEWLOCALE@" "0" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@PRAGMA_COLUMNS@" "" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "#if @GNULIB_UTIME@" "#if 1\n#define utime gl_utime" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_UTIME@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_LONG_LONG_INT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + + string(REGEX REPLACE "^${HEADER_TEMPLATES_ABS_PATH}/" "" HEADER_PATH "${HEADER_TEMPLATE}") + string(REPLACE ".in" "" HEADER_PATH ${HEADER_PATH}) + string(REPLACE "_" "/" HEADER_PATH ${HEADER_PATH}) + # find_file will create a cache entry for the variable + # SYSTEM_HEADER, so reset it before each call + set(SYSTEM_HEADER "SYSTEM_HEADER-NOTFOUND") + find_file(SYSTEM_HEADER ${HEADER_PATH} PATHS "${LIBICONV_INCLUDE_DIRS}") + if(SYSTEM_HEADER) + # Gnulib uses #include_next to extend system header files, + # but MSVC doesn't support it, so a regular include directive + # with a relative path is used instead + string(REGEX REPLACE ".*/(.*/${HEADER_PATH})" "../\\1" + INCLUDE_PATH "${SYSTEM_HEADER}") + string(REGEX REPLACE "@INCLUDE_NEXT[^@]*@ @NEXT_[^@\n]+@" + "include <${INCLUDE_PATH}>" HEADER_CONTENT "${HEADER_CONTENT}") + endif() + + # Default any remaining template variables to 0 + string(REGEX REPLACE "@[^@\n]+@" "0" HEADER_CONTENT "${HEADER_CONTENT}") + + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${HEADER_TEMPLATES_PATH}/${HEADER_PATH}" "${HEADER_CONTENT}") + endforeach() +endmacro() + +CONFIGURE_HEADER_FILES("gettext-tools/gnulib-lib") +CONFIGURE_HEADER_FILES("libtextstyle/lib") + +add_library(libgettextsrc ${libgettextsrc_SOURCES}) +target_link_libraries(libgettextsrc ${LIBICONV_LIBRARIES}) +set_property(TARGET libgettextsrc APPEND PROPERTY COMPILE_DEFINITIONS + LIBTEXTSTYLE_DLL_VARIABLE=) + +set(msgmerge_SOURCES + msgmerge.c msgl-fsearch.c lang-table.c plural-count.c) +PREFIX_LIST_ITEMS(msgmerge_SOURCES "gettext-tools/src/") + +add_executable(msgmerge ${msgmerge_SOURCES}) +target_link_libraries(msgmerge libgettextsrc) +add_dependencies(msgmerge libgettextsrc libintl) + +set(msgfmt_SOURCES + msgfmt.c write-mo.c write-java.c write-csharp.c write-resources.c write-tcl.c + write-qt.c write-desktop.c write-xml.c + ../../gettext-runtime/intl/hash-string.c) +PREFIX_LIST_ITEMS(msgfmt_SOURCES "gettext-tools/src/") + +add_executable(msgfmt ${msgfmt_SOURCES}) +target_link_libraries(msgfmt libgettextsrc) +add_dependencies(msgfmt libgettextsrc libintl) + +set(xgettext_SOURCES + xgettext.c xg-pos.c xg-encoding.c xg-mixed-string.c xg-arglist-context.c + xg-arglist-callshape.c xg-arglist-parser.c xg-message.c x-c.c x-po.c x-sh.c + x-python.c x-lisp.c x-elisp.c x-librep.c x-scheme.c x-smalltalk.c x-java.c + x-csharp.c x-awk.c x-ycp.c x-tcl.c x-perl.c x-php.c x-rst.c x-lua.c + x-javascript.c x-vala.c x-desktop.c) +PREFIX_LIST_ITEMS(xgettext_SOURCES "gettext-tools/src/") + +add_executable(xgettext ${xgettext_SOURCES}) +target_link_libraries(xgettext libgettextsrc) +add_dependencies(xgettext libgettextsrc libintl) + +set_property(TARGET msgmerge msgfmt xgettext libgettextsrc APPEND PROPERTY + INCLUDE_DIRECTORIES + ${CMAKE_CURRENT_SOURCE_DIR}/gettext-runtime/intl + ${CMAKE_CURRENT_SOURCE_DIR}/gettext-tools/libgettextpo + ${CMAKE_CURRENT_SOURCE_DIR}/gettext-tools/gnulib-lib + ${CMAKE_CURRENT_SOURCE_DIR}/gettext-tools/gnulib-lib/libcroco + ${CMAKE_CURRENT_SOURCE_DIR}/build-aux/snippet + ${CMAKE_CURRENT_SOURCE_DIR}/libtextstyle/lib + ${CMAKE_CURRENT_SOURCE_DIR}/libtextstyle/lib/libcroco + ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl + ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools + ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools/gnulib-lib + ${CMAKE_CURRENT_BINARY_DIR}/libtextstyle/lib + ${CMAKE_CURRENT_BINARY_DIR}/libtextstyle/lib/textstyle + ${LIBICONV_INCLUDE_DIRS}) + +include(GNUInstallDirs) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl/libgnuintl.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + RENAME libintl.h) + +install(TARGETS libintl msgmerge msgfmt xgettext + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/cmake.deps/cmake/LibiconvCMakeLists.txt b/cmake.deps/cmake/LibiconvCMakeLists.txt new file mode 100644 index 0000000000..8ad3cc9352 --- /dev/null +++ b/cmake.deps/cmake/LibiconvCMakeLists.txt @@ -0,0 +1,97 @@ +cmake_minimum_required(VERSION 2.8.12) +project(libiconv C) + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/srclib + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/srclib + ${CMAKE_CURRENT_SOURCE_DIR}/build-aux/snippet) + +configure_file(config.h.in config.h) +file(READ "${CMAKE_CURRENT_BINARY_DIR}/config.h" CONFIG_CONTENT) +string(REPLACE "#undef EILSEQ" "" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef HAVE_MBRTOWC" "#define HAVE_MBRTOWC 1" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef HAVE_MBSINIT" "#define HAVE_MBSINIT 1" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef HAVE_WCRTOMB" "#define HAVE_WCRTOMB 1" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef HAVE_DECL___ARGV" "#define HAVE_DECL___ARGV 1" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef HAVE_WORKING_O_NOFOLLOW" "#define HAVE_WORKING_O_NOFOLLOW 0" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef WORDS_LITTLEENDIAN" "#define WORDS_LITTLEENDIAN 1" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef HAVE_DECL_STRERROR_R" "#define HAVE_DECL_STRERROR_R 0" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef mode_t" "#define mode_t int" CONFIG_CONTENT "${CONFIG_CONTENT}") +string(REPLACE "#undef ssize_t" "#include \n#define ssize_t SSIZE_T" CONFIG_CONTENT "${CONFIG_CONTENT}") +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/config.h" "${CONFIG_CONTENT}") + +set(BROKEN_WCHAR_H 0) +set(HAVE_VISIBILITY 0) +set(HAVE_WCHAR_T 1) +set(ICONV_CONST "const") +set(USE_MBSTATE_T 0) +configure_file(libcharset/include/localcharset.h.build.in localcharset.h) +configure_file(include/iconv.h.build.in iconv.h) + +add_definitions(-DLIBDIR -D_CRT_SECURE_NO_WARNINGS) + +add_library(libcharset libcharset/lib/localcharset.c) + +add_library(libiconv lib/iconv.c) +target_link_libraries(libiconv libcharset) + +add_executable(iconv src/iconv.c srclib/progname.c srclib/getprogname.c + srclib/safe-read.c srclib/uniwidth/width.c srclib/error.c srclib/xmalloc.c + srclib/basename-lgpl.c) +target_link_libraries(iconv libiconv) + +set(HEADER_TEMPLATES_PATH "srclib") +set(HEADER_TEMPLATES_ABS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_TEMPLATES_PATH}") +file(GLOB_RECURSE HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/*.in.h") +list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/stdint.in.h") +list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/wchar.in.h") +foreach(HEADER_TEMPLATE ${HEADER_TEMPLATES}) + file(READ ${HEADER_TEMPLATE} HEADER_CONTENT) + string(REPLACE "/* The definition of _GL_ARG_NONNULL is copied here. */" "#include \"arg-nonnull.h\"" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "/* The definition of _GL_WARN_ON_USE is copied here. */" "#include \"warn-on-use.h\"" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */" "#include \"c++defs.h\"" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_LSTAT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_SIGACTION@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@GNULIB_SIGPROCMASK@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_ISWCNTRL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@HAVE_WCTYPE_T@" "1" HEADER_CONTENT "${HEADER_CONTENT}") + string(REPLACE "@PRAGMA_COLUMNS@" "" HEADER_CONTENT "${HEADER_CONTENT}") + + string(REGEX REPLACE "^${HEADER_TEMPLATES_ABS_PATH}/" "" HEADER_PATH "${HEADER_TEMPLATE}") + string(REPLACE ".in" "" HEADER_PATH ${HEADER_PATH}) + string(REPLACE "_" "/" HEADER_PATH ${HEADER_PATH}) + # find_file will create a cache entry for the variable + # SYSTEM_HEADER, so reset it before each call + set(SYSTEM_HEADER "SYSTEM_HEADER-NOTFOUND") + find_file(SYSTEM_HEADER ${HEADER_PATH} PATHS "${LIBICONV_INCLUDE_DIRS}") + if(SYSTEM_HEADER) + # Gnulib uses #include_next to extend system header files, + # but MSVC doesn't support it, so a regular include directive + # with a relative path is used instead + string(REGEX REPLACE ".*/(.*/${HEADER_PATH})" "../\\1" + INCLUDE_PATH "${SYSTEM_HEADER}") + string(REGEX REPLACE "@INCLUDE_NEXT[^@]*@ @NEXT_[^@\n]+@" + "include <${INCLUDE_PATH}>" HEADER_CONTENT "${HEADER_CONTENT}") + endif() + + # Default any remaining template variables to 0 + string(REGEX REPLACE "@[^@\n]+@" "0" HEADER_CONTENT "${HEADER_CONTENT}") + + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${HEADER_TEMPLATES_PATH}/${HEADER_PATH}" "${HEADER_CONTENT}") +endforeach() + +include(GNUInstallDirs) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/iconv.h + ${CMAKE_CURRENT_BINARY_DIR}/localcharset.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +install(TARGETS libcharset libiconv iconv + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/cmake.deps/cmake/LibuvCMakeLists.txt b/cmake.deps/cmake/LibuvCMakeLists.txt new file mode 100644 index 0000000000..0432319834 --- /dev/null +++ b/cmake.deps/cmake/LibuvCMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 2.8.12) +project(libuv LANGUAGES C) + +file(GLOB UV_SOURCES_COMMON src/*.c) +file(GLOB UV_SOURCES_WIN src/win/*.c) + +add_library(uv ${UV_SOURCES_COMMON} ${UV_SOURCES_WIN}) +target_compile_definitions(uv PRIVATE WIN32_LEAN_AND_MEAN "_WIN32_WINNT=0x0600") +target_link_libraries(uv iphlpapi psapi shell32 userenv ws2_32) +target_include_directories(uv PUBLIC ./include PRIVATE ./src) +if(BUILD_SHARED_LIBS) + set_target_properties(uv PROPERTIES DEFINE_SYMBOL BUILDING_UV_SHARED) +endif() + +install(FILES + include/uv.h + DESTINATION include) + +install(FILES + include/uv/errno.h + include/uv/threadpool.h + include/uv/tree.h + include/uv/version.h + include/uv/win.h + DESTINATION include/uv) + +include(GNUInstallDirs) +install(TARGETS uv + PUBLIC_HEADER + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/cmake.deps/cmake/Libvterm-tbl2inc_c.cmake b/cmake.deps/cmake/Libvterm-tbl2inc_c.cmake new file mode 100644 index 0000000000..7a82f4248b --- /dev/null +++ b/cmake.deps/cmake/Libvterm-tbl2inc_c.cmake @@ -0,0 +1,163 @@ +cmake_minimum_required(VERSION 2.8.12) + +set(HEX_ALPHABET "0123456789abcdef") + +function(ConvertToHex dec hex) + while(dec GREATER 0) + math(EXPR _val "${dec} % 16") + math(EXPR dec "${dec} / 16") + string(SUBSTRING ${HEX_ALPHABET} ${_val} 1 _val) + set(_res "${_val}${_res}") + endwhile() + # Pad the result with the number of zeros + # specified by the optional third argument + if(${ARGC} EQUAL 3) + set(padding ${ARGV2}) + string(LENGTH ${_res} _resLen) + if(_resLen LESS ${padding}) + math(EXPR _neededPadding "${padding} - ${_resLen}") + foreach(i RANGE 1 ${_neededPadding}) + set(_res "0${_res}") + endforeach() + endif() + endif() + set(${hex} "0x${_res}" PARENT_SCOPE) +endfunction() + +function(ConvertFromHex hex dec) + string(TOLOWER ${hex} hex) + string(LENGTH "${hex}" _strlen) + set(_res 0) + while(_strlen GREATER 0) + math(EXPR _res "${_res} * 16") + string(SUBSTRING "${hex}" 0 1 NIBBLE) + string(SUBSTRING "${hex}" 1 -1 hex) + string(FIND ${HEX_ALPHABET} ${NIBBLE} value) + if(value EQUAL -1) + message(FATAL_ERROR "Invalid hex character '${NIBBLE}'") + endif() + math(EXPR _res "${_res} + ${value}") + string(LENGTH "${hex}" _strlen) + endwhile() + set(${dec} ${_res} PARENT_SCOPE) +endfunction() + +# Based on http://www.json.org/JSON_checker/utf8_decode.c +function(DecodeUtf8 hexBytes codePoint) + string(SUBSTRING ${hexBytes} 0 2 hexByte1) + ConvertFromHex(${hexByte1} byte1) + # Zero continuations (0 to 127) + math(EXPR out "${byte1} & 128") + if(out EQUAL 0) + set(${codePoint} ${byte1} PARENT_SCOPE) + return() + endif() + # One continuation (128 to 2047) + math(EXPR out "${byte1} & 224") + if(out EQUAL 192) + string(SUBSTRING ${hexBytes} 2 2 hexByte2) + ConvertFromHex(${hexByte2} byte2) + math(EXPR result "((${byte1} & 31) << 6) | ${byte2}") + if(result GREATER 127) + set(${codePoint} ${result} PARENT_SCOPE) + return() + endif() + else() + # Two continuations (2048 to 55295 and 57344 to 65535) + math(EXPR result "${byte1} & 240") + if(result EQUAL 224) + string(SUBSTRING ${hexBytes} 2 2 hexByte2) + string(SUBSTRING ${hexBytes} 4 2 hexByte3) + ConvertFromHex(${hexByte2} byte2) + ConvertFromHex(${hexByte3} byte3) + math(EXPR result "${byte2} | ${byte3}") + if(result GREATER -1) + math(EXPR result "((${byte1} & 15) << 12) | (${byte2} << 6) | ${byte3}") + if((result GREATER 2047) AND (result LESS 55296 OR result GREATER 57343)) + set(${codePoint} ${result} PARENT_SCOPE) + return() + endif() + endif() + else() + # Three continuations (65536 to 1114111) + math(EXPR result "${byte1} & 248") + if(result EQUAL 224) + string(SUBSTRING ${hexBytes} 2 2 hexByte2) + string(SUBSTRING ${hexBytes} 4 2 hexByte3) + string(SUBSTRING ${hexBytes} 6 2 hexByte4) + ConvertFromHex(${hexByte2} byte2) + ConvertFromHex(${hexByte3} byte3) + ConvertFromHex(${hexByte4} byte4) + math(EXPR result "${byte2} | ${byte3} | ${byte4}") + if(result GREATER -1) + math(EXPR result "((c & 7) << 18) | (c1 << 12) | (c2 << 6) | c3") + if((result GREATER 65535) AND (result LESS 1114112)) + set(${codePoint} ${result} PARENT_SCOPE) + return() + endif() + endif() + endif() + endif() + endif() + message(FATAL_ERROR "Invalid UTF-8 encoding") +endfunction() + +set(inputFile ${CMAKE_ARGV3}) +set(outputFile ${CMAKE_ARGV4}) +# Get the file contents in text and hex-encoded format because +# CMake doesn't provide functions for converting between the two +file(READ "${inputFile}" contents) +file(READ "${inputFile}" hexContents HEX) + +# Convert the text contents into a list of lines by escaping +# the list separator ';' and then replacing new line characters +# with the list separator +string(REGEX REPLACE ";" "\\\\;" contents ${contents}) +string(REGEX REPLACE "\n" ";" contents ${contents}) + +get_filename_component(encname ${inputFile} NAME_WE) +set(output + "static const struct StaticTableEncoding encoding_${encname} = {\n" + " { .decode = &decode_table },\n" + " {") +set(hexIndex 0) +foreach(line ${contents}) + string(LENGTH ${line} lineLength) + # Convert "A" to 0x41 + string(FIND ${line} "\"" beginQuote) + if(NOT ${beginQuote} EQUAL -1) + string(FIND ${line} "\"" endQuote REVERSE) + if(${beginQuote} EQUAL ${endQuote}) + message(FATAL_ERROR "Line contains only one quote") + endif() + math(EXPR beginHexQuote "${hexIndex} + (${beginQuote} + 1)*2") + math(EXPR endHexQuote "${hexIndex} + (${endQuote} + 1)*2") + math(EXPR quoteLen "${endHexQuote} - ${beginHexQuote} - 1") + string(SUBSTRING ${hexContents} ${beginHexQuote} ${quoteLen} hexQuote) + DecodeUtf8(${hexQuote} codePoint) + ConvertToHex(${codePoint} hexCodePoint 4) + STRING(REGEX REPLACE "\"(.+)\"" ${hexCodePoint} line ${line}) + endif() + # Strip comment + string(REGEX REPLACE "[ \t\n]*#.*" "" line ${line}) + # Convert 3/1 to [0x31] + string(REGEX REPLACE "^([0-9]+)/([0-9]+).*" "\\1;\\2" numbers ${line}) + list(GET numbers 0 upperBits) + list(GET numbers 1 lowerBits) + math(EXPR res "${upperBits}*16 + ${lowerBits}") + ConvertToHex(${res} hex 2) + string(REGEX REPLACE "^([0-9]+)/([0-9]+)" "[${hex}]" line ${line}) + # Convert U+0041 to 0x0041 + string(REPLACE "U+" "0x" line ${line}) + # Indent and append a comma + set(line " ${line},") + set(output "${output}\n${line}") + # Increment the index by the number of characters in the line, + # plus one for the new line character then multiple by two for the hex digit index + math(EXPR hexIndex "${hexIndex} + 2*(${lineLength} + 1)") +endforeach() +set(output "${output}\n" + " }\n" + "}\;\n") + +file(WRITE ${outputFile} ${output}) diff --git a/cmake.deps/cmake/LibvtermCMakeLists.txt b/cmake.deps/cmake/LibvtermCMakeLists.txt new file mode 100644 index 0000000000..16c4d542c4 --- /dev/null +++ b/cmake.deps/cmake/LibvtermCMakeLists.txt @@ -0,0 +1,92 @@ +cmake_minimum_required(VERSION 2.8.12) +project(libvterm LANGUAGES C) + +include(GNUInstallDirs) +find_package(Perl) + +if(MSVC) + add_compile_options(/W3) + add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) +else() + add_compile_options(-Wall -std=c99) +endif() + +# Generate includes from tables +file(GLOB TBL_FILES ${CMAKE_SOURCE_DIR}/src/encoding/*.tbl) +set(TBL_FILES_HEADERS) +foreach(file ${TBL_FILES}) + get_filename_component(basename ${file} NAME_WE) + set(tname encoding/${basename}.inc) + add_custom_command(OUTPUT + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding/ + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/tbl2inc_c.cmake ${file} ${CMAKE_BINARY_DIR}/${tname} + COMMENT "Generating ${tname}" + OUTPUT ${CMAKE_BINARY_DIR}/${tname} + ) + list(APPEND TBL_FILES_HEADERS ${tname}) + # Only used for verifying that the output of tbl2inc_c.cmake is correct + set(tname encoding-test/${basename}.inc) + add_custom_command(OUTPUT + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding-test/ + COMMAND ${PERL_EXECUTABLE} -CSD ${CMAKE_SOURCE_DIR}/tbl2inc_c.pl ${file} > ${CMAKE_BINARY_DIR}/${tname} + COMMENT "Generating ${tname}" + OUTPUT ${CMAKE_BINARY_DIR}/${tname} + ) +endforeach() + +include_directories(${CMAKE_SOURCE_DIR}/include) +include_directories(${CMAKE_BINARY_DIR}) + +file(GLOB VTERM_SOURCES ${CMAKE_SOURCE_DIR}/src/*.c) +add_library(vterm ${VTERM_SOURCES} ${TBL_FILES_HEADERS}) +install(TARGETS vterm ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +add_library(vterm-shared SHARED ${VTERM_SOURCES} ${TBL_FILES_HEADERS}) +set_target_properties(vterm-shared PROPERTIES + OUTPUT_NAME vterm + SOVERSION 0) +install(TARGETS vterm-shared + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + +install(FILES include/vterm.h include/vterm_keycodes.h + DESTINATION include) + +if(NOT WIN32) + file(GLOB BIN_SOURCES ${CMAKE_SOURCE_DIR}/bin/*.c) + foreach(EXE_C ${BIN_SOURCES}) + get_filename_component(target_name ${EXE_C} NAME_WE) + add_executable(${target_name} ${EXE_C}) + target_link_libraries(${target_name} vterm) + install(TARGETS ${target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + endforeach() +endif() + +# Tests +add_executable(harness EXCLUDE_FROM_ALL t/harness.c) +target_link_libraries(harness vterm) +set_target_properties(harness PROPERTIES + # run-test.pl expects to find the harness in t/.libs/ + RUNTIME_OUTPUT_DIRECTORY t/.libs) + +if(Perl_FOUND) + file(GLOB TESTFILES ${CMAKE_SOURCE_DIR}/t/*.test) + add_custom_target(check) + foreach(testfile ${TESTFILES}) + get_filename_component(target_name ${testfile} NAME_WE) + add_custom_target(${target_name} + COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/t/run-test.pl ${testfile} + COMMENT "**${target_name} **" + DEPENDS harness) + add_dependencies(check ${target_name}) + endforeach() + + foreach(header_path ${TBL_FILES_HEADERS}) + get_filename_component(header_name ${header_path} NAME) + set(perl_header_path ${CMAKE_BINARY_DIR}/encoding-test/${header_name}) + add_custom_target(test-${header_name} + COMMAND ${CMAKE_COMMAND} -E compare_files + ${header_path} ${perl_header_path} + DEPENDS ${header_path} ${perl_header_path}) + endforeach() +endif() diff --git a/cmake.deps/cmake/RemoveFiles.cmake b/cmake.deps/cmake/RemoveFiles.cmake new file mode 100644 index 0000000000..88e2bc70a6 --- /dev/null +++ b/cmake.deps/cmake/RemoveFiles.cmake @@ -0,0 +1,5 @@ +file(GLOB_RECURSE FILES_TO_REMOVE ${REMOVE_FILE_GLOB}) + +if(FILES_TO_REMOVE) + file(REMOVE ${FILES_TO_REMOVE}) +endif() diff --git a/cmake.deps/cmake/TargetArch.cmake b/cmake.deps/cmake/TargetArch.cmake new file mode 100644 index 0000000000..71ea44ec59 --- /dev/null +++ b/cmake.deps/cmake/TargetArch.cmake @@ -0,0 +1,23 @@ +# Sets TARGET_ARCH to a normalized name (X86 or X86_64). +# See https://github.com/axr/solar-cmake/blob/master/TargetArch.cmake +include(CheckSymbolExists) + +# X86 +check_symbol_exists("_M_IX86" "" T_M_IX86) +check_symbol_exists("__i386__" "" T_I386) +if(T_M_IX86 OR T_I386) +set(TARGET_ARCH "X86") + return() +endif() + +# X86_64 +check_symbol_exists("_M_AMD64" "" T_M_AMD64) +check_symbol_exists("__x86_64__" "" T_X86_64) +check_symbol_exists("__amd64__" "" T_AMD64) + +if(T_M_AMD64 OR T_X86_64 OR T_AMD64) +set(TARGET_ARCH "X86_64") + return() +endif() + +message(FATAL_ERROR "Unknown target architecture") diff --git a/cmake.deps/cmake/TreesitterCMakeLists.txt b/cmake.deps/cmake/TreesitterCMakeLists.txt new file mode 100644 index 0000000000..9e3ba3eeda --- /dev/null +++ b/cmake.deps/cmake/TreesitterCMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 2.8.12) +project(tree-sitter LANGUAGES C) + +file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/lib/src/*.c) +foreach(sfile ${SRC_FILES}) + get_filename_component(f ${sfile} NAME) + if(${f} MATCHES "lib.c$") + list(REMOVE_ITEM SRC_FILES ${sfile}) + endif() +endforeach() +include_directories(${PROJECT_SOURCE_DIR}/lib/include) +add_library(tree-sitter ${SRC_FILES}) + +install(FILES + lib/include/tree_sitter/api.h + lib/include/tree_sitter/parser.h + DESTINATION include/tree_sitter) + +include(GNUInstallDirs) +install(TARGETS tree-sitter + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/cmake.deps/cmake/TreesitterParserCMakeLists.txt b/cmake.deps/cmake/TreesitterParserCMakeLists.txt new file mode 100644 index 0000000000..2808a9ee14 --- /dev/null +++ b/cmake.deps/cmake/TreesitterParserCMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12) +# some parsers have c++ scanner, problem? +project(parser C) # CXX + +add_library(parser + MODULE + src/parser.c +) +set_target_properties( + parser + PROPERTIES + POSITION_INDEPENDENT_CODE ON + OUTPUT_NAME ${PARSERLANG} + PREFIX "" +) + +include_directories(src) + +install(TARGETS parser LIBRARY DESTINATION lib/nvim/parser) diff --git a/cmake.deps/cmake/UnibiliumCMakeLists.txt b/cmake.deps/cmake/UnibiliumCMakeLists.txt new file mode 100644 index 0000000000..08a8599352 --- /dev/null +++ b/cmake.deps/cmake/UnibiliumCMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 2.8.12) +project(unibilium LANGUAGES C) + +file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/*.c) +add_library(unibilium ${SRC_FILES}) +set_target_properties(unibilium PROPERTIES PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/unibilium.h + VERSION "${VERSION_MAJOR}.${VERSION_MINOR}") + +if(NOT WIN32) + execute_process(COMMAND "shell ncursesw6-config --terminfo-dirs 2>/dev/null || \ + ncurses6-config --terminfo-dirs 2>/dev/null || \ + ncursesw5-config --terminfo-dirs 2>/dev/null || \ + ncurses5-config --terminfo-dirs 2>/dev/null || \ + echo '/etc/terminfo:/lib/terminfo:/usr/share/terminfo:/usr/lib/terminfo:/usr/local/share/terminfo:/usr/local/lib/terminfo'" + OUTPUT_VARIABLE TERMINFO_DIRS) +else() + set(TERMINFO_DIRS "\"\"") +endif() +target_compile_definitions(unibilium PUBLIC TERMINFO_DIRS=${TERMINFO_DIRS}) + +include(GNUInstallDirs) +install(TARGETS unibilium + PUBLIC_HEADER + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/cmake.deps/cmake/libtermkeyCMakeLists.txt b/cmake.deps/cmake/libtermkeyCMakeLists.txt new file mode 100644 index 0000000000..af54c1daec --- /dev/null +++ b/cmake.deps/cmake/libtermkeyCMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 2.8.12) +project(libtermkey) + +add_definitions(-D _CRT_SECURE_NO_WARNINGS) +add_definitions(-DHAVE_UNIBILIUM) +if(NOT MSVC) + add_compile_options(-std=c99) +endif() + +include_directories(${PROJECT_BINARY_DIR}/t) +include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) + +add_library(termkey termkey.c driver-csi.c driver-ti.c) +set_target_properties(termkey PROPERTIES + PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/termkey.h) +target_link_libraries(termkey ${UNIBILIUM_LIBRARIES}) + +include(GNUInstallDirs) +install(TARGETS termkey + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +enable_testing() +file(GLOB TESTSOURCES "t/[0-9]*.c") +foreach(f ${TESTSOURCES}) + get_filename_component(t ${f} NAME_WE) + if(${t} STREQUAL 05read) + continue() + endif() + + add_executable("test_${t}" ${f} t/taplib.c) + target_link_libraries("test_${t}" termkey) + add_test("${t}" "test_${t}") +endforeach() diff --git a/cmake.deps/patches/libvterm-Remove-VLAs-for-MSVC.patch b/cmake.deps/patches/libvterm-Remove-VLAs-for-MSVC.patch new file mode 100644 index 0000000000..e999c0fa9b --- /dev/null +++ b/cmake.deps/patches/libvterm-Remove-VLAs-for-MSVC.patch @@ -0,0 +1,50 @@ +From eb386b1d82f7d07363c9133b7aa06902ccd555fe Mon Sep 17 00:00:00 2001 +Date: Tue, 27 Feb 2018 17:54:20 -0600 +Subject: [PATCH] Remove VLAs for MSVC + +VLAs are replaced with calls to _alloca() because MSVC does not support them. +--- + src/state.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/state.c b/src/state.c +index 84299df..f9aabb3 100644 +--- a/src/state.c ++++ b/src/state.c +@@ -1,5 +1,6 @@ + #include "vterm_internal.h" + ++#include + #include + #include + +@@ -236,7 +237,7 @@ static int on_text(const char bytes[], size_t len, void *user) + VTermPos oldpos = state->pos; + + // We'll have at most len codepoints +- uint32_t codepoints[len]; ++ uint32_t* codepoints = _alloca(len * sizeof(uint32_t)); + int npoints = 0; + size_t eaten = 0; + +@@ -313,7 +314,7 @@ static int on_text(const char bytes[], size_t len, void *user) + + int width = 0; + +- uint32_t chars[glyph_ends - glyph_starts + 1]; ++ uint32_t* chars = _alloca((glyph_ends - glyph_starts + 1) * sizeof(uint32_t)); + + for( ; i < glyph_ends; i++) { + chars[i - glyph_starts] = codepoints[i]; +@@ -512,7 +513,7 @@ static int settermprop_int(VTermState *state, VTermProp prop, int v) + + static int settermprop_string(VTermState *state, VTermProp prop, const char *str, size_t len) + { +- char strvalue[len+1]; ++ char* strvalue = _alloca(len+1); + strncpy(strvalue, str, len); + strvalue[len] = 0; + +-- +2.16.1.windows.4 + diff --git a/cmake.packaging/CMakeLists.txt b/cmake.packaging/CMakeLists.txt new file mode 100644 index 0000000000..8538075388 --- /dev/null +++ b/cmake.packaging/CMakeLists.txt @@ -0,0 +1,64 @@ +set(CPACK_PACKAGE_NAME "Neovim") +set(CPACK_PACKAGE_VENDOR "neovim.io") +set(CPACK_PACKAGE_FILE_NAME "nvim") + +# From the GitHub About section +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Vim-fork focused on extensibility and usability.") + +set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) + +# Pull the versions defined with the top level CMakeLists.txt +set(CPACK_PACKAGE_VERSION_MAJOR ${NVIM_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${NVIM_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${NVIM_VERSION_PATCH}) + +# CPACK_VERBATIM_VARIABLES ensures that the variables prefixed with *CPACK_* +# are correctly passed to the cpack program. +# This should always be set to true. +set(CPACK_VERBATIM_VARIABLES TRUE) + +set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.txt") +set(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md) + + +if(WIN32) + set(CPACK_PACKAGE_FILE_NAME "nvim-win64") + set(CPACK_GENERATOR ZIP WIX) + + # WIX + # CPACK_WIX_UPGRADE_GUID should be set, but should never change. + # CPACK_WIX_PRODUCT_GUID should not be set (leave as default to auto-generate). + + # The following guid is just a randomly generated guid that's been pasted here. + # It has no special meaning other than to supply it to WIX. + set(CPACK_WIX_UPGRADE_GUID "207A1A70-7B0C-418A-A153-CA6883E38F4D") + set(CPACK_WIX_PRODUCT_ICON ${CMAKE_CURRENT_LIST_DIR}/neovim.ico) + + # We use a wix patch to add further options to the installer. At present, it's just to add neovim to the path + # on installation, however, it can be extended. + # See: https://cmake.org/cmake/help/v3.7/module/CPackWIX.html#variable:CPACK_WIX_PATCH_FILE + list(APPEND CPACK_WIX_EXTENSIONS WixUtilExtension) + list(APPEND CPACK_WIX_PATCH_FILE ${CMAKE_CURRENT_LIST_DIR}/WixPatch.xml) +elseif(APPLE) + set(CPACK_PACKAGE_FILE_NAME "nvim-macos") + set(CPACK_GENERATOR TGZ) + set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_LIST_DIR}/neovim.icns) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(CPACK_PACKAGE_FILE_NAME "nvim-linux64") + set(CPACK_GENERATOR TGZ DEB) + set(CPACK_DEBIAN_PACKAGE_NAME "Neovim") # required + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Neovim.io") # required + + # Automatically compute required shared lib dependencies. + # Unfortunately, you "just need to know" that this has a hidden + # dependency on dpkg-shlibdeps whilst using a debian based host. + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS TRUE) +else() + set(CPACK_GENERATOR TGZ) +endif() + +# CPack variables are loaded in on the call to include(CPack). If you set +# variables *after* the inclusion, they don't get updated within the CPack +# config. Note that some CPack commands should still be run after it, such +# as cpack_add_component(). +include(CPack) diff --git a/cmake.packaging/WixPatch.xml b/cmake.packaging/WixPatch.xml new file mode 100644 index 0000000000..3cbbb04850 --- /dev/null +++ b/cmake.packaging/WixPatch.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/cmake.packaging/neovim.icns b/cmake.packaging/neovim.icns new file mode 100644 index 0000000000..df0e982369 Binary files /dev/null and b/cmake.packaging/neovim.icns differ diff --git a/cmake.packaging/neovim.ico b/cmake.packaging/neovim.ico new file mode 100644 index 0000000000..e0c151c966 Binary files /dev/null and b/cmake.packaging/neovim.ico differ diff --git a/cmake.packaging/neovim.png b/cmake.packaging/neovim.png new file mode 100644 index 0000000000..a3960b41bd Binary files /dev/null and b/cmake.packaging/neovim.png differ diff --git a/cmake.packaging/neovim.svg b/cmake.packaging/neovim.svg new file mode 100644 index 0000000000..d82ad667c1 --- /dev/null +++ b/cmake.packaging/neovim.svg @@ -0,0 +1,147 @@ + + + + + + image/svg+xml + + neovim-mark@2x + + + + + neovim-mark@2x + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt deleted file mode 100644 index 1f5885758c..0000000000 --- a/config/CMakeLists.txt +++ /dev/null @@ -1,163 +0,0 @@ -include(CheckTypeSize) -include(CheckSymbolExists) -include(CheckFunctionExists) -include(CheckIncludeFiles) -include(CheckCSourceRuns) -include(CheckCSourceCompiles) - -check_type_size("int" SIZEOF_INT LANGUAGE C) -check_type_size("long" SIZEOF_LONG LANGUAGE C) -check_type_size("intmax_t" SIZEOF_INTMAX_T LANGUAGE C) -check_type_size("int32_t" SIZEOF_INT32_T LANGUAGE C) -check_type_size("size_t" SIZEOF_SIZE_T LANGUAGE C) -check_type_size("long long" SIZEOF_LONG_LONG LANGUAGE C) -check_type_size("void *" SIZEOF_VOID_PTR LANGUAGE C) - -check_symbol_exists(_NSGetEnviron crt_externs.h HAVE__NSGETENVIRON) - -# Headers -check_include_files(langinfo.h HAVE_LANGINFO_H) -check_include_files(locale.h HAVE_LOCALE_H) -check_include_files(pwd.h HAVE_PWD_H) -check_include_files(strings.h HAVE_STRINGS_H) -check_include_files(sys/wait.h HAVE_SYS_WAIT_H) -if(NOT HAVE_SYS_WAIT_H AND UNIX) - # See if_cscope.c - message(SEND_ERROR "header sys/wait.h is required for Unix") -endif() -check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H) -check_include_files(termios.h HAVE_TERMIOS_H) -check_include_files(sys/uio.h HAVE_SYS_UIO_H) -check_include_files(sys/sdt.h HAVE_SYS_SDT_H) - -# Functions -check_function_exists(fseeko HAVE_FSEEKO) -check_function_exists(getpwent HAVE_GETPWENT) -check_function_exists(getpwnam HAVE_GETPWNAM) -check_function_exists(getpwuid HAVE_GETPWUID) -check_function_exists(readv HAVE_READV) - -if(Iconv_FOUND) - set(HAVE_ICONV 1) -endif() - -check_function_exists(opendir HAVE_OPENDIR) -check_function_exists(readlink HAVE_READLINK) -check_function_exists(setpgid HAVE_SETPGID) -check_function_exists(setsid HAVE_SETSID) -check_function_exists(sigaction HAVE_SIGACTION) -check_function_exists(strnlen HAVE_STRNLEN) -check_function_exists(strcasecmp HAVE_STRCASECMP) -check_function_exists(strncasecmp HAVE_STRNCASECMP) -check_function_exists(strptime HAVE_STRPTIME) - -if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") - check_c_source_compiles(" -#include -int -main(void) -{ - return forkpty(0, NULL, NULL, NULL); -} -" HAVE_FORKPTY) -else() - set(HAVE_FORKPTY 1) -endif() - -# Symbols -check_symbol_exists(FD_CLOEXEC "fcntl.h" HAVE_FD_CLOEXEC) -if(HAVE_LANGINFO_H) - check_symbol_exists(CODESET "langinfo.h" HAVE_NL_LANGINFO_CODESET) -endif() - -check_include_files("endian.h" HAVE_ENDIAN_H) -check_include_files("sys/endian.h" HAVE_SYS_ENDIAN_H) - -set(ENDIAN_INCLUDE_FILE "endian.h") -if(HAVE_SYS_ENDIAN_H AND NOT HAVE_ENDIAN_H) - set(ENDIAN_INCLUDE_FILE "sys/endian.h") -endif() - -set(SI "#include \n") -set(MS "int main(int argc,char**argv)\n{\n uint64_t i=0x0102030405060708ULL;") -set(ME "}") -check_c_source_compiles(" - #define _BSD_SOURCE 1 - #define _DEFAULT_SOURCE 1 - ${SI} - #include <${ENDIAN_INCLUDE_FILE}> - #ifndef be64toh - # error No be64toh macros - #endif - ${MS} - uint64_t j = be64toh(i); - return (j == 0); // j must not be zero - ${ME}" - HAVE_BE64TOH_MACROS) -if(NOT "${HAVE_BE64TOH_MACROS}") - check_function_exists(be64toh HAVE_BE64TOH_FUNC) -endif() -if("${HAVE_BE64TOH_MACROS}" OR "${HAVE_BE64TOH_FUNC}") - set(HAVE_BE64TOH 1) -endif() -if (NOT "${HAVE_BE64TOH}") - if (NOT "${CMAKE_CROSSCOMPILING}") - # It is safe to make ORDER_BIG_ENDIAN not defined if - # - HAVE_BE64TOH is true. In this case be64toh will be used unconditionally in - # any case and ORDER_BIG_ENDIAN will not be examined. - # - CMAKE_CROSSCOMPILING *and* HAVE_BE64TOH are both false. In this case - # be64toh function which uses cycle and arithmetic operations is used which - # will work regardless of endianness. Function is sub-optimal though. - check_c_source_runs(" - ${SI} - ${MS} - char *s = (char *) &i; - return ( - s[0] == 0x01 - && s[1] == 0x02 - && s[2] == 0x03 - && s[3] == 0x04 - && s[4] == 0x05 - && s[5] == 0x06 - && s[6] == 0x07 - && s[7] == 0x08) ? 0 : 1; - ${ME}" - ORDER_BIG_ENDIAN) - endif() -endif() - -# generate configuration header and update include directories -configure_file ( - "${PROJECT_SOURCE_DIR}/config/config.h.in" - "${PROJECT_BINARY_DIR}/config/auto/config.h" - ) - -# generate version definitions -configure_file ( - "${PROJECT_SOURCE_DIR}/config/versiondef.h.in" - "${PROJECT_BINARY_DIR}/config/auto/versiondef.h" - ) - -# generate pathdef.c -find_program(WHOAMI_PROG whoami) -find_program(HOSTNAME_PROG hostname) - -if (DEFINED ENV{USERNAME}) - set(USERNAME $ENV{USERNAME}) -elseif (NOT DEFINED USERNAME AND EXISTS ${WHOAMI_PROG}) - execute_process(COMMAND ${WHOAMI_PROG} - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE USERNAME) -endif() -if (DEFINED ENV{HOSTNAME}) - set(HOSTNAME $ENV{HOSTNAME}) -elseif (EXISTS ${HOSTNAME_PROG}) - execute_process(COMMAND ${HOSTNAME_PROG} - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE HOSTNAME) -endif() - -configure_file ( - "${PROJECT_SOURCE_DIR}/config/pathdef.c.in" - "${PROJECT_BINARY_DIR}/config/auto/pathdef.c" - ESCAPE_QUOTES) diff --git a/config/config.h.in b/config/config.h.in deleted file mode 100644 index 59be83fb5e..0000000000 --- a/config/config.h.in +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef AUTO_CONFIG_H -#define AUTO_CONFIG_H - -#cmakedefine DEBUG - -#cmakedefine SIZEOF_INT @SIZEOF_INT@ -#cmakedefine SIZEOF_INTMAX_T @SIZEOF_INTMAX_T@ -#cmakedefine SIZEOF_INT32_T @SIZEOF_INT32_T@ -#cmakedefine SIZEOF_LONG @SIZEOF_LONG@ -#cmakedefine SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ -#cmakedefine SIZEOF_SIZE_T @SIZEOF_SIZE_T@ - -#if @SIZEOF_VOID_PTR@ == 8 -#define ARCH_64 -#elif @SIZEOF_VOID_PTR@ == 4 -#define ARCH_32 -#endif - -#cmakedefine PROJECT_NAME "@PROJECT_NAME@" - -#cmakedefine HAVE__NSGETENVIRON -#cmakedefine HAVE_FD_CLOEXEC -#cmakedefine HAVE_FSEEKO -#cmakedefine HAVE_GETPWENT -#cmakedefine HAVE_GETPWNAM -#cmakedefine HAVE_GETPWUID -#cmakedefine HAVE_ICONV -#cmakedefine HAVE_LANGINFO_H -#cmakedefine HAVE_LOCALE_H -#cmakedefine HAVE_NL_LANGINFO_CODESET -#cmakedefine HAVE_NL_MSG_CAT_CNTR -#cmakedefine HAVE_PWD_H -#cmakedefine HAVE_READLINK -#cmakedefine HAVE_SETPGID -#cmakedefine HAVE_SETSID -#cmakedefine HAVE_SIGACTION -#cmakedefine HAVE_STRNLEN -#cmakedefine HAVE_STRCASECMP -#cmakedefine HAVE_STRINGS_H -#cmakedefine HAVE_STRNCASECMP -#cmakedefine HAVE_STRPTIME -#cmakedefine HAVE_SYS_SDT_H -#cmakedefine HAVE_SYS_UTSNAME_H -#cmakedefine HAVE_SYS_WAIT_H -#cmakedefine HAVE_TERMIOS_H -#cmakedefine HAVE_WORKING_LIBINTL -#cmakedefine UNIX -#cmakedefine CASE_INSENSITIVE_FILENAME -#cmakedefine USE_FNAME_CASE -#cmakedefine HAVE_SYS_UIO_H -#ifdef HAVE_SYS_UIO_H -#cmakedefine HAVE_READV -# ifndef HAVE_READV -# undef HAVE_SYS_UIO_H -# endif -#endif -#cmakedefine HAVE_FORKPTY - -#cmakedefine FEAT_TUI - -#ifndef UNIT_TESTING -#cmakedefine LOG_LIST_ACTIONS -#endif - -#cmakedefine HAVE_BE64TOH -#cmakedefine ORDER_BIG_ENDIAN -#define ENDIAN_INCLUDE_FILE <@ENDIAN_INCLUDE_FILE@> - -#cmakedefine HAVE_EXECINFO_BACKTRACE -#cmakedefine HAVE_BUILTIN_ADD_OVERFLOW -#cmakedefine HAVE_WIMPLICIT_FALLTHROUGH_FLAG - -#endif // AUTO_CONFIG_H diff --git a/config/pathdef.c.in b/config/pathdef.c.in deleted file mode 100644 index 6a8a2b205a..0000000000 --- a/config/pathdef.c.in +++ /dev/null @@ -1,8 +0,0 @@ -// This is an open source non-commercial project. Dear PVS-Studio, please check -// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com -#include "${PROJECT_SOURCE_DIR}/src/nvim/vim.h" -char *default_vim_dir = "${CMAKE_INSTALL_FULL_DATAROOTDIR}/nvim"; -char *default_vimruntime_dir = ""; -char *default_lib_dir = "${CMAKE_INSTALL_FULL_LIBDIR}/nvim"; -char_u *compiled_user = (char_u *)"${USERNAME}"; -char_u *compiled_sys = (char_u *)"${HOSTNAME}"; diff --git a/config/versiondef.h.in b/config/versiondef.h.in deleted file mode 100644 index 22cad87249..0000000000 --- a/config/versiondef.h.in +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef AUTO_VERSIONDEF_H -#define AUTO_VERSIONDEF_H - -#define NVIM_VERSION_MAJOR @NVIM_VERSION_MAJOR@ -#define NVIM_VERSION_MINOR @NVIM_VERSION_MINOR@ -#define NVIM_VERSION_PATCH @NVIM_VERSION_PATCH@ -#define NVIM_VERSION_PRERELEASE "@NVIM_VERSION_PRERELEASE@" - -#cmakedefine NVIM_VERSION_MEDIUM "@NVIM_VERSION_MEDIUM@" -#ifndef NVIM_VERSION_MEDIUM -# include "auto/versiondef_git.h" -#endif - -#define NVIM_API_LEVEL @NVIM_API_LEVEL@ -#define NVIM_API_LEVEL_COMPAT @NVIM_API_LEVEL_COMPAT@ -#define NVIM_API_PRERELEASE @NVIM_API_PRERELEASE@ - -#define NVIM_VERSION_CFLAGS "@NVIM_VERSION_CFLAGS@" -#define NVIM_VERSION_BUILD_TYPE "@NVIM_VERSION_BUILD_TYPE@" - -#endif // AUTO_VERSIONDEF_H diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt deleted file mode 100644 index 8538075388..0000000000 --- a/packaging/CMakeLists.txt +++ /dev/null @@ -1,64 +0,0 @@ -set(CPACK_PACKAGE_NAME "Neovim") -set(CPACK_PACKAGE_VENDOR "neovim.io") -set(CPACK_PACKAGE_FILE_NAME "nvim") - -# From the GitHub About section -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Vim-fork focused on extensibility and usability.") - -set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) - -# Pull the versions defined with the top level CMakeLists.txt -set(CPACK_PACKAGE_VERSION_MAJOR ${NVIM_VERSION_MAJOR}) -set(CPACK_PACKAGE_VERSION_MINOR ${NVIM_VERSION_MINOR}) -set(CPACK_PACKAGE_VERSION_PATCH ${NVIM_VERSION_PATCH}) - -# CPACK_VERBATIM_VARIABLES ensures that the variables prefixed with *CPACK_* -# are correctly passed to the cpack program. -# This should always be set to true. -set(CPACK_VERBATIM_VARIABLES TRUE) - -set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.txt") -set(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md) - - -if(WIN32) - set(CPACK_PACKAGE_FILE_NAME "nvim-win64") - set(CPACK_GENERATOR ZIP WIX) - - # WIX - # CPACK_WIX_UPGRADE_GUID should be set, but should never change. - # CPACK_WIX_PRODUCT_GUID should not be set (leave as default to auto-generate). - - # The following guid is just a randomly generated guid that's been pasted here. - # It has no special meaning other than to supply it to WIX. - set(CPACK_WIX_UPGRADE_GUID "207A1A70-7B0C-418A-A153-CA6883E38F4D") - set(CPACK_WIX_PRODUCT_ICON ${CMAKE_CURRENT_LIST_DIR}/neovim.ico) - - # We use a wix patch to add further options to the installer. At present, it's just to add neovim to the path - # on installation, however, it can be extended. - # See: https://cmake.org/cmake/help/v3.7/module/CPackWIX.html#variable:CPACK_WIX_PATCH_FILE - list(APPEND CPACK_WIX_EXTENSIONS WixUtilExtension) - list(APPEND CPACK_WIX_PATCH_FILE ${CMAKE_CURRENT_LIST_DIR}/WixPatch.xml) -elseif(APPLE) - set(CPACK_PACKAGE_FILE_NAME "nvim-macos") - set(CPACK_GENERATOR TGZ) - set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_LIST_DIR}/neovim.icns) -elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(CPACK_PACKAGE_FILE_NAME "nvim-linux64") - set(CPACK_GENERATOR TGZ DEB) - set(CPACK_DEBIAN_PACKAGE_NAME "Neovim") # required - set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Neovim.io") # required - - # Automatically compute required shared lib dependencies. - # Unfortunately, you "just need to know" that this has a hidden - # dependency on dpkg-shlibdeps whilst using a debian based host. - set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS TRUE) -else() - set(CPACK_GENERATOR TGZ) -endif() - -# CPack variables are loaded in on the call to include(CPack). If you set -# variables *after* the inclusion, they don't get updated within the CPack -# config. Note that some CPack commands should still be run after it, such -# as cpack_add_component(). -include(CPack) diff --git a/packaging/WixPatch.xml b/packaging/WixPatch.xml deleted file mode 100644 index 3cbbb04850..0000000000 --- a/packaging/WixPatch.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/packaging/neovim.icns b/packaging/neovim.icns deleted file mode 100644 index df0e982369..0000000000 Binary files a/packaging/neovim.icns and /dev/null differ diff --git a/packaging/neovim.ico b/packaging/neovim.ico deleted file mode 100644 index e0c151c966..0000000000 Binary files a/packaging/neovim.ico and /dev/null differ diff --git a/packaging/neovim.png b/packaging/neovim.png deleted file mode 100644 index a3960b41bd..0000000000 Binary files a/packaging/neovim.png and /dev/null differ diff --git a/packaging/neovim.svg b/packaging/neovim.svg deleted file mode 100644 index d82ad667c1..0000000000 --- a/packaging/neovim.svg +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - image/svg+xml - - neovim-mark@2x - - - - - neovim-mark@2x - Created with Sketch (http://www.bohemiancoding.com/sketch) - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scripts/bump_deps.lua b/scripts/bump_deps.lua index 2ecbb2e658..17e3fd35d6 100644 --- a/scripts/bump_deps.lua +++ b/scripts/bump_deps.lua @@ -132,7 +132,7 @@ end local function write_cmakelists_line(symbol, kind, value) require_executable("sed") - local cmakelists_path = nvim_src_dir .. "/" .. "third-party/CMakeLists.txt" + local cmakelists_path = nvim_src_dir .. "/" .. "cmake.deps/CMakeLists.txt" run_die({ "sed", "-i", @@ -169,7 +169,7 @@ local function update_cmakelists(dependency, archive, comment) verify_branch(dependency.name) - local changed_file = nvim_src_dir .. "/" .. "third-party/CMakeLists.txt" + local changed_file = nvim_src_dir .. "/" .. "cmake.deps/CMakeLists.txt" p("Updating " .. dependency.name .. " to " .. archive.url .. "\n") write_cmakelists_line(dependency.symbol, "URL", archive.url:gsub("/", "\\/")) @@ -183,7 +183,7 @@ end local function verify_cmakelists_committed() require_executable("git") - local cmakelists_path = nvim_src_dir .. "/" .. "third-party/CMakeLists.txt" + local cmakelists_path = nvim_src_dir .. "/" .. "cmake.deps/CMakeLists.txt" run_die({ "git", "diff", "--quiet", "HEAD", "--", cmakelists_path }, cmakelists_path .. " has uncommitted changes") end diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 0b29abaf5f..56c9fcab72 100755 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -244,12 +244,12 @@ if(use_git_version) file(RELATIVE_PATH relbuild "${PROJECT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}") add_custom_target(update_version_stamp ALL COMMAND ${LUA_PRG} scripts/update_version_stamp.lua - ${relbuild}/config/auto/versiondef_git.h + ${relbuild}/cmake.config/auto/versiondef_git.h "v${NVIM_VERSION_MAJOR}.${NVIM_VERSION_MINOR}.${NVIM_VERSION_PATCH}${NVIM_VERSION_PRERELEASE}" WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - BYPRODUCTS ${CMAKE_BINARY_DIR}/config/auto/versiondef_git.h) + BYPRODUCTS ${CMAKE_BINARY_DIR}/cmake.config/auto/versiondef_git.h) else() - file(WRITE ${CMAKE_BINARY_DIR}/config/auto/versiondef_git.h "") + file(WRITE ${CMAKE_BINARY_DIR}/cmake.config/auto/versiondef_git.h "") endif() # NVIM_GENERATED_FOR_HEADERS: generated headers to be included in headers @@ -394,7 +394,7 @@ list(APPEND NVIM_GENERATED_FOR_SOURCES ) list(APPEND NVIM_GENERATED_SOURCES - "${PROJECT_BINARY_DIR}/config/auto/pathdef.c" + "${PROJECT_BINARY_DIR}/cmake.config/auto/pathdef.c" ) add_custom_command(OUTPUT ${GENERATED_EX_CMDS_ENUM} ${GENERATED_EX_CMDS_DEFS} diff --git a/test/cmakeconfig/paths.lua.in b/test/cmakeconfig/paths.lua.in new file mode 100644 index 0000000000..e3979981ba --- /dev/null +++ b/test/cmakeconfig/paths.lua.in @@ -0,0 +1,24 @@ +local module = {} + +module.include_paths = {} +for p in ("${TEST_INCLUDE_DIRS}" .. ";"):gmatch("[^;]+") do + table.insert(module.include_paths, p) +end + +module.test_build_dir = "${CMAKE_BINARY_DIR}" +module.test_include_path = module.test_build_dir .. "/test/includes/post" +module.test_libnvim_path = "${TEST_LIBNVIM_PATH}" +module.test_source_path = "${CMAKE_SOURCE_DIR}" +module.test_lua_prg = "${LUA_PRG}" +module.test_luajit_prg = "" +if module.test_luajit_prg == '' then + if module.test_lua_prg:sub(-6) == 'luajit' then + module.test_luajit_prg = module.test_lua_prg + else + module.test_luajit_prg = nil + end +end +table.insert(module.include_paths, "${CMAKE_BINARY_DIR}/include") +table.insert(module.include_paths, "${CMAKE_BINARY_DIR}/src/nvim/auto") + +return module diff --git a/test/config/paths.lua.in b/test/config/paths.lua.in deleted file mode 100644 index e3979981ba..0000000000 --- a/test/config/paths.lua.in +++ /dev/null @@ -1,24 +0,0 @@ -local module = {} - -module.include_paths = {} -for p in ("${TEST_INCLUDE_DIRS}" .. ";"):gmatch("[^;]+") do - table.insert(module.include_paths, p) -end - -module.test_build_dir = "${CMAKE_BINARY_DIR}" -module.test_include_path = module.test_build_dir .. "/test/includes/post" -module.test_libnvim_path = "${TEST_LIBNVIM_PATH}" -module.test_source_path = "${CMAKE_SOURCE_DIR}" -module.test_lua_prg = "${LUA_PRG}" -module.test_luajit_prg = "" -if module.test_luajit_prg == '' then - if module.test_lua_prg:sub(-6) == 'luajit' then - module.test_luajit_prg = module.test_lua_prg - else - module.test_luajit_prg = nil - end -end -table.insert(module.include_paths, "${CMAKE_BINARY_DIR}/include") -table.insert(module.include_paths, "${CMAKE_BINARY_DIR}/src/nvim/auto") - -return module diff --git a/test/functional/shada/shada_spec.lua b/test/functional/shada/shada_spec.lua index ff63aed235..d10a2facbb 100644 --- a/test/functional/shada/shada_spec.lua +++ b/test/functional/shada/shada_spec.lua @@ -7,7 +7,7 @@ local write_file, spawn, set_session, nvim_prog, exc_exec = helpers.exc_exec local lfs = require('lfs') -local paths = require('test.config.paths') +local paths = require('test.cmakeconfig.paths') local mpack = require('mpack') diff --git a/test/helpers.lua b/test/helpers.lua index a1c3dfacd2..9a77ca1956 100644 --- a/test/helpers.lua +++ b/test/helpers.lua @@ -4,7 +4,7 @@ local assert = require('luassert') local luv = require('luv') local lfs = require('lfs') local relpath = require('pl.path').relpath -local Paths = require('test.config.paths') +local Paths = require('test.cmakeconfig.paths') assert:set_parameter('TableFormatLevel', 100) diff --git a/test/symbolic/klee/run.sh b/test/symbolic/klee/run.sh index 0234a935b5..97ce42c31b 100755 --- a/test/symbolic/klee/run.sh +++ b/test/symbolic/klee/run.sh @@ -54,7 +54,7 @@ main() { includes="$includes -I$PROJECT_SOURCE_DIR/src" includes="$includes -I$PROJECT_BINARY_DIR/src/nvim/auto" includes="$includes -I$PROJECT_BINARY_DIR/include" - includes="$includes -I$PROJECT_BINARY_DIR/config" + includes="$includes -I$PROJECT_BINARY_DIR/cmake.config" includes="$includes -I/host-includes" local defines= diff --git a/test/unit/helpers.lua b/test/unit/helpers.lua index 4dbcaa5347..29ea0235be 100644 --- a/test/unit/helpers.lua +++ b/test/unit/helpers.lua @@ -2,7 +2,7 @@ local ffi = require('ffi') local formatc = require('test.unit.formatc') local Set = require('test.unit.set') local Preprocess = require('test.unit.preprocess') -local Paths = require('test.config.paths') +local Paths = require('test.cmakeconfig.paths') local global_helpers = require('test.helpers') local assert = require('luassert') local say = require('say') diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt deleted file mode 100644 index 6fe5c2baf5..0000000000 --- a/third-party/CMakeLists.txt +++ /dev/null @@ -1,292 +0,0 @@ -# This is not meant to be included by the top-level. -cmake_minimum_required (VERSION 2.8.12) -project(NVIM_DEPS C) - -# Needed for: check_c_compiler_flag() -include(CheckCCompilerFlag) - -# Point CMake at any custom modules we may ship -list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/../cmake") - -# In Windows/MSVC CMAKE_BUILD_TYPE changes the paths/linking of the build -# recipes (libuv, msgpack), make sure it is set -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif() - -set(DEFAULT_MAKE_CFLAGS CFLAGS+=-g) - -check_c_compiler_flag(-Og HAS_OG_FLAG) -if(HAS_OG_FLAG) - set(DEFAULT_MAKE_CFLAGS CFLAGS+=-Og ${DEFAULT_MAKE_CFLAGS}) -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") - # pkg-config 29.2 has a bug on OpenBSD which causes it to drop any paths that - # *contain* system include paths. To avoid this, we prefix what would be - # "/usr/include" as "/_usr/include". - # This check is also performed in the root CMakeLists.txt - # https://github.com/neovim/neovim/pull/14745#issuecomment-860201794 - set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/_usr" CACHE PATH "Dependencies install directory.") -else() - set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/usr" CACHE PATH "Dependencies install directory.") -endif() - -set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin" CACHE PATH "Dependencies binary install directory.") -set(DEPS_LIB_DIR "${DEPS_INSTALL_DIR}/lib" CACHE PATH "Dependencies library install directory.") -set(DEPS_BUILD_DIR "${CMAKE_BINARY_DIR}/build" CACHE PATH "Dependencies build directory.") -set(DEPS_DOWNLOAD_DIR "${DEPS_BUILD_DIR}/downloads" CACHE PATH "Dependencies download directory.") - -option(USE_BUNDLED "Use bundled dependencies." ON) - -option(USE_BUNDLED_UNIBILIUM "Use the bundled unibilium." ${USE_BUNDLED}) -option(USE_BUNDLED_LIBTERMKEY "Use the bundled libtermkey." ${USE_BUNDLED}) -option(USE_BUNDLED_LIBVTERM "Use the bundled libvterm." ${USE_BUNDLED}) -option(USE_BUNDLED_LIBUV "Use the bundled libuv." ${USE_BUNDLED}) -option(USE_BUNDLED_MSGPACK "Use the bundled msgpack." ${USE_BUNDLED}) -option(USE_BUNDLED_LUAJIT "Use the bundled version of luajit." ${USE_BUNDLED}) -option(USE_BUNDLED_LUAROCKS "Use the bundled version of luarocks." ${USE_BUNDLED}) -option(USE_BUNDLED_LUV "Use the bundled version of luv." ${USE_BUNDLED}) -#XXX(tarruda): Lua is only used for debugging the functional test client, no -# build it unless explicitly requested -option(USE_BUNDLED_LUA "Use the bundled version of lua." OFF) -option(USE_BUNDLED_TS_PARSERS "Use the bundled treesitter parsers." ${USE_BUNDLED}) -option(USE_BUNDLED_TS "Use the bundled treesitter runtime." ${USE_BUNDLED}) - -if(USE_BUNDLED AND MSVC) - option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." ON) - option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." ON) -else() - option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." OFF) - option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." OFF) -endif() - -option(USE_EXISTING_SRC_DIR "Skip download of deps sources in case of existing source directory." OFF) - -if(WIN32) - find_package(Git) - if(NOT Git_FOUND) - message(FATAL_ERROR "Git is required to apply patches for Windows.") - endif() -endif() - -if(UNIX) - find_program(MAKE_PRG NAMES gmake make) - if(MAKE_PRG) - execute_process( - COMMAND "${MAKE_PRG}" --version - OUTPUT_VARIABLE MAKE_VERSION_INFO) - if(NOT "${OUTPUT_VARIABLE}" MATCHES ".*GNU.*") - unset(MAKE_PRG) - endif() - endif() - 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() - -if(CMAKE_C_COMPILER_ARG1) - set(DEPS_C_COMPILER "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}") -else() - set(DEPS_C_COMPILER "${CMAKE_C_COMPILER}") -endif() - -if(CMAKE_CXX_COMPILER) - set(DEPS_CXX_COMPILER "${CMAKE_CXX_COMPILER}") -endif() - -if(CMAKE_OSX_SYSROOT) - set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -isysroot${CMAKE_OSX_SYSROOT}") - if(DEPS_CXX_COMPILER) - set(DEPS_CXX_COMPILER "${DEPS_CXX_COMPILER} -isysroot${CMAKE_OSX_SYSROOT}") - endif() -endif() - -if(CMAKE_OSX_ARCHITECTURES) - string(REPLACE ";" "|" CMAKE_OSX_ARCHITECTURES_ALT_SEP "${CMAKE_OSX_ARCHITECTURES}") - # The LuaJIT build does not like being passed multiple `-arch` flags - # so we handle a universal build the old-fashioned way. - set(LUAJIT_C_COMPILER "${DEPS_C_COMPILER}") - foreach(ARCH IN LISTS CMAKE_OSX_ARCHITECTURES) - set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -arch ${ARCH}") - if(DEPS_CXX_COMPILER) - set(DEPS_CXX_COMPILER "${DEPS_CXX_COMPILER} -arch ${ARCH}") - endif() - endforeach() -endif() - -set(HOSTDEPS_INSTALL_DIR "${DEPS_INSTALL_DIR}") -set(HOSTDEPS_BIN_DIR "${DEPS_BIN_DIR}") -set(HOSTDEPS_LIB_DIR "${DEPS_LIB_DIR}") -set(HOSTDEPS_C_COMPILER "${DEPS_C_COMPILER}") -set(HOSTDEPS_CXX_COMPILER "${DEPS_CXX_COMPILER}") - -include(ExternalProject) - -set(LIBUV_URL https://github.com/libuv/libuv/archive/730e07e2f77a4001bdf6894112271c926399f5a8.tar.gz) -set(LIBUV_SHA256 271869759a7dbdaf1d1bf75f1ec388a7307592153b34ebb52d3934715cbaac8a) - -set(MSGPACK_URL https://github.com/msgpack/msgpack-c/releases/download/c-4.0.0/msgpack-c-4.0.0.tar.gz) -set(MSGPACK_SHA256 420fe35e7572f2a168d17e660ef981a589c9cbe77faa25eb34a520e1fcc032c8) - -# https://github.com/LuaJIT/LuaJIT/tree/v2.1 -set(LUAJIT_URL https://github.com/LuaJIT/LuaJIT/archive/4ef96cff887c268cc676f9b4b1dc9c54a693efd5.tar.gz) -set(LUAJIT_SHA256 ae913e33be80dded08a2fc368787f168305c22808519c962553bf4c8668e9856) - -set(LUA_URL https://www.lua.org/ftp/lua-5.1.5.tar.gz) -set(LUA_SHA256 2640fc56a795f29d28ef15e13c34a47e223960b0240e8cb0a82d9b0738695333) - -set(LUAROCKS_URL https://github.com/luarocks/luarocks/archive/v3.8.0.tar.gz) -set(LUAROCKS_SHA256 ab6612ca9ab87c6984871d2712d05525775e8b50172701a0a1cabddf76de2be7) - -set(UNIBILIUM_URL https://github.com/neovim/unibilium/archive/92d929f.tar.gz) -set(UNIBILIUM_SHA256 29815283c654277ef77a3adcc8840db79ddbb20a0f0b0c8f648bd8cd49a02e4b) - -set(LIBTERMKEY_URL https://www.leonerd.org.uk/code/libtermkey/libtermkey-0.22.tar.gz) -set(LIBTERMKEY_SHA256 6945bd3c4aaa83da83d80a045c5563da4edd7d0374c62c0d35aec09eb3014600) - -set(LIBVTERM_URL https://www.leonerd.org.uk/code/libvterm/libvterm-0.1.4.tar.gz) -set(LIBVTERM_SHA256 bc70349e95559c667672fc8c55b9527d9db9ada0fb80a3beda533418d782d3dd) - -set(LUV_VERSION 1.43.0-0) -set(LUV_URL https://github.com/luvit/luv/archive/9f80386338af7d164ff1f47d480ee1ae775cb0ef.tar.gz) -set(LUV_SHA256 a6fe420f06944c0d84a173fccff2eb0d14dfd1293bc24666a580b98dd1a7254f) - -set(LUA_COMPAT53_URL https://github.com/keplerproject/lua-compat-5.3/archive/v0.9.tar.gz) -set(LUA_COMPAT53_SHA256 ad05540d2d96a48725bb79a1def35cf6652a4e2ec26376e2617c8ce2baa6f416) - -# cat.exe curl.exe curl-ca-bundle.crt diff.exe tee.exe xxd.exe -set(WINTOOLS_URL https://github.com/neovim/deps/raw/d66e306abf5b846484b4f2adffd896bce7e065d2/opt/win32tools.zip) -set(WINTOOLS_SHA256 2fb2f8d69070b3f16e029913fb95008e6be33893d77fc358012396c275a0fdb7) - -set(WINGUI_URL https://github.com/equalsraf/neovim-qt/releases/download/v0.2.16.1/neovim-qt.zip) -set(WINGUI_SHA256 ddb4492db03da407703fb0ab271c4eb060250d1a7d71200e2b3b981cb0de59de) - -set(WIN32YANK_X86_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x86.zip) -set(WIN32YANK_X86_SHA256 62f34e5a46c5d4a7b3f3b512e1ff7b77fedd432f42581cbe825233a996eed62c) -set(WIN32YANK_X86_64_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x64.zip) -set(WIN32YANK_X86_64_SHA256 33a747a92da60fb65e668edbf7661d3d902411a2d545fe9dc08623cecd142a20) - -set(GETTEXT_URL https://ftp.gnu.org/pub/gnu/gettext/gettext-0.20.1.tar.gz) -set(GETTEXT_SHA256 66415634c6e8c3fa8b71362879ec7575e27da43da562c798a8a2f223e6e47f5c) - -set(LIBICONV_URL https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz) -set(LIBICONV_SHA256 ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178) - -set(TREESITTER_C_URL https://github.com/tree-sitter/tree-sitter-c/archive/v0.20.1.tar.gz) -set(TREESITTER_C_SHA256 ffcc2ef0eded59ad1acec9aec4f9b0c7dd209fc1a85d85f8b0e81298e3dddcc2) - -set(TREESITTER_URL https://github.com/tree-sitter/tree-sitter/archive/v0.20.6.tar.gz) -set(TREESITTER_SHA256 4d37eaef8a402a385998ff9aca3e1043b4a3bba899bceeff27a7178e1165b9de) - -if(USE_BUNDLED_UNIBILIUM) - include(BuildUnibilium) -endif() - -if(USE_BUNDLED_LIBTERMKEY) - include(BuildLibtermkey) - if(USE_BUNDLED_UNIBILIUM) - add_dependencies(libtermkey unibilium) - endif() -endif() - -if(USE_BUNDLED_LIBVTERM) - include(BuildLibvterm) -endif() - -if(USE_BUNDLED_LIBUV) - include(BuildLibuv) -endif() - -if(USE_BUNDLED_MSGPACK) - include(BuildMsgpack) -endif() - -if(USE_BUNDLED_LUAJIT) - include(BuildLuajit) -endif() - -if(USE_BUNDLED_LUA) - include(BuildLua) -endif() - -if(USE_BUNDLED_LUAROCKS) - include(BuildLuarocks) -endif() - -if(USE_BUNDLED_LUV) - include(BuildLuv) -endif() - -if(USE_BUNDLED_GETTEXT) - include(BuildGettext) -endif() - -if(USE_BUNDLED_LIBICONV) - include(BuildLibiconv) -endif() - -if(USE_BUNDLED_TS_PARSERS) - include(BuildTreesitterParsers) -endif() - -if(USE_BUNDLED_TS) - include(BuildTreesitter) -endif() - -if(WIN32) - include(GetBinaryDeps) - - GetBinaryDep(TARGET wintools - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory . ${DEPS_INSTALL_DIR}/bin) - - GetBinaryDep(TARGET wingui - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory bin ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E copy_directory share ${DEPS_INSTALL_DIR}/share) - - include(TargetArch) - GetBinaryDep(TARGET "win32yank_${TARGET_ARCH}" - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy win32yank.exe ${DEPS_INSTALL_DIR}/bin) - - if("${TARGET_ARCH}" STREQUAL "X86_64") - set(TARGET_ARCH x64) - elseif(TARGET_ARCH STREQUAL "X86") - set(TARGET_ARCH ia32) - endif() -endif() - -# clean-shared-libraries removes ${DEPS_INSTALL_DIR}/lib/nvim/parser/c.dll, -# resulting in MSVC build failure in CI. -if (MSVC) - set(ALL_DEPS ${THIRD_PARTY_DEPS}) -else() - add_custom_target(clean-shared-libraries - COMMAND ${CMAKE_COMMAND} - -DREMOVE_FILE_GLOB=${DEPS_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}*${CMAKE_SHARED_LIBRARY_SUFFIX}* - -P ${PROJECT_SOURCE_DIR}/cmake/RemoveFiles.cmake - DEPENDS ${THIRD_PARTY_DEPS} - ) - set(ALL_DEPS clean-shared-libraries) -endif() - -add_custom_target(third-party ALL - COMMAND ${CMAKE_COMMAND} -E touch .third-party - DEPENDS ${ALL_DEPS} -) diff --git a/third-party/cmake/BuildGettext.cmake b/third-party/cmake/BuildGettext.cmake deleted file mode 100644 index 6128ecfa69..0000000000 --- a/third-party/cmake/BuildGettext.cmake +++ /dev/null @@ -1,37 +0,0 @@ -if(MSVC) - - ExternalProject_Add(gettext - PREFIX ${DEPS_BUILD_DIR} - URL ${GETTEXT_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/gettext - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/gettext - -DURL=${GETTEXT_URL} - -DEXPECTED_SHA256=${GETTEXT_SHA256} - -DTARGET=gettext - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/GettextCMakeLists.txt - ${DEPS_BUILD_DIR}/src/gettext/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/gettext - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - # Pass toolchain - -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - -DLIBICONV_INCLUDE_DIRS=${DEPS_INSTALL_DIR}/include - -DLIBICONV_LIBRARIES=${DEPS_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}libcharset${CMAKE_STATIC_LIBRARY_SUFFIX}$${DEPS_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}libiconv${CMAKE_STATIC_LIBRARY_SUFFIX} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) - -else() - message(FATAL_ERROR "Trying to build gettext in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") -endif() - -list(APPEND THIRD_PARTY_DEPS gettext) -if(USE_BUNDLED_LIBICONV) - add_dependencies(gettext libiconv) -endif() diff --git a/third-party/cmake/BuildLibiconv.cmake b/third-party/cmake/BuildLibiconv.cmake deleted file mode 100644 index 5ff33e0cd3..0000000000 --- a/third-party/cmake/BuildLibiconv.cmake +++ /dev/null @@ -1,32 +0,0 @@ -if(MSVC) - - ExternalProject_Add(libiconv - PREFIX ${DEPS_BUILD_DIR} - URL ${LIBICONV_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libiconv - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libiconv - -DURL=${LIBICONV_URL} - -DEXPECTED_SHA256=${LIBICONV_SHA256} - -DTARGET=libiconv - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibiconvCMakeLists.txt - ${DEPS_BUILD_DIR}/src/libiconv/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libiconv - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - # Pass toolchain - -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) - -else() - message(FATAL_ERROR "Trying to build libiconv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") -endif() - -list(APPEND THIRD_PARTY_DEPS libiconv) diff --git a/third-party/cmake/BuildLibtermkey.cmake b/third-party/cmake/BuildLibtermkey.cmake deleted file mode 100644 index d44e09d734..0000000000 --- a/third-party/cmake/BuildLibtermkey.cmake +++ /dev/null @@ -1,57 +0,0 @@ -if(WIN32) -ExternalProject_Add(libtermkey - PREFIX ${DEPS_BUILD_DIR} - URL ${LIBTERMKEY_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libtermkey - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libtermkey - -DURL=${LIBTERMKEY_URL} - -DEXPECTED_SHA256=${LIBTERMKEY_SHA256} - -DTARGET=libtermkey - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libtermkeyCMakeLists.txt - ${DEPS_BUILD_DIR}/src/libtermkey/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libtermkey - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - # Pass toolchain - -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - # Hack to avoid -rdynamic in Mingw - -DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="" - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - -DUNIBILIUM_INCLUDE_DIRS=${DEPS_INSTALL_DIR}/include - -DUNIBILIUM_LIBRARIES=${DEPS_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}unibilium${CMAKE_STATIC_LIBRARY_SUFFIX} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) -else() -find_package(PkgConfig REQUIRED) - -ExternalProject_Add(libtermkey - PREFIX ${DEPS_BUILD_DIR} - URL ${LIBTERMKEY_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libtermkey - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libtermkey - -DURL=${LIBTERMKEY_URL} - -DEXPECTED_SHA256=${LIBTERMKEY_SHA256} - -DTARGET=libtermkey - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND "" - INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} - PREFIX=${DEPS_INSTALL_DIR} - PKG_CONFIG_PATH=${DEPS_LIB_DIR}/pkgconfig - CFLAGS=-fPIC - LDFLAGS+=-static - ${DEFAULT_MAKE_CFLAGS} - install) -endif() - -list(APPEND THIRD_PARTY_DEPS libtermkey) diff --git a/third-party/cmake/BuildLibuv.cmake b/third-party/cmake/BuildLibuv.cmake deleted file mode 100644 index ba5de38714..0000000000 --- a/third-party/cmake/BuildLibuv.cmake +++ /dev/null @@ -1,77 +0,0 @@ -# BuildLibuv(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Reusable function to build libuv, wraps ExternalProject_Add. -# Failing to pass a command argument will result in no command being run -function(BuildLibuv) - cmake_parse_arguments(_libuv - "BUILD_IN_SOURCE" - "TARGET" - "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _libuv_CONFIGURE_COMMAND AND NOT _libuv_BUILD_COMMAND - AND NOT _libuv_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - if(NOT _libuv_TARGET) - set(_libuv_TARGET "libuv") - endif() - - ExternalProject_Add(${_libuv_TARGET} - PREFIX ${DEPS_BUILD_DIR} - URL ${LIBUV_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv - -DURL=${LIBUV_URL} - -DEXPECTED_SHA256=${LIBUV_SHA256} - -DTARGET=${_libuv_TARGET} - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - PATCH_COMMAND "${_libuv_PATCH_COMMAND}" - BUILD_IN_SOURCE ${_libuv_BUILD_IN_SOURCE} - CONFIGURE_COMMAND "${_libuv_CONFIGURE_COMMAND}" - BUILD_COMMAND "${_libuv_BUILD_COMMAND}" - INSTALL_COMMAND "${_libuv_INSTALL_COMMAND}") -endfunction() - -set(UNIX_CFGCMD sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh && - ${DEPS_BUILD_DIR}/src/libuv/configure --with-pic --disable-shared - --prefix=${DEPS_INSTALL_DIR} --libdir=${DEPS_INSTALL_DIR}/lib - CC=${DEPS_C_COMPILER}) - -if(UNIX) - BuildLibuv( - CONFIGURE_COMMAND ${UNIX_CFGCMD} MAKE=${MAKE_PRG} - INSTALL_COMMAND ${MAKE_PRG} V=1 install) - -elseif(WIN32) - - set(UV_OUTPUT_DIR ${DEPS_BUILD_DIR}/src/libuv/${CMAKE_BUILD_TYPE}) - if(MSVC) - set(BUILD_SHARED ON) - elseif(MINGW) - set(BUILD_SHARED OFF) - else() - message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") - endif() - BuildLibUv(BUILD_IN_SOURCE - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibuvCMakeLists.txt - ${DEPS_BUILD_DIR}/src/libuv/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libuv/CMakeLists.txt - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS=${BUILD_SHARED} - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - PATCH_COMMAND ${LIBUV_PATCH_COMMAND} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) - -else() - message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") -endif() - -list(APPEND THIRD_PARTY_DEPS libuv) diff --git a/third-party/cmake/BuildLibvterm.cmake b/third-party/cmake/BuildLibvterm.cmake deleted file mode 100644 index 2c300dda7c..0000000000 --- a/third-party/cmake/BuildLibvterm.cmake +++ /dev/null @@ -1,69 +0,0 @@ -# BuildLibvterm(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Failing to pass a command argument will result in no command being run -function(BuildLibvterm) - cmake_parse_arguments(_libvterm - "" - "" - "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _libvterm_CONFIGURE_COMMAND AND NOT _libvterm_BUILD_COMMAND - AND NOT _libvterm_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - - ExternalProject_Add(libvterm - PREFIX ${DEPS_BUILD_DIR} - URL ${LIBVTERM_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libvterm - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libvterm - -DURL=${LIBVTERM_URL} - -DEXPECTED_SHA256=${LIBVTERM_SHA256} - -DTARGET=libvterm - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - PATCH_COMMAND "${_libvterm_PATCH_COMMAND}" - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND "${_libvterm_CONFIGURE_COMMAND}" - BUILD_COMMAND "${_libvterm_BUILD_COMMAND}" - INSTALL_COMMAND "${_libvterm_INSTALL_COMMAND}") -endfunction() - -if(WIN32) - if(MSVC) - set(LIBVTERM_PATCH_COMMAND - ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm init - COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm apply --ignore-whitespace - ${CMAKE_CURRENT_SOURCE_DIR}/patches/libvterm-Remove-VLAs-for-MSVC.patch) - endif() - set(LIBVTERM_CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibvtermCMakeLists.txt - ${DEPS_BUILD_DIR}/src/libvterm/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Libvterm-tbl2inc_c.cmake - ${DEPS_BUILD_DIR}/src/libvterm/tbl2inc_c.cmake - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libvterm - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC" - -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) - set(LIBVTERM_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) - set(LIBVTERM_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) -else() - set(LIBVTERM_INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} - PREFIX=${DEPS_INSTALL_DIR} - CFLAGS=-fPIC - LDFLAGS+=-static - ${DEFAULT_MAKE_CFLAGS} - install) -endif() - -BuildLibvterm(PATCH_COMMAND ${LIBVTERM_PATCH_COMMAND} - CONFIGURE_COMMAND ${LIBVTERM_CONFIGURE_COMMAND} - BUILD_COMMAND ${LIBVTERM_BUILD_COMMAND} - INSTALL_COMMAND ${LIBVTERM_INSTALL_COMMAND}) - -list(APPEND THIRD_PARTY_DEPS libvterm) diff --git a/third-party/cmake/BuildLua.cmake b/third-party/cmake/BuildLua.cmake deleted file mode 100644 index a40cb7dcb2..0000000000 --- a/third-party/cmake/BuildLua.cmake +++ /dev/null @@ -1,96 +0,0 @@ -# BuildLua(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Reusable function to build lua, wraps ExternalProject_Add. -# Failing to pass a command argument will result in no command being run -function(BuildLua) - cmake_parse_arguments(_lua - "" - "" - "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _lua_CONFIGURE_COMMAND AND NOT _lua_BUILD_COMMAND - AND NOT _lua_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - - ExternalProject_Add(lua - PREFIX ${DEPS_BUILD_DIR} - URL ${LUA_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua - -DURL=${LUA_URL} - -DEXPECTED_SHA256=${LUA_SHA256} - -DTARGET=lua - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND "${_lua_CONFIGURE_COMMAND}" - BUILD_IN_SOURCE 1 - BUILD_COMMAND "${_lua_BUILD_COMMAND}" - INSTALL_COMMAND "${_lua_INSTALL_COMMAND}") -endfunction() - -if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(LUA_TARGET linux) -elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(LUA_TARGET macosx) -elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - set(LUA_TARGET freebsd) -elseif(CMAKE_SYSTEM_NAME MATCHES "BSD") - set(CMAKE_LUA_TARGET bsd) -elseif(CMAKE_SYSTEM_NAME MATCHES "^MINGW") - set(CMAKE_LUA_TARGET mingw) -else() - if(UNIX) - set(LUA_TARGET posix) - else() - set(LUA_TARGET generic) - endif() -endif() - -set(LUA_CFLAGS "-O0 -g3 -fPIC") -set(LUA_LDFLAGS "") - -if(CLANG_ASAN_UBSAN) - set(LUA_CFLAGS "${LUA_CFLAGS} -fsanitize=address") - set(LUA_CFLAGS "${LUA_CFLAGS} -fno-omit-frame-pointer") - set(LUA_CFLAGS "${LUA_CFLAGS} -fno-optimize-sibling-calls") - - set(LUA_LDFLAGS "${LUA_LDFLAGS} -fsanitize=address") -endif() - -set(LUA_CONFIGURE_COMMAND - sed -e "/^CC/s@gcc@${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}@" - -e "/^CFLAGS/s@-O2@${LUA_CFLAGS}@" - -e "/^MYLDFLAGS/s@$@${LUA_LDFLAGS}@" - -e "s@-lreadline@@g" - -e "s@-lhistory@@g" - -e "s@-lncurses@@g" - -i ${DEPS_BUILD_DIR}/src/lua/src/Makefile && - sed -e "/#define LUA_USE_READLINE/d" - -e "s@\\(#define LUA_ROOT[ ]*\"\\)/usr/local@\\1${DEPS_INSTALL_DIR}@" - -i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h) -set(LUA_INSTALL_TOP_ARG "INSTALL_TOP=${DEPS_INSTALL_DIR}") -set(LUA_BUILD_COMMAND - ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} ${LUA_TARGET}) -set(LUA_INSTALL_COMMAND - ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} install) - -message(STATUS "Lua target is ${LUA_TARGET}") - -BuildLua(CONFIGURE_COMMAND ${LUA_CONFIGURE_COMMAND} - BUILD_COMMAND ${LUA_BUILD_COMMAND} - INSTALL_COMMAND ${LUA_INSTALL_COMMAND}) -list(APPEND THIRD_PARTY_DEPS lua) - -set(BUSTED ${DEPS_INSTALL_DIR}/bin/busted) -set(BUSTED_LUA ${BUSTED}-lua) - -add_custom_command(OUTPUT ${BUSTED_LUA} - COMMAND sed -e 's/^exec/exec $$LUA_DEBUGGER/' -e 's/jit//g' < ${BUSTED} > ${BUSTED_LUA} && chmod +x ${BUSTED_LUA} - DEPENDS lua busted ${BUSTED}) -add_custom_target(busted-lua - DEPENDS ${DEPS_INSTALL_DIR}/bin/busted-lua) - -list(APPEND THIRD_PARTY_DEPS busted-lua) diff --git a/third-party/cmake/BuildLuajit.cmake b/third-party/cmake/BuildLuajit.cmake deleted file mode 100644 index c8d5b39398..0000000000 --- a/third-party/cmake/BuildLuajit.cmake +++ /dev/null @@ -1,163 +0,0 @@ -# BuildLuajit(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Reusable function to build luajit, wraps ExternalProject_Add. -# Failing to pass a command argument will result in no command being run -function(BuildLuajit) - cmake_parse_arguments(_luajit - "" - "TARGET" - "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND;DEPENDS" - ${ARGN}) - if(NOT _luajit_CONFIGURE_COMMAND AND NOT _luajit_BUILD_COMMAND - AND NOT _luajit_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - if(NOT _luajit_TARGET) - set(_luajit_TARGET "luajit") - endif() - - ExternalProject_Add(${_luajit_TARGET} - PREFIX ${DEPS_BUILD_DIR} - URL ${LUAJIT_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luajit - -DURL=${LUAJIT_URL} - -DEXPECTED_SHA256=${LUAJIT_SHA256} - -DTARGET=${_luajit_TARGET} - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}" - BUILD_IN_SOURCE 1 - BUILD_COMMAND "${_luajit_BUILD_COMMAND}" - INSTALL_COMMAND "${_luajit_INSTALL_COMMAND}" - DEPENDS "${_luajit_DEPENDS}") - - # Create symlink for development version manually. - if(UNIX) - add_custom_command( - TARGET ${_luajit_TARGET} - COMMAND ${CMAKE_COMMAND} -E create_symlink luajit-2.1.0-beta3 ${DEPS_BIN_DIR}/${_luajit_TARGET}) - endif() -endfunction() - -check_c_compiler_flag(-fno-stack-check HAS_NO_STACK_CHECK) -if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND HAS_NO_STACK_CHECK) - set(NO_STACK_CHECK "CFLAGS+=-fno-stack-check") -else() - set(NO_STACK_CHECK "") -endif() -if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") - set(AMD64_ABI "LDFLAGS=-lpthread -lc++abi") -else() - set(AMD64_ABI "") -endif() -set(BUILDCMD_UNIX ${MAKE_PRG} CFLAGS=-fPIC - CFLAGS+=-DLUA_USE_APICHECK - CFLAGS+=-funwind-tables - ${NO_STACK_CHECK} - ${AMD64_ABI} - CCDEBUG+=-g - Q=) - -if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - if(CMAKE_OSX_DEPLOYMENT_TARGET) - set(DEPLOYMENT_TARGET "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") - else() - execute_process(COMMAND sw_vers -productVersion - OUTPUT_VARIABLE MACOS_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(DEPLOYMENT_TARGET "MACOSX_DEPLOYMENT_TARGET=${MACOS_VERSION}") - endif() -else() - set(DEPLOYMENT_TARGET "") -endif() - -if((UNIX AND NOT APPLE) OR (APPLE AND NOT CMAKE_OSX_ARCHITECTURES)) - BuildLuaJit(INSTALL_COMMAND ${BUILDCMD_UNIX} - CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} - ${DEPLOYMENT_TARGET} install) - -elseif(CMAKE_OSX_ARCHITECTURES AND APPLE) - - # Passing multiple `-arch` flags to the LuaJIT build will cause it to fail. - # To get a working universal build, we build each requested architecture slice - # individually then `lipo` them all up. - set(LUAJIT_SRC_DIR "${DEPS_BUILD_DIR}/src/luajit") - foreach(ARCH IN LISTS CMAKE_OSX_ARCHITECTURES) - set(STATIC_CC "${LUAJIT_C_COMPILER} -arch ${ARCH}") - set(DYNAMIC_CC "${LUAJIT_C_COMPILER} -arch ${ARCH} -fPIC") - set(TARGET_LD "${LUAJIT_C_COMPILER} -arch ${ARCH}") - list(APPEND LUAJIT_THIN_EXECUTABLES "${LUAJIT_SRC_DIR}-${ARCH}/src/luajit") - list(APPEND LUAJIT_THIN_STATIC_LIBS "${LUAJIT_SRC_DIR}-${ARCH}/src/libluajit.a") - list(APPEND LUAJIT_THIN_DYLIBS "${LUAJIT_SRC_DIR}-${ARCH}/src/libluajit.so") - list(APPEND LUAJIT_THIN_TARGETS "luajit-${ARCH}") - - # See https://luajit.org/install.html#cross. - BuildLuaJit(TARGET "luajit-${ARCH}" - BUILD_COMMAND ${BUILDCMD_UNIX} - CC=${LUAJIT_C_COMPILER} STATIC_CC=${STATIC_CC} - DYNAMIC_CC=${DYNAMIC_CC} TARGET_LD=${TARGET_LD} - PREFIX=${DEPS_INSTALL_DIR} - ${DEPLOYMENT_TARGET}) - endforeach() - BuildLuaJit( - CONFIGURE_COMMAND ${BUILDCMD_UNIX} CC=${LUAJIT_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} ${DEPLOYMENT_TARGET} - COMMAND ${CMAKE_COMMAND} -E rm -f ${LUAJIT_SRC_DIR}/src/luajit ${LUAJIT_SRC_DIR}/src/libluajit.so ${LUAJIT_SRC_DIR}/src/libluajit.a - BUILD_COMMAND lipo ${LUAJIT_THIN_EXECUTABLES} -create -output ${LUAJIT_SRC_DIR}/src/luajit - COMMAND lipo ${LUAJIT_THIN_STATIC_LIBS} -create -output ${LUAJIT_SRC_DIR}/src/libluajit.a - COMMAND lipo ${LUAJIT_THIN_DYLIBS} -create -output ${LUAJIT_SRC_DIR}/src/libluajit.so - INSTALL_COMMAND ${BUILDCMD_UNIX} CC=${LUAJIT_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} ${DEPLOYMENT_TARGET} install - DEPENDS ${LUAJIT_THIN_TARGETS} - ) - -elseif(MINGW) - - if(CMAKE_GENERATOR MATCHES "Ninja") - set(LUAJIT_MAKE_PRG ${MAKE_PRG}) - else() - set(LUAJIT_MAKE_PRG ${CMAKE_MAKE_PROGRAM}) - endif() - BuildLuaJit(BUILD_COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} - PREFIX=${DEPS_INSTALL_DIR} - CFLAGS+=-DLUA_USE_APICHECK - CFLAGS+=-funwind-tables - CCDEBUG+=-g - BUILDMODE=static - # Build a DLL too - COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic - - INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib - # Luarocks searches for lua51.dll in lib - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/lib - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/libluajit.a ${DEPS_INSTALL_DIR}/lib - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 - COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin/lua/jit - COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/bin/lua/jit - ) -elseif(MSVC) - - BuildLuaJit( - BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${DEPS_BUILD_DIR}/src/luajit/src ${DEPS_BUILD_DIR}/src/luajit/src/msvcbuild.bat - INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_INSTALL_DIR}/bin - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib - # Luarocks searches for lua51.lib - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_INSTALL_DIR}/lib/lua51.lib - # Luv searches for luajit.lib - COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_INSTALL_DIR}/lib/luajit.lib - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 - COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin/lua/jit - COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/bin/lua/jit - ) -else() - message(FATAL_ERROR "Trying to build luajit in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") -endif() - -list(APPEND THIRD_PARTY_DEPS luajit) diff --git a/third-party/cmake/BuildLuarocks.cmake b/third-party/cmake/BuildLuarocks.cmake deleted file mode 100644 index 6933d263f2..0000000000 --- a/third-party/cmake/BuildLuarocks.cmake +++ /dev/null @@ -1,227 +0,0 @@ -# Luarocks recipe. Luarocks is only required when building Neovim, when -# cross compiling we still want to build for the HOST system, whenever -# writing a recipe that is meant for cross-compile, use the HOSTDEPS_* variables -# instead of DEPS_* - check the main CMakeLists.txt for a list. -# -# NOTE: LuaRocks rocks need to "DEPENDS" on the previous module, because -# running luarocks in parallel will break, e.g. when some rocks have -# the same dependency.. - -option(USE_BUNDLED_BUSTED "Use the bundled version of busted to run tests." ON) - -# BuildLuarocks(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Reusable function to build luarocks, wraps ExternalProject_Add. -# Failing to pass a command argument will result in no command being run -function(BuildLuarocks) - cmake_parse_arguments(_luarocks - "" - "" - "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _luarocks_CONFIGURE_COMMAND AND NOT _luarocks_BUILD_COMMAND - AND NOT _luarocks_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - - ExternalProject_Add(luarocks - PREFIX ${DEPS_BUILD_DIR} - URL ${LUAROCKS_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luarocks - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luarocks - -DURL=${LUAROCKS_URL} - -DEXPECTED_SHA256=${LUAROCKS_SHA256} - -DTARGET=luarocks - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND "${_luarocks_CONFIGURE_COMMAND}" - BUILD_COMMAND "${_luarocks_BUILD_COMMAND}" - INSTALL_COMMAND "${_luarocks_INSTALL_COMMAND}") -endfunction() - -# The luarocks binary location -set(LUAROCKS_BINARY ${HOSTDEPS_BIN_DIR}/luarocks) - -# Arguments for calls to 'luarocks build' -if(NOT MSVC) - # In MSVC don't pass the compiler/linker to luarocks, the bundled - # version already knows, and passing them here breaks the build - set(LUAROCKS_BUILDARGS CC=${HOSTDEPS_C_COMPILER} LD=${HOSTDEPS_C_COMPILER}) -endif() - -# Lua version, used with rocks directories. -# Defaults to 5.1 for bundled LuaJIT/Lua. -set(LUA_VERSION "5.1") - -if(UNIX) - - if(USE_BUNDLED_LUAJIT) - list(APPEND LUAROCKS_OPTS - --with-lua=${HOSTDEPS_INSTALL_DIR} - --with-lua-include=${HOSTDEPS_INSTALL_DIR}/include/luajit-2.1 - --with-lua-interpreter=luajit) - elseif(USE_BUNDLED_LUA) - list(APPEND LUAROCKS_OPTS - --with-lua=${HOSTDEPS_INSTALL_DIR}) - else() - find_package(LuaJit) - if(LUAJIT_FOUND) - list(APPEND LUAROCKS_OPTS - --with-lua-include=${LUAJIT_INCLUDE_DIRS} - --with-lua-interpreter=luajit) - endif() - - # Get LUA_VERSION used with rocks output. - if(LUAJIT_FOUND) - set(LUA_EXE "luajit") - else() - set(LUA_EXE "lua") - endif() - execute_process( - COMMAND ${LUA_EXE} -e "print(string.sub(_VERSION, 5))" - OUTPUT_VARIABLE LUA_VERSION - ERROR_VARIABLE ERR - RESULT_VARIABLE RES) - if(NOT RES EQUAL 0) - message(FATAL_ERROR "Could not get LUA_VERSION with ${LUA_EXE}: ${ERR}") - endif() - endif() - - BuildLuarocks( - CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/src/luarocks/configure - --prefix=${HOSTDEPS_INSTALL_DIR} --force-config ${LUAROCKS_OPTS} - INSTALL_COMMAND ${MAKE_PRG} -j1 bootstrap) -elseif(MSVC OR MINGW) - - if(MINGW) - set(COMPILER_FLAG /MW) - elseif(MSVC) - set(COMPILER_FLAG /MSVC) - endif() - - # Ignore USE_BUNDLED_LUAJIT - always ON for native Win32 - BuildLuarocks(INSTALL_COMMAND install.bat /FORCECONFIG /NOREG /NOADMIN /Q /F - /LUA ${DEPS_INSTALL_DIR} - /LIB ${DEPS_LIB_DIR} - /BIN ${DEPS_BIN_DIR} - /INC ${DEPS_INSTALL_DIR}/include/luajit-2.1 - /P ${DEPS_INSTALL_DIR}/luarocks /TREE ${DEPS_INSTALL_DIR} - /SCRIPTS ${DEPS_BIN_DIR} - /CMOD ${DEPS_BIN_DIR} - ${COMPILER_FLAG} - /LUAMOD ${DEPS_BIN_DIR}/lua) - - set(LUAROCKS_BINARY ${DEPS_INSTALL_DIR}/luarocks/luarocks.bat) -else() - message(FATAL_ERROR "Trying to build luarocks in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") -endif() - -list(APPEND THIRD_PARTY_DEPS luarocks) - -if(USE_BUNDLED_LUAJIT) - add_dependencies(luarocks luajit) -elseif(USE_BUNDLED_LUA) - add_dependencies(luarocks lua) -endif() -set(ROCKS_DIR ${HOSTDEPS_LIB_DIR}/luarocks/rocks-${LUA_VERSION}) - -# mpack -add_custom_command(OUTPUT ${ROCKS_DIR}/mpack - COMMAND ${LUAROCKS_BINARY} - ARGS build mpack 1.0.8-0 ${LUAROCKS_BUILDARGS} - DEPENDS luarocks) -add_custom_target(mpack DEPENDS ${ROCKS_DIR}/mpack) -list(APPEND THIRD_PARTY_DEPS mpack) - -# lpeg -add_custom_command(OUTPUT ${ROCKS_DIR}/lpeg - COMMAND ${LUAROCKS_BINARY} - ARGS build lpeg 1.0.2-1 ${LUAROCKS_BUILDARGS} - DEPENDS mpack) -add_custom_target(lpeg DEPENDS ${ROCKS_DIR}/lpeg) -list(APPEND THIRD_PARTY_DEPS lpeg) - -if((NOT USE_BUNDLED_LUAJIT) AND USE_BUNDLED_LUA) - # luabitop - add_custom_command(OUTPUT ${ROCKS_DIR}/luabitop - COMMAND ${LUAROCKS_BINARY} - ARGS build luabitop 1.0.2-3 ${LUAROCKS_BUILDARGS} - DEPENDS lpeg) - add_custom_target(luabitop DEPENDS ${ROCKS_DIR}/luabitop) - list(APPEND THIRD_PARTY_DEPS luabitop) -endif() - -if(USE_BUNDLED_BUSTED) - if((NOT USE_BUNDLED_LUAJIT) AND USE_BUNDLED_LUA) - set(PENLIGHT_DEPENDS luabitop) - else() - set(PENLIGHT_DEPENDS lpeg) - endif() - - # penlight - add_custom_command(OUTPUT ${ROCKS_DIR}/penlight - COMMAND ${LUAROCKS_BINARY} - ARGS build penlight 1.5.4-1 ${LUAROCKS_BUILDARGS} - DEPENDS ${PENLIGHT_DEPENDS}) - add_custom_target(penlight DEPENDS ${ROCKS_DIR}/penlight) - - # busted - if(WIN32) - set(BUSTED_EXE "${HOSTDEPS_BIN_DIR}/busted.bat") - set(LUACHECK_EXE "${HOSTDEPS_BIN_DIR}/luacheck.bat") - else() - set(BUSTED_EXE "${HOSTDEPS_BIN_DIR}/busted") - set(LUACHECK_EXE "${HOSTDEPS_BIN_DIR}/luacheck") - endif() - add_custom_command(OUTPUT ${BUSTED_EXE} - COMMAND ${LUAROCKS_BINARY} - ARGS build busted 2.0.0 ${LUAROCKS_BUILDARGS} - DEPENDS penlight) - add_custom_target(busted DEPENDS ${BUSTED_EXE}) - - # luacheck - add_custom_command(OUTPUT ${LUACHECK_EXE} - COMMAND ${LUAROCKS_BINARY} - ARGS build luacheck 0.23.0-1 ${LUAROCKS_BUILDARGS} - DEPENDS busted) - add_custom_target(luacheck DEPENDS ${LUACHECK_EXE}) - - # luv - set(LUV_DEPS luacheck) - if(USE_BUNDLED_LUV) - list(APPEND LUV_DEPS luv-static lua-compat-5.3) - set(LUV_ARGS "CFLAGS=-O0 -g3 -fPIC") - if(USE_BUNDLED_LIBUV) - list(APPEND LUV_ARGS LIBUV_DIR=${HOSTDEPS_INSTALL_DIR}) - # workaround for bug introduced in - # https://github.com/luarocks/luarocks/commit/83126ba324846b754ffc5e0345341f01262b3f86 - if(MSVC) - list(APPEND LUV_ARGS LIBUV_LIBDIR=${HOSTDEPS_INSTALL_DIR}/lib) - endif() - endif() - SET(LUV_PRIVATE_ARGS LUA_COMPAT53_INCDIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3/c-api) - add_custom_command(OUTPUT ${ROCKS_DIR}/luv - COMMAND ${LUAROCKS_BINARY} - ARGS make ${LUAROCKS_BUILDARGS} ${LUV_ARGS} ${LUV_PRIVATE_ARGS} - WORKING_DIRECTORY ${DEPS_BUILD_DIR}/src/luv - DEPENDS ${LUV_DEPS}) - else() - add_custom_command(OUTPUT ${ROCKS_DIR}/luv - COMMAND ${LUAROCKS_BINARY} - ARGS build luv ${LUV_VERSION} ${LUAROCKS_BUILDARGS} - DEPENDS ${LUV_DEPS}) - endif() - add_custom_target(luv DEPENDS ${ROCKS_DIR}/luv) - - # nvim-client: https://github.com/neovim/lua-client - add_custom_command(OUTPUT ${ROCKS_DIR}/nvim-client - COMMAND ${LUAROCKS_BINARY} - ARGS build nvim-client 0.2.4-1 ${LUAROCKS_BUILDARGS} - DEPENDS luv) - add_custom_target(nvim-client DEPENDS ${ROCKS_DIR}/nvim-client) - - list(APPEND THIRD_PARTY_DEPS busted luacheck nvim-client) -endif() diff --git a/third-party/cmake/BuildLuv.cmake b/third-party/cmake/BuildLuv.cmake deleted file mode 100644 index 6e9a333dc8..0000000000 --- a/third-party/cmake/BuildLuv.cmake +++ /dev/null @@ -1,133 +0,0 @@ -# BuildLuv(PATCH_COMMAND ... CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Reusable function to build luv, wraps ExternalProject_Add. -# Failing to pass a command argument will result in no command being run -function(BuildLuv) - cmake_parse_arguments(_luv - "" - "" - "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _luv_CONFIGURE_COMMAND AND NOT _luv_BUILD_COMMAND - AND NOT _luv_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - - ExternalProject_Add(lua-compat-5.3 - PREFIX ${DEPS_BUILD_DIR} - URL ${LUA_COMPAT53_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua-compat-5.3 - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua-compat-5.3 - -DURL=${LUA_COMPAT53_URL} - -DEXPECTED_SHA256=${LUA_COMPAT53_SHA256} - -DTARGET=lua-compat-5.3 - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - PATCH_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "") - - ExternalProject_Add(luv-static - PREFIX ${DEPS_BUILD_DIR} - DEPENDS lua-compat-5.3 - URL ${LUV_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luv - -DURL=${LUV_URL} - -DEXPECTED_SHA256=${LUV_SHA256} - -DTARGET=luv-static - # The source is shared with BuildLuarocks (with USE_BUNDLED_LUV). - -DSRC_DIR=${DEPS_BUILD_DIR}/src/luv - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - PATCH_COMMAND "${_luv_PATCH_COMMAND}" - CONFIGURE_COMMAND "${_luv_CONFIGURE_COMMAND}" - BUILD_COMMAND "${_luv_BUILD_COMMAND}" - INSTALL_COMMAND "${_luv_INSTALL_COMMAND}" - LIST_SEPARATOR |) -endfunction() - -set(LUV_SRC_DIR ${DEPS_BUILD_DIR}/src/luv) -set(LUV_INCLUDE_FLAGS - "-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1") - -# Replace luv default rockspec with the alternate one under the "rockspecs" -# directory -set(LUV_PATCH_COMMAND - ${CMAKE_COMMAND} -E copy_directory ${LUV_SRC_DIR}/rockspecs ${LUV_SRC_DIR}) - -set(LUV_CONFIGURE_COMMAND_COMMON - ${CMAKE_COMMAND} ${LUV_SRC_DIR} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP} - -DLUA_BUILD_TYPE=System - -DLUA_COMPAT53_DIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3 - -DWITH_SHARED_LIBUV=ON - -DBUILD_SHARED_LIBS=OFF - -DBUILD_STATIC_LIBS=ON - -DBUILD_MODULE=OFF) - -if(USE_BUNDLED_LUAJIT) - list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=LuaJit) -elseif(USE_BUNDLED_LUA) - list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=Lua) -else() - find_package(LuaJit) - if(LUAJIT_FOUND) - list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=LuaJit) - else() - list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=Lua) - endif() -endif() - -if(USE_BUNDLED_LIBUV) - set(LUV_CONFIGURE_COMMAND_COMMON - ${LUV_CONFIGURE_COMMAND_COMMON} - -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR}) -endif() - -if(MSVC) - set(LUV_CONFIGURE_COMMAND - ${LUV_CONFIGURE_COMMAND_COMMON} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - # Same as Unix without fPIC - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS}" - # Make sure we use the same generator, otherwise we may - # accidentally end up using different MSVC runtimes - -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) -else() - set(LUV_CONFIGURE_COMMAND - ${LUV_CONFIGURE_COMMAND_COMMON} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS} -fPIC") - if(CMAKE_GENERATOR MATCHES "Unix Makefiles" AND - (CMAKE_SYSTEM_NAME MATCHES ".*BSD" OR CMAKE_SYSTEM_NAME MATCHES "DragonFly")) - set(LUV_CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND} -DCMAKE_MAKE_PROGRAM=gmake) - endif() -endif() - -set(LUV_BUILD_COMMAND - ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) -set(LUV_INSTALL_COMMAND - ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) - -BuildLuv(PATCH_COMMAND ${LUV_PATCH_COMMAND} - CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND} - BUILD_COMMAND ${LUV_BUILD_COMMAND} - INSTALL_COMMAND ${LUV_INSTALL_COMMAND}) - -list(APPEND THIRD_PARTY_DEPS luv-static) -if(USE_BUNDLED_LUAJIT) - add_dependencies(luv-static luajit) -endif() -if(USE_BUNDLED_LIBUV) - add_dependencies(luv-static libuv) -endif() diff --git a/third-party/cmake/BuildMsgpack.cmake b/third-party/cmake/BuildMsgpack.cmake deleted file mode 100644 index 10bf1c8e37..0000000000 --- a/third-party/cmake/BuildMsgpack.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# BuildMsgpack(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -# Reusable function to build msgpack, wraps ExternalProject_Add. -# Failing to pass a command argument will result in no command being run -function(BuildMsgpack) - cmake_parse_arguments(_msgpack - "" - "" - "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _msgpack_CONFIGURE_COMMAND AND NOT _msgpack_BUILD_COMMAND - AND NOT _msgpack_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - - ExternalProject_Add(msgpack - PREFIX ${DEPS_BUILD_DIR} - URL ${MSGPACK_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/msgpack - -DURL=${MSGPACK_URL} - -DEXPECTED_SHA256=${MSGPACK_SHA256} - -DTARGET=msgpack - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND "${_msgpack_CONFIGURE_COMMAND}" - BUILD_COMMAND "${_msgpack_BUILD_COMMAND}" - INSTALL_COMMAND "${_msgpack_INSTALL_COMMAND}" - LIST_SEPARATOR |) -endfunction() - -set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack - -DMSGPACK_BUILD_TESTS=OFF - -DMSGPACK_BUILD_EXAMPLES=OFF - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP} - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC" - -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) - -set(MSGPACK_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}) -set(MSGPACK_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) - -if(MSVC) - # Same as Unix without fPIC - set(MSGPACK_CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/msgpack - -DMSGPACK_BUILD_TESTS=OFF - -DMSGPACK_BUILD_EXAMPLES=OFF - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1}" - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - # Make sure we use the same generator, otherwise we may - # accidentally end up using different MSVC runtimes - -DCMAKE_GENERATOR=${CMAKE_GENERATOR}) -endif() - -BuildMsgpack(CONFIGURE_COMMAND ${MSGPACK_CONFIGURE_COMMAND} - BUILD_COMMAND ${MSGPACK_BUILD_COMMAND} - INSTALL_COMMAND ${MSGPACK_INSTALL_COMMAND}) - -list(APPEND THIRD_PARTY_DEPS msgpack) diff --git a/third-party/cmake/BuildTreesitter.cmake b/third-party/cmake/BuildTreesitter.cmake deleted file mode 100644 index 01fdb837e2..0000000000 --- a/third-party/cmake/BuildTreesitter.cmake +++ /dev/null @@ -1,59 +0,0 @@ -# BuildTreeSitter(TARGET targetname CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...) -function(BuildTreeSitter) - cmake_parse_arguments(_treesitter - "BUILD_IN_SOURCE" - "TARGET" - "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND" - ${ARGN}) - - if(NOT _treesitter_CONFIGURE_COMMAND AND NOT _treesitter_BUILD_COMMAND - AND NOT _treesitter_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND") - endif() - if(NOT _treesitter_TARGET) - set(_treesitter_TARGET "tree-sitter") - endif() - - ExternalProject_Add(tree-sitter - PREFIX ${DEPS_BUILD_DIR} - URL ${TREESITTER_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/tree-sitter - INSTALL_DIR ${DEPS_INSTALL_DIR} - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/tree-sitter - -DURL=${TREESITTER_URL} - -DEXPECTED_SHA256=${TREESITTER_SHA256} - -DTARGET=tree-sitter - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - BUILD_IN_SOURCE ${_treesitter_BUILD_IN_SOURCE} - PATCH_COMMAND "" - CONFIGURE_COMMAND "${_treesitter_CONFIGURE_COMMAND}" - BUILD_COMMAND "${_treesitter_BUILD_COMMAND}" - INSTALL_COMMAND "${_treesitter_INSTALL_COMMAND}") -endfunction() - -if(MSVC) - BuildTreeSitter(BUILD_IN_SOURCE - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterCMakeLists.txt - ${DEPS_BUILD_DIR}/src/tree-sitter/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/tree-sitter/CMakeLists.txt - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE} - ) -else() - set(TS_CFLAGS "-O3 -Wall -Wextra") - BuildTreeSitter(BUILD_IN_SOURCE - CONFIGURE_COMMAND "" - BUILD_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} CFLAGS=${TS_CFLAGS} - INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} install) -endif() - -list(APPEND THIRD_PARTY_DEPS tree-sitter) diff --git a/third-party/cmake/BuildTreesitterParsers.cmake b/third-party/cmake/BuildTreesitterParsers.cmake deleted file mode 100644 index 11ffb792de..0000000000 --- a/third-party/cmake/BuildTreesitterParsers.cmake +++ /dev/null @@ -1,29 +0,0 @@ -ExternalProject_Add(treesitter-c -PREFIX ${DEPS_BUILD_DIR} -URL ${TREESITTER_C_URL} -DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/treesitter-c -DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/treesitter-c - -DURL=${TREESITTER_C_URL} - -DEXPECTED_SHA256=${TREESITTER_C_SHA256} - -DTARGET=treesitter-c - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake -PATCH_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterParserCMakeLists.txt - ${DEPS_BUILD_DIR}/src/treesitter-c/CMakeLists.txt -CMAKE_ARGS - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP} - # Pass toolchain - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - -DPARSERLANG=c - -BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} -INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE} -LIST_SEPARATOR |) diff --git a/third-party/cmake/BuildUnibilium.cmake b/third-party/cmake/BuildUnibilium.cmake deleted file mode 100644 index 2f940bdfd3..0000000000 --- a/third-party/cmake/BuildUnibilium.cmake +++ /dev/null @@ -1,48 +0,0 @@ -if(WIN32) - ExternalProject_Add(unibilium - PREFIX ${DEPS_BUILD_DIR} - URL ${UNIBILIUM_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/unibilium - -DURL=${UNIBILIUM_URL} - -DEXPECTED_SHA256=${UNIBILIUM_SHA256} - -DTARGET=unibilium - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UnibiliumCMakeLists.txt - ${DEPS_BUILD_DIR}/src/unibilium/CMakeLists.txt - COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/unibilium - -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} - # Pass toolchain - -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} - INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}) -else() - ExternalProject_Add(unibilium - PREFIX ${DEPS_BUILD_DIR} - URL ${UNIBILIUM_URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/unibilium - -DURL=${UNIBILIUM_URL} - -DEXPECTED_SHA256=${UNIBILIUM_SHA256} - -DTARGET=unibilium - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER} - PREFIX=${DEPS_INSTALL_DIR} - CFLAGS=-fPIC - LDFLAGS+=-static - INSTALL_COMMAND ${MAKE_PRG} PREFIX=${DEPS_INSTALL_DIR} install) -endif() - -list(APPEND THIRD_PARTY_DEPS unibilium) diff --git a/third-party/cmake/CopyFilesGlob.cmake b/third-party/cmake/CopyFilesGlob.cmake deleted file mode 100644 index 8950ead1e5..0000000000 --- a/third-party/cmake/CopyFilesGlob.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# Copy multiple files to destination, based on a glob expression -# - FROM_GLOB -# - TO - -if(NOT FROM_GLOB) - message(FATAL_ERROR "FROM_GLOB must be set") -endif() -if(NOT TO) - message(FATAL_ERROR "TO must be set") -endif() - -execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${TO}) - -file(GLOB files ${FROM_GLOB}) -foreach(file ${files}) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${file} ${TO} RESULT_VARIABLE rv) - if(NOT rv EQUAL 0) - message(FATAL_ERROR "Error copying ${file}") - endif() -endforeach() diff --git a/third-party/cmake/DownloadAndExtractFile.cmake b/third-party/cmake/DownloadAndExtractFile.cmake deleted file mode 100644 index abb1ddc81a..0000000000 --- a/third-party/cmake/DownloadAndExtractFile.cmake +++ /dev/null @@ -1,195 +0,0 @@ -if(NOT DEFINED PREFIX) - message(FATAL_ERROR "PREFIX must be defined.") -endif() - -if(NOT DEFINED URL) - message(FATAL_ERROR "URL must be defined.") -endif() - -if(NOT DEFINED DOWNLOAD_DIR) - message(FATAL_ERROR "DOWNLOAD_DIR must be defined.") -endif() - -if(NOT DEFINED EXPECTED_SHA256) - message(FATAL_ERROR "EXPECTED_SHA256 must be defined.") -endif() - -if(NOT DEFINED TARGET) - message(FATAL_ERROR "TARGET must be defined.") -endif() - -if(NOT DEFINED SRC_DIR) - set(SRC_DIR ${PREFIX}/src/${TARGET}) -endif() -set(BINARY_DIR ${PREFIX}/src/${TARGET}-build) - -# Check whether the source has been downloaded. If true, skip it. -# Useful for external downloads like homebrew. -if(USE_EXISTING_SRC_DIR) - if(EXISTS "${SRC_DIR}" AND IS_DIRECTORY "${SRC_DIR}") - file(GLOB EXISTED_FILES "${SRC_DIR}/*") - if(EXISTED_FILES) - message(STATUS "${SRC_DIR} is found and not empty, skipping download and extraction. ") - return() - endif() - endif() - message(FATAL_ERROR "USE_EXISTING_SRC_DIR set to ON, but '${SRC_DIR}' does not exist or is empty.") -endif() - -# Taken from ExternalProject_Add. Let's hope we can drop this one day when -# ExternalProject_Add allows you to disable SHOW_PROGRESS on the file download. -if(TIMEOUT) - set(timeout_args TIMEOUT ${timeout}) - set(timeout_msg "${timeout} seconds") -else() - set(timeout_args "") - set(timeout_msg "none") -endif() - -string(REGEX MATCH "[^/\\?]*$" fname "${URL}") -if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$") - string(REGEX MATCH "([^/\\?]+(\\.|=)(bz2|tar|tgz|tar\\.gz|zip))/.*$" match_result "${URL}") - set(fname "${CMAKE_MATCH_1}") -endif() -if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$") - message(FATAL_ERROR "Could not extract tarball filename from url:\n ${url}") -endif() -string(REPLACE ";" "-" fname "${fname}") - -set(file ${DOWNLOAD_DIR}/${fname}) -message(STATUS "file: ${file}") - -set(EXISTING_SHA256 "") -if(EXISTS ${file}) - file(SHA256 ${file} EXISTING_SHA256) -endif() - -if(NOT EXISTING_SHA256 STREQUAL ${EXPECTED_SHA256}) - message(STATUS "downloading... - src='${URL}' - dst='${file}' - timeout='${timeout_msg}'") - - file(DOWNLOAD ${URL} ${file} - ${timeout_args} - ${hash_args} - STATUS status - LOG log) - - list(GET status 0 status_code) - list(GET status 1 status_string) - - if(NOT status_code EQUAL 0) - # Retry on certain errors, e.g. CURLE_COULDNT_RESOLVE_HOST, which is often - # seen with libtermkey (www.leonerd.org.uk). - if((status_code EQUAL 6) # "Couldn't resolve host name" - OR (status_code EQUAL 7)) # "Couldn't connect to server" - message(STATUS "warning: retrying '${URL}' (${status_string}, status ${status_code})") - execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 10) - file(DOWNLOAD ${URL} ${file} - ${timeout_args} - ${hash_args} - STATUS status - LOG log) - list(GET status 0 status_code) - list(GET status 1 status_string) - endif() - if(NOT status_code EQUAL 0) - message(FATAL_ERROR "error: downloading '${URL}' failed - status_code: ${status_code} - status_string: ${status_string} - log: ${log} - ") - endif() - endif() -endif() - -set(NULL_SHA256 "0000000000000000000000000000000000000000000000000000000000000000") - -# Allow users to use "SKIP" or "skip" as the sha256 to skip checking the hash. -# You can still use the all zeros hash too. -if((EXPECTED_SHA256 STREQUAL "SKIP") OR (EXPECTED_SHA256 STREQUAL "skip")) - set(EXPECTED_SHA256 ${NULL_SHA256}) -endif() - -# We could avoid computing the SHA256 entirely if a NULL_SHA256 was given, -# but we want to warn users of an empty file. -file(SHA256 ${file} ACTUAL_SHA256) -if(ACTUAL_SHA256 STREQUAL "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") - # File was empty. It's likely due to lack of SSL support. - message(FATAL_ERROR - "Failed to download ${URL}. The file is empty and likely means CMake " - "was built without SSL support. Please use a version of CMake with " - "proper SSL support. See " - "https://github.com/neovim/neovim/wiki/Building-Neovim#build-prerequisites " - "for more information.") -elseif((NOT EXPECTED_SHA256 STREQUAL NULL_SHA256) AND - (NOT EXPECTED_SHA256 STREQUAL ACTUAL_SHA256)) - # Wasn't a NULL SHA256 and we didn't match, so we fail. - message(FATAL_ERROR - "Failed to download ${URL}. Expected a SHA256 of " - "${EXPECTED_SHA256} but got ${ACTUAL_SHA256} instead.") -endif() - -message(STATUS "downloading... done") - -# Slurped from a generated extract-TARGET.cmake file. -message(STATUS "extracting... - src='${file}' - dst='${SRC_DIR}'") - -if(NOT EXISTS "${file}") - message(FATAL_ERROR "error: file to extract does not exist: '${file}'") -endif() - -# Prepare a space for extracting: -# -set(i 1234) -while(EXISTS "${SRC_DIR}/../ex-${TARGET}${i}") - math(EXPR i "${i} + 1") -endwhile() -set(ut_dir "${SRC_DIR}/../ex-${TARGET}${i}") -file(MAKE_DIRECTORY "${ut_dir}") - -# Extract it: -# -message(STATUS "extracting... [tar xfz]") -execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${file} - WORKING_DIRECTORY ${ut_dir} - RESULT_VARIABLE rv) - -if(NOT rv EQUAL 0) - message(STATUS "extracting... [error clean up]") - file(REMOVE_RECURSE "${ut_dir}") - message(FATAL_ERROR "error: extract of '${file}' failed") -endif() - -# Analyze what came out of the tar file: -# -message(STATUS "extracting... [analysis]") -file(GLOB contents "${ut_dir}/*") -list(LENGTH contents n) -if(NOT n EQUAL 1 OR NOT IS_DIRECTORY "${contents}") - set(contents "${ut_dir}") -endif() - -# Move "the one" directory to the final directory: -# -message(STATUS "extracting... [rename]") -file(REMOVE_RECURSE ${SRC_DIR}) -get_filename_component(contents ${contents} ABSOLUTE) -file(RENAME ${contents} ${SRC_DIR}) - -# Remove any existing BINARY_DIR, to force a new build. -# Without this a necessary output (e.g. libluv.a) might not be updated/installed. -# -message(STATUS "extracting... [clean binary dir]") -file(REMOVE_RECURSE ${BINARY_DIR}) -file(MAKE_DIRECTORY ${BINARY_DIR}) - -# Clean up: -# -message(STATUS "extracting... [clean up]") -file(REMOVE_RECURSE "${ut_dir}") - -message(STATUS "extracting... done") diff --git a/third-party/cmake/GetBinaryDeps.cmake b/third-party/cmake/GetBinaryDeps.cmake deleted file mode 100644 index 04e3f95a29..0000000000 --- a/third-party/cmake/GetBinaryDeps.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# This is similar to the build recipes, but instead downloads a third party -# binary and installs it under the DEPS_PREFIX. -# The INSTALL_COMMAND is executed in the folder where downloaded files are -# extracted and the ${DEPS_INSTALL_DIR} holds the path to the third-party -# install root. -function(GetBinaryDep) - cmake_parse_arguments(_gettool - "BUILD_IN_SOURCE" - "TARGET" - "INSTALL_COMMAND" - ${ARGN}) - - if(NOT _gettool_TARGET OR NOT _gettool_INSTALL_COMMAND) - message(FATAL_ERROR "Must pass INSTALL_COMMAND and TARGET") - endif() - - string(TOUPPER "${_gettool_TARGET}_URL" URL_VARNAME) - string(TOUPPER "${_gettool_TARGET}_SHA256" HASH_VARNAME) - set(URL ${${URL_VARNAME}}) - set(HASH ${${HASH_VARNAME}}) - if(NOT URL OR NOT HASH ) - message(FATAL_ERROR "${URL_VARNAME} and ${HASH_VARNAME} must be set") - endif() - - ExternalProject_Add(${_gettool_TARGET} - PREFIX ${DEPS_BUILD_DIR} - URL ${URL} - DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR} - DOWNLOAD_COMMAND ${CMAKE_COMMAND} - -DPREFIX=${DEPS_BUILD_DIR} - -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR} - -DURL=${URL} - -DEXPECTED_SHA256=${HASH} - -DTARGET=${_gettool_TARGET} - -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR} - -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake - CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - BUILD_COMMAND "" - INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin - COMMAND "${_gettool_INSTALL_COMMAND}") - list(APPEND THIRD_PARTY_DEPS ${__gettool_TARGET}) -endfunction() diff --git a/third-party/cmake/GettextCMakeLists.txt b/third-party/cmake/GettextCMakeLists.txt deleted file mode 100644 index c3f78716d0..0000000000 --- a/third-party/cmake/GettextCMakeLists.txt +++ /dev/null @@ -1,329 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(gettext C) - -# Adds PREFIX to each item in LIST -macro(PREFIX_LIST_ITEMS LIST PREFIX) - string(REPLACE ";" ";${PREFIX}" ${LIST} ";${${LIST}}") -endmacro() - -file(READ gettext-runtime/config.h.in CONFIG_CONTENT) -string(REPLACE "#undef HAVE_GETCWD" "#define HAVE_GETCWD 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_LONG_LONG_INT" "#define HAVE_LONG_LONG_INT 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_ICONV_H" "#define HAVE_ICONV_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_ICONV" "#define HAVE_ICONV 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef uintmax_t" " - #if _WIN64 - # define intmax_t long long - # define uintmax_t unsigned long long - #elif _WIN32 - # define intmax_t long - # define uintmax_t unsigned long - #endif" - CONFIG_CONTENT ${CONFIG_CONTENT}) -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/config.h ${CONFIG_CONTENT}) - -set(HAVE_NEWLOCALE 0) -set(HAVE_POSIX_PRINTF 0) -set(HAVE_SNPRINTF 0) -set(HAVE_ASPRINTF 0) -set(HAVE_WPRINTF 0) -set(HAVE_NAMELESS_LOCALES 0) -set(HAVE_LONG_LONG_INT 1) -configure_file(gettext-runtime/intl/libgnuintl.in.h - ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl/libgnuintl.h) - -set(LOCALDIR "gettext") -set(LIBDIR "gettext") -set(PKGDATADIR "gettext") -set(PACKAGE_SUFFIX "gettext") -add_definitions(-DLOCALEDIR=\"${LOCALDIR}\" - -DLOCALE_ALIAS_PATH=\"${LOCALDIR}\" - -DLIBDIR=\"${LOCALDIR}\" - -DINSTALLDIR=\"${LOCALDIR}\" - -DEXEEXT=\".exe\" - -DLOCALEDIR=\"${LOCALDIR}\" - -DLIBDIR=\"${LIBDIR}\" - -DPACKAGE_SUFFIX=\"${PACKAGE_SUFFIX}\" - -DGETTEXTDATADIR=\"${PKGDATADIR}\" - -DBISON_LOCALEDIR=\"${LOCALDIR}\" - -DHAVE_CONFIG_H) - -set(libintl_SOURCES - bindtextdom.c dcgettext.c dcigettext.c dcngettext.c dgettext.c dngettext.c - explodename.c finddomain.c gettext.c hash-string.c intl-compat.c l10nflist.c - langprefs.c loadmsgcat.c localcharset.c localealias.c localename-table.c - localename.c lock.c log.c ngettext.c osdep.c - plural-exp.c plural.c printf.c relocatable.c setlocale.c textdomain.c - threadlib.c version.c xsize.c) - -PREFIX_LIST_ITEMS(libintl_SOURCES "gettext-runtime/intl/") - -add_library(libintl ${libintl_SOURCES}) -target_link_libraries(libintl ${LIBICONV_LIBRARIES}) -set_property(TARGET libintl APPEND PROPERTY INCLUDE_DIRECTORIES - ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime - ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl - ${LIBICONV_INCLUDE_DIRS}) -set_property(TARGET libintl APPEND PROPERTY COMPILE_DEFINITIONS - BUILDING_LIBINTL - IN_LIBINTL - ENABLE_RELOCATABLE=1 - IN_LIBRARY - NO_XMALLOC - set_relocation_prefix=libintl_set_relocation_prefix - relocate=libintl_relocate - HAVE_CONFIG_H - _CRT_SECURE_NO_WARNINGS) - - -file(READ gettext-tools/config.h.in CONFIG_CONTENT) -string(REPLACE "#undef FLEXIBLE_ARRAY_MEMBER" "#define FLEXIBLE_ARRAY_MEMBER 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "__declspec (dllimport)" "" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef ENDIANNESS" "#define ENDIANNESS 0" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef GNULIB_FWRITEERROR" "#define GNULIB_FWRITEERROR 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_DECL_STRERROR_R" "#define HAVE_DECL_STRERROR_R 0" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_DUP2" "#define HAVE_DUP2 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_ICONV_H" "#define HAVE_ICONV_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_ICONV" "#define HAVE_ICONV 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_LIBUNISTRING" "#define HAVE_LIBUNISTRING 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_STDINT_H_WITH_UINTMAX" "#define HAVE_STDINT_H_WITH_UINTMAX 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_STDINT_H" "#define HAVE_STDINT_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_LONG_LONG_INT" "#define HAVE_LONG_LONG_INT 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_STRING_H" "#define HAVE_STRING_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_SYS_TIMEB_H" "#define HAVE_SYS_TIMEB_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE__FTIME" "#define HAVE__FTIME 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_FLOAT_H" "#define HAVE_FLOAT_H 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef PACKAGE" "#define PACKAGE \"gettext\"\n#define gettext_VERSION" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef VERSION" "#define VERSION \"\"" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef mode_t" "#define mode_t int" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef pid_t" "#define pid_t int" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef restrict" "#define restrict __restrict" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef ssize_t" "#include \n#define ssize_t SSIZE_T" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef uid_t" "#define uid_t int" CONFIG_CONTENT ${CONFIG_CONTENT}) -string(REPLACE "#undef HAVE_DECL___ARGV" "#define HAVE_DECL___ARGV 1" CONFIG_CONTENT ${CONFIG_CONTENT}) -set(CONFIG_CONTENT "${CONFIG_CONTENT}\n#define isatty libtextstyle_isatty") -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools/config.h ${CONFIG_CONTENT}) - -set(libgettextsrc_COMMON_SOURCE - message.c po-error.c po-xerror.c read-catalog-abstract.c po-lex.c - po-gram-gen.c po-charset.c read-po.c read-properties.c read-stringtable.c - open-catalog.c dir-list.c str-list.c) - -set(libgettextsrc_FORMAT_SOURCE - format.c format-invalid.h format-c.c format-c-parse.h format-sh.c - format-python.c format-python-brace.c format-lisp.c format-elisp.c - format-librep.c format-scheme.c format-java.c format-csharp.c format-awk.c - format-pascal.c format-ycp.c format-tcl.c format-perl.c format-perl-brace.c - format-php.c format-gcc-internal.c format-gfc-internal.c format-qt.c - format-qt-plural.c format-kde.c format-kde-kuit.c format-boost.c format-lua.c - format-javascript.c) - -set(libgettextsrc_SOURCES - ${libgettextsrc_COMMON_SOURCE} read-catalog.c - write-catalog.c write-properties.c write-stringtable.c write-po.c - msgl-ascii.c msgl-iconv.c msgl-equal.c msgl-cat.c msgl-header.c msgl-english.c - msgl-check.c file-list.c msgl-charset.c po-time.c plural-exp.c plural-eval.c - plural-table.c quote.h sentence.h sentence.c - ${libgettextsrc_FORMAT_SOURCE} - read-desktop.c locating-rule.c its.c search-path.c) -PREFIX_LIST_ITEMS(libgettextsrc_SOURCES "gettext-tools/src/") - -set(GLIBC_SOURCE - uniname/uniname.c javaexec.c unsetenv.c classpath.c setenv.c xsetenv.c - sh-quote.c execute.c javaversion.c csharpcomp.c csharpexec.c javacomp.c - gettimeofday.c getdtablesize.c fcntl.c dup-safer-flag.c cloexec.c - fd-safer-flag.c fd-safer.c pipe2.c pipe2-safer.c spawn-pipe.c xmemdup0.c - secure_getenv.c tmpdir.c tempname.c mkdtemp.c fnmatch.c clean-temp.c - wait-process.c waitpid.c getdelim.c getline.c sigprocmask.c sigaction.c - addext.c argmatch.c backupfile.c basename.c c-strcasecmp.c c-strncasecmp.c - c-strstr.c closeout.c concat-filename.c error-progname.c error.c exitfail.c - fstrcmp.c full-write.c fwriteerror.c getopt.c getopt1.c hash.c libxml/buf.c - localcharset.c malloca.c mbchar.c mbslen.c mbsstr.c mbswidth.c obstack.c - progname.c printf-args.c printf-parse.c propername.c quotearg.c rawmemchr.c - safe-read.c safe-write.c stpcpy.c stpncpy.c strchrnul.c striconv.c - striconveh.c striconveha.c strnlen1.c trim.c gcd.c gl_linkedhash_list.c - uniconv/u8-conv-from-enc.c unictype/ctype_space.c unilbrk/lbrktables.c - unilbrk/u8-possible-linebreaks.c unilbrk/u8-width-linebreaks.c - unilbrk/ulc-common.c unilbrk/ulc-width-linebreaks.c unistr/u16-mbtouc-aux.c - unistr/u16-mbtouc.c unistr/u8-check.c unistr/u8-mblen.c - unistr/u8-mbtouc-aux.c unistr/u8-mbtouc-unsafe-aux.c - unistr/u8-mbtouc-unsafe.c unistr/u8-mbtouc.c unistr/u8-mbtoucr.c - unistr/u8-prev.c unistr/u8-uctomb-aux.c unistr/u8-uctomb.c uniwidth/width.c - vasnprintf.c vasprintf.c wcwidth.c xasprintf.c xconcat-filename.c xerror.c - xmalloc.c xstrdup.c xstriconv.c xstriconveh.c xvasprintf.c - libxml/DOCBparser.c libxml/HTMLparser.c libxml/HTMLtree.c libxml/SAX.c - libxml/SAX2.c libxml/c14n.c libxml/catalog.c libxml/chvalid.c - libxml/debugXML.c libxml/dict.c libxml/encoding.c libxml/entities.c - libxml/error.c libxml/globals.c libxml/hash.c libxml/legacy.c libxml/list.c - libxml/nanoftp.c libxml/nanohttp.c libxml/parser.c libxml/parserInternals.c - libxml/pattern.c libxml/relaxng.c libxml/schematron.c libxml/threads.c - libxml/tree.c libxml/trionan.c libxml/uri.c libxml/valid.c libxml/xinclude.c - libxml/xlink.c libxml/xmlIO.c libxml/xmlmemory.c libxml/xmlmodule.c - libxml/xmlreader.c libxml/xmlregexp.c libxml/xmlsave.c libxml/xmlschemas.c - libxml/xmlschemastypes.c libxml/xmlstring.c libxml/xmlunicode.c - libxml/xmlwriter.c libxml/xpath.c libxml/xpointer.c fatal-signal.c - copy-file.c read-file.c ftello.c utime.c gettime.c utimens.c) -PREFIX_LIST_ITEMS(GLIBC_SOURCE "gettext-tools/gnulib-lib/") - -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools/gnulib-lib/configmake.h "#define PKGDATADIR \"gettext\"") - -set(LIBGLIB_SOURCES - ghash.c glist.c gmessages.c gprimes.c gstrfuncs.c gstring.c) -PREFIX_LIST_ITEMS(LIBGLIB_SOURCES "libtextstyle/lib/glib/") - -set(LIBTEXTSTYLE_SOURCE - gl_array_list.h gl_array_list.c binary-io.h - binary-io.c c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c - c-strncasecmp.c concat-filename.c dirname-lgpl.c - basename-lgpl.c stripslash.c exitfail.c fatal-signal.h - fatal-signal.c fd-hook.c fd-ostream.c file-ostream.c - full-write.h full-write.c getprogname.h getprogname.c - gettext.h hash.h hash.c html-ostream.c html-styled-ostream.c - iconv-ostream.c gl_list.h gl_list.c math.c memory-ostream.c - minmax.h noop-styled-ostream.c ostream.c safe-read.c - safe-write.c sig-handler.c size_max.h styled-ostream.c - term-ostream.c term-style-control.c term-styled-ostream.c - unistd.c xalloc.h xmalloc.c xstrdup.c - xconcat-filename.c gl_xlist.h gl_xlist.c xsize.h xsize.c - xvasprintf.h xvasprintf.c xasprintf.c color.h color.c misc.h - misc.c version.c isatty.c fsync.c tparm.c tputs.c) -PREFIX_LIST_ITEMS(LIBTEXTSTYLE_SOURCE "libtextstyle/lib/") - -configure_file( - libtextstyle/lib/stdbool.mini.h - ${CMAKE_CURRENT_BINARY_DIR}/libtextstyle/lib/textstyle/stdbool.h - COPYONLY) - -set(LIBCROCO_SOURCES - cr-additional-sel.c cr-attr-sel.c cr-cascade.c cr-declaration.c - cr-doc-handler.c cr-enc-handler.c cr-fonts.c cr-input.c cr-num.c - cr-om-parser.c cr-parser.c cr-parsing-location.c cr-prop-list.c cr-pseudo.c - cr-rgb.c cr-sel-eng.c cr-selector.c cr-simple-sel.c cr-statement.c - cr-string.c cr-style.c cr-stylesheet.c cr-term.c cr-tknzr.c cr-token.c - cr-utils.c) -PREFIX_LIST_ITEMS(LIBCROCO_SOURCES "libtextstyle/lib/libcroco/") - -set(libgettextsrc_SOURCES - ${libgettextsrc_SOURCES} ${GLIBC_SOURCE} ${LIBGLIB_SOURCES} - ${LIBTEXTSTYLE_SOURCE} ${LIBCROCO_SOURCES}) - -macro(CONFIGURE_HEADER_FILES HEADER_TEMPLATES_PATH) - set(HEADER_TEMPLATES_ABS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_TEMPLATES_PATH}") - file(GLOB_RECURSE HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/*.in.h") - list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/stdint.in.h") - list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/wchar.in.h") - foreach(HEADER_TEMPLATE ${HEADER_TEMPLATES}) - file(READ ${HEADER_TEMPLATE} HEADER_CONTENT) - string(REPLACE "/* The definition of _GL_ARG_NONNULL is copied here. */" "#include \"arg-nonnull.h\"" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "/* The definition of _GL_WARN_ON_USE is copied here. */" "#include \"warn-on-use.h\"" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */" "#include \"c++defs.h\"" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_LSTAT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_MBSINIT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_SIGACTION@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_SIGPROCMASK@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_STPCPY@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_STPNCPY@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_STRCHRNUL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_ISWCNTRL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_WCTYPE_T@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_STRUCT_TIMEVAL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_WINSOCK2_H@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@DLL_VARIABLE@" "" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_NEWLOCALE@" "0" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@PRAGMA_COLUMNS@" "" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "#if @GNULIB_UTIME@" "#if 1\n#define utime gl_utime" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_UTIME@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_LONG_LONG_INT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - - string(REGEX REPLACE "^${HEADER_TEMPLATES_ABS_PATH}/" "" HEADER_PATH "${HEADER_TEMPLATE}") - string(REPLACE ".in" "" HEADER_PATH ${HEADER_PATH}) - string(REPLACE "_" "/" HEADER_PATH ${HEADER_PATH}) - # find_file will create a cache entry for the variable - # SYSTEM_HEADER, so reset it before each call - set(SYSTEM_HEADER "SYSTEM_HEADER-NOTFOUND") - find_file(SYSTEM_HEADER ${HEADER_PATH} PATHS "${LIBICONV_INCLUDE_DIRS}") - if(SYSTEM_HEADER) - # Gnulib uses #include_next to extend system header files, - # but MSVC doesn't support it, so a regular include directive - # with a relative path is used instead - string(REGEX REPLACE ".*/(.*/${HEADER_PATH})" "../\\1" - INCLUDE_PATH "${SYSTEM_HEADER}") - string(REGEX REPLACE "@INCLUDE_NEXT[^@]*@ @NEXT_[^@\n]+@" - "include <${INCLUDE_PATH}>" HEADER_CONTENT "${HEADER_CONTENT}") - endif() - - # Default any remaining template variables to 0 - string(REGEX REPLACE "@[^@\n]+@" "0" HEADER_CONTENT "${HEADER_CONTENT}") - - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${HEADER_TEMPLATES_PATH}/${HEADER_PATH}" "${HEADER_CONTENT}") - endforeach() -endmacro() - -CONFIGURE_HEADER_FILES("gettext-tools/gnulib-lib") -CONFIGURE_HEADER_FILES("libtextstyle/lib") - -add_library(libgettextsrc ${libgettextsrc_SOURCES}) -target_link_libraries(libgettextsrc ${LIBICONV_LIBRARIES}) -set_property(TARGET libgettextsrc APPEND PROPERTY COMPILE_DEFINITIONS - LIBTEXTSTYLE_DLL_VARIABLE=) - -set(msgmerge_SOURCES - msgmerge.c msgl-fsearch.c lang-table.c plural-count.c) -PREFIX_LIST_ITEMS(msgmerge_SOURCES "gettext-tools/src/") - -add_executable(msgmerge ${msgmerge_SOURCES}) -target_link_libraries(msgmerge libgettextsrc) -add_dependencies(msgmerge libgettextsrc libintl) - -set(msgfmt_SOURCES - msgfmt.c write-mo.c write-java.c write-csharp.c write-resources.c write-tcl.c - write-qt.c write-desktop.c write-xml.c - ../../gettext-runtime/intl/hash-string.c) -PREFIX_LIST_ITEMS(msgfmt_SOURCES "gettext-tools/src/") - -add_executable(msgfmt ${msgfmt_SOURCES}) -target_link_libraries(msgfmt libgettextsrc) -add_dependencies(msgfmt libgettextsrc libintl) - -set(xgettext_SOURCES - xgettext.c xg-pos.c xg-encoding.c xg-mixed-string.c xg-arglist-context.c - xg-arglist-callshape.c xg-arglist-parser.c xg-message.c x-c.c x-po.c x-sh.c - x-python.c x-lisp.c x-elisp.c x-librep.c x-scheme.c x-smalltalk.c x-java.c - x-csharp.c x-awk.c x-ycp.c x-tcl.c x-perl.c x-php.c x-rst.c x-lua.c - x-javascript.c x-vala.c x-desktop.c) -PREFIX_LIST_ITEMS(xgettext_SOURCES "gettext-tools/src/") - -add_executable(xgettext ${xgettext_SOURCES}) -target_link_libraries(xgettext libgettextsrc) -add_dependencies(xgettext libgettextsrc libintl) - -set_property(TARGET msgmerge msgfmt xgettext libgettextsrc APPEND PROPERTY - INCLUDE_DIRECTORIES - ${CMAKE_CURRENT_SOURCE_DIR}/gettext-runtime/intl - ${CMAKE_CURRENT_SOURCE_DIR}/gettext-tools/libgettextpo - ${CMAKE_CURRENT_SOURCE_DIR}/gettext-tools/gnulib-lib - ${CMAKE_CURRENT_SOURCE_DIR}/gettext-tools/gnulib-lib/libcroco - ${CMAKE_CURRENT_SOURCE_DIR}/build-aux/snippet - ${CMAKE_CURRENT_SOURCE_DIR}/libtextstyle/lib - ${CMAKE_CURRENT_SOURCE_DIR}/libtextstyle/lib/libcroco - ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl - ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools - ${CMAKE_CURRENT_BINARY_DIR}/gettext-tools/gnulib-lib - ${CMAKE_CURRENT_BINARY_DIR}/libtextstyle/lib - ${CMAKE_CURRENT_BINARY_DIR}/libtextstyle/lib/textstyle - ${LIBICONV_INCLUDE_DIRS}) - -include(GNUInstallDirs) - -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/gettext-runtime/intl/libgnuintl.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - RENAME libintl.h) - -install(TARGETS libintl msgmerge msgfmt xgettext - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/third-party/cmake/LibiconvCMakeLists.txt b/third-party/cmake/LibiconvCMakeLists.txt deleted file mode 100644 index 8ad3cc9352..0000000000 --- a/third-party/cmake/LibiconvCMakeLists.txt +++ /dev/null @@ -1,97 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(libiconv C) - -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/srclib - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/srclib - ${CMAKE_CURRENT_SOURCE_DIR}/build-aux/snippet) - -configure_file(config.h.in config.h) -file(READ "${CMAKE_CURRENT_BINARY_DIR}/config.h" CONFIG_CONTENT) -string(REPLACE "#undef EILSEQ" "" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef HAVE_MBRTOWC" "#define HAVE_MBRTOWC 1" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef HAVE_MBSINIT" "#define HAVE_MBSINIT 1" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef HAVE_WCRTOMB" "#define HAVE_WCRTOMB 1" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef HAVE_DECL___ARGV" "#define HAVE_DECL___ARGV 1" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef HAVE_WORKING_O_NOFOLLOW" "#define HAVE_WORKING_O_NOFOLLOW 0" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef WORDS_LITTLEENDIAN" "#define WORDS_LITTLEENDIAN 1" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef HAVE_DECL_STRERROR_R" "#define HAVE_DECL_STRERROR_R 0" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef mode_t" "#define mode_t int" CONFIG_CONTENT "${CONFIG_CONTENT}") -string(REPLACE "#undef ssize_t" "#include \n#define ssize_t SSIZE_T" CONFIG_CONTENT "${CONFIG_CONTENT}") -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/config.h" "${CONFIG_CONTENT}") - -set(BROKEN_WCHAR_H 0) -set(HAVE_VISIBILITY 0) -set(HAVE_WCHAR_T 1) -set(ICONV_CONST "const") -set(USE_MBSTATE_T 0) -configure_file(libcharset/include/localcharset.h.build.in localcharset.h) -configure_file(include/iconv.h.build.in iconv.h) - -add_definitions(-DLIBDIR -D_CRT_SECURE_NO_WARNINGS) - -add_library(libcharset libcharset/lib/localcharset.c) - -add_library(libiconv lib/iconv.c) -target_link_libraries(libiconv libcharset) - -add_executable(iconv src/iconv.c srclib/progname.c srclib/getprogname.c - srclib/safe-read.c srclib/uniwidth/width.c srclib/error.c srclib/xmalloc.c - srclib/basename-lgpl.c) -target_link_libraries(iconv libiconv) - -set(HEADER_TEMPLATES_PATH "srclib") -set(HEADER_TEMPLATES_ABS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_TEMPLATES_PATH}") -file(GLOB_RECURSE HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/*.in.h") -list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/stdint.in.h") -list(REMOVE_ITEM HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/wchar.in.h") -foreach(HEADER_TEMPLATE ${HEADER_TEMPLATES}) - file(READ ${HEADER_TEMPLATE} HEADER_CONTENT) - string(REPLACE "/* The definition of _GL_ARG_NONNULL is copied here. */" "#include \"arg-nonnull.h\"" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "/* The definition of _GL_WARN_ON_USE is copied here. */" "#include \"warn-on-use.h\"" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */" "#include \"c++defs.h\"" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_LSTAT@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_SIGACTION@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@GNULIB_SIGPROCMASK@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_ISWCNTRL@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@HAVE_WCTYPE_T@" "1" HEADER_CONTENT "${HEADER_CONTENT}") - string(REPLACE "@PRAGMA_COLUMNS@" "" HEADER_CONTENT "${HEADER_CONTENT}") - - string(REGEX REPLACE "^${HEADER_TEMPLATES_ABS_PATH}/" "" HEADER_PATH "${HEADER_TEMPLATE}") - string(REPLACE ".in" "" HEADER_PATH ${HEADER_PATH}) - string(REPLACE "_" "/" HEADER_PATH ${HEADER_PATH}) - # find_file will create a cache entry for the variable - # SYSTEM_HEADER, so reset it before each call - set(SYSTEM_HEADER "SYSTEM_HEADER-NOTFOUND") - find_file(SYSTEM_HEADER ${HEADER_PATH} PATHS "${LIBICONV_INCLUDE_DIRS}") - if(SYSTEM_HEADER) - # Gnulib uses #include_next to extend system header files, - # but MSVC doesn't support it, so a regular include directive - # with a relative path is used instead - string(REGEX REPLACE ".*/(.*/${HEADER_PATH})" "../\\1" - INCLUDE_PATH "${SYSTEM_HEADER}") - string(REGEX REPLACE "@INCLUDE_NEXT[^@]*@ @NEXT_[^@\n]+@" - "include <${INCLUDE_PATH}>" HEADER_CONTENT "${HEADER_CONTENT}") - endif() - - # Default any remaining template variables to 0 - string(REGEX REPLACE "@[^@\n]+@" "0" HEADER_CONTENT "${HEADER_CONTENT}") - - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${HEADER_TEMPLATES_PATH}/${HEADER_PATH}" "${HEADER_CONTENT}") -endforeach() - -include(GNUInstallDirs) - -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/iconv.h - ${CMAKE_CURRENT_BINARY_DIR}/localcharset.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - -install(TARGETS libcharset libiconv iconv - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/third-party/cmake/LibuvCMakeLists.txt b/third-party/cmake/LibuvCMakeLists.txt deleted file mode 100644 index 0432319834..0000000000 --- a/third-party/cmake/LibuvCMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(libuv LANGUAGES C) - -file(GLOB UV_SOURCES_COMMON src/*.c) -file(GLOB UV_SOURCES_WIN src/win/*.c) - -add_library(uv ${UV_SOURCES_COMMON} ${UV_SOURCES_WIN}) -target_compile_definitions(uv PRIVATE WIN32_LEAN_AND_MEAN "_WIN32_WINNT=0x0600") -target_link_libraries(uv iphlpapi psapi shell32 userenv ws2_32) -target_include_directories(uv PUBLIC ./include PRIVATE ./src) -if(BUILD_SHARED_LIBS) - set_target_properties(uv PROPERTIES DEFINE_SYMBOL BUILDING_UV_SHARED) -endif() - -install(FILES - include/uv.h - DESTINATION include) - -install(FILES - include/uv/errno.h - include/uv/threadpool.h - include/uv/tree.h - include/uv/version.h - include/uv/win.h - DESTINATION include/uv) - -include(GNUInstallDirs) -install(TARGETS uv - PUBLIC_HEADER - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/third-party/cmake/Libvterm-tbl2inc_c.cmake b/third-party/cmake/Libvterm-tbl2inc_c.cmake deleted file mode 100644 index 7a82f4248b..0000000000 --- a/third-party/cmake/Libvterm-tbl2inc_c.cmake +++ /dev/null @@ -1,163 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) - -set(HEX_ALPHABET "0123456789abcdef") - -function(ConvertToHex dec hex) - while(dec GREATER 0) - math(EXPR _val "${dec} % 16") - math(EXPR dec "${dec} / 16") - string(SUBSTRING ${HEX_ALPHABET} ${_val} 1 _val) - set(_res "${_val}${_res}") - endwhile() - # Pad the result with the number of zeros - # specified by the optional third argument - if(${ARGC} EQUAL 3) - set(padding ${ARGV2}) - string(LENGTH ${_res} _resLen) - if(_resLen LESS ${padding}) - math(EXPR _neededPadding "${padding} - ${_resLen}") - foreach(i RANGE 1 ${_neededPadding}) - set(_res "0${_res}") - endforeach() - endif() - endif() - set(${hex} "0x${_res}" PARENT_SCOPE) -endfunction() - -function(ConvertFromHex hex dec) - string(TOLOWER ${hex} hex) - string(LENGTH "${hex}" _strlen) - set(_res 0) - while(_strlen GREATER 0) - math(EXPR _res "${_res} * 16") - string(SUBSTRING "${hex}" 0 1 NIBBLE) - string(SUBSTRING "${hex}" 1 -1 hex) - string(FIND ${HEX_ALPHABET} ${NIBBLE} value) - if(value EQUAL -1) - message(FATAL_ERROR "Invalid hex character '${NIBBLE}'") - endif() - math(EXPR _res "${_res} + ${value}") - string(LENGTH "${hex}" _strlen) - endwhile() - set(${dec} ${_res} PARENT_SCOPE) -endfunction() - -# Based on http://www.json.org/JSON_checker/utf8_decode.c -function(DecodeUtf8 hexBytes codePoint) - string(SUBSTRING ${hexBytes} 0 2 hexByte1) - ConvertFromHex(${hexByte1} byte1) - # Zero continuations (0 to 127) - math(EXPR out "${byte1} & 128") - if(out EQUAL 0) - set(${codePoint} ${byte1} PARENT_SCOPE) - return() - endif() - # One continuation (128 to 2047) - math(EXPR out "${byte1} & 224") - if(out EQUAL 192) - string(SUBSTRING ${hexBytes} 2 2 hexByte2) - ConvertFromHex(${hexByte2} byte2) - math(EXPR result "((${byte1} & 31) << 6) | ${byte2}") - if(result GREATER 127) - set(${codePoint} ${result} PARENT_SCOPE) - return() - endif() - else() - # Two continuations (2048 to 55295 and 57344 to 65535) - math(EXPR result "${byte1} & 240") - if(result EQUAL 224) - string(SUBSTRING ${hexBytes} 2 2 hexByte2) - string(SUBSTRING ${hexBytes} 4 2 hexByte3) - ConvertFromHex(${hexByte2} byte2) - ConvertFromHex(${hexByte3} byte3) - math(EXPR result "${byte2} | ${byte3}") - if(result GREATER -1) - math(EXPR result "((${byte1} & 15) << 12) | (${byte2} << 6) | ${byte3}") - if((result GREATER 2047) AND (result LESS 55296 OR result GREATER 57343)) - set(${codePoint} ${result} PARENT_SCOPE) - return() - endif() - endif() - else() - # Three continuations (65536 to 1114111) - math(EXPR result "${byte1} & 248") - if(result EQUAL 224) - string(SUBSTRING ${hexBytes} 2 2 hexByte2) - string(SUBSTRING ${hexBytes} 4 2 hexByte3) - string(SUBSTRING ${hexBytes} 6 2 hexByte4) - ConvertFromHex(${hexByte2} byte2) - ConvertFromHex(${hexByte3} byte3) - ConvertFromHex(${hexByte4} byte4) - math(EXPR result "${byte2} | ${byte3} | ${byte4}") - if(result GREATER -1) - math(EXPR result "((c & 7) << 18) | (c1 << 12) | (c2 << 6) | c3") - if((result GREATER 65535) AND (result LESS 1114112)) - set(${codePoint} ${result} PARENT_SCOPE) - return() - endif() - endif() - endif() - endif() - endif() - message(FATAL_ERROR "Invalid UTF-8 encoding") -endfunction() - -set(inputFile ${CMAKE_ARGV3}) -set(outputFile ${CMAKE_ARGV4}) -# Get the file contents in text and hex-encoded format because -# CMake doesn't provide functions for converting between the two -file(READ "${inputFile}" contents) -file(READ "${inputFile}" hexContents HEX) - -# Convert the text contents into a list of lines by escaping -# the list separator ';' and then replacing new line characters -# with the list separator -string(REGEX REPLACE ";" "\\\\;" contents ${contents}) -string(REGEX REPLACE "\n" ";" contents ${contents}) - -get_filename_component(encname ${inputFile} NAME_WE) -set(output - "static const struct StaticTableEncoding encoding_${encname} = {\n" - " { .decode = &decode_table },\n" - " {") -set(hexIndex 0) -foreach(line ${contents}) - string(LENGTH ${line} lineLength) - # Convert "A" to 0x41 - string(FIND ${line} "\"" beginQuote) - if(NOT ${beginQuote} EQUAL -1) - string(FIND ${line} "\"" endQuote REVERSE) - if(${beginQuote} EQUAL ${endQuote}) - message(FATAL_ERROR "Line contains only one quote") - endif() - math(EXPR beginHexQuote "${hexIndex} + (${beginQuote} + 1)*2") - math(EXPR endHexQuote "${hexIndex} + (${endQuote} + 1)*2") - math(EXPR quoteLen "${endHexQuote} - ${beginHexQuote} - 1") - string(SUBSTRING ${hexContents} ${beginHexQuote} ${quoteLen} hexQuote) - DecodeUtf8(${hexQuote} codePoint) - ConvertToHex(${codePoint} hexCodePoint 4) - STRING(REGEX REPLACE "\"(.+)\"" ${hexCodePoint} line ${line}) - endif() - # Strip comment - string(REGEX REPLACE "[ \t\n]*#.*" "" line ${line}) - # Convert 3/1 to [0x31] - string(REGEX REPLACE "^([0-9]+)/([0-9]+).*" "\\1;\\2" numbers ${line}) - list(GET numbers 0 upperBits) - list(GET numbers 1 lowerBits) - math(EXPR res "${upperBits}*16 + ${lowerBits}") - ConvertToHex(${res} hex 2) - string(REGEX REPLACE "^([0-9]+)/([0-9]+)" "[${hex}]" line ${line}) - # Convert U+0041 to 0x0041 - string(REPLACE "U+" "0x" line ${line}) - # Indent and append a comma - set(line " ${line},") - set(output "${output}\n${line}") - # Increment the index by the number of characters in the line, - # plus one for the new line character then multiple by two for the hex digit index - math(EXPR hexIndex "${hexIndex} + 2*(${lineLength} + 1)") -endforeach() -set(output "${output}\n" - " }\n" - "}\;\n") - -file(WRITE ${outputFile} ${output}) diff --git a/third-party/cmake/LibvtermCMakeLists.txt b/third-party/cmake/LibvtermCMakeLists.txt deleted file mode 100644 index 16c4d542c4..0000000000 --- a/third-party/cmake/LibvtermCMakeLists.txt +++ /dev/null @@ -1,92 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(libvterm LANGUAGES C) - -include(GNUInstallDirs) -find_package(Perl) - -if(MSVC) - add_compile_options(/W3) - add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) -else() - add_compile_options(-Wall -std=c99) -endif() - -# Generate includes from tables -file(GLOB TBL_FILES ${CMAKE_SOURCE_DIR}/src/encoding/*.tbl) -set(TBL_FILES_HEADERS) -foreach(file ${TBL_FILES}) - get_filename_component(basename ${file} NAME_WE) - set(tname encoding/${basename}.inc) - add_custom_command(OUTPUT - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding/ - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/tbl2inc_c.cmake ${file} ${CMAKE_BINARY_DIR}/${tname} - COMMENT "Generating ${tname}" - OUTPUT ${CMAKE_BINARY_DIR}/${tname} - ) - list(APPEND TBL_FILES_HEADERS ${tname}) - # Only used for verifying that the output of tbl2inc_c.cmake is correct - set(tname encoding-test/${basename}.inc) - add_custom_command(OUTPUT - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding-test/ - COMMAND ${PERL_EXECUTABLE} -CSD ${CMAKE_SOURCE_DIR}/tbl2inc_c.pl ${file} > ${CMAKE_BINARY_DIR}/${tname} - COMMENT "Generating ${tname}" - OUTPUT ${CMAKE_BINARY_DIR}/${tname} - ) -endforeach() - -include_directories(${CMAKE_SOURCE_DIR}/include) -include_directories(${CMAKE_BINARY_DIR}) - -file(GLOB VTERM_SOURCES ${CMAKE_SOURCE_DIR}/src/*.c) -add_library(vterm ${VTERM_SOURCES} ${TBL_FILES_HEADERS}) -install(TARGETS vterm ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - -add_library(vterm-shared SHARED ${VTERM_SOURCES} ${TBL_FILES_HEADERS}) -set_target_properties(vterm-shared PROPERTIES - OUTPUT_NAME vterm - SOVERSION 0) -install(TARGETS vterm-shared - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - -install(FILES include/vterm.h include/vterm_keycodes.h - DESTINATION include) - -if(NOT WIN32) - file(GLOB BIN_SOURCES ${CMAKE_SOURCE_DIR}/bin/*.c) - foreach(EXE_C ${BIN_SOURCES}) - get_filename_component(target_name ${EXE_C} NAME_WE) - add_executable(${target_name} ${EXE_C}) - target_link_libraries(${target_name} vterm) - install(TARGETS ${target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - endforeach() -endif() - -# Tests -add_executable(harness EXCLUDE_FROM_ALL t/harness.c) -target_link_libraries(harness vterm) -set_target_properties(harness PROPERTIES - # run-test.pl expects to find the harness in t/.libs/ - RUNTIME_OUTPUT_DIRECTORY t/.libs) - -if(Perl_FOUND) - file(GLOB TESTFILES ${CMAKE_SOURCE_DIR}/t/*.test) - add_custom_target(check) - foreach(testfile ${TESTFILES}) - get_filename_component(target_name ${testfile} NAME_WE) - add_custom_target(${target_name} - COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/t/run-test.pl ${testfile} - COMMENT "**${target_name} **" - DEPENDS harness) - add_dependencies(check ${target_name}) - endforeach() - - foreach(header_path ${TBL_FILES_HEADERS}) - get_filename_component(header_name ${header_path} NAME) - set(perl_header_path ${CMAKE_BINARY_DIR}/encoding-test/${header_name}) - add_custom_target(test-${header_name} - COMMAND ${CMAKE_COMMAND} -E compare_files - ${header_path} ${perl_header_path} - DEPENDS ${header_path} ${perl_header_path}) - endforeach() -endif() diff --git a/third-party/cmake/RemoveFiles.cmake b/third-party/cmake/RemoveFiles.cmake deleted file mode 100644 index 88e2bc70a6..0000000000 --- a/third-party/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/third-party/cmake/TargetArch.cmake b/third-party/cmake/TargetArch.cmake deleted file mode 100644 index 71ea44ec59..0000000000 --- a/third-party/cmake/TargetArch.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# Sets TARGET_ARCH to a normalized name (X86 or X86_64). -# See https://github.com/axr/solar-cmake/blob/master/TargetArch.cmake -include(CheckSymbolExists) - -# X86 -check_symbol_exists("_M_IX86" "" T_M_IX86) -check_symbol_exists("__i386__" "" T_I386) -if(T_M_IX86 OR T_I386) -set(TARGET_ARCH "X86") - return() -endif() - -# X86_64 -check_symbol_exists("_M_AMD64" "" T_M_AMD64) -check_symbol_exists("__x86_64__" "" T_X86_64) -check_symbol_exists("__amd64__" "" T_AMD64) - -if(T_M_AMD64 OR T_X86_64 OR T_AMD64) -set(TARGET_ARCH "X86_64") - return() -endif() - -message(FATAL_ERROR "Unknown target architecture") diff --git a/third-party/cmake/TreesitterCMakeLists.txt b/third-party/cmake/TreesitterCMakeLists.txt deleted file mode 100644 index 9e3ba3eeda..0000000000 --- a/third-party/cmake/TreesitterCMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(tree-sitter LANGUAGES C) - -file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/lib/src/*.c) -foreach(sfile ${SRC_FILES}) - get_filename_component(f ${sfile} NAME) - if(${f} MATCHES "lib.c$") - list(REMOVE_ITEM SRC_FILES ${sfile}) - endif() -endforeach() -include_directories(${PROJECT_SOURCE_DIR}/lib/include) -add_library(tree-sitter ${SRC_FILES}) - -install(FILES - lib/include/tree_sitter/api.h - lib/include/tree_sitter/parser.h - DESTINATION include/tree_sitter) - -include(GNUInstallDirs) -install(TARGETS tree-sitter - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/third-party/cmake/TreesitterParserCMakeLists.txt b/third-party/cmake/TreesitterParserCMakeLists.txt deleted file mode 100644 index 2808a9ee14..0000000000 --- a/third-party/cmake/TreesitterParserCMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -# some parsers have c++ scanner, problem? -project(parser C) # CXX - -add_library(parser - MODULE - src/parser.c -) -set_target_properties( - parser - PROPERTIES - POSITION_INDEPENDENT_CODE ON - OUTPUT_NAME ${PARSERLANG} - PREFIX "" -) - -include_directories(src) - -install(TARGETS parser LIBRARY DESTINATION lib/nvim/parser) diff --git a/third-party/cmake/UnibiliumCMakeLists.txt b/third-party/cmake/UnibiliumCMakeLists.txt deleted file mode 100644 index 08a8599352..0000000000 --- a/third-party/cmake/UnibiliumCMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(unibilium LANGUAGES C) - -file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/*.c) -add_library(unibilium ${SRC_FILES}) -set_target_properties(unibilium PROPERTIES PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/unibilium.h - VERSION "${VERSION_MAJOR}.${VERSION_MINOR}") - -if(NOT WIN32) - execute_process(COMMAND "shell ncursesw6-config --terminfo-dirs 2>/dev/null || \ - ncurses6-config --terminfo-dirs 2>/dev/null || \ - ncursesw5-config --terminfo-dirs 2>/dev/null || \ - ncurses5-config --terminfo-dirs 2>/dev/null || \ - echo '/etc/terminfo:/lib/terminfo:/usr/share/terminfo:/usr/lib/terminfo:/usr/local/share/terminfo:/usr/local/lib/terminfo'" - OUTPUT_VARIABLE TERMINFO_DIRS) -else() - set(TERMINFO_DIRS "\"\"") -endif() -target_compile_definitions(unibilium PUBLIC TERMINFO_DIRS=${TERMINFO_DIRS}) - -include(GNUInstallDirs) -install(TARGETS unibilium - PUBLIC_HEADER - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/third-party/cmake/libtermkeyCMakeLists.txt b/third-party/cmake/libtermkeyCMakeLists.txt deleted file mode 100644 index af54c1daec..0000000000 --- a/third-party/cmake/libtermkeyCMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12) -project(libtermkey) - -add_definitions(-D _CRT_SECURE_NO_WARNINGS) -add_definitions(-DHAVE_UNIBILIUM) -if(NOT MSVC) - add_compile_options(-std=c99) -endif() - -include_directories(${PROJECT_BINARY_DIR}/t) -include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) - -add_library(termkey termkey.c driver-csi.c driver-ti.c) -set_target_properties(termkey PROPERTIES - PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/termkey.h) -target_link_libraries(termkey ${UNIBILIUM_LIBRARIES}) - -include(GNUInstallDirs) -install(TARGETS termkey - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - -enable_testing() -file(GLOB TESTSOURCES "t/[0-9]*.c") -foreach(f ${TESTSOURCES}) - get_filename_component(t ${f} NAME_WE) - if(${t} STREQUAL 05read) - continue() - endif() - - add_executable("test_${t}" ${f} t/taplib.c) - target_link_libraries("test_${t}" termkey) - add_test("${t}" "test_${t}") -endforeach() diff --git a/third-party/patches/libvterm-Remove-VLAs-for-MSVC.patch b/third-party/patches/libvterm-Remove-VLAs-for-MSVC.patch deleted file mode 100644 index e999c0fa9b..0000000000 --- a/third-party/patches/libvterm-Remove-VLAs-for-MSVC.patch +++ /dev/null @@ -1,50 +0,0 @@ -From eb386b1d82f7d07363c9133b7aa06902ccd555fe Mon Sep 17 00:00:00 2001 -Date: Tue, 27 Feb 2018 17:54:20 -0600 -Subject: [PATCH] Remove VLAs for MSVC - -VLAs are replaced with calls to _alloca() because MSVC does not support them. ---- - src/state.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/state.c b/src/state.c -index 84299df..f9aabb3 100644 ---- a/src/state.c -+++ b/src/state.c -@@ -1,5 +1,6 @@ - #include "vterm_internal.h" - -+#include - #include - #include - -@@ -236,7 +237,7 @@ static int on_text(const char bytes[], size_t len, void *user) - VTermPos oldpos = state->pos; - - // We'll have at most len codepoints -- uint32_t codepoints[len]; -+ uint32_t* codepoints = _alloca(len * sizeof(uint32_t)); - int npoints = 0; - size_t eaten = 0; - -@@ -313,7 +314,7 @@ static int on_text(const char bytes[], size_t len, void *user) - - int width = 0; - -- uint32_t chars[glyph_ends - glyph_starts + 1]; -+ uint32_t* chars = _alloca((glyph_ends - glyph_starts + 1) * sizeof(uint32_t)); - - for( ; i < glyph_ends; i++) { - chars[i - glyph_starts] = codepoints[i]; -@@ -512,7 +513,7 @@ static int settermprop_int(VTermState *state, VTermProp prop, int v) - - static int settermprop_string(VTermState *state, VTermProp prop, const char *str, size_t len) - { -- char strvalue[len+1]; -+ char* strvalue = _alloca(len+1); - strncpy(strvalue, str, len); - strvalue[len] = 0; - --- -2.16.1.windows.4 - -- cgit