aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilly O'Neal <bion@microsoft.com>2020-10-28 14:26:41 -0700
committerGitHub <noreply@github.com>2020-10-28 14:26:41 -0700
commit1b1c17de8206231831b2bc8a06cff80506184be1 (patch)
treeb14e701224a7b12015ec3fef4782332251cd34de
parent0ff714bd520f5315081db50acce43644832451ba (diff)
downloadvcpkg-1b1c17de8206231831b2bc8a06cff80506184be1.tar.gz
vcpkg-1b1c17de8206231831b2bc8a06cff80506184be1.zip
[vcpkg baseline] [vs-yasm] Build yasm instead of downloading it to work around memory corruption bugs in yasm itself. (#14003)
-rw-r--r--ports/gmp/portfile.cmake17
-rw-r--r--ports/gmp/vcpkg.json6
-rw-r--r--ports/libvpx/CONTROL3
-rw-r--r--ports/libvpx/portfile.cmake9
-rw-r--r--ports/mpg123/CONTROL3
-rw-r--r--ports/mpg123/portfile.cmake6
-rw-r--r--ports/nettle/CONTROL2
-rw-r--r--ports/nettle/portfile.cmake19
-rw-r--r--ports/vs-yasm/CONTROL5
-rw-r--r--ports/vs-yasm/fix_paths.patch23
-rw-r--r--ports/vs-yasm/portfile.cmake10
-rw-r--r--ports/vs-yasm/vcpkg.json8
-rw-r--r--ports/yasm-tool-helper/portfile.cmake2
-rw-r--r--ports/yasm-tool-helper/vcpkg.json12
-rw-r--r--ports/yasm-tool-helper/yasm-tool-helper.cmake34
-rw-r--r--ports/yasm-tool/portfile.cmake37
-rw-r--r--ports/yasm-tool/vcpkg.json7
-rwxr-xr-xscripts/azure-pipelines/test-modified-ports.ps14
-rw-r--r--toolsrc/include/vcpkg/base/files.h7
-rw-r--r--toolsrc/src/vcpkg/base/files.cpp13
-rw-r--r--toolsrc/src/vcpkg/commands.create.cpp12
21 files changed, 187 insertions, 52 deletions
diff --git a/ports/gmp/portfile.cmake b/ports/gmp/portfile.cmake
index b8a289628..e566c45a6 100644
--- a/ports/gmp/portfile.cmake
+++ b/ports/gmp/portfile.cmake
@@ -9,14 +9,15 @@ if(VCPKG_TARGET_IS_WINDOWS)
REF e140dfc8668e96d7e56cbd46467945adcc6b3cc4 #v6.2.0
SHA512 3b646c142447946bb4556db01214ff130da917bc149946b8cf086f3b01e1cc3d664b941a30a42608799c14461b2f29e4b894b72915d723bd736513c8914729b7
HEAD_REF master
- PATCHES
+ PATCHES
vs.build.patch
runtime.patch
prefix.patch
)
- vcpkg_find_acquire_program(YASM)
- get_filename_component(YASM_DIR "${YASM}" DIRECTORY)
- vcpkg_add_to_path("${YASM_DIR}")
+
+ include(${CURRENT_INSTALLED_DIR}/share/yasm-tool-helper/yasm-tool-helper.cmake)
+ yasm_tool_helper(OUT_VAR YASM)
+ file(TO_NATIVE_PATH "${YASM}" YASM)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
set(CONFIGURATION_RELEASE ReleaseDLL)
@@ -49,7 +50,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
STRING(REPLACE ">MultiThreaded<" ">MultiThreadedDLL<" _contents "${_contents}")
endif()
file(WRITE "${_file}" "${_contents}")
-
+
vcpkg_install_msbuild(
USE_VCPKG_INTEGRATION
SOURCE_PATH ${SOURCE_PATH}
@@ -60,7 +61,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
RELEASE_CONFIGURATION ${CONFIGURATION_RELEASE}
DEBUG_CONFIGURATION ${CONFIGURATION_DEBUG}
SKIP_CLEAN
- OPTIONS /p:UseEnv=True
+ OPTIONS "/p:YasmPath=${YASM}"
)
get_filename_component(SOURCE_PATH_SUFFIX "${SOURCE_PATH}" NAME)
file(RENAME "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/${SOURCE_PATH_SUFFIX}/msvc/include" "${CURRENT_PACKAGES_DIR}/include")
@@ -84,7 +85,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
else()
vcpkg_download_distfile(
ARCHIVE
- URLS https://gmplib.org/download/gmp/gmp-6.2.0.tar.xz
+ URLS https://gmplib.org/download/gmp/gmp-6.2.0.tar.xz
FILENAME gmp-6.2.0.tar.xz
SHA512 a066f0456f0314a1359f553c49fc2587e484ff8ac390ff88537266a146ea373f97a1c0ba24608bf6756f4eab11c9056f103c8deb99e5b57741b4f7f0ec44b90c)
@@ -107,4 +108,4 @@ else()
# # Handle copyright
file(INSTALL "${SOURCE_PATH}/COPYINGv3" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
-endif() \ No newline at end of file
+endif()
diff --git a/ports/gmp/vcpkg.json b/ports/gmp/vcpkg.json
index 77b237197..a0c93f2ab 100644
--- a/ports/gmp/vcpkg.json
+++ b/ports/gmp/vcpkg.json
@@ -1,13 +1,17 @@
{
"name": "gmp",
"version-string": "6.2.0",
- "port-version": 3,
+ "port-version": 5,
"description": "The GNU Multiple Precision Arithmetic Library",
"homepage": "https://gmplib.org",
"dependencies": [
{
"name": "vs-yasm",
"platform": "windows"
+ },
+ {
+ "name": "yasm-tool-helper",
+ "platform": "windows"
}
]
}
diff --git a/ports/libvpx/CONTROL b/ports/libvpx/CONTROL
index 8cdbaa470..963047270 100644
--- a/ports/libvpx/CONTROL
+++ b/ports/libvpx/CONTROL
@@ -1,6 +1,7 @@
Source: libvpx
Version: 1.9.0
-Port-Version: 2
+Port-Version: 3
Homepage: https://github.com/webmproject/libvpx
Description: The reference software implementation for the video coding formats VP8 and VP9.
Supports: !(uwp&arm)
+Build-Depends: yasm-tool-helper
diff --git a/ports/libvpx/portfile.cmake b/ports/libvpx/portfile.cmake
index 5e36511eb..1ff1d5c41 100644
--- a/ports/libvpx/portfile.cmake
+++ b/ports/libvpx/portfile.cmake
@@ -10,21 +10,22 @@ vcpkg_from_github(
HEAD_REF master
)
-vcpkg_find_acquire_program(YASM)
vcpkg_find_acquire_program(PERL)
-get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY)
if(CMAKE_HOST_WIN32)
vcpkg_acquire_msys(MSYS_ROOT PACKAGES make)
set(BASH ${MSYS_ROOT}/usr/bin/bash.exe)
- set(ENV{PATH} "${YASM_EXE_PATH};${MSYS_ROOT}/usr/bin;$ENV{PATH};${PERL_EXE_PATH}")
+ set(ENV{PATH} "${MSYS_ROOT}/usr/bin;$ENV{PATH};${PERL_EXE_PATH}")
else()
set(BASH /bin/bash)
- set(ENV{PATH} "${YASM_EXE_PATH}:${MSYS_ROOT}/usr/bin:$ENV{PATH}:${PERL_EXE_PATH}")
+ set(ENV{PATH} "${MSYS_ROOT}/usr/bin:$ENV{PATH}:${PERL_EXE_PATH}")
endif()
+include(${CURRENT_INSTALLED_DIR}/share/yasm-tool-helper/yasm-tool-helper.cmake)
+yasm_tool_helper(PREPEND_TO_PATH)
+
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET})
diff --git a/ports/mpg123/CONTROL b/ports/mpg123/CONTROL
index 3e7705ab0..be249c232 100644
--- a/ports/mpg123/CONTROL
+++ b/ports/mpg123/CONTROL
@@ -1,5 +1,6 @@
Source: mpg123
Version: 1.25.8
-Port-Version: 13
+Port-Version: 14
Homepage: https://sourceforge.net/projects/mpg123/
Description: mpg123 is a real time MPEG 1.0/2.0/2.5 audio player/decoder for layers 1, 2 and 3 (MPEG 1.0 layer 3 also known as MP3).
+Build-Depends: yasm-tool-helper
diff --git a/ports/mpg123/portfile.cmake b/ports/mpg123/portfile.cmake
index 9438c5811..2a852b132 100644
--- a/ports/mpg123/portfile.cmake
+++ b/ports/mpg123/portfile.cmake
@@ -36,9 +36,9 @@ vcpkg_from_sourceforge(
0004-add-arm64-uwp-config.patch
)
-vcpkg_find_acquire_program(YASM)
-get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
-set(ENV{PATH} "$ENV{PATH};${YASM_EXE_PATH}")
+
+include(${CURRENT_INSTALLED_DIR}/share/yasm-tool-helper/yasm-tool-helper.cmake)
+yasm_tool_helper(APPEND_TO_PATH)
if(VCPKG_TARGET_IS_UWP)
vcpkg_build_msbuild(
diff --git a/ports/nettle/CONTROL b/ports/nettle/CONTROL
index f76d21412..49308ce95 100644
--- a/ports/nettle/CONTROL
+++ b/ports/nettle/CONTROL
@@ -3,4 +3,4 @@ Version: 3.5.1
Port-Version: 4
Homepage: https://git.lysator.liu.se/nettle/nettle
Description: Nettle is a low-level cryptographic library that is designed to fit easily in more or less any context: In crypto toolkits for object-oriented languages (C++, Python, Pike, ...), in applications like LSH or GNUPG, or even in kernel space.
-Build-Depends: gmp, vs-yasm (windows) \ No newline at end of file
+Build-Depends: gmp, vs-yasm (windows), yasm-tool-helper (windows)
diff --git a/ports/nettle/portfile.cmake b/ports/nettle/portfile.cmake
index 0d7a45eaf..2d3fc952a 100644
--- a/ports/nettle/portfile.cmake
+++ b/ports/nettle/portfile.cmake
@@ -2,7 +2,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO ShiftMediaProject/nettle
- REF 1d0a6e64e01458fdf37eaf5d90975deb52c3da41 #v3.5.1
+ REF 1d0a6e64e01458fdf37eaf5d90975deb52c3da41 #v3.5.1
SHA512 6124fbd223e6519d88290c3f4e3b8cc399e038c9c77cfec38e6ab17b075846e662fd0360d62c132c882536489c8a865795f64059e2d2b21467f65d90320e5c39
HEAD_REF master
PATCHES gmp.patch
@@ -10,9 +10,10 @@ if(VCPKG_TARGET_IS_WINDOWS)
runtime.nettle.patch
runtime.hogweed.patch
)
- vcpkg_find_acquire_program(YASM)
- get_filename_component(YASM_DIR "${YASM}" DIRECTORY)
- vcpkg_add_to_path("${YASM_DIR}")
+
+ include(${CURRENT_INSTALLED_DIR}/share/yasm-tool-helper/yasm-tool-helper.cmake)
+ yasm_tool_helper(OUT_VAR YASM)
+ file(TO_NATIVE_PATH "${YASM}" YASM)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
set(CONFIGURATION_RELEASE ReleaseDLL)
@@ -27,7 +28,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
string(APPEND CONFIGURATION_DEBUG WinRT)
endif()
- #Setup YASM integration
+ #Setup YASM integration
set(_file "${SOURCE_PATH}/SMP/libnettle.vcxproj")
file(READ "${_file}" _contents)
string(REPLACE [[<Import Project="$(VCTargetsPath)\BuildCustomizations\yasm.props" />]]
@@ -62,7 +63,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
STRING(REPLACE ">MultiThreaded<" ">MultiThreadedDLL<" _contents "${_contents}")
endif()
file(WRITE "${_file}" "${_contents}")
-
+
vcpkg_install_msbuild(
USE_VCPKG_INTEGRATION
SOURCE_PATH ${SOURCE_PATH}
@@ -73,7 +74,7 @@ if(VCPKG_TARGET_IS_WINDOWS)
RELEASE_CONFIGURATION ${CONFIGURATION_RELEASE}
DEBUG_CONFIGURATION ${CONFIGURATION_DEBUG}
SKIP_CLEAN
- OPTIONS /p:UseEnv=True
+ OPTIONS "/p:YasmPath=${YASM}"
)
get_filename_component(SOURCE_PATH_SUFFIX "${SOURCE_PATH}" NAME)
@@ -103,12 +104,12 @@ else()
GITLAB_URL https://git.lysator.liu.se/
OUT_SOURCE_PATH SOURCE_PATH
REPO nettle/nettle
- REF ee5d62898cf070f08beedc410a8d7c418588bd95 #v3.5.1
+ REF ee5d62898cf070f08beedc410a8d7c418588bd95 #v3.5.1
SHA512 881912548f4abb21460f44334de11439749c8a055830849a8beb4332071d11d9196d9eecaeba5bf822819d242356083fba91eb8719a64f90e41766826e6d75e1
HEAD_REF master # branch name
PATCHES fix-InstallLibPath.patch
)
-
+
if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
set(OPTIONS --disable-static)
else()
diff --git a/ports/vs-yasm/CONTROL b/ports/vs-yasm/CONTROL
deleted file mode 100644
index 68f7328a9..000000000
--- a/ports/vs-yasm/CONTROL
+++ /dev/null
@@ -1,5 +0,0 @@
-Source: vs-yasm
-Version: 0.5.0
-Homepage: https://github.com/ShiftMediaProject/VSYASM
-Description: Provides Visual Studio integration for the YASM assembler.
-Supports: windows & !arm \ No newline at end of file
diff --git a/ports/vs-yasm/fix_paths.patch b/ports/vs-yasm/fix_paths.patch
new file mode 100644
index 000000000..8b74a3aa1
--- /dev/null
+++ b/ports/vs-yasm/fix_paths.patch
@@ -0,0 +1,23 @@
+diff --git a/yasm.props b/yasm.props
+index 06efe7a..10f6309 100644
+--- a/yasm.props
++++ b/yasm.props
+@@ -6,15 +6,15 @@
+ <YASMAfterTargets>CustomBuild</YASMAfterTargets>
+ </PropertyGroup>
+ <PropertyGroup>
+- <YasmPath Condition= "'$(YASMPATH)' == ''">$(VCInstallDir)</YasmPath>
++ <YasmPath Condition= "'$(YasmPath)' == ''">$(VCInstallDir)</YasmPath>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <YASM>
+ <Preprocessor>0</Preprocessor>
+ <Parser>0</Parser>
+ <ObjectFileName>$(IntDir)%(FileName).obj</ObjectFileName>
+- <CommandLineTemplate Condition="'$(Platform)' == 'Win32'">"$(YasmPath)"yasm.exe -Xvc -f win32 [AllOptions] [AdditionalOptions] "%(FullPath)"</CommandLineTemplate>
+- <CommandLineTemplate Condition="'$(Platform)' == 'x64'">"$(YasmPath)"yasm.exe -Xvc -f win64 [AllOptions] [AdditionalOptions] "%(FullPath)"</CommandLineTemplate>
++ <CommandLineTemplate Condition="'$(Platform)' == 'Win32'">"$(YasmPath)" -Xvc -f win32 [AllOptions] [AdditionalOptions] "%(FullPath)"</CommandLineTemplate>
++ <CommandLineTemplate Condition="'$(Platform)' == 'x64'">"$(YasmPath)" -Xvc -f win64 [AllOptions] [AdditionalOptions] "%(FullPath)"</CommandLineTemplate>
+ <CommandLineTemplate Condition="'$(Platform)' != 'Win32' and '$(Platform)' != 'x64'">echo YASM not supported on this platform
+ exit 1</CommandLineTemplate>
+ <ExecutionDescription>%(Identity)</ExecutionDescription>
diff --git a/ports/vs-yasm/portfile.cmake b/ports/vs-yasm/portfile.cmake
index 341f66ca5..fc291c259 100644
--- a/ports/vs-yasm/portfile.cmake
+++ b/ports/vs-yasm/portfile.cmake
@@ -5,15 +5,13 @@ vcpkg_from_github(
REF deb50d9f18e8461538468339d508cdf240e64897 #v0.5
SHA512 04627546020d33e5ea91f74b09c5ce3b817dce5f6ae4548c3b4148daa82fbd837c81675ac8730d3ca1cdf91fefa8bb23eec76d1bcd02c03dda1203d0c261178d
HEAD_REF master
+ PATCHES
+ fix_paths.patch
)
set(_files yasm.props yasm.targets yasm.xml)
foreach(_file ${_files})
- file(INSTALL "${SOURCE_PATH}/${_file}" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/")
+ file(INSTALL "${SOURCE_PATH}/${_file}" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
endforeach()
-set(_file "${CURRENT_PACKAGES_DIR}/share/${PORT}/yasm.props")
-file(READ "${_file}" _contents)
-string(REPLACE "$(VCInstallDir)" "" _contents "${_contents}")
-file(WRITE "${_file}" "${_contents}")
-configure_file("${SOURCE_PATH}/COPYING" "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" COPYONLY) \ No newline at end of file
+configure_file("${SOURCE_PATH}/COPYING" "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" COPYONLY)
diff --git a/ports/vs-yasm/vcpkg.json b/ports/vs-yasm/vcpkg.json
new file mode 100644
index 000000000..830838cc7
--- /dev/null
+++ b/ports/vs-yasm/vcpkg.json
@@ -0,0 +1,8 @@
+{
+ "name": "vs-yasm",
+ "version-string": "0.5.0",
+ "port-version": 1,
+ "description": "Provides Visual Studio integration for the YASM assembler.",
+ "homepage": "https://github.com/ShiftMediaProject/VSYASM",
+ "supports": "windows & !arm"
+}
diff --git a/ports/yasm-tool-helper/portfile.cmake b/ports/yasm-tool-helper/portfile.cmake
new file mode 100644
index 000000000..072b7894f
--- /dev/null
+++ b/ports/yasm-tool-helper/portfile.cmake
@@ -0,0 +1,2 @@
+set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+configure_file(${CMAKE_CURRENT_LIST_DIR}/yasm-tool-helper.cmake ${CURRENT_PACKAGES_DIR}/share/yasm-tool-helper/yasm-tool-helper.cmake COPYONLY)
diff --git a/ports/yasm-tool-helper/vcpkg.json b/ports/yasm-tool-helper/vcpkg.json
new file mode 100644
index 000000000..b37b33c22
--- /dev/null
+++ b/ports/yasm-tool-helper/vcpkg.json
@@ -0,0 +1,12 @@
+{
+ "name": "yasm-tool-helper",
+ "version-string": "2020-10-12",
+ "description": "This port provides helper functions for ports needing to consume YASM",
+ "homepage": "https://github.com/Microsoft/vcpkg",
+ "dependencies": [
+ {
+ "name": "yasm-tool",
+ "platform": "x86 & windows"
+ }
+ ]
+}
diff --git a/ports/yasm-tool-helper/yasm-tool-helper.cmake b/ports/yasm-tool-helper/yasm-tool-helper.cmake
new file mode 100644
index 000000000..24c44c9d0
--- /dev/null
+++ b/ports/yasm-tool-helper/yasm-tool-helper.cmake
@@ -0,0 +1,34 @@
+function(yasm_tool_helper)
+ cmake_parse_arguments(PARSE_ARGV 0 a
+ "APPEND_TO_PATH;PREPEND_TO_PATH"
+ "OUT_VAR"
+ ""
+ )
+
+ if(CMAKE_HOST_WIN32)
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP)
+ # Native compilation
+ set(YASM "${CURRENT_INSTALLED_DIR}/tools/yasm-tool/yasm.exe")
+ else()
+ # Cross compilation
+ get_filename_component(YASM "${CURRENT_INSTALLED_DIR}/../x86-windows/tools/yasm-tool/yasm.exe" ABSOLUTE)
+ if(NOT EXISTS "${YASM}")
+ message(FATAL_ERROR "Cross-targetting and x64 ports requiring yasm require the x86-windows yasm-tool to be available. Please install yasm-tool:x86-windows first.")
+ endif()
+ endif()
+ else()
+ vcpkg_find_acquire_program(YASM)
+ endif()
+
+ if(a_APPEND_TO_PATH)
+ get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
+ vcpkg_add_to_path("${YASM_EXE_PATH}")
+ endif()
+ if(a_PREPEND_TO_PATH)
+ get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
+ vcpkg_add_to_path(PREPEND "${YASM_EXE_PATH}")
+ endif()
+ if(a_OUT_VAR)
+ set(${a_OUT_VAR} "${YASM}" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/ports/yasm-tool/portfile.cmake b/ports/yasm-tool/portfile.cmake
new file mode 100644
index 000000000..a417f105c
--- /dev/null
+++ b/ports/yasm-tool/portfile.cmake
@@ -0,0 +1,37 @@
+vcpkg_fail_port_install(MESSAGE "The yasm-tool port is only intended to be built for x86 Windows" ON_TARGET "Linux" "OSX" ON_ARCH "x64" "arm")
+
+set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled)
+set(VCPKG_LIBRARY_LINKAGE static)
+
+vcpkg_find_acquire_program(PYTHON3)
+get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
+vcpkg_add_to_path("${PYTHON3_DIR}")
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO yasm/yasm
+ REF 009450c7ad4d425fa5a10ac4bd6efbd25248d823 # 7.0.3 plus bugfixes for https://github.com/yasm/yasm/issues/153
+ SHA512 a542577558676d11b52981925ea6219bffe699faa1682c033b33b7534f5a0dfe9f29c56b32076b68c48f65e0aef7c451be3a3af804c52caa4d4357de4caad83c
+)
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ OPTIONS
+ -DENABLE_NLS=OFF
+ -DYASM_BUILD_TESTS=OFF
+)
+
+vcpkg_install_cmake()
+
+vcpkg_copy_tools(TOOL_NAMES yasm)
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include")
+
+file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
+foreach(LICENSE Artistic.txt BSD.txt GNU_GPL-2.0 GNU_LGPL-2.0)
+ file(COPY "${SOURCE_PATH}/${LICENSE}" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+endforeach()
diff --git a/ports/yasm-tool/vcpkg.json b/ports/yasm-tool/vcpkg.json
new file mode 100644
index 000000000..20e37b570
--- /dev/null
+++ b/ports/yasm-tool/vcpkg.json
@@ -0,0 +1,7 @@
+{
+ "name": "yasm-tool",
+ "version-string": "2020-10-12",
+ "description": "A modular assembler. This port is intended to build other ports and should not be used directly.",
+ "homepage": "http://yasm.tortall.net/",
+ "supports": "windows & x86"
+}
diff --git a/scripts/azure-pipelines/test-modified-ports.ps1 b/scripts/azure-pipelines/test-modified-ports.ps1
index 15cb8131f..85d0c7029 100755
--- a/scripts/azure-pipelines/test-modified-ports.ps1
+++ b/scripts/azure-pipelines/test-modified-ports.ps1
@@ -108,7 +108,9 @@ $skipList = . "$PSScriptRoot/generate-skip-list.ps1" `
# WORKAROUND: the x86-windows flavors of these are needed for all cross-compilation, but they are not auto-installed.
# Install them so the CI succeeds:
if ($Triplet -in @('x64-uwp', 'arm64-windows', 'arm-uwp')) {
- .\vcpkg.exe install protobuf:x86-windows boost-build:x86-windows sqlite3:x86-windows @commonArgs
+ .\vcpkg.exe install protobuf:x86-windows boost-build:x86-windows sqlite3:x86-windows yasm-tool:x86-windows @commonArgs
+} elseif ($Triplet -in @('x64-windows', 'x64-windows-static')) {
+ .\vcpkg.exe install yasm-tool:x86-windows @commonArgs
}
& "./vcpkg$executableExtension" ci $Triplet --x-xunit=$xmlFile --exclude=$skipList --failure-logs=$failureLogs @commonArgs
diff --git a/toolsrc/include/vcpkg/base/files.h b/toolsrc/include/vcpkg/base/files.h
index 607a75c8e..1c5e8393f 100644
--- a/toolsrc/include/vcpkg/base/files.h
+++ b/toolsrc/include/vcpkg/base/files.h
@@ -18,6 +18,13 @@
namespace fs
{
+ struct IsSlash
+ {
+ bool operator()(const wchar_t c) const noexcept { return c == L'/' || c == L'\\'; }
+ };
+
+ constexpr IsSlash is_slash;
+
#if VCPKG_USE_STD_FILESYSTEM
namespace stdfs = std::filesystem;
#else
diff --git a/toolsrc/src/vcpkg/base/files.cpp b/toolsrc/src/vcpkg/base/files.cpp
index d00b9b7a6..ee3a339e0 100644
--- a/toolsrc/src/vcpkg/base/files.cpp
+++ b/toolsrc/src/vcpkg/base/files.cpp
@@ -23,16 +23,6 @@
#include <algorithm>
#include <string>
-namespace
-{
- struct IsSlash
- {
- bool operator()(const wchar_t c) const noexcept { return c == L'/' || c == L'\\'; }
- };
-
- constexpr IsSlash is_slash;
-} // unnamed namespace
-
#if defined(_WIN32)
namespace
{
@@ -1277,6 +1267,7 @@ namespace vcpkg::Files
#ifdef _WIN32
fs::path win32_fix_path_case(const fs::path& source)
{
+ using fs::is_slash;
const std::wstring& native = source.native();
if (native.empty())
{
@@ -1381,7 +1372,7 @@ namespace vcpkg::Files
std::string result;
const auto base_size = base.size();
const auto file_size = file.size();
- if (base_size != 0 && !is_slash(base.data()[base_size - 1]))
+ if (base_size != 0 && !fs::is_slash(base.data()[base_size - 1]))
{
result.reserve(base_size + file_size + 1);
result.append(base.data(), base_size);
diff --git a/toolsrc/src/vcpkg/commands.create.cpp b/toolsrc/src/vcpkg/commands.create.cpp
index b14b47a8f..c3268bd5e 100644
--- a/toolsrc/src/vcpkg/commands.create.cpp
+++ b/toolsrc/src/vcpkg/commands.create.cpp
@@ -8,6 +8,16 @@
#include <vcpkg/vcpkgcmdarguments.h>
#include <vcpkg/vcpkgpaths.h>
+namespace
+{
+ std::string remove_trailing_slashes(std::string argument)
+ {
+ using fs::is_slash;
+ argument.erase(std::find_if_not(argument.rbegin(), argument.rend(), is_slash).base(), argument.end());
+ return argument;
+ }
+}
+
namespace vcpkg::Commands::Create
{
const CommandStructure COMMAND_STRUCTURE = {
@@ -22,7 +32,7 @@ namespace vcpkg::Commands::Create
{
(void)args.parse_arguments(COMMAND_STRUCTURE);
const std::string port_name = args.command_arguments.at(0);
- const std::string url = args.command_arguments.at(1);
+ const std::string url = remove_trailing_slashes(args.command_arguments.at(1));
std::vector<System::CMakeVariable> cmake_args{{"CMD", "CREATE"}, {"PORT", port_name}, {"URL", url}};