From 78ad51a0b746bfe7eca039dcec58dd050db72644 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Thu, 15 Jul 2021 19:52:54 +0200 Subject: [PATCH 01/13] Add cmake test port for user projects --- scripts/ci.baseline.txt | 2 + scripts/test_ports/cmake-user/portfile.cmake | 128 ++++++++++++++++++ .../cmake-user/project/CMakeLists.txt | 64 +++++++++ scripts/test_ports/cmake-user/vcpkg.json | 58 ++++++++ 4 files changed, 252 insertions(+) create mode 100644 scripts/test_ports/cmake-user/portfile.cmake create mode 100644 scripts/test_ports/cmake-user/project/CMakeLists.txt create mode 100644 scripts/test_ports/cmake-user/vcpkg.json diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 5dd02bbb33a4e7..e2ad66aa5a1677 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -134,6 +134,8 @@ clblast:x64-windows-static=fail clblast:x64-windows-static-md=fail clockutils:x64-linux=fail clockutils:x64-osx=fail +# CMake 3.4 needs libidn.so.11 (Ubuntu: libidn11) +cmake-user:x64-linux=skip cmark:x64-windows-static=fail cmcstl2:arm64-windows = skip cmcstl2:arm-uwp = skip diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake new file mode 100644 index 00000000000000..5ab2cfabc69a0a --- /dev/null +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -0,0 +1,128 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +set(cmake_version OFF) +if("cmake-3-4" IN_LIST FEATURES) + set(cmake_version 3.4.3) + string(REGEX REPLACE "([^.]*[.][^.]*).*" "\\1" cmake_major_minor "${cmake_version}") + if(HOST_TRIPLET MATCHES "^x.*-(windows|mingw)") + set(name "cmake-${cmake_version}-win32-x86") + vcpkg_download_distfile(legacy_cmake_archive + FILENAME "${name}.zip" + URLS "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/${name}.zip" + "https://cmake.org/files/v${cmake_major_minor}/${name}.zip" + SHA512 c74a8f85ce04a2c0f68fd315a9a7e2fee5cc98af9e8117cca6b35a4f0942cae2d101672e5936a8bfc20289c8c82da582531495308657348a1121e3f568588bd3 + ) + set(cmake_bin_dir "/bin") + elseif(HOST_TRIPLET MATCHES "^x.*-osx") + set(name "cmake-${cmake_version}-Darwin-x86_64") + vcpkg_download_distfile(legacy_cmake_archive + FILENAME "${name}.tar.gz" + URLS "https://github.com/Kitware/CMake/releases/download/v3.4.3/${name}.tar.gz" + "https://cmake.org/files/v${cmake_major_minor}/${name}.tar.gz" + SHA512 c3da566a19e95b8f91bf601518b9c49304b9bb8500f5a086eb2c867514176278e51dd893952b8ab54a2839ed02c898036c7985fe0bb761db9ccb988343463ea2 + ) + set(cmake_bin_dir "/CMake.app/Contents/bin") + elseif(HOST_TRIPLET MATCHES "^x.*-linux") + set(name "cmake-${cmake_version}-Linux-x86_64") + vcpkg_download_distfile(legacy_cmake_archive + FILENAME "${name}.tar.gz" + URLS "https://github.com/Kitware/CMake/releases/download/v3.4.3/${name}.tar.gz" + "https://cmake.org/files/v${cmake_major_minor}/${name}.tar.gz" + SHA512 455b8f940ccda0ba1169d3620db67c0bf89284126386408cd28b76b66c59c4c2ea5ad8def0095166e7524f6cf5202f117a2fa49e1525f93ed711657a5d2ae988 + ) + set(cmake_bin_dir "/bin") + else() + message(FATAL_ERROR "Unable to test feature 'cmake-3-4' for '${HOST_TRIPLET}' host.") + endif() + + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH legacy_cmake + ARCHIVE "${legacy_cmake_archive}" + REF "${cmake_version}" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${name}" + ) + set(CMAKE_COMMAND "${legacy_cmake}${cmake_bin_dir}/cmake") +endif() + +set(packages "") +if("find-package" IN_LIST FEATURES) + file(READ "${CMAKE_CURRENT_LIST_DIR}/vcpkg.json" vcpkg_json) + string(JSON packages_json GET "${vcpkg_json}" "features" "find-package" "dependencies") + string(JSON packages_count LENGTH "${packages_json}") + if(packages_count GREATER 0) + math(EXPR last "${packages_count} - 1") + foreach(i RANGE 0 ${last}) + string(JSON package GET "${packages_json}" ${i} "$package") + list(APPEND packages "${package}") + endforeach() + endif() +endif() + +if(DEFINED ENV{VCPKG_FORCE_SYSTEM_BINARIES}) + set(NINJA "ninja") +else() + vcpkg_find_acquire_program(NINJA) +endif() + +function(test_cmake_project) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "NAME" "OPTIONS") + if(NOT arg_NAME) + message(FATAL_ERROR "The NAME argument is mandatory.") + endif() + + set(build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${arg_NAME}") + file(REMOVE_RECURSE "${build_dir}") + file(MAKE_DIRECTORY "${build_dir}") + + if(DEFINED VCPKG_CMAKE_SYSTEM_NAME AND VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}") + if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION) + list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}") + endif() + if(DEFINED VCPKG_PLATFORM_TOOLSET) + list(APPEND arg_OPTIONS "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}") + endif() + endif() + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=ON) + else() + list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=OFF) + endif() + + vcpkg_execute_required_process( + COMMAND + "${CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project" + -G "Ninja" + "-DCMAKE_MAKE_PROGRAM=${NINJA}" + "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/../../buildsystems/vcpkg.cmake" + "-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}" + "-DCMAKE_INSTALL_PREFIX=${build_dir}/install" + "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}" + "-DFIND_PACKAGES=${packages}" + ${arg_OPTIONS} + WORKING_DIRECTORY "${build_dir}" + LOGNAME "cmake-user-${TARGET_TRIPLET}-${arg_NAME}-config" + ) + vcpkg_execute_required_process( + COMMAND + "${CMAKE_COMMAND}" --build . --target install + WORKING_DIRECTORY "${build_dir}" + LOGNAME "cmake-user-${TARGET_TRIPLET}-${arg_NAME}-build" + ) +endfunction() + +test_cmake_project(NAME "test-0" + OPTIONS + "-DCMAKE_BUILD_TYPE=Release" + "-DCMAKE_PREFIX_PATH=SYSTEM_LIBS" # for testing VCPKG_PREFER_SYSTEM_LIBS + "-DVCPKG_PREFER_SYSTEM_LIBS=OFF" + "-DCHECK_CMAKE_VERSION=${cmake_version}" +) +test_cmake_project(NAME "test-1" + OPTIONS + "-DCMAKE_BUILD_TYPE=Debug" + "-DCMAKE_PREFIX_PATH=SYSTEM_LIBS" # for testing VCPKG_PREFER_SYSTEM_LIBS + "-DVCPKG_PREFER_SYSTEM_LIBS=ON" + "-DCHECK_CMAKE_VERSION=${cmake_version}" +) diff --git a/scripts/test_ports/cmake-user/project/CMakeLists.txt b/scripts/test_ports/cmake-user/project/CMakeLists.txt new file mode 100644 index 00000000000000..26f29f5e54fafd --- /dev/null +++ b/scripts/test_ports/cmake-user/project/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 3.4) +project(cmake-user LANGUAGES C) + +message(STATUS "CMAKE_COMMAND: ${CMAKE_COMMAND}") +set(CHECK_CMAKE_VERSION "NOTFOUND" CACHE STRING "Version of CMake expected to be found") +if(NOT CHECK_CMAKE_VERSION) + message(WARNING "CMake version check: skipped (actual: ${CMAKE_VERSION})") +elseif(NOT CHECK_CMAKE_VERSION VERSION_EQUAL CMAKE_VERSION) + message(SEND_ERROR "CMake version check: failed (actual: ${CMAKE_VERSION} expected: ${CHECK_CMAKE_VERSION})") +else() + message(STATUS "CMake version check: success (actual: ${CMAKE_VERSION})") +endif() + +message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") +list(FIND CMAKE_PREFIX_PATH "SYSTEM_LIBS" system_libs) +list(FIND CMAKE_PREFIX_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" vcpkg) +if(system_libs LESS 0) + message(SEND_ERROR "VCPKG_PREFER_SYSTEM_LIBS check: failed (Cannot find SYSTEM_LIBS in CMAKE_PREFIX_PATH.)") +elseif(vcpkg LESS 0) + message(SEND_ERROR "VCPKG_PREFER_SYSTEM_LIBS check: failed (Cannot find vcpkg path in CMAKE_PREFIX_PATH.") +elseif(VCPKG_PREFER_SYSTEM_LIBS AND system_libs GREATER vcpkg) + message(SEND_ERROR "VCPKG_PREFER_SYSTEM_LIBS check: failed (actual: ${VCPKG_PREFER_SYSTEM_LIBS}, but vcpkg paths are before system paths in CMAKE_PREFIX_PATH.)") +elseif(NOT VCPKG_PREFER_SYSTEM_LIBS AND system_libs LESS vcpkg) + message(SEND_ERROR "VCPKG_PREFER_SYSTEM_LIBS check: failed (actual: ${VCPKG_PREFER_SYSTEM_LIBS}, but vcpkg paths are after system paths in CMAKE_PREFIX_PATH.)") +else() + message(STATUS "VCPKG_PREFER_SYSTEM_LIBS check: success (actual: ${VCPKG_PREFER_SYSTEM_LIBS})") +endif() + +# add_library overload +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib.c" "int lib_unused() { return 1; }") +add_library(lib "${CMAKE_CURRENT_BINARY_DIR}/lib.c") + +# add_executable overload +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/exe.c" "int main() { return 0; }") +add_executable(exe "${CMAKE_CURRENT_BINARY_DIR}/exe.c") + +# install overload +set(X_VCPKG_APPLOCAL_DEPS_INSTALL 1) +install(TARGETS exe lib + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib +) + +# find_package overload and wrapper +set(FIND_PACKAGES "" CACHE STRING "List of packages to be found and used") +foreach(package ${FIND_PACKAGES}) + string(TOUPPER "${package}" package_upper) + find_package("${package}" QUIET) + if(NOT ${package}_FOUND AND NOT ${package_upper}_FOUND) + message(SEND_ERROR "find_package(${package}) check: failed") + elseif(DEFINED ${package_upper}_LIBRARIES) + message(STATUS "${package_upper}_LIBRARIES: ${${package_upper}_LIBRARIES}") + message(STATUS "find_package(${package}) check: success") + target_link_libraries(exe PRIVATE ${${package_upper}_LIBRARIES}) + elseif(DEFINED ${package}_LIBRARIES) + message(STATUS "${package}_LIBRARIES: ${${package}_LIBRARIES}") + message(STATUS "find_package(${package}) check: success") + target_link_libraries(exe PRIVATE ${${package}_LIBRARIES}) + else() + message(STATUS "${package}_LIBRARIES: undefined") + message(STATUS "find_package(${package}) check: success") + endif() +endforeach() diff --git a/scripts/test_ports/cmake-user/vcpkg.json b/scripts/test_ports/cmake-user/vcpkg.json new file mode 100644 index 00000000000000..1ab228366a786f --- /dev/null +++ b/scripts/test_ports/cmake-user/vcpkg.json @@ -0,0 +1,58 @@ +{ + "name": "cmake-user", + "version-date": "2021-07-24", + "description": "Test port to verify the vcpkg toolchain in cmake user projects", + "default-features": [ + "ci" + ], + "features": { + "ci": { + "description": "The CI set of features to test", + "dependencies": [ + { + "name": "cmake-user", + "default-features": false, + "features": [ + "find-package" + ] + }, + { + "name": "cmake-user", + "default-features": false, + "features": [ + "cmake-3-4" + ], + "platform": "x64 & (windows | linux | osx) & !uwp" + } + ] + }, + "cmake-3-4": { + "description": "Use CMake 3.4 to build the test project" + }, + "find-package": { + "description": "Ports to be tested via find_package($package)", + "dependencies": [ + { + "$package": "EXPAT", + "name": "expat" + }, + { + "$package": "Intl", + "name": "gettext" + }, + { + "$package": "JPEG", + "name": "libjpeg-turbo" + }, + { + "$package": "LibLZMA", + "name": "liblzma" + }, + { + "$package": "ZLIB", + "name": "zlib" + } + ] + } + } +} From 3baf4ea9bd702b85deb7aab6ec189ec0a84cc763 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sat, 11 Sep 2021 16:56:50 +0200 Subject: [PATCH 02/13] Improve find_package test failure output --- scripts/test_ports/cmake-user/portfile.cmake | 35 ++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index 5ab2cfabc69a0a..9243e610fa0b02 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -99,7 +99,6 @@ function(test_cmake_project) "-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}" "-DCMAKE_INSTALL_PREFIX=${build_dir}/install" "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}" - "-DFIND_PACKAGES=${packages}" ${arg_OPTIONS} WORKING_DIRECTORY "${build_dir}" LOGNAME "cmake-user-${TARGET_TRIPLET}-${arg_NAME}-config" @@ -110,16 +109,46 @@ function(test_cmake_project) WORKING_DIRECTORY "${build_dir}" LOGNAME "cmake-user-${TARGET_TRIPLET}-${arg_NAME}-build" ) + # To produce better error messages for failing wrappers, + # we run execute_process directly here, for each wrapper. + set(failed_packages 0) + string(REPLACE " OFF:" ":" message + " CMake ${cmake_version}: `find_package(@package@)` failed.\n" + " See logs for more information:\n" + " @log_out@\n" + " @log_err@\n" + ) + foreach(package IN LISTS packages) + set(log_out "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-out.log") + set(log_err "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-err.log") + execute_process( + COMMAND + "${CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project" + "-DFIND_PACKAGES=${package}" + OUTPUT_FILE "${log_out}" + ERROR_FILE "${log_err}" + RESULT_VARIABLE package_result + WORKING_DIRECTORY "${build_dir}" + ) + if(package_result) + set(failed_packages 1) + string(CONFIGURE "${message}" package_message @ONLY) + if(DEFINED ENV{BUILD_REASON}) # On Azure Pipelines, add extra markup. + string(REGEX REPLACE "^ *(CMake)" "##vso[task.logissue type=error]\\1" package_message "${package_message}") + endif() + message(SEND_ERROR "${package_message}") + endif() + endforeach() endfunction() -test_cmake_project(NAME "test-0" +test_cmake_project(NAME "release" OPTIONS "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_PREFIX_PATH=SYSTEM_LIBS" # for testing VCPKG_PREFER_SYSTEM_LIBS "-DVCPKG_PREFER_SYSTEM_LIBS=OFF" "-DCHECK_CMAKE_VERSION=${cmake_version}" ) -test_cmake_project(NAME "test-1" +test_cmake_project(NAME "debug" OPTIONS "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_PREFIX_PATH=SYSTEM_LIBS" # for testing VCPKG_PREFER_SYSTEM_LIBS From b5d9f7516aef98b153c4bbb284685f09b689421e Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sat, 11 Sep 2021 17:27:01 +0200 Subject: [PATCH 03/13] Remove JPEG from find_package tests --- scripts/test_ports/cmake-user/vcpkg.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/test_ports/cmake-user/vcpkg.json b/scripts/test_ports/cmake-user/vcpkg.json index 1ab228366a786f..bdb2f2d71566b3 100644 --- a/scripts/test_ports/cmake-user/vcpkg.json +++ b/scripts/test_ports/cmake-user/vcpkg.json @@ -40,10 +40,6 @@ "$package": "Intl", "name": "gettext" }, - { - "$package": "JPEG", - "name": "libjpeg-turbo" - }, { "$package": "LibLZMA", "name": "liblzma" From 56ad3e3212826f2a04fefe97c1d738e9ed60f504 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sun, 12 Sep 2021 15:35:51 +0200 Subject: [PATCH 04/13] Report find_package tests to stdout --- scripts/test_ports/cmake-user/portfile.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index 9243e610fa0b02..7c3f457ec99c05 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -119,6 +119,7 @@ function(test_cmake_project) " @log_err@\n" ) foreach(package IN LISTS packages) + message(STATUS "Testing `find_package(${package})` (${arg_NAME})") set(log_out "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-out.log") set(log_err "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-err.log") execute_process( From 943c36511673e81e0322c56d0fff4d4500a60419 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sun, 12 Sep 2021 17:48:25 +0200 Subject: [PATCH 05/13] Test more packages --- scripts/test_ports/cmake-user/vcpkg.json | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/scripts/test_ports/cmake-user/vcpkg.json b/scripts/test_ports/cmake-user/vcpkg.json index bdb2f2d71566b3..dfbcd2140eae71 100644 --- a/scripts/test_ports/cmake-user/vcpkg.json +++ b/scripts/test_ports/cmake-user/vcpkg.json @@ -32,18 +32,43 @@ "find-package": { "description": "Ports to be tested via find_package($package)", "dependencies": [ + { + "$package": "BZip2", + "name": "bzip2" + }, + { + "$package": "CURL", + "name": "curl" + }, { "$package": "EXPAT", "name": "expat" }, + { + "$package": "Freetype", + "name": "freetype" + }, { "$package": "Intl", "name": "gettext" }, + { + "$package": "GIF", + "name": "giflib" + }, { "$package": "LibLZMA", "name": "liblzma" }, + { + "$package": "Curses", + "name": "ncurses", + "platform": "!windows & !uwp" + }, + { + "$package": "TIFF", + "name": "tiff" + }, { "$package": "ZLIB", "name": "zlib" From 7c48fa2dd7fbc2575ed282789f7bd586a9a89735 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sun, 12 Sep 2021 18:15:52 +0200 Subject: [PATCH 06/13] Revise package list --- scripts/test_ports/cmake-user/portfile.cmake | 3 +++ scripts/test_ports/cmake-user/vcpkg.json | 8 -------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index 7c3f457ec99c05..f6c2906c38df57 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -56,6 +56,9 @@ if("find-package" IN_LIST FEATURES) list(APPEND packages "${package}") endforeach() endif() + if(VPCKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + list(REMOVE_ITEM packages "Curses") + endif() endif() if(DEFINED ENV{VCPKG_FORCE_SYSTEM_BINARIES}) diff --git a/scripts/test_ports/cmake-user/vcpkg.json b/scripts/test_ports/cmake-user/vcpkg.json index dfbcd2140eae71..bf8ca455bd97eb 100644 --- a/scripts/test_ports/cmake-user/vcpkg.json +++ b/scripts/test_ports/cmake-user/vcpkg.json @@ -36,10 +36,6 @@ "$package": "BZip2", "name": "bzip2" }, - { - "$package": "CURL", - "name": "curl" - }, { "$package": "EXPAT", "name": "expat" @@ -65,10 +61,6 @@ "name": "ncurses", "platform": "!windows & !uwp" }, - { - "$package": "TIFF", - "name": "tiff" - }, { "$package": "ZLIB", "name": "zlib" From a7508f894b54bdbaa873720723ca6689dcd9858d Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sun, 12 Sep 2021 18:16:49 +0200 Subject: [PATCH 07/13] Remove obsolete variable --- scripts/test_ports/cmake-user/portfile.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index f6c2906c38df57..535632234f9255 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -114,7 +114,6 @@ function(test_cmake_project) ) # To produce better error messages for failing wrappers, # we run execute_process directly here, for each wrapper. - set(failed_packages 0) string(REPLACE " OFF:" ":" message " CMake ${cmake_version}: `find_package(@package@)` failed.\n" " See logs for more information:\n" @@ -135,7 +134,6 @@ function(test_cmake_project) WORKING_DIRECTORY "${build_dir}" ) if(package_result) - set(failed_packages 1) string(CONFIGURE "${message}" package_message @ONLY) if(DEFINED ENV{BUILD_REASON}) # On Azure Pipelines, add extra markup. string(REGEX REPLACE "^ *(CMake)" "##vso[task.logissue type=error]\\1" package_message "${package_message}") From cefdf7ed29340923f39cf6f8019ff3597665bf9e Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sun, 12 Sep 2021 18:21:13 +0200 Subject: [PATCH 08/13] Move AZP markup out of loop --- scripts/test_ports/cmake-user/portfile.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index 535632234f9255..b9312d40adef37 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -120,6 +120,9 @@ function(test_cmake_project) " @log_out@\n" " @log_err@\n" ) + if(DEFINED ENV{BUILD_REASON}) # On Azure Pipelines, add extra markup. + string(REPLACE " CMake" "##vso[task.logissue type=error]CMake" message "${message}") + endif() foreach(package IN LISTS packages) message(STATUS "Testing `find_package(${package})` (${arg_NAME})") set(log_out "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-out.log") @@ -135,9 +138,6 @@ function(test_cmake_project) ) if(package_result) string(CONFIGURE "${message}" package_message @ONLY) - if(DEFINED ENV{BUILD_REASON}) # On Azure Pipelines, add extra markup. - string(REGEX REPLACE "^ *(CMake)" "##vso[task.logissue type=error]\\1" package_message "${package_message}") - endif() message(SEND_ERROR "${package_message}") endif() endforeach() From 511b557fd509a7f273e540e4111a51757d365b2f Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Mon, 13 Sep 2021 07:19:09 +0200 Subject: [PATCH 09/13] Fix typo --- scripts/test_ports/cmake-user/portfile.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index b9312d40adef37..bc6419400f591a 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -56,7 +56,7 @@ if("find-package" IN_LIST FEATURES) list(APPEND packages "${package}") endforeach() endif() - if(VPCKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) list(REMOVE_ITEM packages "Curses") endif() endif() From 2bbfd92ef46c97d68d4856cadcad478e7f2bdcf5 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sat, 18 Sep 2021 17:23:48 +0200 Subject: [PATCH 10/13] Isolate find_package tests --- scripts/test_ports/cmake-user/portfile.cmake | 46 ++++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index bc6419400f591a..6b5cffef792349 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -74,43 +74,46 @@ function(test_cmake_project) endif() set(build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${arg_NAME}") - file(REMOVE_RECURSE "${build_dir}") - file(MAKE_DIRECTORY "${build_dir}") + set(base_options + -G "Ninja" + "-DCMAKE_MAKE_PROGRAM=${NINJA}" + "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake" + "-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}" + "-DCMAKE_INSTALL_PREFIX=${build_dir}/install" + "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}" + ) if(DEFINED VCPKG_CMAKE_SYSTEM_NAME AND VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") - list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}") + list(APPEND base_options "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}") if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION) - list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}") + list(APPEND base_options "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}") endif() if(DEFINED VCPKG_PLATFORM_TOOLSET) - list(APPEND arg_OPTIONS "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}") + list(APPEND base_options "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}") endif() endif() if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") - list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=ON) + list(APPEND base_options -DBUILD_SHARED_LIBS=ON) else() - list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=OFF) + list(APPEND base_options -DBUILD_SHARED_LIBS=OFF) endif() + file(REMOVE_RECURSE "${build_dir}") + file(MAKE_DIRECTORY "${build_dir}") vcpkg_execute_required_process( COMMAND "${CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project" - -G "Ninja" - "-DCMAKE_MAKE_PROGRAM=${NINJA}" - "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/../../buildsystems/vcpkg.cmake" - "-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}" - "-DCMAKE_INSTALL_PREFIX=${build_dir}/install" - "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}" + ${base_options} ${arg_OPTIONS} WORKING_DIRECTORY "${build_dir}" - LOGNAME "cmake-user-${TARGET_TRIPLET}-${arg_NAME}-config" + LOGNAME "${TARGET_TRIPLET}-${arg_NAME}-config" ) vcpkg_execute_required_process( COMMAND "${CMAKE_COMMAND}" --build . --target install WORKING_DIRECTORY "${build_dir}" - LOGNAME "cmake-user-${TARGET_TRIPLET}-${arg_NAME}-build" + LOGNAME "${TARGET_TRIPLET}-${arg_NAME}-build" ) # To produce better error messages for failing wrappers, # we run execute_process directly here, for each wrapper. @@ -124,17 +127,24 @@ function(test_cmake_project) string(REPLACE " CMake" "##vso[task.logissue type=error]CMake" message "${message}") endif() foreach(package IN LISTS packages) + string(MAKE_C_IDENTIFIER "${package}" package_string) + set(find_package_build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-find-package-${package_string}-${arg_NAME}") + set(log_out "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-find-package-${package_string}-${arg_NAME}-out.log") + set(log_err "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-find-package-${package_string}-${arg_NAME}-err.log") + message(STATUS "Testing `find_package(${package})` (${arg_NAME})") - set(log_out "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-out.log") - set(log_err "${CURRENT_BUILDTREES_DIR}/find-package-${package}-${TARGET_TRIPLET}-${arg_NAME}-err.log") + file(REMOVE_RECURSE "${find_package_build_dir}") + file(MAKE_DIRECTORY "${find_package_build_dir}") execute_process( COMMAND "${CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project" + ${base_options} + ${arg_OPTIONS} "-DFIND_PACKAGES=${package}" OUTPUT_FILE "${log_out}" ERROR_FILE "${log_err}" RESULT_VARIABLE package_result - WORKING_DIRECTORY "${build_dir}" + WORKING_DIRECTORY "${find_package_build_dir}" ) if(package_result) string(CONFIGURE "${message}" package_message @ONLY) From c2973b5970046c4b6831301f8b5614c4fa8fdbaa Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sat, 18 Sep 2021 17:24:32 +0200 Subject: [PATCH 11/13] Disable manifest mode --- scripts/test_ports/cmake-user/portfile.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index 6b5cffef792349..47ecb3fcf0bab4 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -81,6 +81,7 @@ function(test_cmake_project) "-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}" "-DCMAKE_INSTALL_PREFIX=${build_dir}/install" "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}" + "-DVCPKG_MANIFEST_MODE=OFF" ) if(DEFINED VCPKG_CMAKE_SYSTEM_NAME AND VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") From 52f0073fd6c1b74cb103c8eac138d678ec153ca8 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sat, 18 Sep 2021 17:26:15 +0200 Subject: [PATCH 12/13] Improve stdout --- scripts/test_ports/cmake-user/portfile.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/test_ports/cmake-user/portfile.cmake b/scripts/test_ports/cmake-user/portfile.cmake index 47ecb3fcf0bab4..28fb50d94c1381 100644 --- a/scripts/test_ports/cmake-user/portfile.cmake +++ b/scripts/test_ports/cmake-user/portfile.cmake @@ -100,6 +100,7 @@ function(test_cmake_project) list(APPEND base_options -DBUILD_SHARED_LIBS=OFF) endif() + message(STATUS "Running tests for '${arg_NAME}'") file(REMOVE_RECURSE "${build_dir}") file(MAKE_DIRECTORY "${build_dir}") vcpkg_execute_required_process( @@ -133,7 +134,7 @@ function(test_cmake_project) set(log_out "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-find-package-${package_string}-${arg_NAME}-out.log") set(log_err "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-find-package-${package_string}-${arg_NAME}-err.log") - message(STATUS "Testing `find_package(${package})` (${arg_NAME})") + message(STATUS " find_package(${package})") file(REMOVE_RECURSE "${find_package_build_dir}") file(MAKE_DIRECTORY "${find_package_build_dir}") execute_process( From 70fbd35d62d68b2d097fe090bd39b84e2ce8ebda Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Sat, 18 Sep 2021 20:24:01 +0200 Subject: [PATCH 13/13] Enable debug output for find_package --- scripts/test_ports/cmake-user/project/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/test_ports/cmake-user/project/CMakeLists.txt b/scripts/test_ports/cmake-user/project/CMakeLists.txt index 26f29f5e54fafd..bd6b05dfe65285 100644 --- a/scripts/test_ports/cmake-user/project/CMakeLists.txt +++ b/scripts/test_ports/cmake-user/project/CMakeLists.txt @@ -46,7 +46,9 @@ install(TARGETS exe lib set(FIND_PACKAGES "" CACHE STRING "List of packages to be found and used") foreach(package ${FIND_PACKAGES}) string(TOUPPER "${package}" package_upper) + set(CMAKE_FIND_DEBUG_MODE ON) find_package("${package}" QUIET) + set(CMAKE_FIND_DEBUG_MODE OFF) if(NOT ${package}_FOUND AND NOT ${package_upper}_FOUND) message(SEND_ERROR "find_package(${package}) check: failed") elseif(DEFINED ${package_upper}_LIBRARIES)