aboutsummaryrefslogtreecommitdiff
path: root/scripts/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/cmake')
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake1
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake7
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake16
-rw-r--r--scripts/cmake/vcpkg_test_cmake.cmake53
4 files changed, 71 insertions, 6 deletions
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
index f4f149794..90a3e2814 100644
--- a/scripts/cmake/vcpkg_common_functions.cmake
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -26,3 +26,4 @@ include(vcpkg_get_program_files_32_bit)
include(vcpkg_get_program_files_platform_bitness)
include(vcpkg_get_windows_sdk)
include(vcpkg_replace_string)
+include(vcpkg_test_cmake)
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index db3e45594..949036c88 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -68,7 +68,12 @@ function(vcpkg_download_distfile VAR)
set(downloaded_file_path ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME})
set(download_file_path_part "${DOWNLOADS}/temp/${vcpkg_download_distfile_FILENAME}")
- file(REMOVE_RECURSE "${DOWNLOADS}/temp")
+ # Works around issue #3399
+ if(IS_DIRECTORY "${DOWNLOADS}/temp")
+ file(REMOVE_RECURSE "${DOWNLOADS}/temp0")
+ file(RENAME "${DOWNLOADS}/temp" "${DOWNLOADS}/temp0")
+ file(REMOVE_RECURSE "${DOWNLOADS}/temp0")
+ endif()
file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
function(test_hash FILE_PATH FILE_KIND CUSTOM_ERROR_ADVICE)
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index 99e05960a..4cb123fd6 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -128,11 +128,17 @@ function(vcpkg_find_acquire_program VAR)
elseif(VAR MATCHES "MESON")
set(PROGNAME meson)
set(REQUIRED_INTERPRETER PYTHON3)
- set(SCRIPTNAME meson.py)
- set(PATHS ${DOWNLOADS}/tools/meson/meson-0.43.0)
- set(URL "https://github.com/mesonbuild/meson/archive/0.43.0.zip")
- set(ARCHIVE "meson-0.43.0.zip")
- set(HASH dde4de72eff37046731224f32aa5f4618d45bdf148cec2d1af6e25e7522ebc2b04aedc9eceed483dfa93823a0ea7ea472d0c0c9380061bf3ee2f16b87dd1425e)
+ set(BREW_PACKAGE_NAME "meson")
+ set(APT_PACKAGE_NAME "meson")
+ if(CMAKE_HOST_WIN32)
+ set(SCRIPTNAME meson.py)
+ else()
+ set(SCRIPTNAME meson)
+ endif()
+ set(PATHS ${DOWNLOADS}/tools/meson/meson-0.47.1)
+ set(URL "https://github.com/mesonbuild/meson/archive/0.47.1.zip")
+ set(ARCHIVE "meson-0.47.1.zip")
+ set(HASH 0f6462835583a51707bee82d852018cfcb7444c0dad95b2ba08814e500a5cfe3f731dc6c1fb73c765d1120ee2a2d6600e15d8d393bab1993e84bd4354b2e6855)
elseif(VAR MATCHES "FLEX")
if(CMAKE_HOST_WIN32)
set(PROGNAME win_flex)
diff --git a/scripts/cmake/vcpkg_test_cmake.cmake b/scripts/cmake/vcpkg_test_cmake.cmake
new file mode 100644
index 000000000..718b2f69c
--- /dev/null
+++ b/scripts/cmake/vcpkg_test_cmake.cmake
@@ -0,0 +1,53 @@
+## # vcpkg_test_cmake
+##
+## Tests a built package for CMake `find_package()` integration.
+##
+## ## Usage:
+## ```cmake
+## vcpkg_test_cmake(PACKAGE_NAME <name> [MODULE])
+## ```
+##
+## ## Parameters:
+##
+## ### PACKAGE_NAME
+## The expected name to find with `find_package()`.
+##
+## ### MODULE
+## Indicates that the library expects to be found via built-in CMake targets.
+##
+function(vcpkg_test_cmake)
+ cmake_parse_arguments(_tc "MODULE" "PACKAGE_NAME" "" ${ARGN})
+
+ if(NOT DEFINED _tc_PACKAGE_NAME)
+ message(FATAL_ERROR "PACKAGE_NAME must be specified")
+ endif()
+ if(_tc_MODULE)
+ set(PACKAGE_TYPE MODULE)
+ else()
+ set(PACKAGE_TYPE CONFIG)
+ endif()
+
+ message(STATUS "Performing CMake integration test")
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test)
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test)
+
+ # Generate test source CMakeLists.txt
+ set(VCPKG_TEST_CMAKELIST ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test/CMakeLists.txt)
+ file(WRITE ${VCPKG_TEST_CMAKELIST} "cmake_minimum_required(VERSION 3.10)\n")
+ file(APPEND ${VCPKG_TEST_CMAKELIST} "set(CMAKE_PREFIX_PATH \"${CURRENT_PACKAGES_DIR};${CURRENT_INSTALLED_DIR}\")\n")
+ file(APPEND ${VCPKG_TEST_CMAKELIST} "\n")
+ file(APPEND ${VCPKG_TEST_CMAKELIST} "find_package(${_tc_PACKAGE_NAME} ${PACKAGE_TYPE} REQUIRED)\n")
+
+ # Run cmake config with a generated CMakeLists.txt
+ set(LOGPREFIX "${CURRENT_BUILDTREES_DIR}/test-cmake-${TARGET_TRIPLET}")
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} .
+ OUTPUT_FILE "${LOGPREFIX}-out.log"
+ ERROR_FILE "${LOGPREFIX}-err.log"
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test
+ )
+ if(error_code)
+ message(FATAL_ERROR "CMake integration test failed; unable to find_package(${_tc_PACKAGE_NAME} ${PACKAGE_TYPE} REQUIRED)")
+ endif()
+endfunction()