mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-28 01:27:55 +08:00
3a7cb341b8
This updates the cppwinrt port to use the latest Microsoft.Windows.CppWinRT package from NuGet. Includes clean up of the portfile for modern best practices. This also cleans up the cmake integration: * Uses `cppwinrt_FOUND` instead of the nonstandard `CppWinRT_FOUND` * Provides `CPPWINRT_TOOL` for being able to generate C++/WinRT headers from .winmd files as custom commands
73 lines
2.8 KiB
CMake
73 lines
2.8 KiB
CMake
|
|
vcpkg_download_distfile(ARCHIVE
|
|
URLS "https://www.nuget.org/api/v2/package/Microsoft.Windows.CppWinRT/${VERSION}"
|
|
FILENAME "cppwinrt.${VERSION}.zip"
|
|
SHA512 c6c38b81640d7d96d3ca76c321289d6f92eec9bb593a11824640c7dc3651dc69cce1e85ca0324396b4a4d55f790f2c16f835da261e7821137de1eb491b52ffc8
|
|
)
|
|
|
|
vcpkg_extract_source_archive(
|
|
src
|
|
ARCHIVE "${ARCHIVE}"
|
|
NO_REMOVE_ONE_LEVEL
|
|
)
|
|
|
|
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
|
|
set(CPPWINRT_ARCH win32)
|
|
else()
|
|
set(CPPWINRT_ARCH ${VCPKG_TARGET_ARCHITECTURE})
|
|
endif()
|
|
|
|
set(CPPWINRT_TOOL "${src}/bin/cppwinrt.exe")
|
|
|
|
#--- Find Windows SDK Version
|
|
if (NOT EXISTS "$ENV{WindowsSDKDir}/Lib/$ENV{WindowsSDKVersion}.")
|
|
message(FATAL_ERROR "ERROR: Cannot locate the Windows SDK. Please define %WindowsSDKDir% and %WindowsSDKVersion%.
|
|
(Expected file to exist: $ENV{WindowsSDKDir}/Lib/$ENV{WindowsSDKVersion})")
|
|
endif()
|
|
if (NOT EXISTS "$ENV{WindowsSDKDir}References/$ENV{WindowsSDKVersion}Windows.Foundation.FoundationContract")
|
|
message(FATAL_ERROR "ERROR: The Windows SDK is too old (needs 14393 or later, found $ENV{WindowsSDKVersion}).")
|
|
endif()
|
|
|
|
file(TO_CMAKE_PATH "$ENV{WindowsSDKDir}References/$ENV{WindowsSDKVersion}" winsdk)
|
|
|
|
file(GLOB winmds "${winsdk}/*/*/*.winmd")
|
|
|
|
#--- Create response file
|
|
set(args "")
|
|
foreach(winmd IN LISTS winmds)
|
|
string(APPEND args "-input \"${winmd}\"\n")
|
|
endforeach()
|
|
|
|
file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
|
|
file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
|
|
file(WRITE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}/cppwinrt.rsp" "${args}")
|
|
|
|
#--- Generate headers
|
|
string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" SDKVersion $ENV{WindowsSDKVersion})
|
|
message(STATUS "Generating headers for Windows SDK ${SDKVersion}")
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${CPPWINRT_TOOL}"
|
|
"@${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}/cppwinrt.rsp"
|
|
-output "${CURRENT_PACKAGES_DIR}/include"
|
|
-verbose
|
|
WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}"
|
|
LOGNAME "cppwinrt-generate-${TARGET_TRIPLET}"
|
|
)
|
|
|
|
set(CPPWINRT_LIB "${src}/build/native/lib/${CPPWINRT_ARCH}/cppwinrt_fast_forwarder.lib")
|
|
file(INSTALL "${CPPWINRT_LIB}" DESTINATION "${CURRENT_PACKAGES_DIR}/lib")
|
|
if(NOT DEFINED VCPKG_BUILD_TYPE)
|
|
file(INSTALL "${CPPWINRT_LIB}" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")
|
|
endif()
|
|
file(INSTALL "${CPPWINRT_TOOL}" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/cppwinrt")
|
|
|
|
set(tool_path "tools/cppwinrt/cppwinrt.exe")
|
|
set(lib_name "cppwinrt_fast_forwarder.lib")
|
|
|
|
configure_file("${CMAKE_CURRENT_LIST_DIR}/cppwinrt-config.cmake.in"
|
|
"${CURRENT_PACKAGES_DIR}/share/${PORT}/${PORT}-config.cmake"
|
|
@ONLY)
|
|
|
|
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
|
vcpkg_install_copyright(FILE_LIST "${src}/LICENSE")
|