From fa9906995135e91c26c70300f9b90ef1954f0c70 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 14 Aug 2025 21:58:20 +0200 Subject: [PATCH] build: Move ImHex-Patterns downloading to install step --- cmake/build_helpers.cmake | 109 +++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 49 deletions(-) diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index aae9c8688..c249056fb 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -516,6 +516,10 @@ function(loadVersion version plain_version) string(REPLACE ".WIP" "" read_version_plain ${read_version}) set(${version} ${read_version} PARENT_SCOPE) set(${plain_version} ${read_version_plain} PARENT_SCOPE) + + if (read_version MATCHES ".+\.WIP") + set(IMHEX_PATTERNS_PULL_MASTER ON PARENT_SCOPE) + endif() endfunction() function(detectBadClone) @@ -589,60 +593,67 @@ macro(setVariableInParent variable value) endmacro() function(downloadImHexPatternsFiles dest) - if (NOT IMHEX_OFFLINE_BUILD) - if (IMHEX_PATTERNS_PULL_MASTER) - set(PATTERNS_BRANCH master) + install(CODE "set(dest \"${dest}\")") + install(CODE "set(IMHEX_OFFLINE_BUILD ${IMHEX_OFFLINE_BUILD})") + install(CODE "set(IMHEX_PATTERNS_PULL_MASTER ${IMHEX_PATTERNS_PULL_MASTER})") + install(CODE "set(IMHEX_VERSION \"${IMHEX_VERSION}\")") + install(CODE [[ + if (NOT IMHEX_OFFLINE_BUILD) + if (IMHEX_PATTERNS_PULL_MASTER) + set(PATTERNS_BRANCH master) + else () + set(PATTERNS_BRANCH ImHex-v${IMHEX_VERSION}) + endif () + + set(imhex_patterns_SOURCE_DIR "${CMAKE_BINARY_DIR}/imhex_patterns") + execute_process( + COMMAND + git clone --recurse-submodules --branch ${PATTERNS_BRANCH} https://github.com/WerWolv/ImHex-Patterns.git ${imhex_patterns_SOURCE_DIR} + OUTPUT_QUIET + ERROR_QUIET + ) + + message(STATUS "Downloading ImHex-Patterns repo branch ${PATTERNS_BRANCH}...") + message(STATUS "Finished downloading ImHex-Patterns to ${imhex_patterns_SOURCE_DIR}") + else () - set(PATTERNS_BRANCH ImHex-v${IMHEX_VERSION}) + set(imhex_patterns_SOURCE_DIR "") + + # Maybe patterns are cloned to a subdirectory + if (NOT EXISTS ${imhex_patterns_SOURCE_DIR}) + set(imhex_patterns_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ImHex-Patterns") + endif() + + # Or a sibling directory + if (NOT EXISTS ${imhex_patterns_SOURCE_DIR}) + set(imhex_patterns_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../ImHex-Patterns") + endif() endif () - FetchContent_Declare( - imhex_patterns - GIT_REPOSITORY https://github.com/WerWolv/ImHex-Patterns.git - GIT_TAG origin/master - ) - - message(STATUS "Downloading ImHex-Patterns repo branch ${PATTERNS_BRANCH}...") - FetchContent_MakeAvailable(imhex_patterns) - message(STATUS "Finished downloading ImHex-Patterns") - - else () - set(imhex_patterns_SOURCE_DIR "") - - # Maybe patterns are cloned to a subdirectory if (NOT EXISTS ${imhex_patterns_SOURCE_DIR}) - set(imhex_patterns_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ImHex-Patterns") - endif() + message(WARNING "Failed to locate ImHex-Patterns repository, some resources will be missing during install!") + elseif(XCODE) + # The Xcode build has multiple configurations, which each need a copy of these files + file(GLOB_RECURSE sourceFilePaths LIST_DIRECTORIES NO CONFIGURE_DEPENDS RELATIVE "${imhex_patterns_SOURCE_DIR}" + "${imhex_patterns_SOURCE_DIR}/constants/*" + "${imhex_patterns_SOURCE_DIR}/encodings/*" + "${imhex_patterns_SOURCE_DIR}/includes/*" + "${imhex_patterns_SOURCE_DIR}/patterns/*" + "${imhex_patterns_SOURCE_DIR}/magic/*" + "${imhex_patterns_SOURCE_DIR}/nodes/*" + ) + list(FILTER sourceFilePaths EXCLUDE REGEX "_schema.json$") - # Or a sibling directory - if (NOT EXISTS ${imhex_patterns_SOURCE_DIR}) - set(imhex_patterns_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../ImHex-Patterns") - endif() - endif () - - if (NOT EXISTS ${imhex_patterns_SOURCE_DIR}) - message(WARNING "Failed to locate ImHex-Patterns repository, some resources will be missing during install!") - elseif(XCODE) - # The Xcode build has multiple configurations, which each need a copy of these files - file(GLOB_RECURSE sourceFilePaths LIST_DIRECTORIES NO CONFIGURE_DEPENDS RELATIVE "${imhex_patterns_SOURCE_DIR}" - "${imhex_patterns_SOURCE_DIR}/constants/*" - "${imhex_patterns_SOURCE_DIR}/encodings/*" - "${imhex_patterns_SOURCE_DIR}/includes/*" - "${imhex_patterns_SOURCE_DIR}/patterns/*" - "${imhex_patterns_SOURCE_DIR}/magic/*" - "${imhex_patterns_SOURCE_DIR}/nodes/*" - ) - list(FILTER sourceFilePaths EXCLUDE REGEX "_schema.json$") - - foreach(relativePath IN LISTS sourceFilePaths) - file(GENERATE OUTPUT "${dest}/${relativePath}" INPUT "${imhex_patterns_SOURCE_DIR}/${relativePath}") - endforeach() - else() - set(PATTERNS_FOLDERS_TO_INSTALL constants encodings includes patterns magic nodes) - foreach (FOLDER ${PATTERNS_FOLDERS_TO_INSTALL}) - install(DIRECTORY "${imhex_patterns_SOURCE_DIR}/${FOLDER}" DESTINATION "${dest}" PATTERN "**/_schema.json" EXCLUDE) - endforeach () - endif () + foreach(relativePath IN LISTS sourceFilePaths) + file(GENERATE OUTPUT "${dest}/${relativePath}" INPUT "${imhex_patterns_SOURCE_DIR}/${relativePath}") + endforeach() + else() + set(PATTERNS_FOLDERS_TO_INSTALL constants encodings includes patterns magic nodes) + foreach (FOLDER ${PATTERNS_FOLDERS_TO_INSTALL}) + file(COPY "${imhex_patterns_SOURCE_DIR}/${FOLDER}" DESTINATION "${dest}" PATTERN "**/_schema.json" EXCLUDE) + endforeach () + endif () + ]]) endfunction()