mirror of
https://github.com/neovim/neovim.git
synced 2025-12-09 16:12:48 +00:00
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/)
This commit is contained in:
293
cmake.deps/CMakeLists.txt
Normal file
293
cmake.deps/CMakeLists.txt
Normal file
@@ -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}
|
||||
)
|
||||
37
cmake.deps/cmake/BuildGettext.cmake
Normal file
37
cmake.deps/cmake/BuildGettext.cmake
Normal file
@@ -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}$<SEMICOLON>${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()
|
||||
32
cmake.deps/cmake/BuildLibiconv.cmake
Normal file
32
cmake.deps/cmake/BuildLibiconv.cmake
Normal file
@@ -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)
|
||||
57
cmake.deps/cmake/BuildLibtermkey.cmake
Normal file
57
cmake.deps/cmake/BuildLibtermkey.cmake
Normal file
@@ -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)
|
||||
77
cmake.deps/cmake/BuildLibuv.cmake
Normal file
77
cmake.deps/cmake/BuildLibuv.cmake
Normal file
@@ -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)
|
||||
69
cmake.deps/cmake/BuildLibvterm.cmake
Normal file
69
cmake.deps/cmake/BuildLibvterm.cmake
Normal file
@@ -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)
|
||||
96
cmake.deps/cmake/BuildLua.cmake
Normal file
96
cmake.deps/cmake/BuildLua.cmake
Normal file
@@ -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)
|
||||
163
cmake.deps/cmake/BuildLuajit.cmake
Normal file
163
cmake.deps/cmake/BuildLuajit.cmake
Normal file
@@ -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)
|
||||
227
cmake.deps/cmake/BuildLuarocks.cmake
Normal file
227
cmake.deps/cmake/BuildLuarocks.cmake
Normal file
@@ -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()
|
||||
133
cmake.deps/cmake/BuildLuv.cmake
Normal file
133
cmake.deps/cmake/BuildLuv.cmake
Normal file
@@ -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()
|
||||
66
cmake.deps/cmake/BuildMsgpack.cmake
Normal file
66
cmake.deps/cmake/BuildMsgpack.cmake
Normal file
@@ -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)
|
||||
59
cmake.deps/cmake/BuildTreesitter.cmake
Normal file
59
cmake.deps/cmake/BuildTreesitter.cmake
Normal file
@@ -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)
|
||||
29
cmake.deps/cmake/BuildTreesitterParsers.cmake
Normal file
29
cmake.deps/cmake/BuildTreesitterParsers.cmake
Normal file
@@ -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 |)
|
||||
48
cmake.deps/cmake/BuildUnibilium.cmake
Normal file
48
cmake.deps/cmake/BuildUnibilium.cmake
Normal file
@@ -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)
|
||||
20
cmake.deps/cmake/CopyFilesGlob.cmake
Normal file
20
cmake.deps/cmake/CopyFilesGlob.cmake
Normal file
@@ -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()
|
||||
195
cmake.deps/cmake/DownloadAndExtractFile.cmake
Normal file
195
cmake.deps/cmake/DownloadAndExtractFile.cmake
Normal file
@@ -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")
|
||||
43
cmake.deps/cmake/GetBinaryDeps.cmake
Normal file
43
cmake.deps/cmake/GetBinaryDeps.cmake
Normal file
@@ -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()
|
||||
329
cmake.deps/cmake/GettextCMakeLists.txt
Normal file
329
cmake.deps/cmake/GettextCMakeLists.txt
Normal file
@@ -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 <BaseTsd.h>\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})
|
||||
97
cmake.deps/cmake/LibiconvCMakeLists.txt
Normal file
97
cmake.deps/cmake/LibiconvCMakeLists.txt
Normal file
@@ -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 <BaseTsd.h>\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})
|
||||
33
cmake.deps/cmake/LibuvCMakeLists.txt
Normal file
33
cmake.deps/cmake/LibuvCMakeLists.txt
Normal file
@@ -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})
|
||||
163
cmake.deps/cmake/Libvterm-tbl2inc_c.cmake
Normal file
163
cmake.deps/cmake/Libvterm-tbl2inc_c.cmake
Normal file
@@ -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})
|
||||
92
cmake.deps/cmake/LibvtermCMakeLists.txt
Normal file
92
cmake.deps/cmake/LibvtermCMakeLists.txt
Normal file
@@ -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()
|
||||
5
cmake.deps/cmake/RemoveFiles.cmake
Normal file
5
cmake.deps/cmake/RemoveFiles.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
file(GLOB_RECURSE FILES_TO_REMOVE ${REMOVE_FILE_GLOB})
|
||||
|
||||
if(FILES_TO_REMOVE)
|
||||
file(REMOVE ${FILES_TO_REMOVE})
|
||||
endif()
|
||||
23
cmake.deps/cmake/TargetArch.cmake
Normal file
23
cmake.deps/cmake/TargetArch.cmake
Normal file
@@ -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")
|
||||
21
cmake.deps/cmake/TreesitterCMakeLists.txt
Normal file
21
cmake.deps/cmake/TreesitterCMakeLists.txt
Normal file
@@ -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})
|
||||
19
cmake.deps/cmake/TreesitterParserCMakeLists.txt
Normal file
19
cmake.deps/cmake/TreesitterParserCMakeLists.txt
Normal file
@@ -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)
|
||||
25
cmake.deps/cmake/UnibiliumCMakeLists.txt
Normal file
25
cmake.deps/cmake/UnibiliumCMakeLists.txt
Normal file
@@ -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})
|
||||
34
cmake.deps/cmake/libtermkeyCMakeLists.txt
Normal file
34
cmake.deps/cmake/libtermkeyCMakeLists.txt
Normal file
@@ -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()
|
||||
50
cmake.deps/patches/libvterm-Remove-VLAs-for-MSVC.patch
Normal file
50
cmake.deps/patches/libvterm-Remove-VLAs-for-MSVC.patch
Normal file
@@ -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 <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user