build: introduce variable DEPS_IGNORE_SHA for skipping dependency hash check

This will reduce friction as developers no longer need to provide a hash
when testing out different commits.

To skip the hash check, set `DEPS_IGNORE_SHA` to `TRUE` in
`cmake.deps/CMakeLists.txt`.
This commit is contained in:
dundargoc 2024-03-18 13:29:24 +01:00 committed by dundargoc
parent d744876723
commit 187ae67735
14 changed files with 68 additions and 43 deletions

View File

@ -17,6 +17,36 @@ include(Deps)
include(Find) include(Find)
include(Util) include(Util)
#-------------------------------------------------------------------------------
# User settings
#-------------------------------------------------------------------------------
set(DEPS_IGNORE_SHA FALSE)
# Options
option(USE_BUNDLED "Use bundled dependencies." ON)
option(USE_BUNDLED_LIBUV "Use the bundled libuv." ${USE_BUNDLED})
option(USE_BUNDLED_LIBVTERM "Use the bundled libvterm." ${USE_BUNDLED})
option(USE_BUNDLED_LPEG "Use the bundled lpeg." ${USE_BUNDLED})
# PUC Lua is only used for tests, unless explicitly requested.
option(USE_BUNDLED_LUA "Use the bundled version of lua." OFF)
option(USE_BUNDLED_LUAJIT "Use the bundled version of luajit." ${USE_BUNDLED})
option(USE_BUNDLED_LUV "Use the bundled version of luv." ${USE_BUNDLED})
option(USE_BUNDLED_MSGPACK "Use the bundled msgpack." ${USE_BUNDLED})
option(USE_BUNDLED_TS "Use the bundled treesitter runtime." ${USE_BUNDLED})
option(USE_BUNDLED_TS_PARSERS "Use the bundled treesitter parsers." ${USE_BUNDLED})
option(USE_BUNDLED_UNIBILIUM "Use the bundled unibilium." ${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)
set_default_buildtype(Release) set_default_buildtype(Release)
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT isMultiConfig) if(NOT isMultiConfig)
@ -32,30 +62,6 @@ endif()
set(DEPS_INCLUDE_FLAGS "-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1") set(DEPS_INCLUDE_FLAGS "-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1")
option(USE_BUNDLED "Use bundled dependencies." ON)
option(USE_BUNDLED_LIBUV "Use the bundled libuv." ${USE_BUNDLED})
option(USE_BUNDLED_LIBVTERM "Use the bundled libvterm." ${USE_BUNDLED})
option(USE_BUNDLED_LPEG "Use the bundled lpeg." ${USE_BUNDLED})
# PUC Lua is only used for tests, unless explicitly requested.
option(USE_BUNDLED_LUA "Use the bundled version of lua." OFF)
option(USE_BUNDLED_LUAJIT "Use the bundled version of luajit." ${USE_BUNDLED})
option(USE_BUNDLED_LUV "Use the bundled version of luv." ${USE_BUNDLED})
option(USE_BUNDLED_MSGPACK "Use the bundled msgpack." ${USE_BUNDLED})
option(USE_BUNDLED_TS "Use the bundled treesitter runtime." ${USE_BUNDLED})
option(USE_BUNDLED_TS_PARSERS "Use the bundled treesitter parsers." ${USE_BUNDLED})
option(USE_BUNDLED_UNIBILIUM "Use the bundled unibilium." ${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 the macOS deployment target is not set manually (via $MACOSX_DEPLOYMENT_TARGET), # If the macOS deployment target is not set manually (via $MACOSX_DEPLOYMENT_TARGET),
# fall back to local system version. Needs to be done here and in top-level CMakeLists.txt. # fall back to local system version. Needs to be done here and in top-level CMakeLists.txt.
if(APPLE) if(APPLE)

View File

@ -1,7 +1,8 @@
if(MSVC) if(MSVC)
get_sha(gettext ${DEPS_IGNORE_SHA})
ExternalProject_Add(gettext ExternalProject_Add(gettext
URL ${GETTEXT_URL} URL ${GETTEXT_URL}
URL_HASH SHA256=${GETTEXT_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/gettext DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/gettext
PATCH_COMMAND ${CMAKE_COMMAND} -E copy PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/GettextCMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/cmake/GettextCMakeLists.txt

View File

@ -1,7 +1,8 @@
if(MSVC) if(MSVC)
get_sha(libiconv ${DEPS_IGNORE_SHA})
ExternalProject_Add(libiconv ExternalProject_Add(libiconv
URL ${LIBICONV_URL} URL ${LIBICONV_URL}
URL_HASH SHA256=${LIBICONV_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libiconv DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libiconv
PATCH_COMMAND ${CMAKE_COMMAND} -E copy PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibiconvCMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibiconvCMakeLists.txt

View File

@ -1,6 +1,7 @@
get_sha(libuv ${DEPS_IGNORE_SHA})
ExternalProject_Add(libuv ExternalProject_Add(libuv
URL ${LIBUV_URL} URL ${LIBUV_URL}
URL_HASH SHA256=${LIBUV_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv
CMAKE_ARGS ${DEPS_CMAKE_ARGS} CMAKE_ARGS ${DEPS_CMAKE_ARGS}
-D CMAKE_INSTALL_LIBDIR=lib -D CMAKE_INSTALL_LIBDIR=lib

View File

@ -1,6 +1,7 @@
get_sha(libvterm ${DEPS_IGNORE_SHA})
ExternalProject_Add(libvterm ExternalProject_Add(libvterm
URL ${LIBVTERM_URL} URL ${LIBVTERM_URL}
URL_HASH SHA256=${LIBVTERM_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libvterm DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libvterm
PATCH_COMMAND ${CMAKE_COMMAND} -E copy PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibvtermCMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibvtermCMakeLists.txt

View File

@ -1,6 +1,7 @@
get_sha(lpeg ${DEPS_IGNORE_SHA})
ExternalProject_Add(lpeg ExternalProject_Add(lpeg
URL ${LPEG_URL} URL ${LPEG_URL}
URL_HASH SHA256=${LPEG_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lpeg DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lpeg
PATCH_COMMAND ${CMAKE_COMMAND} -E copy PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LpegCMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/cmake/LpegCMakeLists.txt

View File

@ -40,9 +40,10 @@ set(LUA_CONFIGURE_COMMAND
-i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h) -i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h)
set(LUA_INSTALL_TOP_ARG "INSTALL_TOP=${DEPS_INSTALL_DIR}") set(LUA_INSTALL_TOP_ARG "INSTALL_TOP=${DEPS_INSTALL_DIR}")
get_sha(lua ${DEPS_IGNORE_SHA})
ExternalProject_Add(lua ExternalProject_Add(lua
URL ${LUA_URL} URL ${LUA_URL}
URL_HASH SHA256=${LUA_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua
CONFIGURE_COMMAND "${LUA_CONFIGURE_COMMAND}" CONFIGURE_COMMAND "${LUA_CONFIGURE_COMMAND}"
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1

View File

@ -11,9 +11,10 @@ function(BuildLuajit)
set(_luajit_TARGET "luajit") set(_luajit_TARGET "luajit")
endif() endif()
get_sha(luajit ${DEPS_IGNORE_SHA})
ExternalProject_Add(${_luajit_TARGET} ExternalProject_Add(${_luajit_TARGET}
URL ${LUAJIT_URL} URL ${LUAJIT_URL}
URL_HASH SHA256=${LUAJIT_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/${_luajit_TARGET} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/${_luajit_TARGET}
CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}" CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}"
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1

View File

@ -1,6 +1,6 @@
set(LUV_CMAKE_ARGS set(LUV_CMAKE_ARGS
-D LUA_BUILD_TYPE=System -D LUA_BUILD_TYPE=System
-D LUA_COMPAT53_DIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3 -D LUA_COMPAT53_DIR=${DEPS_BUILD_DIR}/src/lua_compat53
-D WITH_SHARED_LIBUV=ON -D WITH_SHARED_LIBUV=ON
-D BUILD_STATIC_LIBS=ON -D BUILD_STATIC_LIBS=ON
-D BUILD_MODULE=OFF) -D BUILD_MODULE=OFF)
@ -17,19 +17,21 @@ if(CMAKE_GENERATOR MATCHES "Unix Makefiles" AND
list(APPEND LUV_CMAKE_ARGS -D CMAKE_MAKE_PROGRAM=gmake) list(APPEND LUV_CMAKE_ARGS -D CMAKE_MAKE_PROGRAM=gmake)
endif() endif()
ExternalProject_Add(lua-compat-5.3 get_sha(lua_compat53 ${DEPS_IGNORE_SHA})
ExternalProject_Add(lua_compat53
URL ${LUA_COMPAT53_URL} URL ${LUA_COMPAT53_URL}
URL_HASH SHA256=${LUA_COMPAT53_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua-compat-5.3 DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua_compat53
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
BUILD_COMMAND "" BUILD_COMMAND ""
INSTALL_COMMAND "" INSTALL_COMMAND ""
${EXTERNALPROJECT_OPTIONS}) ${EXTERNALPROJECT_OPTIONS})
get_sha(luv ${DEPS_IGNORE_SHA})
ExternalProject_Add(luv ExternalProject_Add(luv
DEPENDS lua-compat-5.3 DEPENDS lua_compat53
URL ${LUV_URL} URL ${LUV_URL}
URL_HASH SHA256=${LUV_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv
SOURCE_DIR ${DEPS_BUILD_DIR}/src/luv SOURCE_DIR ${DEPS_BUILD_DIR}/src/luv
CMAKE_ARGS ${DEPS_CMAKE_ARGS} ${LUV_CMAKE_ARGS} CMAKE_ARGS ${DEPS_CMAKE_ARGS} ${LUV_CMAKE_ARGS}

View File

@ -1,6 +1,7 @@
get_sha(msgpack ${DEPS_IGNORE_SHA})
ExternalProject_Add(msgpack ExternalProject_Add(msgpack
URL ${MSGPACK_URL} URL ${MSGPACK_URL}
URL_HASH SHA256=${MSGPACK_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack
CMAKE_ARGS ${DEPS_CMAKE_ARGS} CMAKE_ARGS ${DEPS_CMAKE_ARGS}
-D MSGPACK_BUILD_TESTS=OFF -D MSGPACK_BUILD_TESTS=OFF

View File

@ -1,6 +1,7 @@
get_sha(treesitter ${DEPS_IGNORE_SHA})
ExternalProject_Add(treesitter ExternalProject_Add(treesitter
URL ${TREESITTER_URL} URL ${TREESITTER_URL}
URL_HASH SHA256=${TREESITTER_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/treesitter DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/treesitter
PATCH_COMMAND ${CMAKE_COMMAND} -E copy PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterCMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterCMakeLists.txt

View File

@ -18,12 +18,11 @@ function(BuildTSParser)
set(NAME treesitter-${TS_LANG}) set(NAME treesitter-${TS_LANG})
string(TOUPPER "TREESITTER_${TS_LANG}_URL" URL_VARNAME) string(TOUPPER "TREESITTER_${TS_LANG}_URL" URL_VARNAME)
set(URL ${${URL_VARNAME}}) set(URL ${${URL_VARNAME}})
string(TOUPPER "TREESITTER_${TS_LANG}_SHA256" HASH_VARNAME)
set(HASH ${${HASH_VARNAME}})
get_sha(treesitter_${TS_LANG} ${DEPS_IGNORE_SHA})
ExternalProject_Add(${NAME} ExternalProject_Add(${NAME}
URL ${URL} URL ${URL}
URL_HASH SHA256=${HASH} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/${NAME} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/${NAME}
PATCH_COMMAND ${CMAKE_COMMAND} -E copy PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${TS_CMAKE_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${TS_CMAKE_FILE}

View File

@ -1,6 +1,7 @@
get_sha(unibilium ${DEPS_IGNORE_SHA})
ExternalProject_Add(unibilium ExternalProject_Add(unibilium
URL ${UNIBILIUM_URL} URL ${UNIBILIUM_URL}
URL_HASH SHA256=${UNIBILIUM_SHA256} ${EXTERNALPROJECT_URL_HASH}
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/unibilium
CMAKE_ARGS ${DEPS_CMAKE_ARGS} CMAKE_ARGS ${DEPS_CMAKE_ARGS}
CMAKE_CACHE_ARGS ${DEPS_CMAKE_CACHE_ARGS} CMAKE_CACHE_ARGS ${DEPS_CMAKE_CACHE_ARGS}

View File

@ -54,3 +54,11 @@ if(CMAKE_OSX_ARCHITECTURES)
set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -arch ${ARCH}") set(DEPS_C_COMPILER "${DEPS_C_COMPILER} -arch ${ARCH}")
endforeach() endforeach()
endif() endif()
function(get_sha name ignore)
unset(EXTERNALPROJECT_URL_HASH)
if(NOT ${ignore})
string(TOUPPER ${name} name_allcaps)
set(EXTERNALPROJECT_URL_HASH URL_HASH SHA256=${${name_allcaps}_SHA256} PARENT_SCOPE)
endif()
endfunction()