diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ee0ad8c7bfbce1e74201fb247f34b5357be62c2..2f0999e59c595e7ef9f1430515edb58f6ad020de 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -45,4 +45,4 @@ repos: exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake|Tests.cmake' - id: cmake-lint additional_dependencies: ["cmakelang[YAML]"] - exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake' + exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake|BuildExternalProject.cmake' diff --git a/scripts/cmake/BuildExternalProject.cmake b/scripts/cmake/BuildExternalProject.cmake index 2a971810bf5a6cd34241c315e24747f216625aee..45e80d6d85d849dcc453103d929bebf301bf8380 100644 --- a/scripts/cmake/BuildExternalProject.cmake +++ b/scripts/cmake/BuildExternalProject.cmake @@ -1,31 +1,37 @@ -macro (BuildExternalProject_find_package target) - set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target}) - - # Set CMake prefix path so we can look there for the module - set(_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}) - mark_as_advanced(_CMAKE_PREFIX_PATH) - list(APPEND CMAKE_PREFIX_PATH ${build_dir}) - - find_package(${target} MODULE QUIET) - if (NOT ${target}_FOUND) - # Look for config version if there was no module - find_package(${target} CONFIG REQUIRED HINTS ${build_dir} NO_DEFAULT_PATH) - endif() - - # Set CMake prefix path back to what it was - set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH}) - unset(_CMAKE_PREFIX_PATH) +# Modified from +# https://github.com/Sbte/BuildExternalProject/commit/ce1a70996aa538aac17a6faf07db487c3a238838 +macro(BuildExternalProject_find_package target) + set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target}) + + # Set CMake prefix path so we can look there for the module + set(_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}) + mark_as_advanced(_CMAKE_PREFIX_PATH) + list(APPEND CMAKE_PREFIX_PATH ${build_dir}) + + find_package(${target} MODULE QUIET) + if(NOT ${target}_FOUND) + # Look for config version if there was no module + find_package( + ${target} CONFIG REQUIRED HINTS ${build_dir} NO_DEFAULT_PATH + ) + endif() + + # Set CMake prefix path back to what it was + set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH}) + unset(_CMAKE_PREFIX_PATH) endmacro() -function (BuildExternalProject target) - set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target}) +function(BuildExternalProject target) + set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target}) - message(STATUS "Building ${target}") + message(STATUS "Building ${target}") - file(MAKE_DIRECTORY ${build_dir}) + file(MAKE_DIRECTORY ${build_dir}) - set(CMAKE_LIST_CONTENT " - cmake_minimum_required(VERSION 2.8.2) + set(CMAKE_LIST_CONTENT + " + cmake_minimum_required(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION}) + project(externalproject_${target}) include(ExternalProject) ExternalProject_add(${target} @@ -42,46 +48,48 @@ function (BuildExternalProject target) add_custom_target(build_${target}) add_dependencies(build_${target} ${target}) - ") - - if (EXISTS ${build_dir}/CMakeLists.txt) - file(SHA256 ${build_dir}/CMakeLists.txt file_sha) - string(SHA256 new_sha "${CMAKE_LIST_CONTENT}") + " + ) - if (NOT file_sha STREQUAL new_sha) - file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}") - BuildExternalProject_configure(${build_dir}) + if(EXISTS ${build_dir}/CMakeLists.txt) + file(SHA256 ${build_dir}/CMakeLists.txt file_sha) + string(SHA256 new_sha "${CMAKE_LIST_CONTENT}") + + if(NOT file_sha STREQUAL new_sha) + file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}") + BuildExternalProject_configure(${build_dir}) + endif() + else() + file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}") + BuildExternalProject_configure(${build_dir}) endif() - else() - file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}") - BuildExternalProject_configure(${build_dir}) - endif() - BuildExternalProject_build(${build_dir}) + BuildExternalProject_build(${build_dir}) - message(STATUS "Finished building ${target}") + message( + STATUS + "Finished building ${target}. Logs in ${build_dir}/src/${target}-stamp" + ) endfunction() -function (BuildExternalProject_configure build_dir) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${build_dir} - OUTPUT_QUIET +function(BuildExternalProject_configure build_dir) + execute_process( + COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result WORKING_DIRECTORY ${build_dir} ) - if(result) - message(FATAL_ERROR "CMake step for external project failed: ${result}") - endif() + if(result) + message(FATAL_ERROR "CMake step for external project failed: ${result}") + endif() endfunction() -function (BuildExternalProject_build build_dir) - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${build_dir} - OUTPUT_QUIET +function(BuildExternalProject_build build_dir) + execute_process( + COMMAND ${CMAKE_COMMAND} --build . RESULT_VARIABLE result + WORKING_DIRECTORY ${build_dir} ) - if(result) - message(FATAL_ERROR "Build step for external project failed: ${result}") - endif() -endfunction() \ No newline at end of file + if(result) + message(FATAL_ERROR "Build step for external project failed: ${result}") + endif() +endfunction()