1
0
mirror of https://github.com/Rogiel/CMakeDependency synced 2025-12-06 05:22:48 +00:00

Improve CMake cache management

This commit is contained in:
2020-03-17 22:54:30 -03:00
parent e302748083
commit 6528d44e20
2 changed files with 32 additions and 14 deletions

View File

@@ -41,8 +41,6 @@ function(import_dependencies_from_json json)
find_package(Python3 COMPONENTS Interpreter) find_package(Python3 COMPONENTS Interpreter)
if(Python3_Interpreter_FOUND) if(Python3_Interpreter_FOUND)
list(APPEND CMAKE_CONFIGURE_DEPENDS ${json_dep_file})
file(LOCK ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY GUARD FILE) file(LOCK ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY GUARD FILE)
if(${json_dep_file} IS_NEWER_THAN ${cmake_dep_file} OR if(${json_dep_file} IS_NEWER_THAN ${cmake_dep_file} OR
${CMDEP_GENERATOR_SCRIPT} IS_NEWER_THAN ${cmake_dep_file}) ${CMDEP_GENERATOR_SCRIPT} IS_NEWER_THAN ${cmake_dep_file})
@@ -56,6 +54,8 @@ function(import_dependencies_from_json json)
message(STATUS "Python interpreter not found. CMake dependencies will NOT update automatically.") message(STATUS "Python interpreter not found. CMake dependencies will NOT update automatically.")
endif() endif()
include(${cmake_dep_file}) include(${cmake_dep_file})
list(APPEND CMAKE_CONFIGURE_DEPENDS ${json_dep_file})
endfunction() endfunction()
list(APPEND CMAKE_CONFIGURE_DEPENDS ${CMDEP_GENERATOR_SCRIPT}) list(APPEND CMAKE_CONFIGURE_DEPENDS ${CMDEP_GENERATOR_SCRIPT})

View File

@@ -1,20 +1,15 @@
set(@DEPENDENCY_NAME@_URL set(@DEPENDENCY_NAME@_URL "@DEPENDENCY_URL@")
"@DEPENDENCY_URL@" set(@DEPENDENCY_NAME@_DIR ${CMDEP_ROOT_DIR}/@DEPENDENCY_NAME@)
CACHE STRING "A path that points to a @DEPENDENCY_NAME@ URL to be downloaded. CMake will use this URL to download the file if needed.")
set(@DEPENDENCY_NAME@_DIR
${CMDEP_ROOT_DIR}/@DEPENDENCY_NAME@
CACHE PATH "A path that points to a @DEPENDENCY_NAME@ directory containing it's sources.")
set(@DEPENDENCY_NAME@_LOCK ${CMDEP_ROOT_DIR}) set(@DEPENDENCY_NAME@_LOCK ${CMDEP_ROOT_DIR})
set(@DEPENDENCY_NAME@_DOT_CMDEP_SOURCE_FILE "${@DEPENDENCY_NAME@_DIR}/.cmdep-source")
set(@DEPENDENCY_NAME@_SOURCE_DIR set(@DEPENDENCY_NAME@_SOURCE_DIR
${@DEPENDENCY_NAME@_DIR} ${@DEPENDENCY_NAME@_DIR} CACHE PATH
CACHE PATH "A path that points to a @DEPENDENCY_NAME@ source directory. If manually set, no downloading or extraction will take place and this will be used instead.") "A path that points to a @DEPENDENCY_NAME@ source directory. If manually set, no downloading or extraction will take place and this will be used instead.")
set(@DEPENDENCY_NAME@_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/@DEPENDENCY_NAME@) set(@DEPENDENCY_NAME@_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/@DEPENDENCY_NAME@)
get_filename_component(@DEPENDENCY_NAME@_DOWNLOAD_NAME "${@DEPENDENCY_NAME@_URL}" NAME CACHE) get_filename_component(@DEPENDENCY_NAME@_DOWNLOAD_NAME "${@DEPENDENCY_NAME@_URL}" NAME)
set(@DEPENDENCY_NAME@_ZIP set(@DEPENDENCY_NAME@_ZIP ${CMDEP_ZIP_DIR}/${@DEPENDENCY_NAME@_DOWNLOAD_NAME})
${CMDEP_ZIP_DIR}/${@DEPENDENCY_NAME@_DOWNLOAD_NAME}
CACHE PATH "A path that points to a @DEPENDENCY_NAME@ zip file. If this file does not exists, it will be downloaded.")
# To prevent other concurrent CMake instances from trying to download or extract # To prevent other concurrent CMake instances from trying to download or extract
# the file, we lock the source directory. This will guarantee that only a single # the file, we lock the source directory. This will guarantee that only a single
@@ -22,6 +17,22 @@ set(@DEPENDENCY_NAME@_ZIP
# #
file(LOCK ${@DEPENDENCY_NAME@_LOCK} DIRECTORY GUARD FILE) file(LOCK ${@DEPENDENCY_NAME@_LOCK} DIRECTORY GUARD FILE)
if(@DEPENDENCY_NAME@_SOURCE_DIR STREQUAL @DEPENDENCY_NAME@_DIR)
if(EXISTS "${@DEPENDENCY_NAME@_DOT_CMDEP_SOURCE_FILE}")
file(READ "${@DEPENDENCY_NAME@_DOT_CMDEP_SOURCE_FILE}" @DEPENDENCY_NAME@_CURRENT_SOURCE_URL)
if(NOT @DEPENDENCY_NAME@_CURRENT_SOURCE_URL STREQUAL @DEPENDENCY_NAME@_URL)
set(@DEPENDENCY_NAME@_SOURCE_CHANGED TRUE)
endif()
else()
set(@DEPENDENCY_NAME@_SOURCE_CHANGED TRUE)
endif()
endif()
if(@DEPENDENCY_NAME@_SOURCE_CHANGED)
message(STATUS "@DEPENDENCY_NAME@: Source has changed. Redownloading...")
file(REMOVE_RECURSE ${@DEPENDENCY_NAME@_DIR})
endif()
if(NOT EXISTS ${@DEPENDENCY_NAME@_SOURCE_DIR}) if(NOT EXISTS ${@DEPENDENCY_NAME@_SOURCE_DIR})
if(NOT EXISTS ${@DEPENDENCY_NAME@_ZIP}) if(NOT EXISTS ${@DEPENDENCY_NAME@_ZIP})
get_filename_component(@DEPENDENCY_NAME@_ZIP_DIRECTORY "${@DEPENDENCY_NAME@_ZIP}" DIRECTORY) get_filename_component(@DEPENDENCY_NAME@_ZIP_DIRECTORY "${@DEPENDENCY_NAME@_ZIP}" DIRECTORY)
@@ -87,6 +98,13 @@ if(NOT EXISTS ${@DEPENDENCY_NAME@_SOURCE_DIR})
# #
message(STATUS "@DEPENDENCY_NAME@: extracting... [clean up]") message(STATUS "@DEPENDENCY_NAME@: extracting... [clean up]")
file(REMOVE_RECURSE "${tmp_dir}") file(REMOVE_RECURSE "${tmp_dir}")
file(WRITE "${@DEPENDENCY_NAME@_DOT_CMDEP_SOURCE_FILE}" "${@DEPENDENCY_NAME@_URL}")
set(@DEPENDENCY_NAME@_SOURCE_DIR
${@DEPENDENCY_NAME@_DIR} CACHE PATH
"A path that points to a @DEPENDENCY_NAME@ source directory. If manually set, no downloading or extraction will take place and this will be used instead."
FORCE)
endif() endif()
# We are now done. We can unlock the CMake directory and proceed. # We are now done. We can unlock the CMake directory and proceed.