diff options
Diffstat (limited to 'vcpkg/ports/vcpkg-msbuild')
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/portfile.cmake | 10 | ||||
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/vcpkg-port-config.cmake | 5 | ||||
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/vcpkg.json | 25 | ||||
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.props.in | 22 | ||||
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.targets.in | 64 | ||||
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild_install.cmake | 179 | ||||
| -rw-r--r-- | vcpkg/ports/vcpkg-msbuild/z_vcpkg_msbuild_create_props.cmake | 76 |
7 files changed, 381 insertions, 0 deletions
diff --git a/vcpkg/ports/vcpkg-msbuild/portfile.cmake b/vcpkg/ports/vcpkg-msbuild/portfile.cmake new file mode 100644 index 0000000..42e0ac8 --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/portfile.cmake @@ -0,0 +1,10 @@ +file(INSTALL + "${CMAKE_CURRENT_LIST_DIR}/vcpkg_msbuild.props.in" + "${CMAKE_CURRENT_LIST_DIR}/vcpkg_msbuild.targets.in" + "${CMAKE_CURRENT_LIST_DIR}/z_vcpkg_msbuild_create_props.cmake" + "${CMAKE_CURRENT_LIST_DIR}/vcpkg_msbuild_install.cmake" + "${CMAKE_CURRENT_LIST_DIR}/vcpkg-port-config.cmake" + DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") + +file(INSTALL "${VCPKG_ROOT_DIR}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) +set(VCPKG_POLICY_CMAKE_HELPER_PORT enabled) diff --git a/vcpkg/ports/vcpkg-msbuild/vcpkg-port-config.cmake b/vcpkg/ports/vcpkg-msbuild/vcpkg-port-config.cmake new file mode 100644 index 0000000..547ff61 --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/vcpkg-port-config.cmake @@ -0,0 +1,5 @@ +include_guard(GLOBAL) +include("${CMAKE_CURRENT_LIST_DIR}/../vcpkg-cmake-get-vars/vcpkg-port-config.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/../vcpkg-pkgconfig-get-modules/vcpkg-port-config.cmake" OPTIONAL) +include("${CMAKE_CURRENT_LIST_DIR}/z_vcpkg_msbuild_create_props.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/vcpkg_msbuild_install.cmake") diff --git a/vcpkg/ports/vcpkg-msbuild/vcpkg.json b/vcpkg/ports/vcpkg-msbuild/vcpkg.json new file mode 100644 index 0000000..cdd51bc --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/vcpkg.json @@ -0,0 +1,25 @@ +{ + "name": "vcpkg-msbuild", + "version-date": "2023-08-08", + "documentation": "https://vcpkg.io/en/docs/README.html", + "license": "MIT", + "supports": "native & windows", + "dependencies": [ + { + "name": "vcpkg-cmake-get-vars", + "host": true + }, + { + "name": "vcpkg-pkgconfig-get-modules", + "host": true + } + ], + "features": { + "pkg-config": { + "description": "Enable pkg-config lookup for msbuild", + "dependencies": [ + "pkgconf" + ] + } + } +} diff --git a/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.props.in b/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.props.in new file mode 100644 index 0000000..f04522c --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.props.in @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <vcpkg_msbuild_props_imported>true</vcpkg_msbuild_props_imported>
+ </PropertyGroup>
+ <PropertyGroup>
+ <WindowsTargetPlatformVersion>@arg_TARGET_PLATFORM_VERSION@</WindowsTargetPlatformVersion>
+ <PlatformToolset>@VCPKG_PLATFORM_TOOLSET@</PlatformToolset>
+ <!-- <Platform>@arg_PLATFORM@</Platform> -->
+ <VcpkgApplocalDeps>false</VcpkgApplocalDeps>
+ <VcpkgManifestInstall>false</VcpkgManifestInstall>
+ <VcpkgManifestEnabled>false</VcpkgManifestEnabled>
+ <VcpkgEnabled>false</VcpkgEnabled>
+ <VcpkgTriplet>@TARGET_TRIPLET@</VcpkgTriplet>
+ <VcpkgInstalledDir>@_VCPKG_INSTALLED_DIR@</VcpkgInstalledDir>
+ <UseIntelMKL>No</UseIntelMKL>
+ <ImportProjectExtensionProps>false</ImportProjectExtensionProps>
+ <ForceImportAfterCppProps>vcpkg_msbuild.props</ForceImportAfterCppProps>
+ <ForceImportAfterCppTargets>vcpkg_msbuild.targets</ForceImportAfterCppTargets>
+ </PropertyGroup>
+ @VCPKG_MSBUILD_ADDITIONAL_PROPS_XML@
+</Project>
\ No newline at end of file diff --git a/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.targets.in b/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.targets.in new file mode 100644 index 0000000..517aab0 --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild.targets.in @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Condition="'$(vcpkg_msbuild_props_imported)' != 'true'" Project="vcpkg_msbuild.props" />
+ <PropertyGroup>
+ <WindowsTargetPlatformVersion>@arg_TARGET_PLATFORM_VERSION@</WindowsTargetPlatformVersion>
+ <PlatformToolset>@VCPKG_PLATFORM_TOOLSET@</PlatformToolset>
+ <!-- <Platform>@arg_PLATFORM@</Platform> -->
+ <VcpkgApplocalDeps>false</VcpkgApplocalDeps>
+ <VcpkgManifestInstall>false</VcpkgManifestInstall>
+ <VcpkgManifestEnabled>false</VcpkgManifestEnabled>
+ <VcpkgEnabled>false</VcpkgEnabled>
+ <VcpkgTriplet>@TARGET_TRIPLET@</VcpkgTriplet>
+ <VcpkgInstalledDir>@_VCPKG_INSTALLED_DIR@</VcpkgInstalledDir>
+ <UseIntelMKL>No</UseIntelMKL>
+ <ImportProjectExtensionProps>false</ImportProjectExtensionProps>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <!-- vcpkg -->
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'static|${arg_DEBUG_CONFIGURATION}'">MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'static|${arg_RELEASE_CONFIGURATION}'">MultiThreaded</RuntimeLibrary>
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'dynamic|${arg_DEBUG_CONFIGURATION}'">MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'dynamic|${arg_RELEASE_CONFIGURATION}'">MultiThreadedDLL</RuntimeLibrary>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)'=='${arg_DEBUG_CONFIGURATION}'" >@MSBUILD_INCLUDE_DIRS_DEBUG@</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)'=='${arg_RELEASE_CONFIGURATION}'">@MSBUILD_INCLUDE_DIRS_RELEASE@</AdditionalIncludeDirectories>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Update="@project_root@**/*.cpp;@project_root@**/*.cxx">
+ <AdditionalOptions Condition="'$(Configuration)'=='${arg_DEBUG_CONFIGURATION}'" >%(AdditionalOptions) @VCPKG_COMBINED_CXX_FLAGS_DEBUG@ @MSBUILD_CFLAGS_DEBUG@ /WX-</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)'=='${arg_RELEASE_CONFIGURATION}'">%(AdditionalOptions) @VCPKG_COMBINED_CXX_FLAGS_RELEASE@ @MSBUILD_CFLAGS_RELEASE@ /WX-</AdditionalOptions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup >
+ <ClCompile Update="@project_root@**/*.c">
+ <AdditionalOptions Condition="'$(Configuration)'=='${arg_DEBUG_CONFIGURATION}'" >%(AdditionalOptions) @VCPKG_COMBINED_C_FLAGS_DEBUG@ @MSBUILD_CFLAGS_DEBUG@ /WX-</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)'=='${arg_RELEASE_CONFIGURATION}'">%(AdditionalOptions) @VCPKG_COMBINED_C_FLAGS_RELEASE@ @MSBUILD_CFLAGS_RELEASE@ /WX-</AdditionalOptions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemDefinitionGroup>
+ <Link>
+ <!-- Required Libs -->
+ <AdditionalDependencies Condition="'$(Configuration)'=='${arg_DEBUG_CONFIGURATION}'" >@MSBUILD_LIBRARIES_DEBUG@</AdditionalDependencies>
+ <AdditionalLibraryDirectories Condition="'$(Configuration)'=='${arg_DEBUG_CONFIGURATION}'" >@MSBUILD_LIBRARIES_DIRS_DEBUG@</AdditionalLibraryDirectories>
+ <AdditionalDependencies Condition="'$(Configuration)'=='${arg_RELEASE_CONFIGURATION}'" >@MSBUILD_LIBRARIES_RELEASE@</AdditionalDependencies >
+ <AdditionalLibraryDirectories Condition="'$(Configuration)'=='${arg_RELEASE_CONFIGURATION}'">@MSBUILD_LIBRARIES_DIRS_RELEASE@</AdditionalLibraryDirectories>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_DEBUG_CONFIGURATION}|DynamicLibrary'" >%(AdditionalOptions) @VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG@ @MSBUILD_LIBS_DEBUG@ /WX:NO</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_RELEASE_CONFIGURATION}|DynamicLibrary'">%(AdditionalOptions) @VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE@ @MSBUILD_LIBS_RELEASE@ /WX:NO</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_DEBUG_CONFIGURATION}|Application'" >%(AdditionalOptions) @VCPKG_COMBINED_EXE_LINKER_FLAGS_DEBUG@ @MSBUILD_LIBS_DEBUG@ /WX:NO</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_RELEASE_CONFIGURATION}|Application'">%(AdditionalOptions) @VCPKG_COMBINED_EXE_LINKER_FLAGS_RELEASE@ @MSBUILD_LIBS_RELEASE@ /WX:NO</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_DEBUG_CONFIGURATION}|StaticLibrary'">%(AdditionalOptions) @VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG@</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_RELEASE_CONFIGURATION}|StaticLibrary'">%(AdditionalOptions) @VCPKG_COMBINED_STATIC_LINKER_FLAGS_RELEASE@</AdditionalOptions>
+ </Link>
+ <Lib>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_DEBUG_CONFIGURATION}|StaticLibrary'">%(AdditionalOptions) @VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG@</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(ConfigurationType)'=='${arg_RELEASE_CONFIGURATION}|StaticLibrary'">%(AdditionalOptions) @VCPKG_COMBINED_STATIC_LINKER_FLAGS_RELEASE@</AdditionalOptions>
+ <!-- Required to prevent linker errors on Visual Studio 2017 with static CRT -->
+ <TargetMachine Condition="'${VCPKG_TARGET_ARCHITECTURE}'=='x86'">MachineX86</TargetMachine>
+ <TargetMachine Condition="'${VCPKG_TARGET_ARCHITECTURE}'=='x64'">MachineX64</TargetMachine>
+ <TargetMachine Condition="'${VCPKG_TARGET_ARCHITECTURE}'=='arm'">MachineARM</TargetMachine>
+ </Lib>
+ </ItemDefinitionGroup>
+ @VCPKG_MSBUILD_ADDITIONAL_TARGETS_XML@
+</Project>
\ No newline at end of file diff --git a/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild_install.cmake b/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild_install.cmake new file mode 100644 index 0000000..35e84f9 --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/vcpkg_msbuild_install.cmake @@ -0,0 +1,179 @@ +function(vcpkg_msbuild_install) + cmake_parse_arguments( + PARSE_ARGV 0 + "arg" + "CLEAN;NO_TOOLCHAIN_PROPS;NO_INSTALL;ADD_BIN_TO_PATH" + "SOURCE_PATH;PROJECT_SUBPATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;TARGET" + "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;DEPENDENT_PKGCONFIG;ADDITIONAL_LIBS;ADDITIONAL_LIBS_DEBUG;ADDITIONAL_LIBS_RELEASE" + ) + + if(VCPKG_CROSSCOMPILING) + set(arg_ADD_BIN_TO_PATH OFF) + endif() + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_RELEASE_CONFIGURATION) + set(arg_RELEASE_CONFIGURATION Release) + endif() + if(NOT DEFINED arg_DEBUG_CONFIGURATION) + set(arg_DEBUG_CONFIGURATION Debug) + endif() + + if(NOT DEFINED arg_PLATFORM) + if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(arg_PLATFORM x64) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(arg_PLATFORM Win32) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm") + set(arg_PLATFORM ARM) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(arg_PLATFORM arm64) + else() + message(FATAL_ERROR "Unsupported target architecture") + endif() + endif() + if(NOT DEFINED arg_PLATFORM_TOOLSET) + set(arg_PLATFORM_TOOLSET "${VCPKG_PLATFORM_TOOLSET}") + endif() + + if(NOT DEFINED arg_TARGET) + set(arg_TARGET Rebuild) + endif() + if(DEFINED arg_ADDITIONAL_LIBS) + list(APPEND arg_ADDITIONAL_LIBS_DEBUG ${arg_ADDITIONAL_LIBS}) + list(APPEND arg_ADDITIONAL_LIBS_RELEASE ${arg_ADDITIONAL_LIBS}) + endif() + + vcpkg_get_windows_sdk(arg_TARGET_PLATFORM_VERSION) + + if(NOT arg_NO_TOOLCHAIN_PROPS) + file(RELATIVE_PATH project_root "${arg_SOURCE_PATH}/${arg_PROJECT_SUBPATH}" "${arg_SOURCE_PATH}") # required by z_vcpkg_msbuild_create_props + z_vcpkg_msbuild_create_props(OUTPUT_PROPS props_file + OUTPUT_TARGETS target_file + RELEASE_CONFIGURATION "${arg_RELEASE_CONFIGURATION}" + DEBUG_CONFIGURATION "${arg_DEBUG_CONFIGURATION}" + DEPENDENT_PKGCONFIG ${arg_DEPENDENT_PKGCONFIG} + ADDITIONAL_LIBS_DEBUG ${arg_ADDITIONAL_LIBS_DEBUG} + ADDITIONAL_LIBS_RELEASE ${arg_ADDITIONAL_LIBS_RELEASE}) + list(APPEND arg_OPTIONS + "/p:ForceImportAfterCppProps=${props_file}" + "/p:ForceImportAfterCppTargets=${target_file}" + ) + endif() + + + list(APPEND arg_OPTIONS + "/t:${arg_TARGET}" + "/p:UseMultiToolTask=true" + "/p:MultiProcMaxCount=${VCPKG_CONCURRENCY}" + "/p:EnforceProcessCountAcrossBuilds=true" + "/m:${VCPKG_CONCURRENCY}" + "-maxCpuCount:${VCPKG_CONCURRENCY}" + # other Properties + "/p:Platform=${arg_PLATFORM}" + "/p:PlatformTarget=${TRIPLET_SYSTEM_ARCH}" + "/p:PlatformToolset=${arg_PLATFORM_TOOLSET}" + "/p:WindowsTargetPlatformVersion=${arg_TARGET_PLATFORM_VERSION}" + # vcpkg properties + "/p:VcpkgApplocalDeps=false" + "/p:VcpkgManifestInstall=false" + "/p:VcpkgManifestEnabled=false" + "/p:VcpkgEnabled=false" + "/p:VcpkgTriplet=${TARGET_TRIPLET}" + "/p:VcpkgInstalledDir=${_VCPKG_INSTALLED_DIR}" + ) + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + # Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions + # TODO: Add a way for the user to override this if they want to opt-in to incompatibility + list(APPEND arg_OPTIONS "/p:WholeProgramOptimization=false") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + message(STATUS "Building ${arg_PROJECT_SUBPATH} for Release") + if(arg_ADD_BIN_TO_PATH) + vcpkg_backup_env_variables(VARS PATH) + if("${build_type}" STREQUAL "debug") + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin") + else() + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin") + endif() + endif() + set(working_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + file(REMOVE_RECURSE "${working_dir}") + file(MAKE_DIRECTORY "${working_dir}") + file(COPY "${arg_SOURCE_PATH}/" DESTINATION "${working_dir}") + vcpkg_execute_required_process( + COMMAND msbuild "${working_dir}/${arg_PROJECT_SUBPATH}" + "/p:Configuration=${arg_RELEASE_CONFIGURATION}" + ${arg_OPTIONS} + ${arg_OPTIONS_RELEASE} + WORKING_DIRECTORY "${working_dir}" + LOGNAME "build-${TARGET_TRIPLET}-rel" + ) + if(NOT arg_NO_INSTALL) + file(GLOB_RECURSE libs "${working_dir}/*.lib") + file(GLOB_RECURSE dlls "${working_dir}/*.dll") + file(GLOB_RECURSE exes "${working_dir}/*.exe") + if(NOT libs STREQUAL "") + file(COPY ${libs} DESTINATION "${CURRENT_PACKAGES_DIR}/lib") + endif() + if(NOT dlls STREQUAL "") + file(COPY ${dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/bin") + endif() + if(NOT exes STREQUAL "") + file(COPY ${exes} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}") + vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}") + endif() + endif() + if(arg_ADD_BIN_TO_PATH) + vcpkg_restore_env_variables(VARS PATH) + endif() + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + message(STATUS "Building ${arg_PROJECT_SUBPATH} for Debug") + if(arg_ADD_BIN_TO_PATH) + vcpkg_backup_env_variables(VARS PATH) + if("${build_type}" STREQUAL "debug") + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin") + else() + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin") + endif() + endif() + set(working_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + file(REMOVE_RECURSE "${working_dir}") + file(MAKE_DIRECTORY "${working_dir}") + file(COPY "${arg_SOURCE_PATH}/" DESTINATION "${working_dir}") + vcpkg_execute_required_process( + COMMAND msbuild "${working_dir}/${arg_PROJECT_SUBPATH}" + "/p:Configuration=${arg_DEBUG_CONFIGURATION}" + ${arg_OPTIONS} + ${arg_OPTIONS_DEBUG} + WORKING_DIRECTORY "${working_dir}" + LOGNAME "build-${TARGET_TRIPLET}-dbg" + ) + if(NOT arg_NO_INSTALL) + file(GLOB_RECURSE libs "${working_dir}/*.lib") + file(GLOB_RECURSE dlls "${working_dir}/*.dll") + if(NOT libs STREQUAL "") + file(COPY ${libs} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib") + endif() + if(NOT dlls STREQUAL "") + file(COPY ${dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin") + endif() + endif() + if(arg_ADD_BIN_TO_PATH) + vcpkg_restore_env_variables(VARS PATH) + endif() + endif() + + vcpkg_copy_pdbs() + + if(arg_CLEAN) + vcpkg_clean_msbuild() + endif() + +endfunction() diff --git a/vcpkg/ports/vcpkg-msbuild/z_vcpkg_msbuild_create_props.cmake b/vcpkg/ports/vcpkg-msbuild/z_vcpkg_msbuild_create_props.cmake new file mode 100644 index 0000000..5cd6ade --- /dev/null +++ b/vcpkg/ports/vcpkg-msbuild/z_vcpkg_msbuild_create_props.cmake @@ -0,0 +1,76 @@ +function(z_vcpkg_msbuild_create_props) + cmake_parse_arguments( + PARSE_ARGV 0 + "arg" + "" + "OUTPUT_PROPS;OUTPUT_TARGETS;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION" + "DEPENDENT_PKGCONFIG;ADDITIONAL_LIBS_DEBUG;ADDITIONAL_LIBS_RELEASE" + ) + + if(NOT arg_OUTPUT_PROPS) + message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' requires option 'OUTPUT_PROPS'!") + endif() + if(NOT arg_OUTPUT_TARGETS) + message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' requires option 'OUTPUT_TARGETS'!") + endif() + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "'${CMAKE_CURRENT_FUNCTION}' was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + # TODO: detect and set these ? + # <LanguageStandard>stdcpp20</LanguageStandard> + # <LanguageStandard_C>stdc17</LanguageStandard_C> + if(NOT DEFINED arg_RELEASE_CONFIGURATION) + set(arg_RELEASE_CONFIGURATION Release) + endif() + if(NOT DEFINED arg_DEBUG_CONFIGURATION) + set(arg_DEBUG_CONFIGURATION Debug) + endif() + + set(TARGET_PLATFORM_VERSION "") + vcpkg_get_windows_sdk(TARGET_PLATFORM_VERSION) + + if(arg_DEPENDENT_PKGCONFIG) + if(NOT COMMAND x_vcpkg_pkgconfig_get_modules) + message(FATAL_ERROR "Port vcpkg-msbuild needs to have feature 'pkg-config' enabled for 'DEPENDENT_PKGCONFIG'") + endif() + x_vcpkg_pkgconfig_get_modules(PREFIX MSBUILD INCLUDE_DIRS LIBRARIES LIBRARIES_DIR CFLAGS USE_MSVC_SYNTAX_ON_WINDOWS MODULES ${arg_DEPENDENT_PKGCONFIG}) + + separate_arguments(MSBUILD_INCLUDE_DIRS_RELEASE WINDOWS_COMMAND "${MSBUILD_INCLUDE_DIRS_RELEASE}") + separate_arguments(MSBUILD_INCLUDE_DIRS_DEBUG WINDOWS_COMMAND "${MSBUILD_INCLUDE_DIRS_DEBUG}") + foreach(inc_dirs IN LISTS MSBUILD_INCLUDE_DIRS_RELEASE) + string(REPLACE "${inc_dirs}" "" MSBUILD_CFLAGS_RELEASE "${MSBUILD_CFLAGS_RELEASE}") + endforeach() + foreach(inc_dirs IN LISTS MSBUILD_INCLUDE_DIRS_DEBUG) + string(REPLACE "${inc_dirs}" "" MSBUILD_CFLAGS_DEBUG "${MSBUILD_CFLAGS_DEBUG}") + endforeach() + list(TRANSFORM MSBUILD_INCLUDE_DIRS_RELEASE REPLACE "^/I" "") + list(TRANSFORM MSBUILD_INCLUDE_DIRS_DEBUG REPLACE "^/I" "") + + separate_arguments(MSBUILD_LIBRARIES_DIRS_RELEASE WINDOWS_COMMAND "${MSBUILD_LIBRARIES_DIRS_RELEASE}") + separate_arguments(MSBUILD_LIBRARIES_DIRS_DEBUG WINDOWS_COMMAND "${MSBUILD_LIBRARIES_DIRS_DEBUG}") + + separate_arguments(MSBUILD_LIBRARIES_RELEASE WINDOWS_COMMAND "${MSBUILD_LIBRARIES_RELEASE}") + separate_arguments(MSBUILD_LIBRARIES_DEBUG WINDOWS_COMMAND "${MSBUILD_LIBRARIES_DEBUG}") + endif() + vcpkg_cmake_get_vars(vars_file) + include("${vars_file}") + vcpkg_list(APPEND MSBUILD_INCLUDE_DIRS_RELEASE "${CURRENT_PACKAGES_DIR}/include" "${CURRENT_INSTALLED_DIR}/include") + vcpkg_list(APPEND MSBUILD_INCLUDE_DIRS_DEBUG "${CURRENT_PACKAGES_DIR}/include" "${CURRENT_INSTALLED_DIR}/include") + vcpkg_list(APPEND MSBUILD_LIBRARIES_DIRS_RELEASE "${CURRENT_PACKAGES_DIR}/lib" "${CURRENT_INSTALLED_DIR}/lib") + vcpkg_list(APPEND MSBUILD_LIBRARIES_DIRS_DEBUG "${CURRENT_PACKAGES_DIR}/debug/lib" "${CURRENT_INSTALLED_DIR}/debug/lib") + vcpkg_list(APPEND MSBUILD_LIBRARIES_RELEASE ${arg_ADDITIONAL_LIBS_RELEASE}) + vcpkg_list(APPEND MSBUILD_LIBRARIES_DEBUG ${arg_ADDITIONAL_LIBS_DEBUG}) + + vcpkg_list(PREPEND MSBUILD_INCLUDE_DIRS_RELEASE "%(AdditionalIncludeDirectories)") + vcpkg_list(PREPEND MSBUILD_INCLUDE_DIRS_DEBUG "%(AdditionalIncludeDirectories)") + vcpkg_list(PREPEND MSBUILD_LIBRARIES_DIRS_RELEASE "%(AdditionalLibraryDirectories)") + vcpkg_list(PREPEND MSBUILD_LIBRARIES_DIRS_DEBUG "%(AdditionalLibraryDirectories)") + vcpkg_list(PREPEND MSBUILD_LIBRARIES_RELEASE "%(AdditionalDependencies)") + vcpkg_list(PREPEND MSBUILD_LIBRARIES_DEBUG "%(AdditionalDependencies)") + + configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/vcpkg_msbuild.targets.in" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}/vcpkg_msbuild.targets") + configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/vcpkg_msbuild.props.in" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}/vcpkg_msbuild.props") + set(${arg_OUTPUT_PROPS} "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}/vcpkg_msbuild.props" PARENT_SCOPE) + set(${arg_OUTPUT_TARGETS} "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}/vcpkg_msbuild.targets" PARENT_SCOPE) +endfunction() |