1
0
mirror of https://github.com/MariaDB/server.git synced 2026-10-23 18:49:29 +03:00

refactor submodule.cmake to fetch less

don't update all submodules automatically,
only update those that are actually used by the build
This commit is contained in:
Sergei Golubchik
2026-06-18 18:30:17 +02:00
parent 29e43967f4
commit 1fb075512a
8 changed files with 53 additions and 55 deletions

View File

@@ -45,7 +45,7 @@ SET(CLIENT_PLUGIN_PVIO_SHMEM STATIC)
SET(CLIENT_PLUGIN_PVIO_SOCKET STATIC)
MESSAGE("== Configuring MariaDB Connector/C")
ADD_SUBDIRECTORY(libmariadb)
ADD_SUBMODULE_SUBDIRECTORY(libmariadb)
IF(MSVC AND TARGET mariadb_obj AND TARGET mariadbclient)
# With MSVC, do not produce LTCG-compiled static client libraries.

View File

@@ -62,6 +62,7 @@ MACRO (MYSQL_USE_BUNDLED_SSL)
SET(HAVE_des ON CACHE INTERNAL "wolfssl does support DES API")
SET(HAVE_hkdf ON CACHE INTERNAL "wolfssl does support EVP_PKEY API")
CHANGE_SSL_SETTINGS("bundled")
ADD_SUBMODULE(extra/wolfssl/wolfssl)
ADD_SUBDIRECTORY(extra/wolfssl)
MESSAGE_ONCE(SSL_LIBRARIES "SSL_LIBRARIES = ${SSL_LIBRARIES}")
ENDMACRO()

View File

@@ -1,50 +1,54 @@
# update submodules automatically
OPTION(UPDATE_SUBMODULES "Update submodules automatically" ON)
IF(NOT UPDATE_SUBMODULES)
RETURN()
ENDIF()
IF(GIT_EXECUTABLE AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
IF(NOT UPDATE_SUBMODULES)
SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Disabled by -DUPDATE_SUBMODULES=OFF")
ELSEIF(NOT GIT_EXECUTABLE)
SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "git executable was not found")
ELSEIF(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git")
SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Not inside a git repository")
ELSE()
EXECUTE_PROCESS(COMMAND "${GIT_EXECUTABLE}" config --get cmake.update-submodules
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE cmake_update_submodules
OUTPUT_VARIABLE CMAKE_UPDATE_SUBMODULES
RESULT_VARIABLE git_config_get_result)
IF(cmake_update_submodules MATCHES no)
IF(CMAKE_UPDATE_SUBMODULES MATCHES no)
SET(update_result 0)
SET(SUBMODULE_UPDATE_CONFIG_MESSAGE
"\n\nTo update submodules automatically, set cmake.update-submodules to 'yes', or 'force' to update automatically:
${GIT_EXECUTABLE} config cmake.update-submodules yes")
SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Disabled by git config. To enable set cmake.update-submodules to 'yes', or 'force': ${GIT_EXECUTABLE} config cmake.update-submodules yes")
ELSEIF(git_config_get_result EQUAL 128)
SET(update_result 0)
ELSE()
SET(UPDATE_SUBMODULES_COMMAND
"${GIT_EXECUTABLE}" submodule update --init --recursive)
# Old Git may not work with "--depth 1".
# See also: https://github.com/git/git/commit/fb43e31f2b43076e7a30c9cd00d0241cb8cf97eb
IF(NOT GIT_VERSION_STRING VERSION_LESS "2.8.0")
SET(UPDATE_SUBMODULES_COMMAND ${UPDATE_SUBMODULES_COMMAND} --depth 1)
ENDIF()
IF(cmake_update_submodules MATCHES force)
MESSAGE(STATUS "Updating submodules (forced)")
EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} --force
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE update_result)
ELSEIF(cmake_update_submodules MATCHES yes)
EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE update_result)
ELSE()
MESSAGE(STATUS "Updating submodules")
EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE update_result)
ENDIF()
SET(SUBMODULE_UPDATE_CONFIG_MESSAGE "Git executable ${GIT_EXECUTABLE} failed to run")
ENDIF()
ENDIF()
IF(update_result OR NOT EXISTS ${CMAKE_SOURCE_DIR}/libmariadb/CMakeLists.txt)
MESSAGE(FATAL_ERROR "No MariaDB Connector/C! Run
${GIT_EXECUTABLE} submodule update --init --recursive
Then restart the build.${SUBMODULE_UPDATE_CONFIG_MESSAGE}")
ENDIF()
FUNCTION(ADD_SUBMODULE dir)
IF (ARGV1)
SET(file "${ARGV1}")
ELSE()
SET(file CMakeLists.txt)
ENDIF()
IF(SUBMODULE_UPDATE_CONFIG_MESSAGE)
IF(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${file})
MESSAGE(FATAL_ERROR "Cannot download ${CMAKE_CURRENT_SOURCE_DIR}/${dir} submodule: ${SUBMODULE_UPDATE_CONFIG_MESSAGE}")
ENDIF()
ELSE()
MESSAGE(STATUS "Downloading ${CMAKE_CURRENT_SOURCE_DIR}/${dir} submodule...")
SET(UPDATE_SUBMODULES_COMMAND
"${GIT_EXECUTABLE}" submodule update --init --recursive --depth 1)
IF(CMAKE_UPDATE_SUBMODULES MATCHES force)
EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} --force ${dir}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE update_result)
ELSE()
EXECUTE_PROCESS(COMMAND ${UPDATE_SUBMODULES_COMMAND} ${dir}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE update_result)
ENDIF()
IF(update_result OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${file})
MESSAGE(FATAL_ERROR "Failed to download ${CMAKE_CURRENT_SOURCE_DIR}/${dir} submodule")
ENDIF()
ENDIF()
ENDFUNCTION()
MACRO(ADD_SUBMODULE_SUBDIRECTORY dir)
ADD_SUBMODULE(${dir})
ADD_SUBDIRECTORY(${dir})
ENDMACRO()

View File

@@ -35,12 +35,8 @@ IF(WITH_WSREP)
# Set the patch version
SET(WSREP_PATCH_VERSION "22")
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/wsrep-lib/wsrep-API/v26/wsrep_api.h")
MESSAGE(FATAL_ERROR "No MariaDB wsrep-API code! Run
${GIT_EXECUTABLE} submodule update --init --recursive
Then restart the build.
")
ENDIF()
ADD_SUBMODULE(wsrep-lib)
# Obtain wsrep API version
FILE(STRINGS "${CMAKE_SOURCE_DIR}/wsrep-lib/wsrep-API/v26/wsrep_api.h" WSREP_API_VERSION
LIMIT_COUNT 1 REGEX "WSREP_INTERFACE_VERSION")

View File

@@ -56,7 +56,7 @@ CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64" OR
CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
MY_CHECK_AND_SET_COMPILER_FLAG("-fno-lto")
SET(PCRE_INCLUDES "${PCRE_INCLUDE_DIRS}")
add_subdirectory(columnstore)
add_submodule_subdirectory(columnstore)
IF(TARGET columnstore)
# Redo logic in cmake/plugin to prevent the attempted creation of *Symlinks package

View File

@@ -25,13 +25,6 @@
SET(DUCKDB_SUBMODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_parties/duckdb")
SET(DUCKDB_INCLUDE_DIR "${DUCKDB_SUBMODULE_DIR}/src/include")
IF(NOT EXISTS "${DUCKDB_SUBMODULE_DIR}/CMakeLists.txt")
MESSAGE(FATAL_ERROR
"DuckDB submodule not found at ${DUCKDB_SUBMODULE_DIR}\n"
"Run: git submodule update --init ${DUCKDB_SUBMODULE_DIR}"
)
ENDIF()
INCLUDE(ExternalProject)
# Map MariaDB build type to a DuckDB-friendly one.
@@ -56,6 +49,7 @@ SET(_DUCKDB_STATIC_LIBS
)
MESSAGE(STATUS "=== Building DuckDB from submodule (${DUCKDB_SUBMODULE_DIR}) ===")
ADD_SUBMODULE(third_parties/duckdb)
ExternalProject_Add(duckdb_build
PREFIX "${_DUCKDB_BUILD_DIR}"

View File

@@ -131,6 +131,7 @@ SET(CPACK_RPM_s3-engine_PACKAGE_SUMMARY "Amazon S3 archival storage engine for M
SET(CPACK_RPM_s3-engine_PACKAGE_DESCRIPTION "The S3 storage engine allows one to archive MariaDB tables in Amazon S3 (or any third-party public or private cloud that implements S3 API), but still have them accessible in MariaDB in read-only mode." PARENT_SCOPE)
IF(TARGET s3)
ADD_SUBMODULE(libmarias3 Makefile.am)
MYSQL_ADD_EXECUTABLE(aria_s3_copy aria_s3_copy.cc ${S3_SOURCES} COMPONENT s3-engine)
TARGET_LINK_LIBRARIES(aria_s3_copy aria myisam mysys mysys_ssl ${CURL_LIBRARIES} ${ZLIB_LIBRARIES})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libmarias3)

View File

@@ -163,6 +163,8 @@ IF(NOT TARGET rocksdb)
RETURN()
ENDIF()
ADD_SUBMODULE(rocksdb)
INSTALL_MANPAGES(rocksdb-engine mariadb-ldb.1 myrocks_hotbackup.1)
CHECK_CXX_SOURCE_COMPILES("