aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsdcb <sdflysha@qq.com>2017-01-14 10:55:19 +0800
committersdcb <sdflysha@qq.com>2017-01-14 10:55:19 +0800
commitbeec44ae8d09b31a6c137bd580bd05111adc3077 (patch)
treee444c555f550471800becec72001ce4428b95a89
parentc104c8966f7bf2fa6576d25cc3631894008c94e1 (diff)
parent1e4e45ffcee2774a6cbe87527c140fa2107bd29d (diff)
downloadvcpkg-beec44ae8d09b31a6c137bd580bd05111adc3077.tar.gz
vcpkg-beec44ae8d09b31a6c137bd580bd05111adc3077.zip
Merge remote-tracking branch 'refs/remotes/upstream/master'
-rw-r--r--ports/boost/CONTROL2
-rw-r--r--ports/boost/portfile.cmake9
-rw-r--r--ports/curl/0002_fix_uwp.patch109
-rw-r--r--ports/curl/CONTROL2
-rw-r--r--ports/curl/portfile.cmake39
-rw-r--r--ports/directxmesh/CONTROL3
-rw-r--r--ports/directxmesh/portfile.cmake52
-rw-r--r--ports/directxtex/CONTROL3
-rw-r--r--ports/directxtex/portfile.cmake59
-rw-r--r--ports/directxtk/CONTROL2
-rw-r--r--ports/directxtk/portfile.cmake8
-rw-r--r--ports/directxtk12/CONTROL2
-rw-r--r--ports/directxtk12/portfile.cmake8
-rw-r--r--ports/freetype/0003-Fix-UWP.patch63
-rw-r--r--ports/freetype/CONTROL2
-rw-r--r--ports/freetype/portfile.cmake1
-rw-r--r--ports/glew/CONTROL2
-rw-r--r--ports/glew/portfile.cmake10
-rw-r--r--ports/http-parser/CMakeLists.txt10
-rw-r--r--ports/http-parser/CONTROL2
-rw-r--r--ports/libssh2/0001-Fix-UWP.patch48
-rw-r--r--ports/libssh2/CONTROL2
-rw-r--r--ports/libssh2/portfile.cmake4
-rw-r--r--ports/libwebsockets/0001-Fix-UWP.patch91
-rw-r--r--ports/libwebsockets/CONTROL2
-rw-r--r--ports/libwebsockets/portfile.cmake6
-rw-r--r--ports/metis/CONTROL3
-rw-r--r--ports/metis/disable-programs.patch8
-rw-r--r--ports/metis/enable-install.patch15
-rw-r--r--ports/metis/fix-gklib-vs14-math.patch11
-rw-r--r--ports/metis/fix-metis-vs14-math.patch11
-rw-r--r--ports/metis/fix-runtime-install-destination.patch10
-rw-r--r--ports/metis/portfile.cmake47
-rw-r--r--ports/openssl/CONTROL2
-rw-r--r--ports/openssl/setVSvars.bat8
-rw-r--r--ports/sdl2-image/CMakeLists.txt109
-rw-r--r--ports/sdl2-image/CONTROL5
-rw-r--r--ports/sdl2-image/FindWEBP.cmake24
-rw-r--r--ports/sdl2-image/correct-sdl-headers-dir.patch25
-rw-r--r--ports/sdl2-image/portfile.cmake39
-rw-r--r--ports/szip/CONTROL3
-rw-r--r--ports/szip/disable-static-lib-in-shared-build.patch39
-rw-r--r--ports/szip/portfile.cmake48
-rw-r--r--ports/tiff/CONTROL2
-rw-r--r--ports/tiff/fix-uwp.patch25
-rw-r--r--ports/tiff/portfile.cmake1
-rw-r--r--scripts/buildsystems/msbuild/applocal.ps13
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake13
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake25
-rw-r--r--toolsrc/include/vcpkg_Commands.h125
-rw-r--r--toolsrc/src/commands_available_commands.cpp44
-rw-r--r--toolsrc/src/commands_build.cpp128
-rw-r--r--toolsrc/src/commands_build_external.cpp32
-rw-r--r--toolsrc/src/commands_cache.cpp6
-rw-r--r--toolsrc/src/commands_contact.cpp13
-rw-r--r--toolsrc/src/commands_create.cpp6
-rw-r--r--toolsrc/src/commands_edit.cpp9
-rw-r--r--toolsrc/src/commands_hash.cpp6
-rw-r--r--toolsrc/src/commands_help.cpp86
-rw-r--r--toolsrc/src/commands_helpers.cpp7
-rw-r--r--toolsrc/src/commands_import.cpp6
-rw-r--r--toolsrc/src/commands_install.cpp (renamed from toolsrc/src/commands_installation.cpp)147
-rw-r--r--toolsrc/src/commands_integrate.cpp (renamed from toolsrc/src/commands_integration.cpp)4
-rw-r--r--toolsrc/src/commands_list.cpp6
-rw-r--r--toolsrc/src/commands_other.cpp103
-rw-r--r--toolsrc/src/commands_owns.cpp6
-rw-r--r--toolsrc/src/commands_portsdiff.cpp6
-rw-r--r--toolsrc/src/commands_remove.cpp6
-rw-r--r--toolsrc/src/commands_search.cpp7
-rw-r--r--toolsrc/src/commands_update.cpp4
-rw-r--r--toolsrc/src/commands_version.cpp16
-rw-r--r--toolsrc/src/main.cpp10
-rw-r--r--toolsrc/src/vcpkg_Input.cpp2
-rw-r--r--toolsrc/src/vcpkg_cmd_arguments.cpp6
-rw-r--r--toolsrc/vcpkg/vcpkg.vcxproj10
-rw-r--r--toolsrc/vcpkg/vcpkg.vcxproj.filters30
76 files changed, 1436 insertions, 412 deletions
diff --git a/ports/boost/CONTROL b/ports/boost/CONTROL
index 9e2afdf8a..01d6e9858 100644
--- a/ports/boost/CONTROL
+++ b/ports/boost/CONTROL
@@ -1,4 +1,4 @@
Source: boost
-Version: 1.62-9
+Version: 1.62-10
Description: Peer-reviewed portable C++ source libraries
Build-Depends: zlib
diff --git a/ports/boost/portfile.cmake b/ports/boost/portfile.cmake
index 6cc21a091..3fbd06982 100644
--- a/ports/boost/portfile.cmake
+++ b/ports/boost/portfile.cmake
@@ -108,11 +108,10 @@ file(
DESTINATION ${CURRENT_PACKAGES_DIR}/include
)
-if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
- file(APPEND ${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp
- "\n#define BOOST_ALL_DYN_LINK\n"
- )
-endif()
+# Disable Boost auto-link.
+file(APPEND ${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp
+ "\n#define BOOST_ALL_NO_LIB\n"
+)
file(INSTALL ${SOURCE_PATH}/LICENSE_1_0.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/boost RENAME copyright)
message(STATUS "Packaging headers done")
diff --git a/ports/curl/0002_fix_uwp.patch b/ports/curl/0002_fix_uwp.patch
new file mode 100644
index 000000000..5cd0678cf
--- /dev/null
+++ b/ports/curl/0002_fix_uwp.patch
@@ -0,0 +1,109 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ed3f38a..d6480b7 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1010,7 +1010,9 @@ include(CMake/OtherTests.cmake)
+ add_definitions(-DHAVE_CONFIG_H)
+
+ # For windows, do not allow the compiler to use default target (Vista).
+-if(WIN32)
++if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
++ add_definitions(-D_WIN32_WINNT=0x0A00 -DHAVE_STRUCT_POLLFD -D_WINSOCK_DEPRECATED_NO_WARNINGS)
++elseif(WIN32)
+ add_definitions(-D_WIN32_WINNT=0x0501)
+ endif(WIN32)
+
+diff --git a/lib/curl_gethostname.c b/lib/curl_gethostname.c
+index 2591fd8..cef38ac 100644
+--- a/lib/curl_gethostname.c
++++ b/lib/curl_gethostname.c
+@@ -21,6 +21,7 @@
+ ***************************************************************************/
+
+ #include "curl_setup.h"
++#include "curl/curl.h"
+
+ #include "curl_gethostname.h"
+
+@@ -64,9 +65,10 @@ int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen) {
+ #ifdef DEBUGBUILD
+
+ /* Override host name when environment variable CURL_GETHOSTNAME is set */
+- const char *force_hostname = getenv("CURL_GETHOSTNAME");
++ char *force_hostname = curl_getenv("CURL_GETHOSTNAME");
+ if(force_hostname) {
+ strncpy(name, force_hostname, namelen);
++ free(force_hostname);
+ err = 0;
+ }
+ else {
+diff --git a/lib/curl_ntlm_core.c b/lib/curl_ntlm_core.c
+index 812a073..02c8416 100644
+--- a/lib/curl_ntlm_core.c
++++ b/lib/curl_ntlm_core.c
+@@ -696,9 +696,12 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
+
+ /* Calculate the timestamp */
+ #ifdef DEBUGBUILD
+- char *force_timestamp = getenv("CURL_FORCETIME");
+- if(force_timestamp)
++ char *force_timestamp = curl_getenv("CURL_FORCETIME");
++ if (force_timestamp)
++ {
+ tw = CURL_OFF_T_C(11644473600) * 10000000;
++ free(force_timestamp);
++ }
+ else
+ #endif
+ tw = ((curl_off_t)time(NULL) + CURL_OFF_T_C(11644473600)) * 10000000;
+diff --git a/lib/ftp.c b/lib/ftp.c
+index b231731..d50779f 100644
+--- a/lib/ftp.c
++++ b/lib/ftp.c
+@@ -3250,7 +3250,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
+ ssize_t nread;
+ int ftpcode;
+ CURLcode result = CURLE_OK;
+- char *path;
++ char *path = NULL;
+ const char *path_to_use = data->state.path;
+
+ if(!ftp)
+diff --git a/lib/smb.c b/lib/smb.c
+index 7cb0c96..2f43d3c 100644
+--- a/lib/smb.c
++++ b/lib/smb.c
+@@ -32,8 +32,12 @@
+
+ #ifdef HAVE_PROCESS_H
+ #include <process.h>
++#if defined(CURL_WINDOWS_APP)
++#define getpid GetCurrentProcessId
++#else
+ #define getpid _getpid
+ #endif
++#endif
+
+ #include "smb.h"
+ #include "urldata.h"
+diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c
+index 56a8823..5a895ed 100644
+--- a/lib/vtls/vtls.c
++++ b/lib/vtls/vtls.c
+@@ -197,7 +197,7 @@ unsigned int Curl_rand(struct Curl_easy *data)
+ static bool seeded = FALSE;
+
+ #ifdef CURLDEBUG
+- char *force_entropy = getenv("CURL_ENTROPY");
++ char *force_entropy = curl_getenv("CURL_ENTROPY");
+ if(force_entropy) {
+ if(!seeded) {
+ size_t elen = strlen(force_entropy);
+@@ -208,6 +208,7 @@ unsigned int Curl_rand(struct Curl_easy *data)
+ }
+ else
+ randseed++;
++ free(force_entropy);
+ return randseed;
+ }
+ #endif
diff --git a/ports/curl/CONTROL b/ports/curl/CONTROL
index e18ea2f67..9ae7e7e52 100644
--- a/ports/curl/CONTROL
+++ b/ports/curl/CONTROL
@@ -1,4 +1,4 @@
Source: curl
-Version: 7.51.0-2
+Version: 7.51.0-3
Build-Depends: zlib, openssl, libssh2
Description: A library for transferring data with URLs
diff --git a/ports/curl/portfile.cmake b/ports/curl/portfile.cmake
index 01c76718b..35bfbd592 100644
--- a/ports/curl/portfile.cmake
+++ b/ports/curl/portfile.cmake
@@ -11,6 +11,7 @@ vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
PATCHES
${CMAKE_CURRENT_LIST_DIR}/0001_cmake.patch
+ ${CMAKE_CURRENT_LIST_DIR}/0002_fix_uwp.patch
)
if (VCPKG_CRT_LINKAGE STREQUAL dynamic)
@@ -19,16 +20,34 @@ else()
SET(CURL_STATICLIB ON)
endif()
-vcpkg_configure_cmake(
- SOURCE_PATH ${SOURCE_PATH}
- OPTIONS
- -DBUILD_TESTING=OFF
- -DBUILD_CURL_EXE=OFF
- -DENABLE_MANUAL=OFF
- -DCURL_STATICLIB=${CURL_STATICLIB}
- OPTIONS_DEBUG
- -DENABLE_DEBUG=ON
-)
+if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ OPTIONS
+ -DBUILD_TESTING=OFF
+ -DBUILD_CURL_EXE=OFF
+ -DENABLE_MANUAL=OFF
+ -DUSE_WIN32_LDAP=OFF
+ -DCURL_DISABLE_TELNET=ON
+ -DENABLE_IPV6=OFF
+ -DENABLE_UNIX_SOCKETS=OFF
+ -DCMAKE_USE_OPENSSL=ON
+ -DCURL_STATICLIB=${CURL_STATICLIB}
+ OPTIONS_DEBUG
+ -DENABLE_DEBUG=ON
+ )
+else()
+ vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ OPTIONS
+ -DBUILD_TESTING=OFF
+ -DBUILD_CURL_EXE=OFF
+ -DENABLE_MANUAL=OFF
+ -DCURL_STATICLIB=${CURL_STATICLIB}
+ OPTIONS_DEBUG
+ -DENABLE_DEBUG=ON
+ )
+endif()
vcpkg_install_cmake()
diff --git a/ports/directxmesh/CONTROL b/ports/directxmesh/CONTROL
new file mode 100644
index 000000000..13401f80d
--- /dev/null
+++ b/ports/directxmesh/CONTROL
@@ -0,0 +1,3 @@
+Source: directxmesh
+Version: oct2016
+Description: DirectXMesh geometry processing library \ No newline at end of file
diff --git a/ports/directxmesh/portfile.cmake b/ports/directxmesh/portfile.cmake
new file mode 100644
index 000000000..184784d48
--- /dev/null
+++ b/ports/directxmesh/portfile.cmake
@@ -0,0 +1,52 @@
+# Common Ambient Variables:
+# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
+# TARGET_TRIPLET is the current triplet (x86-windows, etc)
+# PORT is the current port name (zlib, etc)
+# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
+# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
+#
+if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ message(STATUS "Warning: Dynamic building not supported yet. Building static.")
+ set(VCPKG_LIBRARY_LINKAGE static)
+endif()
+
+include(vcpkg_common_functions)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/DirectXMesh-oct2016)
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://github.com/Microsoft/DirectXMesh/archive/oct2016.tar.gz"
+ FILENAME "DirectXMesh-oct2016.tar.gz"
+ SHA512 8aaf9749766afd23709ce6c6f8d74b008fe9f96789e4d97cb387633dad34b4132ef28dfe028d13c779ea366428d53076a881c0d63c4f0c2c74d552293c8d6bf1
+)
+vcpkg_extract_source_archive(${ARCHIVE})
+
+IF (TRIPLET_SYSTEM_ARCH MATCHES "x86")
+ SET(BUILD_ARCH "Win32")
+ELSE()
+ SET(BUILD_ARCH ${TRIPLET_SYSTEM_ARCH})
+ENDIF()
+
+vcpkg_build_msbuild(
+ PROJECT_PATH ${SOURCE_PATH}/DirectXMesh_Desktop_2015.sln
+ PLATFORM ${BUILD_ARCH}
+)
+
+file(INSTALL
+ ${SOURCE_PATH}/DirectXMesh/DirectXMesh.h
+ ${SOURCE_PATH}/DirectXMesh/DirectXMesh.inl
+ DESTINATION ${CURRENT_PACKAGES_DIR}/include
+)
+file(INSTALL
+ ${SOURCE_PATH}/DirectXMesh/Bin/Desktop_2015/${BUILD_ARCH}/Debug/DirectXMesh.lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+file(INSTALL
+ ${SOURCE_PATH}/DirectXMesh/Bin/Desktop_2015/${BUILD_ARCH}/Release/DirectXMesh.lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+
+set(TOOL_PATH ${CURRENT_PACKAGES_DIR}/tools)
+file(INSTALL
+ ${SOURCE_PATH}/Meshconvert/Bin/Desktop_2015/${BUILD_ARCH}/Release/Meshconvert.exe
+ DESTINATION ${TOOL_PATH})
+
+# Handle copyright
+file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/directxmesh)
+file(RENAME ${CURRENT_PACKAGES_DIR}/share/directxmesh/LICENSE ${CURRENT_PACKAGES_DIR}/share/directxmesh/copyright)
diff --git a/ports/directxtex/CONTROL b/ports/directxtex/CONTROL
new file mode 100644
index 000000000..b11daa8d4
--- /dev/null
+++ b/ports/directxtex/CONTROL
@@ -0,0 +1,3 @@
+Source: directxtex
+Version: dec2016
+Description: DirectXTex texture processing library \ No newline at end of file
diff --git a/ports/directxtex/portfile.cmake b/ports/directxtex/portfile.cmake
new file mode 100644
index 000000000..70bb16658
--- /dev/null
+++ b/ports/directxtex/portfile.cmake
@@ -0,0 +1,59 @@
+# Common Ambient Variables:
+# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
+# TARGET_TRIPLET is the current triplet (x86-windows, etc)
+# PORT is the current port name (zlib, etc)
+# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
+# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
+#
+if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ message(STATUS "Warning: Dynamic building not supported yet. Building static.")
+ set(VCPKG_LIBRARY_LINKAGE static)
+endif()
+
+include(vcpkg_common_functions)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/directxtex-dec2016)
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://github.com/Microsoft/DirectXTex/archive/dec2016.tar.gz"
+ FILENAME "directxtex-dec2016.tar.gz"
+ SHA512 87797340c40a98a7b11b6eb7da17d0b93bc01ba48deed50e99ce74e0e33387cac2ec18f2f14d0148c2a79f97ca98d6b2a228dad2f16010b6dcf03c0d24a79d20
+)
+vcpkg_extract_source_archive(${ARCHIVE})
+
+IF (TRIPLET_SYSTEM_ARCH MATCHES "x86")
+ SET(BUILD_ARCH "Win32")
+ELSE()
+ SET(BUILD_ARCH ${TRIPLET_SYSTEM_ARCH})
+ENDIF()
+
+vcpkg_build_msbuild(
+ PROJECT_PATH ${SOURCE_PATH}/DirectXTex_Desktop_2015.sln
+ PLATFORM ${BUILD_ARCH}
+)
+
+file(INSTALL
+ ${SOURCE_PATH}/DirectXTex/DirectXTex.h
+ ${SOURCE_PATH}/DirectXTex/DirectXTex.inl
+ DESTINATION ${CURRENT_PACKAGES_DIR}/include
+)
+file(INSTALL
+ ${SOURCE_PATH}/DirectXTex/Bin/Desktop_2015/${BUILD_ARCH}/Debug/DirectXTex.lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+file(INSTALL
+ ${SOURCE_PATH}/DirectXTex/Bin/Desktop_2015/${BUILD_ARCH}/Release/DirectXTex.lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+
+set(TOOL_PATH ${CURRENT_PACKAGES_DIR}/tools)
+file(MAKE_DIRECTORY ${TOOL_PATH})
+file(INSTALL
+ ${SOURCE_PATH}/Texdiag/Bin/Desktop_2015/${BUILD_ARCH}/Release/texdiag.exe
+ DESTINATION ${TOOL_PATH})
+file(INSTALL
+ ${SOURCE_PATH}/Texconv/Bin/Desktop_2015/${BUILD_ARCH}/Release/Texconv.exe
+ DESTINATION ${TOOL_PATH})
+file(INSTALL
+ ${SOURCE_PATH}/Texassemble/Bin/Desktop_2015/${BUILD_ARCH}/Release/Texassemble.exe
+ DESTINATION ${TOOL_PATH})
+
+# Handle copyright
+file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/DirectXTex)
+file(RENAME ${CURRENT_PACKAGES_DIR}/share/DirectXTex/LICENSE ${CURRENT_PACKAGES_DIR}/share/DirectXTex/copyright)
diff --git a/ports/directxtk/CONTROL b/ports/directxtk/CONTROL
index b5e0bcb7d..8a3da81a6 100644
--- a/ports/directxtk/CONTROL
+++ b/ports/directxtk/CONTROL
@@ -1,3 +1,3 @@
Source: directxtk
-Version: oct2016-1
+Version: dec2016
Description: A collection of helper classes for writing DirectX 11.x code in C++.
diff --git a/ports/directxtk/portfile.cmake b/ports/directxtk/portfile.cmake
index c14b7c6aa..08f8a4537 100644
--- a/ports/directxtk/portfile.cmake
+++ b/ports/directxtk/portfile.cmake
@@ -4,11 +4,11 @@ if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
endif()
include(vcpkg_common_functions)
-set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/DirectXTK-oct2016)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/DirectXTK-dec2016)
vcpkg_download_distfile(ARCHIVE
- URLS "https://github.com/Microsoft/DirectXTK/archive/oct2016.tar.gz"
- FILENAME "oct2016.tar.gz"
- SHA512 b44ee28518ca65d38a3c915881ef79533b48b07d3738b616f1935d7c00a26d5e48b2292cde6acc34e933f85ba2a6362c585c60b2bbc704745d43cef53769a112
+ URLS "https://github.com/Microsoft/DirectXTK/archive/dec2016.tar.gz"
+ FILENAME "DirectXTK-dec2016.tar.gz"
+ SHA512 efb8a98d0872bf1835b274ba88615e88c4a58ab753c5ebef5a407c54d5f9a2197d1521f14651c60ea16c047918db6f54bf2ac58a6eb7330490b9bae619e8dad3
)
vcpkg_extract_source_archive(${ARCHIVE})
diff --git a/ports/directxtk12/CONTROL b/ports/directxtk12/CONTROL
index dd9ca5620..60393a1d9 100644
--- a/ports/directxtk12/CONTROL
+++ b/ports/directxtk12/CONTROL
@@ -1,3 +1,3 @@
Source: directxtk12
-Version: oct2016
+Version: dec2016
Description: A collection of helper classes for writing DirectX 12 code in C++.
diff --git a/ports/directxtk12/portfile.cmake b/ports/directxtk12/portfile.cmake
index 19372a3b1..e6f2fb4d8 100644
--- a/ports/directxtk12/portfile.cmake
+++ b/ports/directxtk12/portfile.cmake
@@ -4,11 +4,11 @@ if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
endif()
include(vcpkg_common_functions)
-set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/DirectXTK12-oct2016)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/DirectXTK12-dec2016)
vcpkg_download_distfile(ARCHIVE
- URLS "https://github.com/Microsoft/DirectXTK12/archive/oct2016.tar.gz"
- FILENAME "DirectXTK12-oct2016.tar.gz"
- SHA512 f33af80dc018c1fda117eeef66bd08046b48572806d879651187cbed9d5ceb402b1798ecc0e1089b54ddb879e5355b45f2b67e3be99fbe270c5216a945a9924b
+ URLS "https://github.com/Microsoft/DirectXTK12/archive/dec2016.tar.gz"
+ FILENAME "DirectXTK12-dec2016.tar.gz"
+ SHA512 7c98fbf1d7ef96807a38d396a87dacdc60fdcd7e461210d246cc424789c4c5c5fb1390db958c1bd1f77da8af756a9eae36813e5da6bbb0ea1432ff4004f1d010
)
vcpkg_extract_source_archive(${ARCHIVE})
diff --git a/ports/freetype/0003-Fix-UWP.patch b/ports/freetype/0003-Fix-UWP.patch
new file mode 100644
index 000000000..253f91e6a
--- /dev/null
+++ b/ports/freetype/0003-Fix-UWP.patch
@@ -0,0 +1,63 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 744b2d5..d114b9b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -312,6 +312,9 @@ else ()
+ set(BASE_SRCS ${BASE_SRCS} src/base/ftdebug.c)
+ endif ()
+
++if(MSVC)
++ add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS)
++endif()
+
+ if (BUILD_FRAMEWORK)
+ set(BASE_SRCS
+diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
+index 4666d48..382a915 100644
+--- a/include/freetype/freetype.h
++++ b/include/freetype/freetype.h
+@@ -845,6 +845,9 @@ FT_BEGIN_HEADER
+ /*************************************************************************/
+ /*************************************************************************/
+
++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
++#define generic GenericFromFreeTypeLibrary
++#endif
+
+ /*************************************************************************/
+ /* */
+@@ -1777,6 +1780,10 @@ FT_BEGIN_HEADER
+
+ } FT_GlyphSlotRec;
+
++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
++#undef generic
++#endif
++
+
+ /*************************************************************************/
+ /*************************************************************************/
+diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
+index fa05347..ae2754b 100644
+--- a/src/base/ftobjs.c
++++ b/src/base/ftobjs.c
+@@ -457,6 +457,9 @@
+ return error;
+ }
+
++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
++#define generic GenericFromFreeTypeLibrary
++#endif
+
+ /* documentation is in ftobjs.h */
+
+@@ -971,6 +974,9 @@
+ FT_FREE( face );
+ }
+
++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
++#undef generic
++#endif
+
+ static void
+ Destroy_Driver( FT_Driver driver )
diff --git a/ports/freetype/CONTROL b/ports/freetype/CONTROL
index 74f7e4986..866033e3c 100644
--- a/ports/freetype/CONTROL
+++ b/ports/freetype/CONTROL
@@ -1,4 +1,4 @@
Source: freetype
-Version: 2.6.3-3
+Version: 2.6.3-4
Build-Depends: zlib, bzip2, libpng
Description: A library to render fonts. \ No newline at end of file
diff --git a/ports/freetype/portfile.cmake b/ports/freetype/portfile.cmake
index 2e5e30c78..360345f1c 100644
--- a/ports/freetype/portfile.cmake
+++ b/ports/freetype/portfile.cmake
@@ -11,6 +11,7 @@ vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
PATCHES ${CMAKE_CURRENT_LIST_DIR}/0001-Support-Windows-DLLs-via-CMAKE_WINDOWS_EXPORT_ALL_SY.patch
${CMAKE_CURRENT_LIST_DIR}/0002-Add-CONFIG_INSTALL_PATH-option.patch
+ ${CMAKE_CURRENT_LIST_DIR}/0003-Fix-UWP.patch
)
vcpkg_configure_cmake(
diff --git a/ports/glew/CONTROL b/ports/glew/CONTROL
index 13eb3262e..21051a475 100644
--- a/ports/glew/CONTROL
+++ b/ports/glew/CONTROL
@@ -1,3 +1,3 @@
Source: glew
-Version: 2.0.0
+Version: 2.0.0-1
Description: The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library. \ No newline at end of file
diff --git a/ports/glew/portfile.cmake b/ports/glew/portfile.cmake
index e7cf16cf2..c975ca099 100644
--- a/ports/glew/portfile.cmake
+++ b/ports/glew/portfile.cmake
@@ -57,17 +57,15 @@ message(STATUS "Installing")
if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
file(INSTALL
${SOURCE_PATH}/bin/Debug/${BUILD_ARCH}/glew32d.dll
- ${SOURCE_PATH}/bin/Debug/${BUILD_ARCH}/glew32d.pdb
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin
)
file(INSTALL
${SOURCE_PATH}/bin/Release/${BUILD_ARCH}/glew32.dll
- ${SOURCE_PATH}/bin/Release/${BUILD_ARCH}/glew32.pdb
DESTINATION ${CURRENT_PACKAGES_DIR}/bin
)
file(INSTALL
${SOURCE_PATH}/lib/Debug/${BUILD_ARCH}/glew32d.lib
- DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib RENAME glew32.lib
)
file(INSTALL
${SOURCE_PATH}/lib/Release/${BUILD_ARCH}/glew32.lib
@@ -76,13 +74,11 @@ if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
else()
file(INSTALL
${SOURCE_PATH}/lib/Debug/${BUILD_ARCH}/glew32sd.lib
- DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
- RENAME glew32d.lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib RENAME glew32.lib
)
file(INSTALL
${SOURCE_PATH}/lib/Release/${BUILD_ARCH}/glew32s.lib
- DESTINATION ${CURRENT_PACKAGES_DIR}/lib
- RENAME glew32.lib
+ DESTINATION ${CURRENT_PACKAGES_DIR}/lib RENAME glew32.lib
)
endif()
diff --git a/ports/http-parser/CMakeLists.txt b/ports/http-parser/CMakeLists.txt
index 6e9067a04..d959fff79 100644
--- a/ports/http-parser/CMakeLists.txt
+++ b/ports/http-parser/CMakeLists.txt
@@ -5,13 +5,17 @@ if (BUILD_SHARED_LIBS)
SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
endif()
+if(CMAKE_BUILD_TYPE MATCHES "Release")
+ add_definitions(-DHTTP_PARSER_STRICT=0)
+endif()
+
add_library(http_parser http_parser.c http_parser.h)
install(TARGETS http_parser
- RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
- ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib"
)
if (NOT SKIP_INSTALL_HEADERS)
- install(FILES http_parser.h DESTINATION "${CMAKE_INSTALL_PREFIX}/include")
+ install(FILES http_parser.h DESTINATION "${CMAKE_INSTALL_PREFIX}/include")
endif() \ No newline at end of file
diff --git a/ports/http-parser/CONTROL b/ports/http-parser/CONTROL
index 41d234d26..605f3354c 100644
--- a/ports/http-parser/CONTROL
+++ b/ports/http-parser/CONTROL
@@ -1,3 +1,3 @@
Source: http-parser
-Version: 2.7.1
+Version: 2.7.1-1
Description: HTTP Parser. \ No newline at end of file
diff --git a/ports/libssh2/0001-Fix-UWP.patch b/ports/libssh2/0001-Fix-UWP.patch
new file mode 100644
index 000000000..270dd7b90
--- /dev/null
+++ b/ports/libssh2/0001-Fix-UWP.patch
@@ -0,0 +1,48 @@
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 6401acf..64de3e9 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -349,7 +349,7 @@ target_include_directories(libssh2 PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
+ # Check for the OS.
+ # Daniel's note: this should not be necessary and we need to work to
+ # get this removed.
+-if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
++if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows" OR ${CMAKE_SYSTEM_NAME} STREQUAL "WindowsStore")
+ target_compile_definitions(libssh2 PRIVATE LIBSSH2_WIN32)
+ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
+ target_compile_definitions(libssh2 PRIVATE LIBSSH2_DARWIN)
+diff --git a/src/agent.c b/src/agent.c
+index c2ba422..f1799f8 100644
+--- a/src/agent.c
++++ b/src/agent.c
+@@ -51,6 +51,10 @@
+ #include "userauth.h"
+ #include "session.h"
+
++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
++#define IS_UWP 1
++#endif /* #if defined(WINAPI_FAMILY) */
++
+ /* Requests from client to agent for protocol 1 key operations */
+ #define SSH_AGENTC_REQUEST_RSA_IDENTITIES 1
+ #define SSH_AGENTC_RSA_CHALLENGE 3
+@@ -254,7 +258,7 @@ struct agent_ops agent_ops_unix = {
+ };
+ #endif /* PF_UNIX */
+
+-#ifdef WIN32
++#if defined(WIN32) && !defined(IS_UWP)
+ /* Code to talk to Pageant was taken from PuTTY.
+ *
+ * Portions copyright Robert de Bath, Joris van Rantwijk, Delian
+@@ -362,8 +366,8 @@ static struct {
+ const char *name;
+ struct agent_ops *ops;
+ } supported_backends[] = {
+-#ifdef WIN32
+- {"Pageant", &agent_ops_pageant},
++#if defined(WIN32) && !defined(IS_UWP)
++ {"Pageant", &agent_ops_pageant},
+ #endif /* WIN32 */
+ #ifdef PF_UNIX
+ {"Unix", &agent_ops_unix},
diff --git a/ports/libssh2/CONTROL b/ports/libssh2/CONTROL
index d66030b71..715ffa0bd 100644
--- a/ports/libssh2/CONTROL
+++ b/ports/libssh2/CONTROL
@@ -1,4 +1,4 @@
Source: libssh2
-Version: 1.8.0
+Version: 1.8.0-1
Build-Depends: zlib, openssl
Description: The SSH library \ No newline at end of file
diff --git a/ports/libssh2/portfile.cmake b/ports/libssh2/portfile.cmake
index 9b4cc77dd..2e3ee5009 100644
--- a/ports/libssh2/portfile.cmake
+++ b/ports/libssh2/portfile.cmake
@@ -7,6 +7,10 @@ vcpkg_download_distfile(ARCHIVE_FILE
)
vcpkg_extract_source_archive(${ARCHIVE_FILE})
+vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-UWP.patch
+)
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
OPTIONS
diff --git a/ports/libwebsockets/0001-Fix-UWP.patch b/ports/libwebsockets/0001-Fix-UWP.patch
new file mode 100644
index 000000000..8996c4e0e
--- /dev/null
+++ b/ports/libwebsockets/0001-Fix-UWP.patch
@@ -0,0 +1,91 @@
+diff --git a/lib/lws-plat-win.c b/lib/lws-plat-win.c
+index dd3e95a..eb1690a 100644
+--- a/lib/lws-plat-win.c
++++ b/lib/lws-plat-win.c
+@@ -155,7 +155,7 @@ lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
+ {
+ struct lws_context_per_thread *pt = &context->pt[tsi];
+ WSANETWORKEVENTS networkevents;
+- struct lws_pollfd *pfd;
++ struct lws_pollfd *pfd = NULL;
+ struct lws *wsi;
+ unsigned int i;
+ DWORD ev;
+@@ -493,6 +493,7 @@ lws_plat_inet_ntop(int af, const void *src, char *dst, int cnt)
+ return ok ? dst : NULL;
+ }
+
++#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
+ static lws_filefd_type
+ _lws_plat_file_open(struct lws *wsi, const char *filename,
+ unsigned long *filelen, int flags)
+@@ -516,6 +517,35 @@ _lws_plat_file_open(struct lws *wsi, const char *filename,
+
+ return ret;
+ }
++#else
++static lws_filefd_type
++_lws_plat_file_open(struct lws *wsi, const char *filename,
++ unsigned long *filelen, int flags)
++{
++ HANDLE ret;
++ WCHAR buf[MAX_PATH];
++
++ (void)wsi;
++ MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, ARRAY_SIZE(buf));
++ if ((flags & 7) == _O_RDONLY) {
++ ret = CreateFile2(buf, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, NULL);
++ }
++ else {
++ lwsl_err("%s: open for write not implemented\n", __func__);
++ *filelen = 0;
++ return LWS_INVALID_FILE;
++ }
++
++ if (ret != LWS_INVALID_FILE)
++ {
++ struct stat info;
++ int result = stat(filename, &info);
++ *filelen = result != 0 ? -1 : (long)(info.st_size);
++ }
++
++ return ret;
++}
++#endif
+
+ static int
+ _lws_plat_file_close(struct lws *wsi, lws_filefd_type fd)
+diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h
+index 23f8f4d..bc32aef 100644
+--- a/lib/private-libwebsockets.h
++++ b/lib/private-libwebsockets.h
+@@ -48,12 +48,25 @@
+ #endif
+
+ #if defined(WIN32) || defined(_WIN32)
++
++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
++ #ifndef WINVER
++ #define WINVER 0x0602
++ #define _WIN32_WINNT WINVER
++ #endif
++
++ #define getenv(x) NULL
++ #define _WINSOCK_DEPRECATED_NO_WARNINGS
++#else
++
+ #if (WINVER < 0x0501)
+-#undef WINVER
+-#undef _WIN32_WINNT
+-#define WINVER 0x0501
+-#define _WIN32_WINNT WINVER
++ #undef WINVER
++ #undef _WIN32_WINNT
++ #define WINVER 0x0501
++ #define _WIN32_WINNT WINVER
++ #endif
+ #endif
++
+ #define LWS_NO_DAEMONIZE
+ #define LWS_ERRNO WSAGetLastError()
+ #define LWS_EAGAIN WSAEWOULDBLOCK
diff --git a/ports/libwebsockets/CONTROL b/ports/libwebsockets/CONTROL
index 866c0ccbc..61a9cc449 100644
--- a/ports/libwebsockets/CONTROL
+++ b/ports/libwebsockets/CONTROL
@@ -1,4 +1,4 @@
Source: libwebsockets
-Version: 2.0.0
+Version: 2.0.0-1
Build-Depends: zlib, openssl
Description: Libwebsockets is a lightweight pure C library built to use minimal CPU and memory resources, and provide fast throughput in both directions as client or server. \ No newline at end of file
diff --git a/ports/libwebsockets/portfile.cmake b/ports/libwebsockets/portfile.cmake
index 27088bf87..43502a52a 100644
--- a/ports/libwebsockets/portfile.cmake
+++ b/ports/libwebsockets/portfile.cmake
@@ -11,6 +11,12 @@ vcpkg_download_distfile(ARCHIVE
)
vcpkg_extract_source_archive(${ARCHIVE})
+vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES
+ ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-UWP.patch
+)
+
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
OPTIONS
diff --git a/ports/metis/CONTROL b/ports/metis/CONTROL
new file mode 100644
index 000000000..cc604ce8f
--- /dev/null
+++ b/ports/metis/CONTROL
@@ -0,0 +1,3 @@
+Source: metis
+Version: 5.1.0
+Description: Serial Graph Partitioning and Fill-reducing Matrix Ordering
diff --git a/ports/metis/disable-programs.patch b/ports/metis/disable-programs.patch
new file mode 100644
index 000000000..0c23be553
--- /dev/null
+++ b/ports/metis/disable-programs.patch
@@ -0,0 +1,8 @@
+--- a/CMakeLists.txt Wed Dec 21 18:24:22 2016
++++ b/CMakeLists.txt Wed Dec 21 18:24:26 2016
+@@ -20,4 +20,4 @@
+ # Recursively look for CMakeLists.txt in subdirs.
+ add_subdirectory("include")
+ add_subdirectory("libmetis")
+-add_subdirectory("programs")
++# add_subdirectory("programs")
diff --git a/ports/metis/enable-install.patch b/ports/metis/enable-install.patch
new file mode 100644
index 000000000..9f36623ad
--- /dev/null
+++ b/ports/metis/enable-install.patch
@@ -0,0 +1,15 @@
+--- a/CMakeLists.txt Sat Mar 30 17:24:45 2013
++++ b/CMakeLists.txt Wed Dec 21 18:23:43 2016
+@@ -4,11 +4,7 @@
+ set(GKLIB_PATH "GKlib" CACHE PATH "path to GKlib")
+ set(SHARED FALSE CACHE BOOL "build a shared library")
+
+-if(MSVC)
+- set(METIS_INSTALL FALSE)
+-else()
+- set(METIS_INSTALL TRUE)
+-endif()
++set(METIS_INSTALL TRUE)
+
+ # Configure libmetis library.
+ if(SHARED)
diff --git a/ports/metis/fix-gklib-vs14-math.patch b/ports/metis/fix-gklib-vs14-math.patch
new file mode 100644
index 000000000..e83a68230
--- /dev/null
+++ b/ports/metis/fix-gklib-vs14-math.patch
@@ -0,0 +1,11 @@
+--- a/GKlib/gk_arch.h Wed Dec 21 18:34:18 2016
++++ b/GKlib/gk_arch.h Wed Dec 21 18:30:49 2016
+@@ -58,7 +58,7 @@
+ #define PTRDIFF_MAX INT64_MAX
+ #endif
+
+-#ifdef __MSC__
++#if defined(__MSC__) && (_MSC_VER < 1900)
+ /* MSC does not have rint() function */
+ #define rint(x) ((int)((x)+0.5))
+
diff --git a/ports/metis/fix-metis-vs14-math.patch b/ports/metis/fix-metis-vs14-math.patch
new file mode 100644
index 000000000..a296213e8
--- /dev/null
+++ b/ports/metis/fix-metis-vs14-math.patch
@@ -0,0 +1,11 @@
+--- a/libmetis/metislib.h Sat Mar 30 17:24:45 2013
++++ b/libmetis/metislib.h Wed Dec 21 18:30:59 2016
+@@ -31,7 +31,7 @@
+ #include <proto.h>
+
+
+-#if defined(COMPILER_MSC)
++#if defined(COMPILER_MSC) && (_MSC_VER < 1900)
+ #if defined(rint)
+ #undef rint
+ #endif
diff --git a/ports/metis/fix-runtime-install-destination.patch b/ports/metis/fix-runtime-install-destination.patch
new file mode 100644
index 000000000..8d9147e5f
--- /dev/null
+++ b/ports/metis/fix-runtime-install-destination.patch
@@ -0,0 +1,10 @@
+--- a/libmetis/CMakeLists.txt Sat Mar 30 17:24:45 2013
++++ b/libmetis/CMakeLists.txt Wed Dec 21 17:41:37 2016
+@@ -11,6 +11,6 @@
+ if(METIS_INSTALL)
+ install(TARGETS metis
+ LIBRARY DESTINATION lib
+- RUNTIME DESTINATION lib
++ RUNTIME DESTINATION bin
+ ARCHIVE DESTINATION lib)
+ endif()
diff --git a/ports/metis/portfile.cmake b/ports/metis/portfile.cmake
new file mode 100644
index 000000000..c53adde4e
--- /dev/null
+++ b/ports/metis/portfile.cmake
@@ -0,0 +1,47 @@
+# Common Ambient Variables:
+# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
+# TARGET_TRIPLET is the current triplet (x86-windows, etc)
+# PORT is the current port name (zlib, etc)
+# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
+# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
+#
+
+include(vcpkg_common_functions)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/metis-5.1.0)
+vcpkg_download_distfile(ARCHIVE
+ URLS "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz"
+ FILENAME "metis-5.1.0.tar.gz"
+ SHA512 deea47749d13bd06fbeaf98a53c6c0b61603ddc17a43dae81d72c8015576f6495fd83c11b0ef68d024879ed5415c14ebdbd87ce49c181bdac680573bea8bdb25
+)
+vcpkg_extract_source_archive(${ARCHIVE})
+
+vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES
+ ${CMAKE_CURRENT_LIST_DIR}/enable-install.patch
+ ${CMAKE_CURRENT_LIST_DIR}/disable-programs.patch
+ ${CMAKE_CURRENT_LIST_DIR}/fix-runtime-install-destination.patch
+ ${CMAKE_CURRENT_LIST_DIR}/fix-metis-vs14-math.patch
+ ${CMAKE_CURRENT_LIST_DIR}/fix-gklib-vs14-math.patch
+)
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ set(OPTIONS -DSHARED=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON)
+else()
+ set(OPTIONS -DSHARED=OFF)
+endif()
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ OPTIONS
+ ${OPTIONS}
+)
+
+vcpkg_install_cmake()
+vcpkg_copy_pdbs()
+
+file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
+
+# Handle copyright
+file(COPY ${SOURCE_PATH}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/metis)
+file(RENAME ${CURRENT_PACKAGES_DIR}/share/metis/LICENSE.txt ${CURRENT_PACKAGES_DIR}/share/metis/copyright)
diff --git a/ports/openssl/CONTROL b/ports/openssl/CONTROL
index cb7bc7493..ca4aae2e6 100644
--- a/ports/openssl/CONTROL
+++ b/ports/openssl/CONTROL
@@ -1,3 +1,3 @@
Source: openssl
-Version: 1.0.2j-1
+Version: 1.0.2j-2
Description: OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library. \ No newline at end of file
diff --git a/ports/openssl/setVSvars.bat b/ports/openssl/setVSvars.bat
index 23259821e..e6ebc0a7d 100644
--- a/ports/openssl/setVSvars.bat
+++ b/ports/openssl/setVSvars.bat
@@ -3,7 +3,7 @@ call:set_%1
exit /b
:set_universal10.0Win32
call:setVar _VS14VC VisualStudio14VC
- call "%_VS14VC%vcvarsall" x86
+ call "%_VS14VC%vcvarsall" x86 store
set _VCPlatform=x86
set _VCLibPlat=
call:setEnv
@@ -11,7 +11,7 @@ exit /b
:set_universal10.0x64
call:setVar _VS14VC VisualStudio14VC
- call "%_VS14VC%vcvarsall" x64
+ call "%_VS14VC%vcvarsall" x64 store
set _VCPlatform=x64
set _VCLibPlat=amd64
call:setEnv
@@ -19,7 +19,7 @@ exit /b
:set_universal10.0arm
call:setVar _VS14VC VisualStudio14VC
- call "%_VS14VC%vcvarsall" x86_arm
+ call "%_VS14VC%vcvarsall" x86_arm store
set _VCPlatform=ARM
set _VCLibPlat=ARM
call:setEnv
@@ -27,7 +27,7 @@ exit /b
:set_universal10.0arm64
call:setVar _VS14VC VisualStudio14VC
- call "%_VS14VC%vcvarsall" x86_arm64
+ call "%_VS14VC%vcvarsall" x86_arm64 store
set _VCPlatform=ARM64
set _VCLibPlat=ARM64
call:setEnv
diff --git a/ports/sdl2-image/CMakeLists.txt b/ports/sdl2-image/CMakeLists.txt
new file mode 100644
index 000000000..e742a408d
--- /dev/null
+++ b/ports/sdl2-image/CMakeLists.txt
@@ -0,0 +1,109 @@
+cmake_minimum_required(VERSION 2.6)
+project(SDL2_image)
+
+### configuration ###
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
+# enable all file formats which are supported natively
+set(SUPPORTED_FORMATS BMP GIF LBM PCX PNM TGA XPM XCF XV)
+
+# enable all file formats which are supported through external dependencies
+# first try to load them statically (lib file in vcpkg installation)
+# if this fails try to make them a dynamic dependency (dll will be loaded at runtime) if possible. vcpkg cannot resolve these dependencies!
+# else do not support this file format at all
+set(DEPENDENCIES PNG JPEG TIFF WEBP)
+
+# patch library names for preprocessor flags
+set(JPEG_FLAG JPG)
+set(TIFF_FLAG TIF)
+
+# names of potentially dynamically loaded libraries
+set(JPEG_DYNAMIC \"libjpeg-9.dll\")
+set(PNG_DYNAMIC \"libpng16-16.dll\")
+set(TIFF_DYNAMIC \"libtiff-5.dll\")
+set(WEBP_DYNAMIC \"libwebp-4.dll\")
+
+### implementation ###
+
+add_library(SDL2_image
+ IMG.c
+ IMG_bmp.c
+ IMG_gif.c
+ IMG_jpg.c
+ IMG_lbm.c
+ IMG_pcx.c
+ IMG_png.c
+ IMG_pnm.c
+ IMG_tga.c
+ IMG_tif.c
+ IMG_webp.c
+ IMG_xcf.c
+ IMG_xpm.c
+ IMG_xv.c
+ IMG_xxx.c
+ )
+
+foreach(FORMAT ${SUPPORTED_FORMATS})
+ add_definitions(-DLOAD_${FORMAT})
+endforeach(FORMAT)
+
+# SDL
+find_path(SDL_INCLUDE_DIR SDL2/SDL.h)
+find_library(SDL_LIBRARY SDL2)
+
+include_directories(${SDL_INCLUDE_DIR})
+include_directories(${SDL_INCLUDE_DIR}/SDL2)
+include_directories(${CMAKE_SOURCE_DIR})
+
+target_link_libraries(SDL2_image ${SDL_LIBRARY})
+
+# external dependencies
+foreach(DEPENDENCY ${DEPENDENCIES})
+ find_package(${DEPENDENCY})
+
+ if(NOT DEFINED ${DEPENDENCY}_FLAG)
+ set(${DEPENDENCY}_FLAG ${DEPENDENCY})
+ endif()
+
+ add_definitions(-DLOAD_${${DEPENDENCY}_FLAG})
+ if(${DEPENDENCY}_FOUND)
+ message(STATUS " --> linking statically.")
+ target_link_libraries(SDL2_image ${${DEPENDENCY}_LIBRARIES})
+ elseif(DEFINED ${DEPENDENCY}_DYNAMIC)
+ message(STATUS " --> linking dynamically.")
+ add_definitions(-DLOAD_${${DEPENDENCY}_FLAG}_DYNAMIC=${${DEPENDENCY}_DYNAMIC})
+ set(RUNTIME_DEPENDENCIES ON)
+ else()
+ message(STATUS " --> skipping.")
+ endif()
+endforeach(DEPENDENCY)
+
+if(DEFINED RUNTIME_DEPENDENCIES)
+ include_directories(VisualC/external/include)
+endif()
+
+
+install(TARGETS SDL2_image
+ RUNTIME DESTINATION bin
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib)
+
+install(FILES SDL_image.h DESTINATION include/SDL2 CONFIGURATIONS Release)
+
+
+message(STATUS "Link-time dependencies:")
+message(STATUS " " ${SDL_LIBRARY})
+foreach(DEPENDENCY ${DEPENDENCIES})
+ if(${DEPENDENCY}_FOUND)
+ message(STATUS " " ${DEPENDENCY})
+ endif()
+endforeach(DEPENDENCY)
+
+if(DEFINED RUNTIME_DEPENDENCIES)
+ message(STATUS "Run-time dependencies:")
+ foreach(DEPENDENCY ${DEPENDENCIES})
+ if(NOT ${DEPENDENCY}_FOUND AND DEFINED ${DEPENDENCY}_DYNAMIC)
+ message(STATUS " " ${${DEPENDENCY}_DYNAMIC})
+ endif()
+ endforeach(DEPENDENCY)
+endif() \ No newline at end of file
diff --git a/ports/sdl2-image/CONTROL b/ports/sdl2-image/CONTROL
new file mode 100644
index 000000000..04c9f77bb
--- /dev/null
+++ b/ports/sdl2-image/CONTROL
@@ -0,0 +1,5 @@
+Source: sdl2-image
+Version: 2.0.1
+Build-Depends: sdl2, libpng, libjpeg-turbo, tiff, libwebp
+Description: SDL_image is an image file loading library. It loads images as SDL surfaces and textures, and supports the following formats: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, WEBP, XCF, XPM, XV
+
diff --git a/ports/sdl2-image/FindWEBP.cmake b/ports/sdl2-image/FindWEBP.cmake
new file mode 100644
index 000000000..fb3f9caa1
--- /dev/null
+++ b/ports/sdl2-image/FindWEBP.cmake
@@ -0,0 +1,24 @@
+# - Find WEBP
+# Find the WEBP library
+# This module defines
+# WEBP_INCLUDE_DIRS, where to find webp/decode.h
+# WEBP_LIBRARIES, the libraries needed to use WEBP
+#
+
+find_path(WEBP_INCLUDE_DIRS
+ NAMES webp/decode.h
+)
+mark_as_advanced(WEBP_INCLUDE_DIRS)
+
+find_library(
+ WEBP_LIBRARIES
+ NAMES webp
+)
+
+find_library(WEBP_LIBRARY_RELEASE NAMES webp PATH_SUFFIXES lib)
+find_library(WEBP_LIBRARY_DEBUG NAMES webpd PATH_SUFFIXES lib)
+include(SelectLibraryConfigurations)
+select_library_configurations(WEBP)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(WEBP DEFAULT_MSG WEBP_INCLUDE_DIRS WEBP_LIBRARIES) \ No newline at end of file
diff --git a/ports/sdl2-image/correct-sdl-headers-dir.patch b/ports/sdl2-image/correct-sdl-headers-dir.patch
new file mode 100644
index 000000000..4addc155d
--- /dev/null
+++ b/ports/sdl2-image/correct-sdl-headers-dir.patch
@@ -0,0 +1,25 @@
+diff --git "a/SDL_image.h" "b/SDL_image.h"
+index f654483..1bd4f62 100644
+--- "a/SDL_image.h"
++++ "b/SDL_image.h"
+@@ -24,9 +24,9 @@
+ #ifndef _SDL_IMAGE_H
+ #define _SDL_IMAGE_H
+
+-#include "SDL.h"
+-#include "SDL_version.h"
+-#include "begin_code.h"
++#include <SDL2/SDL.h>
++#include <SDL2/SDL_version.h>
++#include <SDL2/begin_code.h>
+
+ /* Set up for C function definitions, even when using C++ */
+ #ifdef __cplusplus
+@@ -140,6 +140,6 @@ extern DECLSPEC int SDLCALL IMG_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst,
+ #ifdef __cplusplus
+ }
+ #endif
+-#include "close_code.h"
++#include <SDL2/close_code.h>
+
+ #endif /* _SDL_IMAGE_H */
diff --git a/ports/sdl2-image/portfile.cmake b/ports/sdl2-image/portfile.cmake
new file mode 100644
index 000000000..4cc6ce74a
--- /dev/null
+++ b/ports/sdl2-image/portfile.cmake
@@ -0,0 +1,39 @@
+# Common Ambient Variables:
+# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
+# TARGET_TRIPLET is the current triplet (x86-windows, etc)
+# PORT is the current port name (zlib, etc)
+# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
+# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
+#
+
+include(vcpkg_common_functions)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/SDL2_image-2.0.1)
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.zip"
+ FILENAME "SDL2_image-2.0.1.zip"
+ SHA512 37d12f4fae71c586bec73262bddb9207ab2f9a2ca6001d2cbfde646e268a950ba5cd4cff53d75e2da8959ae6da6e9cadc6eca88fa7bd9aa2758395d64c84a307
+)
+vcpkg_extract_source_archive(${ARCHIVE})
+
+vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES
+ ${CMAKE_CURRENT_LIST_DIR}/correct-sdl-headers-dir.patch)
+
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/FindWEBP.cmake DESTINATION ${SOURCE_PATH}/cmake)
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ # OPTIONS
+ # OPTIONS_RELEASE -DOPTIMIZE=1
+ # OPTIONS_DEBUG -DDEBUGGABLE=1
+)
+
+vcpkg_install_cmake()
+
+# Handle copyright
+file(COPY ${SOURCE_PATH}/COPYING.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/sdl2-image)
+file(RENAME ${CURRENT_PACKAGES_DIR}/share/sdl2-image/COPYING.txt ${CURRENT_PACKAGES_DIR}/share/sdl2-image/copyright)
+
+vcpkg_copy_pdbs() \ No newline at end of file
diff --git a/ports/szip/CONTROL b/ports/szip/CONTROL
new file mode 100644
index 000000000..cabcb582b
--- /dev/null
+++ b/ports/szip/CONTROL
@@ -0,0 +1,3 @@
+Source: szip
+Version: 2.1
+Description: Szip compression software, providing lossless compression of scientific data
diff --git a/ports/szip/disable-static-lib-in-shared-build.patch b/ports/szip/disable-static-lib-in-shared-build.patch
new file mode 100644
index 000000000..f06e6dcf6
--- /dev/null
+++ b/ports/szip/disable-static-lib-in-shared-build.patch
@@ -0,0 +1,39 @@
+--- a/src/CMakeLists.txt Mon Aug 03 17:10:33 2015
++++ b/src/CMakeLists.txt Fri Jan 13 09:38:07 2017
+@@ -22,20 +22,22 @@
+ ${SZIP_SRC_SOURCE_DIR}/szlib.h
+ )
+
+-add_library (${SZIP_LIB_TARGET} STATIC ${SZIP_SRCS} ${SZIP_PUBLIC_HEADERS})
+-#set_target_properties (${SZIP_LIB_TARGET}
+-# PROPERTIES
+-# LINK_FLAGS "-version-info 2:0:0"
+-#)
+-TARGET_C_PROPERTIES (${SZIP_LIB_TARGET} STATIC " " " ")
+-target_link_libraries (${SZIP_LIB_TARGET} ${LINK_LIBS})
+-set_target_properties(${SZIP_LIB_TARGET} PROPERTIES
+- PUBLIC_HEADER "${SZIP_PUBLIC_HEADERS}"
+- INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
+-)
+-set_global_variable (SZIP_LIBRARIES_TO_EXPORT ${SZIP_LIB_TARGET})
+-SZIP_SET_LIB_OPTIONS (${SZIP_LIB_TARGET} ${SZIP_LIB_NAME} STATIC)
+-set (install_targets ${SZIP_LIB_TARGET})
++if (NOT BUILD_SHARED_LIBS)
++ add_library (${SZIP_LIB_TARGET} STATIC ${SZIP_SRCS} ${SZIP_PUBLIC_HEADERS})
++ #set_target_properties (${SZIP_LIB_TARGET}
++ # PROPERTIES
++ # LINK_FLAGS "-version-info 2:0:0"
++ #)
++ TARGET_C_PROPERTIES (${SZIP_LIB_TARGET} STATIC " " " ")
++ target_link_libraries (${SZIP_LIB_TARGET} ${LINK_LIBS})
++ set_target_properties(${SZIP_LIB_TARGET} PROPERTIES
++ PUBLIC_HEADER "${SZIP_PUBLIC_HEADERS}"
++ INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
++ )
++ set_global_variable (SZIP_LIBRARIES_TO_EXPORT ${SZIP_LIB_TARGET})
++ SZIP_SET_LIB_OPTIONS (${SZIP_LIB_TARGET} ${SZIP_LIB_NAME} STATIC)
++ set (install_targets ${SZIP_LIB_TARGET})
++endif()
+
+ if (BUILD_SHARED_LIBS)
+ add_library (${SZIP_LIBSH_TARGET} SHARED ${SZIP_SRCS} ${SZIP_PUBLIC_HEADERS})
diff --git a/ports/szip/portfile.cmake b/ports/szip/portfile.cmake
new file mode 100644
index 000000000..06040cedc
--- /dev/null
+++ b/ports/szip/portfile.cmake
@@ -0,0 +1,48 @@
+include(vcpkg_common_functions)
+
+# set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/szip-2.1)
+# vcpkg_download_distfile(ARCHIVE
+# URLS "https://support.hdfgroup.org/ftp/lib-external/szip/2.1/src/szip-2.1.tar.gz"
+# FILENAME "szip-2.1.tar.gz"
+# SHA512 ea91b877bb061fe6c96988a3c4b705e101a6950e34e9be53d6a57455c6a625be0afa60f4a3cfdd09649205b9f8586cc25ea60fe07a8131579acf3826b35fb749
+# )
+# vcpkg_extract_source_archive(${ARCHIVE})
+
+# NOTE: We use Szip from the HDF5 cmake package dir, because it includes a lot of fixes for the CMake build files
+
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/CMake-hdf5-1.10.0-patch1)
+vcpkg_download_distfile(ARCHIVE
+ URLS "http://hdf4.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.0-patch1/src/CMake-hdf5-1.10.0-patch1.zip"
+ FILENAME "CMake-hdf5-1.10.0-patch1.zip"
+ SHA512 ec2edb43438661323be5998ecf64c4dd537ddc7451e31f89390260d16883e60a1ccc1bf745bcb809af22f2bf7157d50331a33910b8ebf5c59cd50693dfb2ef8f
+)
+vcpkg_extract_source_archive(${ARCHIVE})
+set(ARCHIVE ${SOURCE_PATH}/SZip.tar.gz)
+vcpkg_extract_source_archive(${ARCHIVE})
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/Szip)
+
+vcpkg_apply_patches(
+ SOURCE_PATH ${SOURCE_PATH}
+ PATCHES
+ ${CMAKE_CURRENT_LIST_DIR}/disable-static-lib-in-shared-build.patch
+)
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ OPTIONS
+ -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=1
+ -DSZIP_INSTALL_DATA_DIR=share/szip/data
+ -DSZIP_INSTALL_CMAKE_DIR=share/szip
+)
+
+vcpkg_install_cmake()
+vcpkg_copy_pdbs()
+
+file(RENAME ${CURRENT_PACKAGES_DIR}/share/szip/data/COPYING ${CURRENT_PACKAGES_DIR}/share/szip/copyright)
+
+file(READ ${CURRENT_PACKAGES_DIR}/debug/share/szip/szip-targets-debug.cmake SZIP_TARGETS_DEBUG_MODULE)
+string(REPLACE "\${_IMPORT_PREFIX}" "\${_IMPORT_PREFIX}/debug" SZIP_TARGETS_DEBUG_MODULE "${SZIP_TARGETS_DEBUG_MODULE}")
+file(WRITE ${CURRENT_PACKAGES_DIR}/share/szip/szip-targets-debug.cmake "${SZIP_TARGETS_DEBUG_MODULE}")
+
+file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
+file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
diff --git a/ports/tiff/CONTROL b/ports/tiff/CONTROL
index 65e3d37da..0c82029fb 100644
--- a/ports/tiff/CONTROL
+++ b/ports/tiff/CONTROL
@@ -1,4 +1,4 @@
Source: tiff
-Version: 4.0.6-1
+Version: 4.0.6-2
Build-Depends: zlib
Description: A library that supports the manipulation of TIFF image files \ No newline at end of file
diff --git a/ports/tiff/fix-uwp.patch b/ports/tiff/fix-uwp.patch
new file mode 100644
index 000000000..6fce8d573
--- /dev/null
+++ b/ports/tiff/fix-uwp.patch
@@ -0,0 +1,25 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 439e26a..05416d8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -187,6 +187,7 @@ endforeach(flag ${test_flags})
+
+ if(MSVC)
+ set(CMAKE_DEBUG_POSTFIX "d")
++ add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
+ endif()
+
+ option(ld-version-script "Enable linker version script" ON)
+diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c
+index a0dc68b..3c4e101 100644
+--- a/libtiff/tif_dirread.c
++++ b/libtiff/tif_dirread.c
+@@ -3690,7 +3690,7 @@ TIFFReadDirectory(TIFF* tif)
+ case TIFFTAG_SMAXSAMPLEVALUE:
+ {
+
+- double *data;
++ double *data = NULL;
+ enum TIFFReadDirEntryErr err;
+ uint32 saved_flags;
+ int m;
diff --git a/ports/tiff/portfile.cmake b/ports/tiff/portfile.cmake
index 345024fe0..281d681b9 100644
--- a/ports/tiff/portfile.cmake
+++ b/ports/tiff/portfile.cmake
@@ -10,6 +10,7 @@ vcpkg_extract_source_archive(${ARCHIVE})
vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
PATCHES ${CMAKE_CURRENT_LIST_DIR}/add-component-options.patch
+ ${CMAKE_CURRENT_LIST_DIR}/fix-uwp.patch
)
vcpkg_configure_cmake(
diff --git a/scripts/buildsystems/msbuild/applocal.ps1 b/scripts/buildsystems/msbuild/applocal.ps1
index ddb4a07f9..46981fad5 100644
--- a/scripts/buildsystems/msbuild/applocal.ps1
+++ b/scripts/buildsystems/msbuild/applocal.ps1
@@ -7,6 +7,9 @@ function resolve($targetBinary) {
$a = $(dumpbin /DEPENDENTS $targetBinary | ? { $_ -match "^ [^ ].*\.dll" } | % { $_ -replace "^ ","" })
$a | % {
+ if ([string]::IsNullOrEmpty($_)) {
+ continue
+ }
if (Test-Path "$installedDir\$_") {
if (Test-Path "$targetBinaryDir\$_") {
Write-Verbose "$_ is already present"
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index 8ba4b9fae..eb50222ba 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -1,7 +1,16 @@
function(vcpkg_build_cmake)
+ cmake_parse_arguments(_bc "MSVC_64_TOOLSET" "" "" ${ARGN})
+
+ set(MSVC_EXTRA_ARGS)
+
+ # Specifies the architecture of the toolset, NOT the architecture of the produced binary
+ if (_bc_MSVC_64_TOOLSET)
+ list(APPEND MSVC_EXTRA_ARGS "/p:PreferredToolArchitecture=x64")
+ endif()
+
message(STATUS "Build ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Release -- /p:VCPkgLocalAppDataDisabled=true /m
+ COMMAND ${CMAKE_COMMAND} --build . --config Release -- /p:VCPkgLocalAppDataDisabled=true /m ${MSVC_EXTRA_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
LOGNAME build-${TARGET_TRIPLET}-rel
)
@@ -9,7 +18,7 @@ function(vcpkg_build_cmake)
message(STATUS "Build ${TARGET_TRIPLET}-dbg")
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Debug -- /p:VCPkgLocalAppDataDisabled=true /m
+ COMMAND ${CMAKE_COMMAND} --build . --config Debug -- /p:VCPkgLocalAppDataDisabled=true /m ${MSVC_EXTRA_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
LOGNAME build-${TARGET_TRIPLET}-dbg
)
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index 83e41fe3b..ab0cf1587 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -57,6 +57,12 @@ function(vcpkg_find_acquire_program VAR)
set(URL "http://download.qt.io/official_releases/jom/jom_1_1_1.zip")
set(ARCHIVE "jom_1_1_1.zip")
set(HASH 23a26dc7e29979bec5dcd3bfcabf76397b93ace64f5d46f2254d6420158bac5eff1c1a8454e3427e7a2fe2c233c5f2cffc87b376772399e12e40b51be2c065f4)
+ elseif(VAR MATCHES "7Z")
+ set(PROGNAME 7z)
+ set(PATHS "C:/Program Files/7-Zip" ${DOWNLOADS}/tools/7z/Files/7-Zip)
+ set(URL "http://7-zip.org/a/7z1604.msi")
+ set(ARCHIVE "7z1604.msi")
+ set(HASH 556f95f7566fe23704d136239e4cf5e2a26f939ab43b44145c91b70d031a088d553e5c21301f1242a2295dcde3143b356211f0108c68e65eef8572407618326d)
else()
message(FATAL "unknown tool ${VAR} -- unable to acquire.")
endif()
@@ -71,10 +77,21 @@ function(vcpkg_find_acquire_program VAR)
if(DEFINED NOEXTRACT)
file(COPY ${DOWNLOADS}/${ARCHIVE} DESTINATION ${DOWNLOADS}/tools/${PROGNAME})
else()
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
- WORKING_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}
- )
+ get_filename_component(ARCHIVE_EXTENSION ${ARCHIVE} EXT)
+ string(TOLOWER "${ARCHIVE_EXTENSION}" ARCHIVE_EXTENSION)
+ if(${ARCHIVE_EXTENSION} STREQUAL ".msi")
+ file(TO_NATIVE_PATH "${DOWNLOADS}/${ARCHIVE}" ARCHIVE_NATIVE_PATH)
+ file(TO_NATIVE_PATH "${DOWNLOADS}/tools/${PROGNAME}" DESTINATION_NATIVE_PATH)
+ execute_process(
+ COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH}
+ WORKING_DIRECTORY ${DOWNLOADS}
+ )
+ else()
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
+ WORKING_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}
+ )
+ endif()
endif()
find_program(${VAR} ${PROGNAME} PATHS ${PATHS})
diff --git a/toolsrc/include/vcpkg_Commands.h b/toolsrc/include/vcpkg_Commands.h
index fd427fd40..8d772b255 100644
--- a/toolsrc/include/vcpkg_Commands.h
+++ b/toolsrc/include/vcpkg_Commands.h
@@ -3,45 +3,112 @@
#include "vcpkg_cmd_arguments.h"
#include "vcpkg_paths.h"
-namespace vcpkg
+namespace vcpkg::Commands
{
- extern const char*const INTEGRATE_COMMAND_HELPSTRING;
+ using command_type_a = void(*)(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
+ using command_type_b = void(*)(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ using command_type_c = void(*)(const vcpkg_cmd_arguments& args);
- void print_usage();
- void print_example(const std::string& command_and_arguments);
- std::string create_example_string(const std::string& command_and_arguments);
- void update_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ namespace Build
+ {
+ void build_package(const SourceParagraph& source_paragraph, const package_spec& spec, const vcpkg_paths& paths, const fs::path& port_dir);
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
+ }
+
+ namespace BuildExternal
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
+ }
- void build_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
- void build_external_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
- void install_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
- void remove_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
+ namespace Install
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
+ }
- void edit_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- void create_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ namespace Remove
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
+ }
- void search_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- void list_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- void import_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- void owns_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- void internal_test_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ namespace Update
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
- void cache_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ namespace Create
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
- void integrate_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ namespace Edit
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
- void portsdiff_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ namespace Search
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
- void help_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- void help_topic_valid_triplet(const vcpkg_paths& paths);
+ namespace List
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
- void version_command(const vcpkg_cmd_arguments& args);
- void contact_command(const vcpkg_cmd_arguments& args);
- void hash_command(const vcpkg_cmd_arguments& args);
+ namespace Import
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
- using command_type_a = void(*)(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet);
- using command_type_b = void(*)(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
- using command_type_c = void(*)(const vcpkg_cmd_arguments& args);
+ namespace Owns
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
+
+ namespace Cache
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
+
+ namespace Integrate
+ {
+ extern const char*const INTEGRATE_COMMAND_HELPSTRING;
+
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
+
+ namespace PortsDiff
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+ }
+
+ namespace Help
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths);
+
+ void help_topic_valid_triplet(const vcpkg_paths& paths);
+
+ void print_usage();
+
+ void print_example(const std::string& command_and_arguments);
+
+ std::string create_example_string(const std::string& command_and_arguments);
+ }
+
+ namespace Version
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args);
+ }
+
+ namespace Contact
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args);
+ }
+
+ namespace Hash
+ {
+ void perform_and_exit(const vcpkg_cmd_arguments& args);
+ }
template <class T>
struct package_name_and_function
@@ -55,7 +122,7 @@ namespace vcpkg
const std::vector<package_name_and_function<command_type_c>>& get_available_commands_type_c();
template <typename T>
- T find_command(const std::string& command_name, const std::vector<package_name_and_function<T>> available_commands)
+ T find(const std::string& command_name, const std::vector<package_name_and_function<T>> available_commands)
{
for (const package_name_and_function<T>& cmd : available_commands)
{
diff --git a/toolsrc/src/commands_available_commands.cpp b/toolsrc/src/commands_available_commands.cpp
new file mode 100644
index 000000000..48239587d
--- /dev/null
+++ b/toolsrc/src/commands_available_commands.cpp
@@ -0,0 +1,44 @@
+#include "vcpkg_Commands.h"
+
+namespace vcpkg::Commands
+{
+ const std::vector<package_name_and_function<command_type_a>>& get_available_commands_type_a()
+ {
+ static std::vector<package_name_and_function<command_type_a>> t = {
+ {"install", &Install::perform_and_exit},
+ {"remove", &Remove::perform_and_exit},
+ {"build", &Build::perform_and_exit},
+ {"build_external", &BuildExternal::perform_and_exit}
+ };
+ return t;
+ }
+
+ const std::vector<package_name_and_function<command_type_b>>& get_available_commands_type_b()
+ {
+ static std::vector<package_name_and_function<command_type_b>> t = {
+ {"/?", &Help::perform_and_exit},
+ {"help", &Help::perform_and_exit},
+ {"search", &Search::perform_and_exit},
+ {"list", &List::perform_and_exit},
+ {"integrate", &Integrate::perform_and_exit},
+ {"owns", &Owns::perform_and_exit},
+ {"update", &Update::perform_and_exit},
+ {"edit", &Edit::perform_and_exit},
+ {"create", &Create::perform_and_exit},
+ {"import", &Import::perform_and_exit},
+ {"cache", &Cache::perform_and_exit},
+ {"portsdiff", &PortsDiff::perform_and_exit}
+ };
+ return t;
+ }
+
+ const std::vector<package_name_and_function<command_type_c>>& get_available_commands_type_c()
+ {
+ static std::vector<package_name_and_function<command_type_c>> t = {
+ {"version", &Version::perform_and_exit},
+ {"contact", &Contact::perform_and_exit},
+ {"hash", &Hash::perform_and_exit},
+ };
+ return t;
+ }
+}
diff --git a/toolsrc/src/commands_build.cpp b/toolsrc/src/commands_build.cpp
new file mode 100644
index 000000000..72ebb264b
--- /dev/null
+++ b/toolsrc/src/commands_build.cpp
@@ -0,0 +1,128 @@
+#include "vcpkg_Commands.h"
+#include "StatusParagraphs.h"
+#include "vcpkg.h"
+#include "vcpkg_Input.h"
+#include "post_build_lint.h"
+#include "vcpkg_Dependencies.h"
+#include "vcpkg_System.h"
+#include "vcpkg_Environment.h"
+#include "metrics.h"
+#include "vcpkg_info.h"
+#include <fstream>
+
+namespace vcpkg::Commands::Build
+{
+ using Dependencies::package_spec_with_install_plan;
+ using Dependencies::install_plan_type;
+
+ static const std::string OPTION_CHECKS_ONLY = "--checks-only";
+
+ static void create_binary_control_file(const vcpkg_paths& paths, const SourceParagraph& source_paragraph, const triplet& target_triplet)
+ {
+ const BinaryParagraph bpgh = BinaryParagraph(source_paragraph, target_triplet);
+ const fs::path binary_control_file = paths.packages / bpgh.dir() / "CONTROL";
+ std::ofstream(binary_control_file) << bpgh;
+ }
+
+ void build_package(const SourceParagraph& source_paragraph, const package_spec& spec, const vcpkg_paths& paths, const fs::path& port_dir)
+ {
+ Checks::check_exit(spec.name() == source_paragraph.name, "inconsistent arguments to build_internal()");
+ const triplet& target_triplet = spec.target_triplet();
+
+ const fs::path ports_cmake_script_path = paths.ports_cmake;
+ const std::wstring command = Strings::wformat(LR"("%%VS140COMNTOOLS%%..\..\VC\vcvarsall.bat" %s && cmake -DCMD=BUILD -DPORT=%s -DTARGET_TRIPLET=%s "-DCURRENT_PORT_DIR=%s/." -P "%s")",
+ Strings::utf8_to_utf16(target_triplet.architecture()),
+ Strings::utf8_to_utf16(source_paragraph.name),
+ Strings::utf8_to_utf16(target_triplet.canonical_name()),
+ port_dir.generic_wstring(),
+ ports_cmake_script_path.generic_wstring());
+
+ System::Stopwatch2 timer;
+ timer.start();
+ int return_code = System::cmd_execute(command);
+ timer.stop();
+ TrackMetric("buildtimeus-" + to_string(spec), timer.microseconds());
+
+ if (return_code != 0)
+ {
+ System::println(System::color::error, "Error: building package %s failed", to_string(spec));
+ System::println("Please ensure sure you're using the latest portfiles with `vcpkg update`, then\n"
+ "submit an issue at https://github.com/Microsoft/vcpkg/issues including:\n"
+ " Package: %s\n"
+ " Vcpkg version: %s\n"
+ "\n"
+ "Additionally, attach any relevant sections from the log files above."
+ , to_string(spec), Info::version());
+ TrackProperty("error", "build failed");
+ TrackProperty("build_error", to_string(spec));
+ exit(EXIT_FAILURE);
+ }
+
+ PostBuildLint::perform_all_checks(spec, paths);
+
+ create_binary_control_file(paths, source_paragraph, target_triplet);
+
+ // const fs::path port_buildtrees_dir = paths.buildtrees / spec.name;
+ // delete_directory(port_buildtrees_dir);
+ }
+
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
+ {
+ static const std::string example = Commands::Help::create_example_string("build zlib:x64-windows");
+
+ // Installing multiple packages leads to unintuitive behavior if one of them depends on another.
+ // Allowing only 1 package for now.
+
+ args.check_exact_arg_count(1, example);
+
+ StatusParagraphs status_db = database_load_check(paths);
+
+ const package_spec spec = Input::check_and_get_package_spec(args.command_arguments.at(0), default_target_triplet, example);
+ Input::check_triplet(spec.target_triplet(), paths);
+
+ const std::unordered_set<std::string> options = args.check_and_get_optional_command_arguments({OPTION_CHECKS_ONLY});
+ if (options.find(OPTION_CHECKS_ONLY) != options.end())
+ {
+ PostBuildLint::perform_all_checks(spec, paths);
+ exit(EXIT_SUCCESS);
+ }
+
+ // Explicitly load and use the portfile's build dependencies when resolving the build command (instead of a cached package's dependencies).
+ const expected<SourceParagraph> maybe_spgh = try_load_port(paths, spec.name());
+ Checks::check_exit(!maybe_spgh.error_code(), "Could not find package named %s: %s", spec, maybe_spgh.error_code().message());
+ const SourceParagraph& spgh = *maybe_spgh.get();
+
+ const std::vector<std::string> first_level_deps = filter_dependencies(spgh.depends, spec.target_triplet());
+
+ std::vector<package_spec> first_level_deps_specs;
+ for (const std::string& dep : first_level_deps)
+ {
+ first_level_deps_specs.push_back(package_spec::from_name_and_triplet(dep, spec.target_triplet()).get_or_throw());
+ }
+
+ std::vector<package_spec_with_install_plan> unmet_dependencies = Dependencies::create_install_plan(paths, first_level_deps_specs, status_db);
+ unmet_dependencies.erase(
+ std::remove_if(unmet_dependencies.begin(), unmet_dependencies.end(), [](const package_spec_with_install_plan& p)
+ {
+ return p.plan.type == install_plan_type::ALREADY_INSTALLED;
+ }),
+ unmet_dependencies.end());
+
+ if (!unmet_dependencies.empty())
+ {
+ System::println(System::color::error, "The build command requires all dependencies to be already installed.");
+ System::println("The following dependencies are missing:");
+ System::println("");
+ for (const package_spec_with_install_plan& p : unmet_dependencies)
+ {
+ System::println(" %s", to_string(p.spec));
+ }
+ System::println("");
+ exit(EXIT_FAILURE);
+ }
+
+ Environment::ensure_utilities_on_path(paths);
+ build_package(spgh, spec, paths, paths.port_dir(spec));
+ exit(EXIT_SUCCESS);
+ }
+}
diff --git a/toolsrc/src/commands_build_external.cpp b/toolsrc/src/commands_build_external.cpp
new file mode 100644
index 000000000..09a9256d7
--- /dev/null
+++ b/toolsrc/src/commands_build_external.cpp
@@ -0,0 +1,32 @@
+#include "vcpkg_Commands.h"
+#include "vcpkg_System.h"
+#include "vcpkg_Environment.h"
+#include "vcpkg_Input.h"
+#include "vcpkg.h"
+
+namespace vcpkg::Commands::BuildExternal
+{
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
+ {
+ static const std::string example = Commands::Help::create_example_string(R"(build_external zlib2 C:\path\to\dir\with\controlfile\)");
+ args.check_exact_arg_count(2, example);
+
+ expected<package_spec> maybe_current_spec = package_spec::from_string(args.command_arguments[0], default_target_triplet);
+ if (auto spec = maybe_current_spec.get())
+ {
+ Input::check_triplet(spec->target_triplet(), paths);
+ Environment::ensure_utilities_on_path(paths);
+ const fs::path port_dir = args.command_arguments.at(1);
+ const expected<SourceParagraph> maybe_spgh = try_load_port(port_dir);
+ if (auto spgh = maybe_spgh.get())
+ {
+ Commands::Build::build_package(*spgh, *spec, paths, port_dir);
+ exit(EXIT_SUCCESS);
+ }
+ }
+
+ System::println(System::color::error, "Error: %s: %s", maybe_current_spec.error_code().message(), args.command_arguments[0]);
+ Commands::Help::print_example(Strings::format("%s zlib:x64-windows", args.command));
+ exit(EXIT_FAILURE);
+ }
+}
diff --git a/toolsrc/src/commands_cache.cpp b/toolsrc/src/commands_cache.cpp
index 1a10b93cf..63bf32260 100644
--- a/toolsrc/src/commands_cache.cpp
+++ b/toolsrc/src/commands_cache.cpp
@@ -4,7 +4,7 @@
#include "Paragraphs.h"
#include "BinaryParagraph.h"
-namespace vcpkg
+namespace vcpkg::Commands::Cache
{
static std::vector<BinaryParagraph> read_all_binary_paragraphs(const vcpkg_paths& paths)
{
@@ -34,10 +34,10 @@ namespace vcpkg
return output;
}
- void cache_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
static const std::string example = Strings::format(
- "The argument should be a substring to search for, or no argument to display all cached libraries.\n%s", create_example_string("cache png"));
+ "The argument should be a substring to search for, or no argument to display all cached libraries.\n%s", Commands::Help::create_example_string("cache png"));
args.check_max_arg_count(1, example);
const std::vector<BinaryParagraph> binary_paragraphs = read_all_binary_paragraphs(paths);
diff --git a/toolsrc/src/commands_contact.cpp b/toolsrc/src/commands_contact.cpp
new file mode 100644
index 000000000..3e3ebc2b4
--- /dev/null
+++ b/toolsrc/src/commands_contact.cpp
@@ -0,0 +1,13 @@
+#include "vcpkg_Commands.h"
+#include "vcpkg_System.h"
+#include "vcpkg_info.h"
+
+namespace vcpkg::Commands::Contact
+{
+ void perform_and_exit(const vcpkg_cmd_arguments& args)
+ {
+ args.check_exact_arg_count(0);
+ System::println("Send an email to %s with any feedback.", Info::email());
+ exit(EXIT_SUCCESS);
+ }
+}
diff --git a/toolsrc/src/commands_create.cpp b/toolsrc/src/commands_create.cpp
index ad00cd676..d842d3fab 100644
--- a/toolsrc/src/commands_create.cpp
+++ b/toolsrc/src/commands_create.cpp
@@ -4,11 +4,11 @@
#include "vcpkg_Files.h"
#include "vcpkg_Input.h"
-namespace vcpkg
+namespace vcpkg::Commands::Create
{
- void create_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- static const std::string example = create_example_string(R"###(create zlib2 http://zlib.net/zlib128.zip "zlib128-2.zip")###");
+ static const std::string example = Commands::Help::create_example_string(R"###(create zlib2 http://zlib.net/zlib128.zip "zlib128-2.zip")###");
args.check_max_arg_count(3, example);
args.check_min_arg_count(2, example);
diff --git a/toolsrc/src/commands_edit.cpp b/toolsrc/src/commands_edit.cpp
index fbf4eab62..3297b5295 100644
--- a/toolsrc/src/commands_edit.cpp
+++ b/toolsrc/src/commands_edit.cpp
@@ -2,15 +2,16 @@
#include "vcpkg_System.h"
#include "vcpkg_Input.h"
-namespace vcpkg
+namespace vcpkg::Commands::Edit
{
- void edit_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- static const std::string example = create_example_string("edit zlib");
+ static const std::string example = Commands::Help::create_example_string("edit zlib");
args.check_exact_arg_count(1, example);
const std::string port_name = args.command_arguments.at(0);
const fs::path portpath = paths.ports / port_name;
+ Checks::check_exit(fs::is_directory(portpath), "Could not find port named %s", port_name);
// Find editor
std::wstring env_EDITOR = System::wdupenv_str(L"EDITOR");
@@ -27,7 +28,7 @@ namespace vcpkg
}
}
- std::wstring cmdLine = Strings::wformat(LR"("%s" "%s" "%s")", env_EDITOR, portpath.native(), (portpath / "portfile.cmake").native());
+ std::wstring cmdLine = Strings::wformat(LR"("%s" "%s" "%s" -n)", env_EDITOR, portpath.native(), (portpath / "portfile.cmake").native());
exit(System::cmd_execute(cmdLine));
}
}
diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp
index 0e3e8a77c..7048fb0d9 100644
--- a/toolsrc/src/commands_hash.cpp
+++ b/toolsrc/src/commands_hash.cpp
@@ -1,7 +1,7 @@
#include "vcpkg_Commands.h"
#include "vcpkg_System.h"
-namespace vcpkg
+namespace vcpkg::Commands::Hash
{
static void do_file_hash(fs::path const& path, std::wstring const& hashType)
{
@@ -23,10 +23,10 @@ namespace vcpkg
System::println(hash);
}
- void hash_command(const vcpkg_cmd_arguments& args)
+ void perform_and_exit(const vcpkg_cmd_arguments& args)
{
static const std::string example = Strings::format(
- "The argument should be a file path\n%s", create_example_string("hash boost_1_62_0.tar.bz2"));
+ "The argument should be a file path\n%s", Commands::Help::create_example_string("hash boost_1_62_0.tar.bz2"));
args.check_min_arg_count(1, example);
args.check_max_arg_count(2, example);
diff --git a/toolsrc/src/commands_help.cpp b/toolsrc/src/commands_help.cpp
index fd02d948e..e4769752c 100644
--- a/toolsrc/src/commands_help.cpp
+++ b/toolsrc/src/commands_help.cpp
@@ -1,20 +1,69 @@
#include "vcpkg_Commands.h"
#include "vcpkg_System.h"
-#include "vcpkg_info.h"
-namespace vcpkg
+namespace vcpkg::Commands::Help
{
- void version_command(const vcpkg_cmd_arguments& args)
+ void help_topic_valid_triplet(const vcpkg_paths& paths)
{
- args.check_exact_arg_count(0);
- System::println("Vcpkg package management program version %s\n"
- "\n"
- "See LICENSE.txt for license information.", Info::version()
- );
- exit(EXIT_SUCCESS);
+ System::println("Available architecture triplets:");
+ auto it = fs::directory_iterator(paths.triplets);
+ for (; it != fs::directory_iterator(); ++it)
+ {
+ System::println(" %s", it->path().stem().filename().string());
+ }
}
- void help_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void print_usage()
+ {
+ System::println(
+ "Commands:\n"
+ " vcpkg search [pat] Search for packages available to be built\n"
+ " vcpkg install <pkg> Install a package\n"
+ " vcpkg remove <pkg> Uninstall a package. \n"
+ " vcpkg remove --purge <pkg> Uninstall and delete a package. \n"
+ " vcpkg list List installed packages\n"
+ " vcpkg update Display list of packages for updating\n"
+ " vcpkg hash <file> [alg] Hash a file by specific algorithm, default SHA512\n"
+ "\n"
+ "%s" // Integration help
+ "\n"
+ " vcpkg edit <pkg> Open up a port for editing (uses %%EDITOR%%, default 'code')\n"
+ " vcpkg import <pkg> Import a pre-built library\n"
+ " vcpkg create <pkg> <url>\n"
+ " [archivename] Create a new package\n"
+ " vcpkg owns <pat> Search for files in installed packages\n"
+ " vcpkg cache List cached compiled packages\n"
+ " vcpkg version Display version information\n"
+ " vcpkg contact Display contact information to send feedback\n"
+ "\n"
+ //"internal commands:\n"
+ //" --check-build-deps <controlfile>\n"
+ //" --create-binary-control <controlfile>\n"
+ //"\n"
+ "Options:\n"
+ " --triplet <t> Specify the target architecture triplet.\n"
+ " (default: %%VCPKG_DEFAULT_TRIPLET%%, see 'vcpkg help triplet')\n"
+ "\n"
+ " --vcpkg-root <path> Specify the vcpkg root directory\n"
+ " (default: %%VCPKG_ROOT%%)\n"
+ "\n"
+ "For more help (including examples) see the accompanying README.md."
+ , Integrate::INTEGRATE_COMMAND_HELPSTRING);
+ }
+
+ std::string create_example_string(const std::string& command_and_arguments)
+ {
+ std::string cs = Strings::format("Example:\n"
+ " vcpkg %s", command_and_arguments);
+ return cs;
+ }
+
+ void print_example(const std::string& command_and_arguments)
+ {
+ System::println(create_example_string(command_and_arguments));
+ }
+
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
args.check_max_arg_count(1);
if (args.command_arguments.empty())
@@ -35,21 +84,4 @@ namespace vcpkg
}
exit(EXIT_SUCCESS);
}
-
- void contact_command(const vcpkg_cmd_arguments& args)
- {
- args.check_exact_arg_count(0);
- System::println("Send an email to %s with any feedback.", Info::email());
- exit(EXIT_SUCCESS);
- }
-
- void help_topic_valid_triplet(const vcpkg_paths& paths)
- {
- System::println("Available architecture triplets:");
- auto it = fs::directory_iterator(paths.triplets);
- for (; it != fs::directory_iterator(); ++it)
- {
- System::println(" %s", it->path().stem().filename().string());
- }
- }
}
diff --git a/toolsrc/src/commands_helpers.cpp b/toolsrc/src/commands_helpers.cpp
new file mode 100644
index 000000000..0c7ce15bb
--- /dev/null
+++ b/toolsrc/src/commands_helpers.cpp
@@ -0,0 +1,7 @@
+#include "vcpkg_Commands.h"
+#include "vcpkg_System.h"
+
+namespace vcpkg::Commands::Helpers
+{
+
+}
diff --git a/toolsrc/src/commands_import.cpp b/toolsrc/src/commands_import.cpp
index 3832f0e7b..14e83e75f 100644
--- a/toolsrc/src/commands_import.cpp
+++ b/toolsrc/src/commands_import.cpp
@@ -4,7 +4,7 @@
#include "vcpkg_Files.h"
#include <fstream>
-namespace vcpkg
+namespace vcpkg::Commands::Import
{
struct Binaries
{
@@ -75,9 +75,9 @@ namespace vcpkg
std::ofstream(control_file_path) << control_file_data;
}
- void import_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- static const std::string example = create_example_string(R"(import C:\path\to\CONTROLfile C:\path\to\includedir C:\path\to\projectdir)");
+ static const std::string example = Commands::Help::create_example_string(R"(import C:\path\to\CONTROLfile C:\path\to\includedir C:\path\to\projectdir)");
args.check_exact_arg_count(3, example);
const fs::path control_file_path(args.command_arguments[0]);
diff --git a/toolsrc/src/commands_installation.cpp b/toolsrc/src/commands_install.cpp
index c239bf06c..ff517d9b1 100644
--- a/toolsrc/src/commands_installation.cpp
+++ b/toolsrc/src/commands_install.cpp
@@ -1,72 +1,17 @@
#include "vcpkg_Commands.h"
#include "vcpkg.h"
-#include <fstream>
#include "vcpkg_Environment.h"
#include "metrics.h"
#include "vcpkg_Files.h"
-#include "post_build_lint.h"
#include "vcpkg_System.h"
#include "vcpkg_Dependencies.h"
#include "vcpkg_Input.h"
-#include "vcpkg_Maps.h"
-#include "vcpkg_info.h"
-namespace vcpkg
+namespace vcpkg::Commands::Install
{
using Dependencies::package_spec_with_install_plan;
using Dependencies::install_plan_type;
- static const std::string OPTION_CHECKS_ONLY = "--checks-only";
-
- static void create_binary_control_file(const vcpkg_paths& paths, const SourceParagraph& source_paragraph, const triplet& target_triplet)
- {
- const BinaryParagraph bpgh = BinaryParagraph(source_paragraph, target_triplet);
- const fs::path binary_control_file = paths.packages / bpgh.dir() / "CONTROL";
- std::ofstream(binary_control_file) << bpgh;
- }
-
- static void build_internal(const SourceParagraph& source_paragraph, const package_spec& spec, const vcpkg_paths& paths, const fs::path& port_dir)
- {
- Checks::check_exit(spec.name() == source_paragraph.name, "inconsistent arguments to build_internal()");
- const triplet& target_triplet = spec.target_triplet();
-
- const fs::path ports_cmake_script_path = paths.ports_cmake;
- const std::wstring command = Strings::wformat(LR"("%%VS140COMNTOOLS%%..\..\VC\vcvarsall.bat" %s && cmake -DCMD=BUILD -DPORT=%s -DTARGET_TRIPLET=%s "-DCURRENT_PORT_DIR=%s/." -P "%s")",
- Strings::utf8_to_utf16(target_triplet.architecture()),
- Strings::utf8_to_utf16(source_paragraph.name),
- Strings::utf8_to_utf16(target_triplet.canonical_name()),
- port_dir.generic_wstring(),
- ports_cmake_script_path.generic_wstring());
-
- System::Stopwatch2 timer;
- timer.start();
- int return_code = System::cmd_execute(command);
- timer.stop();
- TrackMetric("buildtimeus-" + to_string(spec), timer.microseconds());
-
- if (return_code != 0)
- {
- System::println(System::color::error, "Error: building package %s failed", to_string(spec));
- System::println("Please ensure sure you're using the latest portfiles with `vcpkg update`, then\n"
- "submit an issue at https://github.com/Microsoft/vcpkg/issues including:\n"
- " Package: %s\n"
- " Vcpkg version: %s\n"
- "\n"
- "Additionally, attach any relevant sections from the log files above."
- , to_string(spec), Info::version());
- TrackProperty("error", "build failed");
- TrackProperty("build_error", to_string(spec));
- exit(EXIT_FAILURE);
- }
-
- PostBuildLint::perform_all_checks(spec, paths);
-
- create_binary_control_file(paths, source_paragraph, target_triplet);
-
- // const fs::path port_buildtrees_dir = paths.buildtrees / spec.name;
- // delete_directory(port_buildtrees_dir);
- }
-
static void install_and_write_listfile(const vcpkg_paths& paths, const BinaryParagraph& bpgh)
{
std::vector<std::string> output;
@@ -238,9 +183,9 @@ namespace vcpkg
status_db.insert(std::make_unique<StatusParagraph>(spgh));
}
- void install_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
{
- static const std::string example = create_example_string("install zlib zlib:x64-windows curl boost");
+ static const std::string example = Commands::Help::create_example_string("install zlib zlib:x64-windows curl boost");
args.check_min_arg_count(1, example);
StatusParagraphs status_db = database_load_check(paths);
@@ -271,7 +216,7 @@ namespace vcpkg
}
else if (action.plan.type == install_plan_type::BUILD_AND_INSTALL)
{
- build_internal(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec));
+ Commands::Build::build_package(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec));
const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw();
install_package(paths, bpgh, status_db);
System::println(System::color::success, "Package %s is installed", action.spec);
@@ -293,88 +238,4 @@ namespace vcpkg
exit(EXIT_SUCCESS);
}
-
- void build_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
- {
- static const std::string example = create_example_string("build zlib:x64-windows");
-
- // Installing multiple packages leads to unintuitive behavior if one of them depends on another.
- // Allowing only 1 package for now.
-
- args.check_exact_arg_count(1, example);
-
- StatusParagraphs status_db = database_load_check(paths);
-
- const package_spec spec = Input::check_and_get_package_spec(args.command_arguments.at(0), default_target_triplet, example);
- Input::check_triplet(spec.target_triplet(), paths);
-
- const std::unordered_set<std::string> options = args.check_and_get_optional_command_arguments({OPTION_CHECKS_ONLY});
- if (options.find(OPTION_CHECKS_ONLY) != options.end())
- {
- PostBuildLint::perform_all_checks(spec, paths);
- exit(EXIT_SUCCESS);
- }
-
- // Explicitly load and use the portfile's build dependencies when resolving the build command (instead of a cached package's dependencies).
- const expected<SourceParagraph> maybe_spgh = try_load_port(paths, spec.name());
- Checks::check_exit(!maybe_spgh.error_code(), "Could not find package named %s: %s", spec, maybe_spgh.error_code().message());
- const SourceParagraph& spgh = *maybe_spgh.get();
-
- const std::vector<std::string> first_level_deps = filter_dependencies(spgh.depends, spec.target_triplet());
-
- std::vector<package_spec> first_level_deps_specs;
- for (const std::string& dep : first_level_deps)
- {
- first_level_deps_specs.push_back(package_spec::from_name_and_triplet(dep, spec.target_triplet()).get_or_throw());
- }
-
- std::vector<package_spec_with_install_plan> unmet_dependencies = Dependencies::create_install_plan(paths, first_level_deps_specs, status_db);
- unmet_dependencies.erase(
- std::remove_if(unmet_dependencies.begin(), unmet_dependencies.end(), [](const package_spec_with_install_plan& p)
- {
- return p.plan.type == install_plan_type::ALREADY_INSTALLED;
- }),
- unmet_dependencies.end());
-
- if (!unmet_dependencies.empty())
- {
- System::println(System::color::error, "The build command requires all dependencies to be already installed.");
- System::println("The following dependencies are missing:");
- System::println("");
- for (const package_spec_with_install_plan& p : unmet_dependencies)
- {
- System::println(" %s", to_string(p.spec));
- }
- System::println("");
- exit(EXIT_FAILURE);
- }
-
- Environment::ensure_utilities_on_path(paths);
- build_internal(spgh, spec, paths, paths.port_dir(spec));
- exit(EXIT_SUCCESS);
- }
-
- void build_external_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
- {
- static const std::string example = create_example_string(R"(build_external zlib2 C:\path\to\dir\with\controlfile\)");
- args.check_exact_arg_count(2, example);
-
- expected<package_spec> maybe_current_spec = package_spec::from_string(args.command_arguments[0], default_target_triplet);
- if (auto spec = maybe_current_spec.get())
- {
- Input::check_triplet(spec->target_triplet(), paths);
- Environment::ensure_utilities_on_path(paths);
- const fs::path port_dir = args.command_arguments.at(1);
- const expected<SourceParagraph> maybe_spgh = try_load_port(port_dir);
- if (auto spgh = maybe_spgh.get())
- {
- build_internal(*spgh, *spec, paths, port_dir);
- exit(EXIT_SUCCESS);
- }
- }
-
- System::println(System::color::error, "Error: %s: %s", maybe_current_spec.error_code().message(), args.command_arguments[0]);
- print_example(Strings::format("%s zlib:x64-windows", args.command));
- exit(EXIT_FAILURE);
- }
}
diff --git a/toolsrc/src/commands_integration.cpp b/toolsrc/src/commands_integrate.cpp
index e7e5b2d8d..2bd5027ec 100644
--- a/toolsrc/src/commands_integration.cpp
+++ b/toolsrc/src/commands_integrate.cpp
@@ -10,7 +10,7 @@
#include "vcpkg_System.h"
#include "vcpkg_Files.h"
-namespace vcpkg
+namespace vcpkg::Commands::Integrate
{
static const std::array<fs::path, 2> old_system_target_files = {
"C:/Program Files (x86)/MSBuild/14.0/Microsoft.Common.Targets/ImportBefore/vcpkg.nuget.targets",
@@ -293,7 +293,7 @@ With a project open, go to Tools->NuGet Package Manager->Package Manager Console
" vcpkg integrate remove Remove user-wide integration\n"
" vcpkg integrate project Generate a referencing nuget package for individual VS project use\n";
- void integrate_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
static const std::string example = Strings::format("Commands:\n"
"%s", INTEGRATE_COMMAND_HELPSTRING);
diff --git a/toolsrc/src/commands_list.cpp b/toolsrc/src/commands_list.cpp
index cc51232e9..d9c4a52f2 100644
--- a/toolsrc/src/commands_list.cpp
+++ b/toolsrc/src/commands_list.cpp
@@ -3,7 +3,7 @@
#include "vcpkg_System.h"
#include "vcpkglib_helpers.h"
-namespace vcpkg
+namespace vcpkg::Commands::List
{
static void do_print(const StatusParagraph& pgh)
{
@@ -13,10 +13,10 @@ namespace vcpkg
details::shorten_description(pgh.package.description));
}
- void list_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
static const std::string example = Strings::format(
- "The argument should be a substring to search for, or no argument to display all installed libraries.\n%s", create_example_string("list png"));
+ "The argument should be a substring to search for, or no argument to display all installed libraries.\n%s", Commands::Help::create_example_string("list png"));
args.check_max_arg_count(1, example);
const StatusParagraphs status_paragraphs = database_load_check(paths);
diff --git a/toolsrc/src/commands_other.cpp b/toolsrc/src/commands_other.cpp
deleted file mode 100644
index 6df325100..000000000
--- a/toolsrc/src/commands_other.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "vcpkg_Commands.h"
-#include "vcpkg_System.h"
-
-namespace vcpkg
-{
- void print_usage()
- {
- System::println(
- "Commands:\n"
- " vcpkg search [pat] Search for packages available to be built\n"
- " vcpkg install <pkg> Install a package\n"
- " vcpkg remove <pkg> Uninstall a package. \n"
- " vcpkg remove --purge <pkg> Uninstall and delete a package. \n"
- " vcpkg list List installed packages\n"
- " vcpkg update Display list of packages for updating\n"
- " vcpkg hash <file> [alg] Hash a file by specific algorithm, default SHA512\n"
- "\n"
- "%s" // Integration help
- "\n"
- " vcpkg edit <pkg> Open up a port for editing (uses %%EDITOR%%, default 'code')\n"
- " vcpkg import <pkg> Import a pre-built library\n"
- " vcpkg create <pkg> <url>\n"
- " [archivename] Create a new package\n"
- " vcpkg owns <pat> Search for files in installed packages\n"
- " vcpkg cache List cached compiled packages\n"
- " vcpkg version Display version information\n"
- " vcpkg contact Display contact information to send feedback\n"
- "\n"
- //"internal commands:\n"
- //" --check-build-deps <controlfile>\n"
- //" --create-binary-control <controlfile>\n"
- //"\n"
- "Options:\n"
- " --triplet <t> Specify the target architecture triplet.\n"
- " (default: %%VCPKG_DEFAULT_TRIPLET%%, see 'vcpkg help triplet')\n"
- "\n"
- " --vcpkg-root <path> Specify the vcpkg root directory\n"
- " (default: %%VCPKG_ROOT%%)\n"
- "\n"
- "For more help (including examples) see the accompanying README.md."
- , INTEGRATE_COMMAND_HELPSTRING);
- }
-
- std::string create_example_string(const std::string& command_and_arguments)
- {
- std::string cs = Strings::format("Example:\n"
- " vcpkg %s", command_and_arguments);
- return cs;
- }
-
- void print_example(const std::string& command_and_arguments)
- {
- System::println(create_example_string(command_and_arguments));
- }
-
- void internal_test_command(const vcpkg_cmd_arguments& /*args*/, const vcpkg_paths& /*paths*/)
- {
- // auto data = FormatEventData("test");
- // Track(data);
- exit(EXIT_SUCCESS);
- }
-
- const std::vector<package_name_and_function<command_type_a>>& get_available_commands_type_a()
- {
- static std::vector<package_name_and_function<command_type_a>> t = {
- {"install", install_command},
- {"remove", remove_command},
- {"build", build_command},
- {"build_external", build_external_command}
- };
- return t;
- }
-
- const std::vector<package_name_and_function<command_type_b>>& get_available_commands_type_b()
- {
- static std::vector<package_name_and_function<command_type_b>> t = {
- {"/?", help_command},
- {"help", help_command},
- {"search", search_command},
- {"list", list_command},
- {"integrate", integrate_command},
- {"owns", owns_command},
- {"update", update_command},
- {"edit", edit_command},
- {"create", create_command},
- {"import", import_command},
- {"cache", cache_command},
- {"internal_test", internal_test_command},
- {"portsdiff", portsdiff_command}
- };
- return t;
- }
-
- const std::vector<package_name_and_function<command_type_c>>& get_available_commands_type_c()
- {
- static std::vector<package_name_and_function<command_type_c>> t = {
- {"version", &version_command},
- {"contact", &contact_command},
- {"hash", &hash_command},
- };
- return t;
- }
-}
diff --git a/toolsrc/src/commands_owns.cpp b/toolsrc/src/commands_owns.cpp
index 62dac57eb..bb1a7eb9f 100644
--- a/toolsrc/src/commands_owns.cpp
+++ b/toolsrc/src/commands_owns.cpp
@@ -2,7 +2,7 @@
#include "vcpkg_System.h"
#include "vcpkg.h"
-namespace vcpkg
+namespace vcpkg::Commands::Owns
{
static void search_file(const vcpkg_paths& paths, const std::string& file_substr, const StatusParagraphs& status_db)
{
@@ -21,9 +21,9 @@ namespace vcpkg
}
}
- void owns_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- static const std::string example = Strings::format("The argument should be a pattern to search for. %s", create_example_string("owns zlib.dll"));
+ static const std::string example = Strings::format("The argument should be a pattern to search for. %s", Commands::Help::create_example_string("owns zlib.dll"));
args.check_exact_arg_count(1, example);
StatusParagraphs status_db = database_load_check(paths);
diff --git a/toolsrc/src/commands_portsdiff.cpp b/toolsrc/src/commands_portsdiff.cpp
index 46c6c90c7..1665d7c47 100644
--- a/toolsrc/src/commands_portsdiff.cpp
+++ b/toolsrc/src/commands_portsdiff.cpp
@@ -10,7 +10,7 @@
#include "SourceParagraph.h"
#include "vcpkg_Environment.h"
-namespace vcpkg
+namespace vcpkg::Commands::PortsDiff
{
static void do_print_name_and_version(const std::vector<std::string>& ports_to_print, const std::map<std::string, std::string>& names_and_versions)
{
@@ -97,9 +97,9 @@ namespace vcpkg
Checks::check_exit(output.output == VALID_COMMIT_OUTPUT, "Invalid commit id %s", Strings::utf16_to_utf8(git_commit_id));
}
- void portsdiff_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- static const std::string example = Strings::format("The argument should be a branch/tag/hash to checkout.\n%s", create_example_string("portsdiff mybranchname"));
+ static const std::string example = Strings::format("The argument should be a branch/tag/hash to checkout.\n%s", Commands::Help::create_example_string("portsdiff mybranchname"));
args.check_min_arg_count(1, example);
args.check_max_arg_count(2, example);
diff --git a/toolsrc/src/commands_remove.cpp b/toolsrc/src/commands_remove.cpp
index 445213fc2..23d981fc1 100644
--- a/toolsrc/src/commands_remove.cpp
+++ b/toolsrc/src/commands_remove.cpp
@@ -4,7 +4,7 @@
#include "vcpkg_Input.h"
#include <fstream>
-namespace vcpkg
+namespace vcpkg::Commands::Remove
{
static const std::string OPTION_PURGE = "--purge";
@@ -166,9 +166,9 @@ namespace vcpkg
System::println(System::color::success, "Package %s was successfully removed", pkg.package.displayname());
}
- void remove_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
{
- static const std::string example = create_example_string("remove zlib zlib:x64-windows curl boost");
+ static const std::string example = Commands::Help::create_example_string("remove zlib zlib:x64-windows curl boost");
args.check_min_arg_count(1, example);
const std::unordered_set<std::string> options = args.check_and_get_optional_command_arguments({OPTION_PURGE});
diff --git a/toolsrc/src/commands_search.cpp b/toolsrc/src/commands_search.cpp
index a4714477e..3f197b06b 100644
--- a/toolsrc/src/commands_search.cpp
+++ b/toolsrc/src/commands_search.cpp
@@ -4,7 +4,7 @@
#include "vcpkglib_helpers.h"
#include "SourceParagraph.h"
-namespace vcpkg
+namespace vcpkg::Commands::Search
{
static std::vector<SourceParagraph> read_all_source_paragraphs(const vcpkg_paths& paths)
{
@@ -40,9 +40,10 @@ namespace vcpkg
details::shorten_description(source_paragraph.description));
}
- void search_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- static const std::string example = Strings::format("The argument should be a substring to search for, or no argument to display all libraries.\n%s", create_example_string("search png"));
+ static const std::string example = Strings::format("The argument should be a substring to search for, or no argument to display all libraries.\n%s",
+ Commands::Help::create_example_string("search png"));
args.check_max_arg_count(1, example);
const std::vector<SourceParagraph> source_paragraphs = read_all_source_paragraphs(paths);
diff --git a/toolsrc/src/commands_update.cpp b/toolsrc/src/commands_update.cpp
index a4ab7c6e7..12b4dad50 100644
--- a/toolsrc/src/commands_update.cpp
+++ b/toolsrc/src/commands_update.cpp
@@ -5,9 +5,9 @@
#include "Paragraphs.h"
#include "vcpkg_info.h"
-namespace vcpkg
+namespace vcpkg::Commands::Update
{
- void update_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
args.check_exact_arg_count(0);
System::println("Using local portfile versions. To update the local portfiles, use `git pull`.");
diff --git a/toolsrc/src/commands_version.cpp b/toolsrc/src/commands_version.cpp
new file mode 100644
index 000000000..e98251601
--- /dev/null
+++ b/toolsrc/src/commands_version.cpp
@@ -0,0 +1,16 @@
+#include "vcpkg_Commands.h"
+#include "vcpkg_System.h"
+#include "vcpkg_info.h"
+
+namespace vcpkg::Commands::Version
+{
+ void perform_and_exit(const vcpkg_cmd_arguments& args)
+ {
+ args.check_exact_arg_count(0);
+ System::println("Vcpkg package management program version %s\n"
+ "\n"
+ "See LICENSE.txt for license information.", Info::version()
+ );
+ exit(EXIT_SUCCESS);
+ }
+}
diff --git a/toolsrc/src/main.cpp b/toolsrc/src/main.cpp
index 7703c541f..08e65391f 100644
--- a/toolsrc/src/main.cpp
+++ b/toolsrc/src/main.cpp
@@ -21,7 +21,7 @@ bool g_debugging = false;
void invalid_command(const std::string& cmd)
{
System::println(System::color::error, "invalid command: %s", cmd);
- print_usage();
+ Commands::Help::print_usage();
exit(EXIT_FAILURE);
}
@@ -30,11 +30,11 @@ static void inner(const vcpkg_cmd_arguments& args)
TrackProperty("command", args.command);
if (args.command.empty())
{
- print_usage();
+ Commands::Help::print_usage();
exit(EXIT_FAILURE);
}
- if (auto command_function = find_command(args.command, get_available_commands_type_c()))
+ if (auto command_function = Commands::find(args.command, Commands::get_available_commands_type_c()))
{
return command_function(args);
}
@@ -66,7 +66,7 @@ static void inner(const vcpkg_cmd_arguments& args)
int exit_code = _wchdir(paths.root.c_str());
Checks::check_exit(exit_code == 0, "Changing the working dir failed");
- if (auto command_function = find_command(args.command, get_available_commands_type_b()))
+ if (auto command_function = Commands::find(args.command, Commands::get_available_commands_type_b()))
{
return command_function(args, paths);
}
@@ -91,7 +91,7 @@ static void inner(const vcpkg_cmd_arguments& args)
Input::check_triplet(default_target_triplet, paths);
- if (auto command_function = find_command(args.command, get_available_commands_type_a()))
+ if (auto command_function = Commands::find(args.command, Commands::get_available_commands_type_a()))
{
return command_function(args, paths, default_target_triplet);
}
diff --git a/toolsrc/src/vcpkg_Input.cpp b/toolsrc/src/vcpkg_Input.cpp
index 365f28cdb..bf7ccd346 100644
--- a/toolsrc/src/vcpkg_Input.cpp
+++ b/toolsrc/src/vcpkg_Input.cpp
@@ -37,7 +37,7 @@ namespace vcpkg::Input
{
System::println(System::color::error, "Error: invalid triplet: %s", t.canonical_name());
TrackProperty("error", "invalid triplet: " + t.canonical_name());
- help_topic_valid_triplet(paths);
+ Commands::Help::help_topic_valid_triplet(paths);
exit(EXIT_FAILURE);
}
}
diff --git a/toolsrc/src/vcpkg_cmd_arguments.cpp b/toolsrc/src/vcpkg_cmd_arguments.cpp
index a3648668f..aa1c35965 100644
--- a/toolsrc/src/vcpkg_cmd_arguments.cpp
+++ b/toolsrc/src/vcpkg_cmd_arguments.cpp
@@ -18,7 +18,7 @@ namespace vcpkg
{
System::println(System::color::error, "Error: expected value after %s", option_name);
TrackProperty("error", "error option name");
- print_usage();
+ Commands::Help::print_usage();
exit(EXIT_FAILURE);
}
@@ -26,7 +26,7 @@ namespace vcpkg
{
System::println(System::color::error, "Error: %s specified multiple times", option_name);
TrackProperty("error", "error option specified multiple times");
- print_usage();
+ Commands::Help::print_usage();
exit(EXIT_FAILURE);
}
@@ -42,7 +42,7 @@ namespace vcpkg
{
System::println(System::color::error, "Error: conflicting values specified for --%s", option_name);
TrackProperty("error", "error conflicting switches");
- print_usage();
+ Commands::Help::print_usage();
exit(EXIT_FAILURE);
}
option_field = new_setting;
diff --git a/toolsrc/vcpkg/vcpkg.vcxproj b/toolsrc/vcpkg/vcpkg.vcxproj
index 7fab309d3..bcec048f5 100644
--- a/toolsrc/vcpkg/vcpkg.vcxproj
+++ b/toolsrc/vcpkg/vcpkg.vcxproj
@@ -130,7 +130,11 @@
<ItemGroup>
<ClCompile Include="..\MachineType.cpp" />
<ClCompile Include="..\src\coff_file_reader.cpp" />
+ <ClCompile Include="..\src\commands_available_commands.cpp" />
+ <ClCompile Include="..\src\commands_build.cpp" />
+ <ClCompile Include="..\src\commands_build_external.cpp" />
<ClCompile Include="..\src\commands_cache.cpp" />
+ <ClCompile Include="..\src\commands_contact.cpp" />
<ClCompile Include="..\src\commands_create.cpp" />
<ClCompile Include="..\src\commands_edit.cpp" />
<ClCompile Include="..\src\commands_hash.cpp" />
@@ -141,12 +145,12 @@
<ClCompile Include="..\src\commands_remove.cpp" />
<ClCompile Include="..\src\commands_search.cpp" />
<ClCompile Include="..\src\commands_update.cpp" />
+ <ClCompile Include="..\src\commands_version.cpp" />
<ClCompile Include="..\src\vcpkg_cmd_arguments.cpp" />
- <ClCompile Include="..\src\commands_other.cpp" />
<ClCompile Include="..\src\vcpkg_Dependencies.cpp" />
<ClCompile Include="..\src\vcpkg_Environment.cpp" />
- <ClCompile Include="..\src\commands_installation.cpp" />
- <ClCompile Include="..\src\commands_integration.cpp" />
+ <ClCompile Include="..\src\commands_install.cpp" />
+ <ClCompile Include="..\src\commands_integrate.cpp" />
<ClCompile Include="..\src\main.cpp" />
<ClCompile Include="..\src\commands_help.cpp" />
<ClCompile Include="..\src\post_build_lint.cpp" />
diff --git a/toolsrc/vcpkg/vcpkg.vcxproj.filters b/toolsrc/vcpkg/vcpkg.vcxproj.filters
index cfbb17a22..1f43777b8 100644
--- a/toolsrc/vcpkg/vcpkg.vcxproj.filters
+++ b/toolsrc/vcpkg/vcpkg.vcxproj.filters
@@ -18,18 +18,9 @@
<ClCompile Include="..\src\main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\src\commands_other.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="..\src\commands_help.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\src\commands_integration.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\src\commands_installation.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="..\src\post_build_lint.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -84,6 +75,27 @@
<ClCompile Include="..\src\commands_portsdiff.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\src\commands_build_external.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\commands_build.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\commands_install.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\commands_integrate.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\commands_available_commands.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\commands_version.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\commands_contact.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\include\post_build_lint.h">