aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2018-09-04 18:20:50 -0700
committerRobert Schumacher <roschuma@microsoft.com>2018-09-04 18:20:50 -0700
commita91d32f1cdde95cec662c0453dd0c3e8ca200b31 (patch)
treed450575ebe5ee221eaa8edfddcbd336d509c56b5
parent522d8d1061aa6989fe0896a8a9b75534153c4d9a (diff)
parent06e85f063c696966a677f98e742d6263f61ded66 (diff)
downloadvcpkg-a91d32f1cdde95cec662c0453dd0c3e8ca200b31.tar.gz
vcpkg-a91d32f1cdde95cec662c0453dd0c3e8ca200b31.zip
Merge remote-tracking branch 'origin/master' into dev/roschuma/4224
-rw-r--r--ports/blaze/portfile.cmake4
-rw-r--r--ports/cpprestsdk/CONTROL2
-rw-r--r--ports/cpprestsdk/portfile.cmake4
-rw-r--r--ports/graphicsmagick/disable_graphicsmagick_modules.patch11
-rw-r--r--ports/graphicsmagick/portfile.cmake28
-rw-r--r--ports/libpqxx/CMakeLists.txt8
-rw-r--r--ports/libpqxx/CONTROL2
-rw-r--r--ports/openmesh/CONTROL2
-rw-r--r--ports/openmesh/portfile.cmake30
-rw-r--r--ports/tbb/CMakeLists.txt18
-rw-r--r--ports/tbb/CONTROL2
-rw-r--r--ports/tbb/portfile.cmake135
-rw-r--r--ports/tbb/usage4
-rw-r--r--scripts/cmake/vcpkg_extract_source_archive.cmake104
-rw-r--r--scripts/cmake/vcpkg_from_bitbucket.cmake32
-rw-r--r--scripts/cmake/vcpkg_from_github.cmake74
-rw-r--r--scripts/cmake/vcpkg_from_gitlab.cmake81
17 files changed, 286 insertions, 255 deletions
diff --git a/ports/blaze/portfile.cmake b/ports/blaze/portfile.cmake
index 53e845b70..a44808249 100644
--- a/ports/blaze/portfile.cmake
+++ b/ports/blaze/portfile.cmake
@@ -6,10 +6,6 @@ vcpkg_from_bitbucket(
REF bbe39c81b68eb0d8647da703899e1ee4a82cdfd3
SHA512 84eb8226672d9d11d194d165e7aaa333a0d49ca090bb94472f19242e5f2ad0c3e08a30cdafe055cff51b210b603533f879800bd6784f3ffdb0d9eeca65d58b25
HEAD_REF master
-)
-
-vcpkg_apply_patches(
- SOURCE_PATH ${SOURCE_PATH}
PATCHES
avoid-src-dir-generation.patch
)
diff --git a/ports/cpprestsdk/CONTROL b/ports/cpprestsdk/CONTROL
index f3053c7be..8a7d2aa06 100644
--- a/ports/cpprestsdk/CONTROL
+++ b/ports/cpprestsdk/CONTROL
@@ -1,5 +1,5 @@
Source: cpprestsdk
-Version: 2.10.5
+Version: 2.10.6
Build-Depends: zlib, openssl (!uwp), boost-system (!uwp), boost-date-time (!uwp), boost-regex (!uwp), websocketpp (!uwp), boost-thread (!uwp&!windows), boost-filesystem (!uwp&!windows), boost-random (!uwp&!windows), boost-chrono (!uwp&!windows)
Description: C++11 JSON, REST, and OAuth library
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
diff --git a/ports/cpprestsdk/portfile.cmake b/ports/cpprestsdk/portfile.cmake
index b19bb8eb4..7b816fb79 100644
--- a/ports/cpprestsdk/portfile.cmake
+++ b/ports/cpprestsdk/portfile.cmake
@@ -3,8 +3,8 @@ include(vcpkg_common_functions)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO Microsoft/cpprestsdk
- REF v2.10.5
- SHA512 7942185e0e1cd5080b57737887f44c12e706cfb6428e55762dcbad2fd2c557f25bd26abe25b6abd9769ab6c0cea564541e7e95dcaff53e609124dda065fa41be
+ REF v2.10.6
+ SHA512 f0848f329df80ced68132600914f0f4ba1ed42c7c16188e0f2bd41cf0c50173c27ca42c8db72ff239ca881bc8789fa4d1e3189c492832f6c22d36d504b7ce8dd
HEAD_REF master
)
diff --git a/ports/graphicsmagick/disable_graphicsmagick_modules.patch b/ports/graphicsmagick/disable_graphicsmagick_modules.patch
new file mode 100644
index 000000000..bfb91d0fd
--- /dev/null
+++ b/ports/graphicsmagick/disable_graphicsmagick_modules.patch
@@ -0,0 +1,11 @@
+--- a/magick/studio.h 2018-06-23 14:13:49.191541000 -0400
++++ b/magick/studio.h 2018-09-02 11:50:41.856753700 -0400
+@@ -414,7 +414,7 @@
+ #endif
+
+ #if defined(HasLTDL) || ( defined(MSWINDOWS) && defined(_DLL) )
+-# define SupportMagickModules
++//# define SupportMagickModules
+ #endif
+
+ #if defined(_MAGICKMOD_)
diff --git a/ports/graphicsmagick/portfile.cmake b/ports/graphicsmagick/portfile.cmake
index 0c47813f6..c097c9e97 100644
--- a/ports/graphicsmagick/portfile.cmake
+++ b/ports/graphicsmagick/portfile.cmake
@@ -1,27 +1,35 @@
include(vcpkg_common_functions)
set(GM_VERSION 1.3.30)
-set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/graphicsmagick-${GM_VERSION}-windows-source)
vcpkg_download_distfile(ARCHIVE
URLS "https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/${GM_VERSION}/GraphicsMagick-${GM_VERSION}-windows-source.7z"
FILENAME "GraphicsMagick-${GM_VERSION}-windows-source.7z"
SHA512 9e4cfff57ae547f133e6208033213d3aa790cd8c95a061c101c63b8ae8896e7504d02f302efdd20ff24f72c07760a0a5e2b32e21fe454717ed1deb2edeef159c
- )
-vcpkg_extract_source_archive(${ARCHIVE})
+)
+
+vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE ${ARCHIVE}
+ REF "${GM_VERSION}"
+ PATCHES
+ # GM always requires a dynamic BZIP2. This patch makes this dependent if _DLL is defined
+ dynamic_bzip2.patch
+
+ # Bake GM's own modules into the .dll itself. This fixes a bug whereby
+ # 'vcpkg install graphicsmagick' did not lead to a copy of GM that could
+ # load either PNG or JPEG files (due to missing GM Modules, with names
+ # matching "IM_*.DLL").
+ disable_graphicsmagick_modules.patch
+)
file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
file(COPY ${CMAKE_CURRENT_LIST_DIR}/magick_types.h DESTINATION ${SOURCE_PATH}/magick)
-# GM always requires a dynamic BZIP2. This patch makes this dependent if _DLL is defined
-vcpkg_apply_patches(
- SOURCE_PATH ${SOURCE_PATH}
- PATCHES
- ${CMAKE_CURRENT_LIST_DIR}/dynamic_bzip2.patch)
-
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
- OPTIONS_DEBUG -DINSTALL_HEADERS=OFF
+ OPTIONS_DEBUG
+ -DINSTALL_HEADERS=OFF
)
vcpkg_install_cmake()
diff --git a/ports/libpqxx/CMakeLists.txt b/ports/libpqxx/CMakeLists.txt
index c33d8863f..1d0473376 100644
--- a/ports/libpqxx/CMakeLists.txt
+++ b/ports/libpqxx/CMakeLists.txt
@@ -1,9 +1,11 @@
cmake_minimum_required(VERSION 3.5)
project(libpqxx VERSION 6.0.0 LANGUAGES CXX)
-set(CMAKE_DEBUG_POSTFIX "D")
-find_library(LIBPQD libpqd)
-find_library(LIBPQ libpq)
+set(CMAKE_DEBUG_POSTFIX "d")
+set(CMAKE_CXX_STANDARD 14)
+
+find_library(LIBPQD NAMES libpqd pqd)
+find_library(LIBPQ NAMES libpq pq)
find_path(LIBPQ_FE_H libpq-fe.h)
find_path(POSTGRES_EXT_H postgres_ext.h)
diff --git a/ports/libpqxx/CONTROL b/ports/libpqxx/CONTROL
index 8860ddaf9..ce1a688e9 100644
--- a/ports/libpqxx/CONTROL
+++ b/ports/libpqxx/CONTROL
@@ -1,4 +1,4 @@
Source: libpqxx
-Version: 6.0.0
+Version: 6.0.0-1
Description: The official C++ client API for PostgreSQL
Build-Depends: libpq
diff --git a/ports/openmesh/CONTROL b/ports/openmesh/CONTROL
index b803484eb..cf502b2a2 100644
--- a/ports/openmesh/CONTROL
+++ b/ports/openmesh/CONTROL
@@ -1,3 +1,3 @@
Source: openmesh
-Version: 6.3
+Version: 7.0
Description: A generic and efficient polygon mesh data structure
diff --git a/ports/openmesh/portfile.cmake b/ports/openmesh/portfile.cmake
index 26c167adb..7bfacfe0e 100644
--- a/ports/openmesh/portfile.cmake
+++ b/ports/openmesh/portfile.cmake
@@ -1,24 +1,18 @@
-# Common Ambient Variables:
-# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
-# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
-# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT}
-# PORT = current port name (zlib, etc)
-# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc)
-# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic)
-# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic)
-# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
-# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm)
-#
-
include(vcpkg_common_functions)
-vcpkg_from_gitlab(
+set(VERSION 7.0)
+
+# Note: upstream GitLab instance at https://graphics.rwth-aachen.de:9000 often goes down
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://www.openmesh.org/media/Releases/${VERSION}/OpenMesh-${VERSION}.tar.gz"
+ FILENAME "OpenMesh-${VERSION}.tar.gz"
+ SHA512 29280c8fe7208d39bd923c4d0444a24463e36b95402e6a75f42adc27bc1b261df9113442f69e1001dc1a8b1198488069ffb049742dcf6eac6ac1ecf4f216fad8
+)
+
+vcpkg_extract_source_archive_ex(
OUT_SOURCE_PATH SOURCE_PATH
- GITLAB_URL "https://graphics.rwth-aachen.de:9000"
- REPO "OpenMesh/OpenMesh"
- REF "OpenMesh-7.0"
- HEAD_REF "master"
- SHA512 "70e414088c094199af31a8694fb91fa5f9b574b3cc86b30b3fb64d938e6a218f9f38d857c559f958276b01ec9263ef71cd4039444e50a8cb38e820243aac7956"
+ ARCHIVE "${ARCHIVE}"
+ REF "${VERSION}"
)
vcpkg_configure_cmake(
diff --git a/ports/tbb/CMakeLists.txt b/ports/tbb/CMakeLists.txt
new file mode 100644
index 000000000..cc1dd3933
--- /dev/null
+++ b/ports/tbb/CMakeLists.txt
@@ -0,0 +1,18 @@
+project(tbb CXX)
+
+file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*)
+file(COPY ${SOURCES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/src)
+
+include(${CMAKE_CURRENT_BINARY_DIR}/src/cmake/TBBBuild.cmake REQUIRED)
+tbb_build(TBB_ROOT ${CMAKE_CURRENT_BINARY_DIR}/src MAKE_ARGS extra_inc=big_iron.inc)
+
+set(SUBDIR ${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build/tbb_cmake_build_subdir)
+if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ set(SUBDIR "${SUBDIR}_release")
+else()
+ set(SUBDIR "${SUBDIR}_debug")
+endif()
+
+file(GLOB OUTPUTS ${SUBDIR}/*.so.* ${SUBDIR}/*.so ${SUBDIR}/*.a ${SUBDIR}/*.dylib ${SUBDIR}/*.dylib.*)
+
+install(FILES ${OUTPUTS} DESTINATION lib)
diff --git a/ports/tbb/CONTROL b/ports/tbb/CONTROL
index e70178a80..e87106dc3 100644
--- a/ports/tbb/CONTROL
+++ b/ports/tbb/CONTROL
@@ -1,3 +1,3 @@
Source: tbb
-Version: 2018_U5
+Version: 2018_U5-4
Description: Intel's Threading Building Blocks.
diff --git a/ports/tbb/portfile.cmake b/ports/tbb/portfile.cmake
index 8a66fe2e3..ac47360f8 100644
--- a/ports/tbb/portfile.cmake
+++ b/ports/tbb/portfile.cmake
@@ -1,91 +1,86 @@
-if (VCPKG_LIBRARY_LINKAGE STREQUAL static)
- message(STATUS "Warning: Static building not supported yet. Building dynamic.")
- set(VCPKG_LIBRARY_LINKAGE dynamic)
-endif()
-if (VCPKG_CRT_LINKAGE STREQUAL static)
- message(FATAL_ERROR "TBB does not currently support static crt linkage")
+include(vcpkg_common_functions)
+
+if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
endif()
-include(vcpkg_common_functions)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO 01org/tbb
REF 2018_U5
SHA512 3e8d20276ccb1b50099f96b6cf968e3d0ada53caea1fa836ecb8652f1dca236fbbbf2c783e64ea2f761f7f21725064d19b72d176e35e4dc29706b8a30965153b
- HEAD_REF tbb_2018)
+ HEAD_REF tbb_2018
+)
-if(TRIPLET_SYSTEM_ARCH STREQUAL x86)
- set(BUILD_ARCH Win32)
-else()
- set(BUILD_ARCH ${TRIPLET_SYSTEM_ARCH})
-endif()
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
-set(TBB_MSBUILD_PROJECT_DIR ${SOURCE_PATH}/build/vs2013)
+if(VCPKG_CMAKE_SYSTEM_NAME AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ )
-vcpkg_build_msbuild(PROJECT_PATH ${TBB_MSBUILD_PROJECT_DIR}/makefile.sln PLATFORM ${BUILD_ARCH})
+ vcpkg_install_cmake()
+
+ # Settings for TBBConfigForSource.cmake.in
+ set(TBB_LIB_EXT a)
+ set(TBB_LIB_PREFIX lib)
+else()
+ if (VCPKG_CRT_LINKAGE STREQUAL static)
+ set(RELEASE_CONFIGURATION Release-MT)
+ set(DEBUG_CONFIGURATION Debug-MT)
+ else()
+ set(RELEASE_CONFIGURATION Release)
+ set(DEBUG_CONFIGURATION Debug)
+ endif()
+
+ vcpkg_install_msbuild(
+ SOURCE_PATH ${SOURCE_PATH}
+ PROJECT_SUBPATH build/vs2013/makefile.sln
+ RELEASE_CONFIGURATION ${RELEASE_CONFIGURATION}
+ DEBUG_CONFIGURATION ${DEBUG_CONFIGURATION}
+ )
+ # Settings for TBBConfigForSource.cmake.in
+ set(TBB_LIB_EXT lib)
+ set(TBB_LIB_PREFIX)
+endif()
-# Installation
-message(STATUS "Installing")
file(COPY
${SOURCE_PATH}/include/tbb
${SOURCE_PATH}/include/serial
DESTINATION ${CURRENT_PACKAGES_DIR}/include)
-set(DEBUG_OUTPUT_PATH ${TBB_MSBUILD_PROJECT_DIR}/${BUILD_ARCH}/Debug)
-set(RELEASE_OUTPUT_PATH ${TBB_MSBUILD_PROJECT_DIR}/${BUILD_ARCH}/Release)
-
-file(COPY
- ${RELEASE_OUTPUT_PATH}/tbb.lib
- ${RELEASE_OUTPUT_PATH}/tbbmalloc.lib
- ${RELEASE_OUTPUT_PATH}/tbbmalloc_proxy.lib
- DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
-file(COPY
- ${DEBUG_OUTPUT_PATH}/tbb_debug.lib
- ${DEBUG_OUTPUT_PATH}/tbbmalloc_debug.lib
- ${DEBUG_OUTPUT_PATH}/tbbmalloc_proxy_debug.lib
- DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
-
-file(COPY
- ${RELEASE_OUTPUT_PATH}/tbb.dll
- ${RELEASE_OUTPUT_PATH}/tbbmalloc.dll
- ${RELEASE_OUTPUT_PATH}/tbbmalloc_proxy.dll
- DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
-file(COPY
- ${DEBUG_OUTPUT_PATH}/tbb_debug.dll
- ${DEBUG_OUTPUT_PATH}/tbbmalloc_debug.dll
- ${DEBUG_OUTPUT_PATH}/tbbmalloc_proxy_debug.dll
- DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin)
-
-vcpkg_copy_pdbs()
-
-include(${SOURCE_PATH}/cmake/TBBMakeConfig.cmake)
-tbb_make_config(TBB_ROOT ${CURRENT_PACKAGES_DIR}
- CONFIG_DIR TBB_CONFIG_DIR # is set to ${CURRENT_PACKAGES_DIR}/cmake
- SYSTEM_NAME "Windows"
- CONFIG_FOR_SOURCE
- TBB_RELEASE_DIR "\${_tbb_root}/bin"
- TBB_DEBUG_DIR "\${_tbb_root}/debug/bin")
-
-file(COPY ${TBB_CONFIG_DIR}/TBBConfig.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/tbb)
-file(COPY ${TBB_CONFIG_DIR}/TBBConfigVersion.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/tbb)
-file(REMOVE_RECURSE ${TBB_CONFIG_DIR})
+# Settings for TBBConfigForSource.cmake.in
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc)
+else()
+ set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy)
+endif()
+file(READ "${SOURCE_PATH}/include/tbb/tbb_stddef.h" _tbb_stddef)
+string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_stddef}")
+string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_stddef}")
+string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" TBB_INTERFACE_VERSION "${_tbb_stddef}")
+set(TBB_VERSION "${_tbb_ver_major}.${_tbb_ver_minor}")
+set(TBB_RELEASE_DIR "\${_tbb_root}/lib")
+set(TBB_DEBUG_DIR "\${_tbb_root}/debug/lib")
-# make it work with our installation layout
-file(READ ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake TBB_CONFIG_CMAKE)
-string(REPLACE
-"get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)"
-"get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)
-get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)" TBB_CONFIG_CMAKE "${TBB_CONFIG_CMAKE}")
+configure_file(
+ ${SOURCE_PATH}/cmake/templates/TBBConfigForSource.cmake.in
+ ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake
+ @ONLY
+)
+file(READ ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake _contents)
string(REPLACE
-"\${_tbb_root}/bin/\${_tbb_component}.lib"
-"\${_tbb_root}/lib/\${_tbb_component}.lib" TBB_CONFIG_CMAKE "${TBB_CONFIG_CMAKE}")
-string(REPLACE
-"\${_tbb_root}/debug/bin/\${_tbb_component}_debug.lib"
-"\${_tbb_root}/debug/lib/\${_tbb_component}_debug.lib" TBB_CONFIG_CMAKE "${TBB_CONFIG_CMAKE}")
-file(WRITE ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake "${TBB_CONFIG_CMAKE}")
-
-message(STATUS "Installing done")
+ "get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)"
+ "get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)\nget_filename_component(_tbb_root \"\${_tbb_root}\" PATH)"
+ _contents
+ "${_contents}"
+)
+string(REPLACE "SHARED IMPORTED)" "UNKNOWN IMPORTED)" _contents "${_contents}")
+file(WRITE ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake "${_contents}")
# Handle copyright
-file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/tbb)
+file(COPY ${SOURCE_PATH}/LICENSE ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/tbb)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/tbb/LICENSE ${CURRENT_PACKAGES_DIR}/share/tbb/copyright)
+
+vcpkg_test_cmake(PACKAGE_NAME TBB)
diff --git a/ports/tbb/usage b/ports/tbb/usage
new file mode 100644
index 000000000..ecea9834c
--- /dev/null
+++ b/ports/tbb/usage
@@ -0,0 +1,4 @@
+The package tbb provides CMake targets:
+
+ find_package(TBB CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE TBB::tbb)
diff --git a/scripts/cmake/vcpkg_extract_source_archive.cmake b/scripts/cmake/vcpkg_extract_source_archive.cmake
index 3aafd4ca4..da0ac611a 100644
--- a/scripts/cmake/vcpkg_extract_source_archive.cmake
+++ b/scripts/cmake/vcpkg_extract_source_archive.cmake
@@ -29,25 +29,19 @@
## * [msgpack](https://github.com/Microsoft/vcpkg/blob/master/ports/msgpack/portfile.cmake)
include(vcpkg_execute_required_process)
-function(vcpkg_extract_source_archive_ex)
- cmake_parse_arguments(_vesae "" "ARCHIVE;WORKING_DIRECTORY" "" ${ARGN})
-
- if(NOT _vesae_ARCHIVE)
- message(FATAL_ERROR "Must specify ARCHIVE parameter to vcpkg_extract_source_archive_ex()")
- endif()
-
- if(DEFINED _vesae_WORKING_DIRECTORY)
- set(WORKING_DIRECTORY ${_vesae_WORKING_DIRECTORY})
+function(vcpkg_extract_source_archive ARCHIVE)
+ if(NOT ARGC EQUAL 2)
+ set(WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src")
else()
- set(WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src)
+ set(WORKING_DIRECTORY ${ARGV1})
endif()
- get_filename_component(ARCHIVE_FILENAME ${_vesae_ARCHIVE} NAME)
+ get_filename_component(ARCHIVE_FILENAME "${ARCHIVE}" NAME)
if(NOT EXISTS ${WORKING_DIRECTORY}/${ARCHIVE_FILENAME}.extracted)
- message(STATUS "Extracting source ${_vesae_ARCHIVE}")
+ message(STATUS "Extracting source ${ARCHIVE}")
file(MAKE_DIRECTORY ${WORKING_DIRECTORY})
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} -E tar xjf ${_vesae_ARCHIVE}
+ COMMAND ${CMAKE_COMMAND} -E tar xjf ${ARCHIVE}
WORKING_DIRECTORY ${WORKING_DIRECTORY}
LOGNAME extract
)
@@ -55,13 +49,81 @@ function(vcpkg_extract_source_archive_ex)
endif()
endfunction()
-function(vcpkg_extract_source_archive ARCHIVE)
- if(NOT ARGC EQUAL 2)
- vcpkg_extract_source_archive_ex(ARCHIVE ${ARCHIVE})
- else()
- vcpkg_extract_source_archive_ex(
- ARCHIVE ${ARCHIVE}
- WORKING_DIRECTORY ${ARGV1}
+function(vcpkg_extract_source_archive_ex)
+ cmake_parse_arguments(_vesae "NO_REMOVE_ONE_LEVEL" "OUT_SOURCE_PATH;ARCHIVE;REF;WORKING_DIRECTORY" "PATCHES" ${ARGN})
+
+ if(NOT _vesae_ARCHIVE)
+ message(FATAL_ERROR "Must specify ARCHIVE parameter to vcpkg_extract_source_archive_ex()")
+ endif()
+
+ if(NOT DEFINED _vesae_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "Must specify OUT_SOURCE_PATH parameter to vcpkg_extract_source_archive_ex()")
+ endif()
+
+ if(NOT DEFINED _vesae_WORKING_DIRECTORY)
+ set(_vesae_WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src)
+ endif()
+
+ if(NOT DEFINED _vesae_REF)
+ get_filename_component(_vesae_REF ${_vesae_ARCHIVE} NAME_WE)
+ endif()
+
+ string(REPLACE "/" "-" SANITIZED_REF "${_vesae_REF}")
+
+ # Take the last 10 chars of the REF
+ set(REF_MAX_LENGTH 10)
+ string(LENGTH ${SANITIZED_REF} REF_LENGTH)
+ math(EXPR FROM_REF ${REF_LENGTH}-${REF_MAX_LENGTH})
+ if(FROM_REF LESS 0)
+ set(FROM_REF 0)
+ endif()
+ string(SUBSTRING ${SANITIZED_REF} ${FROM_REF} ${REF_LENGTH} SHORTENED_SANITIZED_REF)
+
+ # Hash the archive hash along with the patches. Take the first 10 chars of the hash
+ file(SHA512 ${_vesae_ARCHIVE} PATCHSET_HASH)
+ foreach(PATCH IN LISTS _vesae_PATCHES)
+ get_filename_component(ABSOLUTE_PATCH "${PATCH}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}")
+ file(SHA512 ${ABSOLUTE_PATCH} CURRENT_HASH)
+ string(APPEND PATCHSET_HASH ${CURRENT_HASH})
+ endforeach()
+
+ string(SHA512 PATCHSET_HASH ${PATCHSET_HASH})
+ string(SUBSTRING ${PATCHSET_HASH} 0 10 PATCHSET_HASH)
+ set(SOURCE_PATH "${_vesae_WORKING_DIRECTORY}/${SHORTENED_SANITIZED_REF}-${PATCHSET_HASH}")
+
+ if(NOT EXISTS ${SOURCE_PATH})
+ set(TEMP_DIR "${_vesae_WORKING_DIRECTORY}/TEMP")
+ file(REMOVE_RECURSE ${TEMP_DIR})
+ vcpkg_extract_source_archive("${_vesae_ARCHIVE}" "${TEMP_DIR}")
+
+ if(_vesae_NO_REMOVE_ONE_LEVEL)
+ set(TEMP_SOURCE_PATH ${TEMP_DIR})
+ else()
+ file(GLOB _ARCHIVE_FILES "${TEMP_DIR}/*")
+ list(LENGTH _ARCHIVE_FILES _NUM_ARCHIVE_FILES)
+ set(TEMP_SOURCE_PATH)
+ foreach(dir IN LISTS _ARCHIVE_FILES)
+ if (IS_DIRECTORY ${dir})
+ set(TEMP_SOURCE_PATH "${dir}")
+ break()
+ endif()
+ endforeach()
+
+ if(NOT _NUM_ARCHIVE_FILES EQUAL 2 OR NOT TEMP_SOURCE_PATH)
+ message(FATAL_ERROR "Could not unwrap top level directory from archive. Pass NO_REMOVE_ONE_LEVEL to disable this.")
+ endif()
+ endif()
+
+ vcpkg_apply_patches(
+ SOURCE_PATH ${TEMP_SOURCE_PATH}
+ PATCHES ${_vesae_PATCHES}
)
+
+ file(RENAME ${TEMP_SOURCE_PATH} ${SOURCE_PATH})
+ file(REMOVE_RECURSE ${TEMP_DIR})
endif()
-endfunction() \ No newline at end of file
+
+ set(${_vesae_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
+ message(STATUS "Using source at ${SOURCE_PATH}")
+ return()
+endfunction()
diff --git a/scripts/cmake/vcpkg_from_bitbucket.cmake b/scripts/cmake/vcpkg_from_bitbucket.cmake
index 7eaf550bb..5f23714ea 100644
--- a/scripts/cmake/vcpkg_from_bitbucket.cmake
+++ b/scripts/cmake/vcpkg_from_bitbucket.cmake
@@ -11,6 +11,7 @@
## [REF <v2.0.0>]
## [SHA512 <45d0d7f8cc350...>]
## [HEAD_REF <master>]
+## [PATCHES <patch1.patch> <patch2.patch>...]
## )
## ```
##
@@ -40,6 +41,11 @@
##
## For most projects, this should be `master`. The chosen branch should be one that is expected to be always buildable on all supported platforms.
##
+## ### PATCHES
+## A list of patches to be applied to the extracted sources.
+##
+## Relative paths are based on the port directory.
+##
## ## Notes:
## At least one of `REF` and `HEAD_REF` must be specified, however it is preferable for both to be present.
##
@@ -50,7 +56,7 @@
## * [blaze](https://github.com/Microsoft/vcpkg/blob/master/ports/blaze/portfile.cmake)
function(vcpkg_from_bitbucket)
set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 HEAD_REF)
- set(multipleValuesArgs)
+ set(multipleValuesArgs PATCHES)
cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
if(NOT _vdud_OUT_SOURCE_PATH)
@@ -123,8 +129,14 @@ function(vcpkg_from_bitbucket)
SHA512 "${_vdud_SHA512}"
FILENAME "${ORG_NAME}-${REPO_NAME}-${_vdud_REF}.tar.gz"
)
- vcpkg_extract_source_archive_ex(ARCHIVE "${ARCHIVE}")
- set_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src ${_version})
+
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${ARCHIVE}"
+ REF "${_vdud_REF}"
+ PATCHES ${_vdud_PATCHES}
+ )
+ set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
return()
endif()
@@ -164,11 +176,6 @@ function(vcpkg_from_bitbucket)
)
endif()
- vcpkg_extract_source_archive_ex(
- ARCHIVE "${ARCHIVE}"
- WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head"
- )
-
# Parse the github refs response with regex.
# TODO: use some JSON swiss-army-knife utility instead.
file(READ "${ARCHIVE_VERSION}" _contents)
@@ -179,5 +186,12 @@ function(vcpkg_from_bitbucket)
# exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build.
set(VCPKG_HEAD_VERSION ${_version} PARENT_SCOPE)
- set_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/head ${_vdud_HEAD_REF})
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${downloaded_file_path}"
+ REF "${_vdud_HEAD_REF}"
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head"
+ PATCHES ${_vdud_PATCHES}
+ )
+ set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
endfunction()
diff --git a/scripts/cmake/vcpkg_from_github.cmake b/scripts/cmake/vcpkg_from_github.cmake
index 33de8354d..48bfd828a 100644
--- a/scripts/cmake/vcpkg_from_github.cmake
+++ b/scripts/cmake/vcpkg_from_github.cmake
@@ -80,16 +80,16 @@ function(vcpkg_from_github)
string(REGEX REPLACE "/.*" "" ORG_NAME ${_vdud_REPO})
macro(set_TEMP_SOURCE_PATH BASE BASEREF)
- set(TEMP_SOURCE_PATH "${BASE}/${REPO_NAME}-${BASEREF}")
- if(NOT EXISTS ${TEMP_SOURCE_PATH})
- # Sometimes GitHub strips a leading 'v' off the REF.
- string(REGEX REPLACE "^v" "" REF ${BASEREF})
- string(REPLACE "/" "-" REF ${REF})
- set(TEMP_SOURCE_PATH "${BASE}/${REPO_NAME}-${REF}")
+ set(TEMP_SOURCE_PATH "${BASE}/${REPO_NAME}-${BASEREF}")
if(NOT EXISTS ${TEMP_SOURCE_PATH})
- message(FATAL_ERROR "Could not determine source path: '${BASE}/${REPO_NAME}-${BASEREF}' does not exist")
+ # Sometimes GitHub strips a leading 'v' off the REF.
+ string(REGEX REPLACE "^v" "" REF ${BASEREF})
+ string(REPLACE "/" "-" REF ${REF})
+ set(TEMP_SOURCE_PATH "${BASE}/${REPO_NAME}-${REF}")
+ if(NOT EXISTS ${TEMP_SOURCE_PATH})
+ message(FATAL_ERROR "Could not determine source path: '${BASE}/${REPO_NAME}-${BASEREF}' does not exist")
+ endif()
endif()
- endif()
endmacro()
if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED _vdud_HEAD_REF)
@@ -111,44 +111,14 @@ function(vcpkg_from_github)
FILENAME "${ORG_NAME}-${REPO_NAME}-${SANITIZED_REF}.tar.gz"
)
- # Take the last 10 chars of the REF
- set(REF_MAX_LENGTH 10)
- string(LENGTH ${SANITIZED_REF} REF_LENGTH)
- math(EXPR FROM_REF ${REF_LENGTH}-${REF_MAX_LENGTH})
- if(FROM_REF LESS 0)
- set(FROM_REF 0)
- endif()
- string(SUBSTRING ${SANITIZED_REF} ${FROM_REF} ${REF_LENGTH} SHORTENED_SANITIZED_REF)
-
- # Hash the archive hash along with the patches. Take the first 10 chars of the hash
- set(PATCHSET_HASH "${_vdud_SHA512}")
- foreach(PATCH IN LISTS _vdud_PATCHES)
- get_filename_component(ABSOLUTE_PATCH "${PATCH}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}")
- file(SHA512 ${ABSOLUTE_PATCH} CURRENT_HASH)
- string(APPEND PATCHSET_HASH ${CURRENT_HASH})
- endforeach()
-
- string(SHA512 PATCHSET_HASH ${PATCHSET_HASH})
- string(SUBSTRING ${PATCHSET_HASH} 0 10 PATCHSET_HASH)
- set(SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/src/${SHORTENED_SANITIZED_REF}-${PATCHSET_HASH}")
-
- if(NOT EXISTS ${SOURCE_PATH})
- set(TEMP_DIR "${CURRENT_BUILDTREES_DIR}/src/TEMP")
- file(REMOVE_RECURSE ${TEMP_DIR})
- vcpkg_extract_source_archive_ex(ARCHIVE "${ARCHIVE}" WORKING_DIRECTORY ${TEMP_DIR})
- set_TEMP_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/TEMP ${SANITIZED_REF})
-
- vcpkg_apply_patches(
- SOURCE_PATH ${TEMP_SOURCE_PATH}
- PATCHES ${_vdud_PATCHES}
- )
-
- file(RENAME ${TEMP_SOURCE_PATH} ${SOURCE_PATH})
- file(REMOVE_RECURSE ${TEMP_DIR})
- endif()
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${ARCHIVE}"
+ REF "${SANITIZED_REF}"
+ PATCHES ${_vdud_PATCHES}
+ )
set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
- message(STATUS "Using source at ${SOURCE_PATH}")
return()
endif()
@@ -189,11 +159,6 @@ function(vcpkg_from_github)
)
endif()
- vcpkg_extract_source_archive_ex(
- ARCHIVE "${ARCHIVE}"
- WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head"
- )
-
# Parse the github refs response with regex.
# TODO: use some JSON swiss-army-knife utility instead.
file(READ "${ARCHIVE_VERSION}" _contents)
@@ -206,11 +171,12 @@ function(vcpkg_from_github)
set(VCPKG_HEAD_VERSION ${_version} PARENT_SCOPE)
endif()
- set_TEMP_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/head ${SANITIZED_HEAD_REF})
- vcpkg_apply_patches(
- SOURCE_PATH ${TEMP_SOURCE_PATH}
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${downloaded_file_path}"
+ REF "${SANITIZED_HEAD_REF}"
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src/head
PATCHES ${_vdud_PATCHES}
)
- set(${_vdud_OUT_SOURCE_PATH} "${TEMP_SOURCE_PATH}" PARENT_SCOPE)
- message(STATUS "Using source at ${TEMP_SOURCE_PATH}")
+ set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
endfunction()
diff --git a/scripts/cmake/vcpkg_from_gitlab.cmake b/scripts/cmake/vcpkg_from_gitlab.cmake
index 2f2198fd6..f13bc054c 100644
--- a/scripts/cmake/vcpkg_from_gitlab.cmake
+++ b/scripts/cmake/vcpkg_from_gitlab.cmake
@@ -11,6 +11,7 @@
## [REF <v10.7.3>]
## [SHA512 <45d0d7f8cc350...>]
## [HEAD_REF <master>]
+## [PATCHES <patch1.patch> <patch2.patch>...]
## )
## ```
##
@@ -45,6 +46,11 @@
##
## For most projects, this should be `master`. The chosen branch should be one that is expected to be always buildable on all supported platforms.
##
+## ### PATCHES
+## A list of patches to be applied to the extracted sources.
+##
+## Relative paths are based on the port directory.
+##
## ## Notes:
## At least one of `REF` and `HEAD_REF` must be specified, however it is preferable for both to be present.
##
@@ -76,28 +82,14 @@ function(vcpkg_from_gitlab)
message(FATAL_ERROR "At least one of REF and HEAD_REF must be specified.")
endif()
- string(REGEX REPLACE ".*/" "" REPO_NAME ${_vdud_REPO})
- string(REGEX REPLACE "/.*" "" ORG_NAME ${_vdud_REPO})
-
- macro(set_TEMP_SOURCE_PATH BASE)
- file(GLOB _ARCHIVE_FILES "${BASE}/${REPO_NAME}*")
- foreach(dir ${_ARCHIVE_FILES})
- if (IS_DIRECTORY ${dir})
- list(APPEND _ARCHIVE_DIRS "${dir}")
- endif()
- endforeach()
- list(LENGTH _ARCHIVE_DIRS _NUM_ARCHIVE_DIRS)
- if(NOT 1 EQUAL ${_NUM_ARCHIVE_DIRS})
- message(FATAL_ERROR "Could not determine source path: There were ${_NUM_ARCHIVE_DIRS} directories extracted from the archive that start with the repo name.")
- endif()
- list(GET _ARCHIVE_DIRS 0 TEMP_SOURCE_PATH)
- endmacro()
-
if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED _vdud_HEAD_REF)
message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
set(VCPKG_USE_HEAD_VERSION OFF)
endif()
+ string(REGEX REPLACE ".*/" "" REPO_NAME ${_vdud_REPO})
+ string(REGEX REPLACE "/.*" "" ORG_NAME ${_vdud_REPO})
+
# Handle --no-head scenarios
if(NOT VCPKG_USE_HEAD_VERSION)
if(NOT _vdud_REF)
@@ -112,43 +104,14 @@ function(vcpkg_from_gitlab)
FILENAME "${ORG_NAME}-${REPO_NAME}-${SANITIZED_REF}.tar.gz"
)
- # Take the last 10 chars of the REF
- set(REF_MAX_LENGTH 10)
- string(LENGTH ${SANITIZED_REF} REF_LENGTH)
- math(EXPR FROM_REF ${REF_LENGTH}-${REF_MAX_LENGTH})
- if(FROM_REF LESS 0)
- set(FROM_REF 0)
- endif()
- string(SUBSTRING ${SANITIZED_REF} ${FROM_REF} ${REF_LENGTH} SHORTENED_SANITIZED_REF)
-
- # Hash the archive hash along with the patches. Take the first 10 chars of the hash
- set(PATCHSET_HASH "${_vdud_SHA512}")
- foreach(PATCH IN LISTS _vdud_PATCHES)
- file(SHA512 ${PATCH} CURRENT_HASH)
- string(APPEND PATCHSET_HASH ${CURRENT_HASH})
- endforeach()
-
- string(SHA512 PATCHSET_HASH ${PATCHSET_HASH})
- string(SUBSTRING ${PATCHSET_HASH} 0 10 PATCHSET_HASH)
- set(SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/src/${SHORTENED_SANITIZED_REF}-${PATCHSET_HASH}")
-
- if(NOT EXISTS ${SOURCE_PATH})
- set(TEMP_DIR "${CURRENT_BUILDTREES_DIR}/src/TEMP")
- file(REMOVE_RECURSE ${TEMP_DIR})
- vcpkg_extract_source_archive_ex(ARCHIVE "${ARCHIVE}" WORKING_DIRECTORY ${TEMP_DIR})
- set_TEMP_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/TEMP ${SANITIZED_REF})
-
- vcpkg_apply_patches(
- SOURCE_PATH ${TEMP_SOURCE_PATH}
- PATCHES ${_vdud_PATCHES}
- )
-
- file(RENAME ${TEMP_SOURCE_PATH} ${SOURCE_PATH})
- file(REMOVE_RECURSE ${TEMP_DIR})
- endif()
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${ARCHIVE}"
+ REF "${SANITIZED_REF}"
+ PATCHES ${_vdud_PATCHES}
+ )
set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
-
return()
endif()
@@ -182,10 +145,6 @@ function(vcpkg_from_gitlab)
)
endif()
- vcpkg_extract_source_archive_ex(
- ARCHIVE "${ARCHIVE}"
- WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head"
- )
# There are issues with the Gitlab API project paths being URL-escaped, so we use git here to get the head revision
execute_process(COMMAND ${GIT} ls-remote
"${_vdud_GITLAB_URL}/${ORG_NAME}/${REPO_NAME}.git" "${_vdud_HEAD_REF}"
@@ -199,10 +158,12 @@ function(vcpkg_from_gitlab)
set(VCPKG_HEAD_VERSION ${_version} PARENT_SCOPE)
endif()
- set_TEMP_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/head ${SANITIZED_HEAD_REF})
- vcpkg_apply_patches(
- SOURCE_PATH ${TEMP_SOURCE_PATH}
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${downloaded_file_path}"
+ REF "${SANITIZED_HEAD_REF}"
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/src/head
PATCHES ${_vdud_PATCHES}
)
- set(${_vdud_OUT_SOURCE_PATH} "${TEMP_SOURCE_PATH}" PARENT_SCOPE)
+ set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
endfunction()