mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-01 02:46:21 +08:00
47633daa65
Avoid wrong use of popular but ambiguous variables (`WIN32` etc.) in scripts and portfiles by detection in CI. Sometimes the variables are used wrongly, and sometimes this isn't caught in PR review. This PR tries to catch those variables (when in the active code path in script mode). [This can happen to every contributor](https://github.com/microsoft/vcpkg/pull/34356#discussion_r1360074122), even if he/she knows the rules ... vcpkg is raising the bar higher than usual, having to deal with targets and hosts even in script mode. (`b2-options.cmake` (boost fragment) shows where we get if we don't pay attention: the same code being used in script mode (`WIN32` meaning host) and in project mode (`WIN32` meaning target).) The new check doesn't break any user builds because it relies on command line options. However it changes the ABI hashes.
150 lines
6.3 KiB
CMake
150 lines
6.3 KiB
CMake
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO mosra/magnum-plugins
|
|
REF v2020.06
|
|
SHA512 3c11c2928bfc9d04c1ad64f72b6ffac6cf80a1ef3aacc5d0486b9ad955cf4f6ea6d5dcb3846dc5d73f64ec522a015eafb997f62c79ad7ff91169702341f23af0
|
|
HEAD_REF master
|
|
PATCHES
|
|
002-fix-stb-conflict.patch
|
|
)
|
|
|
|
if("basisimporter" IN_LIST FEATURES OR "basisimageconverter" IN_LIST FEATURES)
|
|
# Bundle Basis Universal. The repo has big unrequired files in its
|
|
# history, so we're downloading just a snapshot instead of a git clone.
|
|
if(VCPKG_USE_HEAD_VERSION)
|
|
# v1_15_update2
|
|
set(_BASIS_VERSION "v1_15_update2")
|
|
set(_BASIS_SHA512 "a898a057b57ac64f6c0bf5fce0b599e23421ccdd015ea7bb668bce8b9292ef55b098f3d05854a2fb5363959932b75cd0a842664ae7d4f71f3537dc11301c1b32")
|
|
else()
|
|
# A commit that's before the UASTC support (which is not implemented yet)
|
|
vcpkg_download_distfile(
|
|
_BASIS_UNIVERSAL_PATCHES
|
|
URLS "https://github.com/BinomialLLC/basis_universal/commit/e9c55faac7745ebf38d08cd3b4f71aaf542f8191.diff?full_index=1"
|
|
FILENAME "e9c55faac7745ebf38d08cd3b4f71aaf542f8191.patch"
|
|
SHA512 1121d5fa6cce617cfc393b48ac13f21e7f977522746702b3968f5fc86c58de6a3b91e4371692e8566747a975cb46de5421ab1cf635d3904fd74c07bbdfcaa78e
|
|
)
|
|
set(_BASIS_VERSION "8565af680d1bd2ad56ab227ca7d96c56dfbe93ed")
|
|
set(_BASIS_SHA512 "65062ab3ba675c46760f56475a7528189ed4097fb9bab8316e25d9e23ffec2a9560eb9a6897468baf2a6ab2bd698b5907283e96deaeaef178085a47f9d371bb2")
|
|
endif()
|
|
vcpkg_download_distfile(
|
|
_BASIS_UNIVERSAL_ARCHIVE
|
|
URLS "https://github.com/BinomialLLC/basis_universal/archive/${_BASIS_VERSION}.tar.gz"
|
|
FILENAME "basis-universal-${_BASIS_VERSION}.tar.gz"
|
|
SHA512 ${_BASIS_SHA512}
|
|
)
|
|
vcpkg_extract_source_archive(
|
|
_BASIS_UNIVERSAL_SOURCE
|
|
ARCHIVE ${_BASIS_UNIVERSAL_ARCHIVE}
|
|
WORKING_DIRECTORY "${SOURCE_PATH}/src/external"
|
|
PATCHES
|
|
${_BASIS_UNIVERSAL_PATCHES})
|
|
# Remove potentially cached directory which would cause renaming to fail
|
|
file(REMOVE_RECURSE "${SOURCE_PATH}/src/external/basis-universal")
|
|
# Rename the output folder so that magnum auto-detects it
|
|
file(RENAME ${_BASIS_UNIVERSAL_SOURCE} "${SOURCE_PATH}/src/external/basis-universal")
|
|
endif()
|
|
|
|
if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
|
|
set(BUILD_PLUGINS_STATIC 1)
|
|
else()
|
|
set(BUILD_PLUGINS_STATIC 0)
|
|
endif()
|
|
|
|
# Head only features
|
|
set(ALL_SUPPORTED_FEATURES ${ALL_FEATURES})
|
|
if(NOT VCPKG_USE_HEAD_VERSION)
|
|
set(head_only cgltfimporter glslangshaderconverter ktximageconverter ktximporter openexrimageconverter openexrimporter spirvtoolsshaderconverter stbdxtimageconverter)
|
|
foreach(_feature ${head_only})
|
|
if("${_feature}" IN_LIST FEATURES)
|
|
list(JOIN head_only ", " features_list)
|
|
message(FATAL_ERROR "Features ${features_list} are not avaliable when building non-head version.")
|
|
endif()
|
|
endforeach()
|
|
list(REMOVE_ITEM ALL_SUPPORTED_FEATURES ${head_only})
|
|
endif()
|
|
|
|
set(_COMPONENTS "")
|
|
# Generate cmake parameters from feature names
|
|
foreach(_feature IN LISTS ALL_SUPPORTED_FEATURES)
|
|
# Uppercase the feature name and replace "-" with "_"
|
|
string(TOUPPER "${_feature}" _FEATURE)
|
|
string(REPLACE "-" "_" _FEATURE "${_FEATURE}")
|
|
|
|
# Final feature is empty, ignore it
|
|
if(_feature)
|
|
list(APPEND _COMPONENTS ${_feature} WITH_${_FEATURE})
|
|
endif()
|
|
endforeach()
|
|
|
|
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS FEATURES ${_COMPONENTS})
|
|
|
|
if(VCPKG_CROSSCOMPILING)
|
|
set(CORRADE_RC_EXECUTABLE "-DCORRADE_RC_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/corrade/corrade-rc${VCPKG_HOST_EXECUTABLE_SUFFIX}")
|
|
endif()
|
|
|
|
vcpkg_cmake_configure(
|
|
SOURCE_PATH "${SOURCE_PATH}"
|
|
OPTIONS
|
|
${FEATURE_OPTIONS}
|
|
${CORRADE_RC_EXECUTABLE}
|
|
-DBUILD_STATIC=${BUILD_PLUGINS_STATIC}
|
|
-DBUILD_PLUGINS_STATIC=${BUILD_PLUGINS_STATIC}
|
|
-DMAGNUM_PLUGINS_DEBUG_DIR=${CURRENT_INSTALLED_DIR}/debug/bin/magnum-d
|
|
-DMAGNUM_PLUGINS_RELEASE_DIR=${CURRENT_INSTALLED_DIR}/bin/magnum
|
|
)
|
|
|
|
vcpkg_cmake_install()
|
|
|
|
vcpkg_cmake_config_fixup(PACKAGE_NAME MagnumPlugins CONFIG_PATH share/cmake/MagnumPlugins)
|
|
|
|
# Debug includes and share are the same as release
|
|
file(REMOVE_RECURSE
|
|
"${CURRENT_PACKAGES_DIR}/debug/include"
|
|
"${CURRENT_PACKAGES_DIR}/debug/share")
|
|
|
|
# Clean up empty directories, if not building anything.
|
|
# FEATURES may only contain "core", but that does not build anything.
|
|
if(NOT FEATURES OR FEATURES STREQUAL "core")
|
|
file(REMOVE_RECURSE
|
|
"${CURRENT_PACKAGES_DIR}/bin"
|
|
"${CURRENT_PACKAGES_DIR}/lib"
|
|
"${CURRENT_PACKAGES_DIR}/debug")
|
|
set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled)
|
|
endif()
|
|
|
|
if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin")
|
|
# move plugin libs to conventional place
|
|
file(GLOB_RECURSE LIB_TO_MOVE "${CURRENT_PACKAGES_DIR}/lib/magnum/*")
|
|
file(COPY ${LIB_TO_MOVE} DESTINATION "${CURRENT_PACKAGES_DIR}/lib")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/magnum")
|
|
file(GLOB_RECURSE LIB_TO_MOVE_DBG "${CURRENT_PACKAGES_DIR}/debug/lib/magnum/*")
|
|
file(COPY ${LIB_TO_MOVE_DBG} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/magnum")
|
|
else()
|
|
set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled)
|
|
# On windows, plugins are "Modules" that cannot be linked as shared
|
|
# libraries, but are meant to be loaded at runtime.
|
|
# While this is handled adequately through the CMake project, the auto-magic
|
|
# linking with visual studio might try to link the import libs anyway.
|
|
#
|
|
# We delete the import libraries here to avoid the auto-magic linking
|
|
# for plugins which are loaded at runtime.
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
set(VCPKG_POLICY_DLLS_WITHOUT_LIBS enabled)
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/magnum")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/magnum-d")
|
|
file(GLOB maybe_empty "${CURRENT_PACKAGES_DIR}/lib/*")
|
|
if(maybe_empty STREQUAL "")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Handle copyright
|
|
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
|
|
|
|
vcpkg_copy_pdbs()
|