early-access version 2853
This commit is contained in:
213
externals/vcpkg/scripts/test_ports/cmake-user/portfile.cmake
vendored
Executable file
213
externals/vcpkg/scripts/test_ports/cmake-user/portfile.cmake
vendored
Executable file
@@ -0,0 +1,213 @@
|
||||
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
|
||||
|
||||
set(cmake_commands "")
|
||||
if("cmake-current" IN_LIST FEATURES)
|
||||
list(APPEND cmake_commands "${CMAKE_COMMAND}")
|
||||
endif()
|
||||
if("cmake-3-7" IN_LIST FEATURES)
|
||||
set(cmake_version 3.7.2)
|
||||
string(REGEX REPLACE "([^.]*[.][^.]*).*" "\\1" cmake_major_minor "${cmake_version}")
|
||||
if(VCPKG_HOST_IS_WINDOWS)
|
||||
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 c359a22e2e688da1513db195280d6e8987bc8d570a0c543f1b1dfc8572fe4fd6c23d951ec5d5eae640fcca3bef3ae469083511474796ade8c6319d8bc4e4b38d
|
||||
)
|
||||
set(cmake_bin_dir "/bin")
|
||||
elseif(VCPKG_HOST_IS_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/v${cmake_version}/${name}.tar.gz"
|
||||
"https://cmake.org/files/v${cmake_major_minor}/${name}.tar.gz"
|
||||
SHA512 8e41608f4dd998020acf2bd1b0dab4aec37b3ea9e228f2c4a457cd1c0339d94db38a0548b4b07a9e3605f9beb11a3f6737a72813586c4ad5f730d74038a14c2b
|
||||
)
|
||||
set(cmake_bin_dir "/CMake.app/Contents/bin")
|
||||
elseif(VCPKG_HOST_IS_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/v${cmake_version}/${name}.tar.gz"
|
||||
"https://cmake.org/files/v${cmake_major_minor}/${name}.tar.gz"
|
||||
SHA512 459909fcfb9c74993c3d4ab9db4e31ea940515b670db44d039de611d813099895e695467cc8da24824315486e38e2f3e246aa92d6236c51103822ec8a39e3168
|
||||
)
|
||||
set(cmake_bin_dir "/bin")
|
||||
else()
|
||||
message(FATAL_ERROR "Unable to test feature 'cmake-3-7' 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}"
|
||||
)
|
||||
list(APPEND cmake_commands "${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()
|
||||
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
|
||||
list(REMOVE_ITEM packages "Curses")
|
||||
endif()
|
||||
if(VCPKG_TARGET_IS_LINUX)
|
||||
# Port wxwidgets requires linux system libraries which conflict with vcpkg ports.
|
||||
# This line complements the "platform" restriction from vcpkg.json.
|
||||
list(REMOVE_ITEM packages "wxWidgets")
|
||||
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" "" "CMAKE_COMMAND;NAME" "OPTIONS")
|
||||
if(NOT arg_NAME)
|
||||
message(FATAL_ERROR "The NAME argument is mandatory.")
|
||||
endif()
|
||||
if(NOT arg_CMAKE_COMMAND)
|
||||
set(arg_CMAKE_COMMAND "${CMAKE_COMMAND}")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "${arg_CMAKE_COMMAND}" --version
|
||||
OUTPUT_VARIABLE cmake_version_output
|
||||
RESULT_VARIABLE cmake_version_result
|
||||
)
|
||||
string(REGEX MATCH "[1-9][0-9]*\\.[0-9]*\\.[0-9]*" cmake_version "${cmake_version_output}")
|
||||
if(cmake_version_result OR NOT cmake_version)
|
||||
message(FATAL_ERROR "Unable to determine version for '${arg_CMAKE_COMMAND}'.")
|
||||
endif()
|
||||
|
||||
set(build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-${arg_NAME}")
|
||||
set(base_options
|
||||
-G "Ninja"
|
||||
"-DCMAKE_MAKE_PROGRAM=${NINJA}"
|
||||
"-DCMAKE_VERBOSE_MAKEFILE=ON"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake"
|
||||
"-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}"
|
||||
"-DCMAKE_INSTALL_PREFIX=${build_dir}/install"
|
||||
"-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}"
|
||||
"-DVCPKG_MANIFEST_MODE=OFF"
|
||||
"-DCHECK_CMAKE_VERSION=${cmake_version}"
|
||||
)
|
||||
|
||||
if(DEFINED VCPKG_CMAKE_SYSTEM_NAME AND VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
||||
list(APPEND base_options "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
|
||||
if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
|
||||
list(APPEND base_options "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
|
||||
endif()
|
||||
if(DEFINED VCPKG_PLATFORM_TOOLSET)
|
||||
list(APPEND base_options "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
||||
list(APPEND base_options -DBUILD_SHARED_LIBS=ON)
|
||||
else()
|
||||
list(APPEND base_options -DBUILD_SHARED_LIBS=OFF)
|
||||
endif()
|
||||
|
||||
message(STATUS "Running tests with CMake ${cmake_version} for '${arg_NAME}'")
|
||||
file(REMOVE_RECURSE "${build_dir}")
|
||||
file(MAKE_DIRECTORY "${build_dir}")
|
||||
vcpkg_execute_required_process(
|
||||
COMMAND
|
||||
"${arg_CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project"
|
||||
${base_options}
|
||||
${arg_OPTIONS}
|
||||
WORKING_DIRECTORY "${build_dir}"
|
||||
LOGNAME "${TARGET_TRIPLET}-${cmake_version}-${arg_NAME}-config"
|
||||
)
|
||||
vcpkg_execute_required_process(
|
||||
COMMAND
|
||||
"${arg_CMAKE_COMMAND}" --build . --target install
|
||||
WORKING_DIRECTORY "${build_dir}"
|
||||
LOGNAME "${TARGET_TRIPLET}-${cmake_version}-${arg_NAME}-build"
|
||||
)
|
||||
# To produce better error messages for failing wrappers,
|
||||
# we run execute_process directly here, for each wrapper.
|
||||
string(REPLACE " OFF:" ":" message
|
||||
" CMake ${cmake_version}: @step@ with `find_package(@package@)` failed.\n"
|
||||
" See logs for more information:\n"
|
||||
" @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)
|
||||
string(MAKE_C_IDENTIFIER "${package}" package_string)
|
||||
set(find_package_build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}")
|
||||
set(log_out "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-out.log")
|
||||
set(log_err "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-err.log")
|
||||
|
||||
message(STATUS " find_package(${package})")
|
||||
file(REMOVE_RECURSE "${find_package_build_dir}")
|
||||
file(MAKE_DIRECTORY "${find_package_build_dir}")
|
||||
execute_process(
|
||||
COMMAND
|
||||
"${arg_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 "${find_package_build_dir}"
|
||||
)
|
||||
if(package_result)
|
||||
set(step "configuration")
|
||||
string(CONFIGURE "${message}" package_message @ONLY)
|
||||
message(SEND_ERROR "${package_message}")
|
||||
else()
|
||||
set(log_out "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-build-out.log")
|
||||
set(log_err "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-build-err.log")
|
||||
execute_process(
|
||||
COMMAND
|
||||
"${arg_CMAKE_COMMAND}" --build .
|
||||
OUTPUT_FILE "${log_out}"
|
||||
ERROR_FILE "${log_err}"
|
||||
RESULT_VARIABLE package_result
|
||||
WORKING_DIRECTORY "${find_package_build_dir}"
|
||||
)
|
||||
if(package_result)
|
||||
set(step "build")
|
||||
string(CONFIGURE "${message}" package_message @ONLY)
|
||||
message(SEND_ERROR "${package_message}")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
foreach(executable IN LISTS cmake_commands)
|
||||
test_cmake_project(NAME "release"
|
||||
CMAKE_COMMAND "${executable}"
|
||||
OPTIONS
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
"-DCMAKE_PREFIX_PATH=SYSTEM_LIBS" # for testing VCPKG_PREFER_SYSTEM_LIBS
|
||||
"-DVCPKG_PREFER_SYSTEM_LIBS=OFF"
|
||||
)
|
||||
test_cmake_project(NAME "debug"
|
||||
CMAKE_COMMAND "${executable}"
|
||||
OPTIONS
|
||||
"-DCMAKE_BUILD_TYPE=Debug"
|
||||
"-DCMAKE_PREFIX_PATH=SYSTEM_LIBS" # for testing VCPKG_PREFER_SYSTEM_LIBS
|
||||
"-DVCPKG_PREFER_SYSTEM_LIBS=ON"
|
||||
)
|
||||
endforeach()
|
109
externals/vcpkg/scripts/test_ports/cmake-user/project/CMakeLists.txt
vendored
Executable file
109
externals/vcpkg/scripts/test_ports/cmake-user/project/CMakeLists.txt
vendored
Executable file
@@ -0,0 +1,109 @@
|
||||
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)
|
||||
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")
|
||||
continue()
|
||||
endif()
|
||||
# REQUIRED changes the behaviour find_package_handle_standard_args.
|
||||
find_package("${package}" REQUIRED)
|
||||
message(STATUS "find_package(${package}) check: success")
|
||||
|
||||
set(libraries_var "")
|
||||
if(DEFINED ${package}_LIBRARIES)
|
||||
set(libraries_var "${package}_LIBRARIES")
|
||||
elseif(DEFINED ${package_upper}_LIBRARIES)
|
||||
set(libraries_var "${package_upper}_LIBRARIES")
|
||||
elseif(DEFINED ${package}_LIBRARY)
|
||||
set(libraries_var "${package}_LIBRARY")
|
||||
elseif(DEFINED ${package_upper}_LIBRARY)
|
||||
set(libraries_var "${package_upper}_LIBRARY")
|
||||
else()
|
||||
message(STATUS "${package}_LIBRARY/IES: undefined")
|
||||
continue()
|
||||
endif()
|
||||
set(libraries "${${libraries_var}}")
|
||||
message(STATUS "${libraries_var}: ${libraries}")
|
||||
|
||||
if(package STREQUAL "Intl" AND NOT Intl_LIBRARY)
|
||||
continue() # using libintl.h from C runtime library
|
||||
endif()
|
||||
target_link_libraries(exe PRIVATE ${libraries})
|
||||
|
||||
set(last_keyword "")
|
||||
foreach(item IN LISTS libraries)
|
||||
if(item STREQUAL "optimized" OR item STREQUAL "debug")
|
||||
set(last_keyword "${item}")
|
||||
continue()
|
||||
endif()
|
||||
string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/" starts_with_release)
|
||||
string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/" starts_with_debug)
|
||||
if(starts_with_release EQUAL "0")
|
||||
if(last_keyword STREQUAL "optimized")
|
||||
# okay
|
||||
elseif(last_keyword STREQUAL "debug")
|
||||
message(SEND_ERROR "Release lib for 'debug' keyword: ${item}")
|
||||
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
message(SEND_ERROR "Release lib for 'Debug' build: ${item}")
|
||||
endif()
|
||||
elseif(starts_with_debug EQUAL "0")
|
||||
if(last_keyword STREQUAL "debug")
|
||||
# okay
|
||||
elseif(last_keyword STREQUAL "optimized")
|
||||
message(SEND_ERROR "Debug lib for 'optimized' keyword: ${item}")
|
||||
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
message(SEND_ERROR "Debug lib for 'Release' build: ${item}")
|
||||
endif()
|
||||
endif()
|
||||
set(last_keyword "")
|
||||
continue()
|
||||
endforeach()
|
||||
endforeach()
|
96
externals/vcpkg/scripts/test_ports/cmake-user/vcpkg.json
vendored
Executable file
96
externals/vcpkg/scripts/test_ports/cmake-user/vcpkg.json
vendored
Executable file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"name": "cmake-user",
|
||||
"version-date": "2022-04-18",
|
||||
"description": "Test port to verify the vcpkg toolchain in cmake user projects",
|
||||
"license": "MIT",
|
||||
"default-features": [
|
||||
"ci"
|
||||
],
|
||||
"features": {
|
||||
"ci": {
|
||||
"description": "The CI set of features to test",
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "cmake-user",
|
||||
"default-features": false,
|
||||
"features": [
|
||||
"cmake-current",
|
||||
"find-package"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cmake-user",
|
||||
"default-features": false,
|
||||
"features": [
|
||||
"cmake-3-7"
|
||||
],
|
||||
"platform": "x64 & (windows | linux | osx) & !uwp"
|
||||
}
|
||||
]
|
||||
},
|
||||
"cmake-3-7": {
|
||||
"description": "Run the tests with CMake 3.7"
|
||||
},
|
||||
"cmake-current": {
|
||||
"description": "Run the tests with vcpkg's current version of CMake"
|
||||
},
|
||||
"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": "ICU",
|
||||
"name": "icu"
|
||||
},
|
||||
{
|
||||
"$package": "JPEG",
|
||||
"name": "libjpeg-turbo"
|
||||
},
|
||||
{
|
||||
"$package": "LibLZMA",
|
||||
"name": "liblzma"
|
||||
},
|
||||
{
|
||||
"$package": "PNG",
|
||||
"name": "libpng"
|
||||
},
|
||||
{
|
||||
"$package": "TIFF",
|
||||
"name": "tiff"
|
||||
},
|
||||
{
|
||||
"$package": "wxWidgets",
|
||||
"name": "wxwidgets",
|
||||
"platform": "!linux"
|
||||
},
|
||||
{
|
||||
"$package": "ZLIB",
|
||||
"name": "zlib"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user