From 82d65261da9e01572ccb5e19044d03da5b69c8ff Mon Sep 17 00:00:00 2001 From: TsukasaSugiura Date: Sun, 11 Nov 2018 23:16:11 +0900 Subject: [freeimage] Update to FreeImage 3.18.0 Update FreeImage port to FreeImage 3.18.0. --- ports/freeimage/CMakeLists.txt | 5 ++--- ports/freeimage/CONTROL | 2 +- ports/freeimage/portfile.cmake | 6 +++--- ports/freeimage/use-external-webp.patch | 5 ++--- ports/freeimage/use-freeimage-config-include.patch | 4 ++-- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ports/freeimage/CMakeLists.txt b/ports/freeimage/CMakeLists.txt index 9f4f1677b..2d3e3cb57 100644 --- a/ports/freeimage/CMakeLists.txt +++ b/ports/freeimage/CMakeLists.txt @@ -36,9 +36,8 @@ set(ROOT_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/CacheFile.h ${REAL_SOURCE_DIR}/Plugin.h ${REAL_SOURCE_DIR}/Quantizers.h ${REAL_SOURCE_DIR}/ToneMapping.h - ${REAL_SOURCE_DIR}/Utilities.h - ${REAL_SOURCE_DIR}/DeprecationManager/DeprecationMgr.h) - + ${REAL_SOURCE_DIR}/Utilities.h) + file(GLOB FREEIMAGE_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/FreeImage/*.h) file(GLOB FREEIMAGE_TOOLKIT_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/FreeImageToolkit/*.h) file(GLOB METADATA_PRIVATE_HEADERS ${REAL_SOURCE_DIR}/Metadata/*.h) diff --git a/ports/freeimage/CONTROL b/ports/freeimage/CONTROL index 6e8de82fc..844e13ae2 100644 --- a/ports/freeimage/CONTROL +++ b/ports/freeimage/CONTROL @@ -1,4 +1,4 @@ Source: freeimage -Version: 3.17.0-4 +Version: 3.18.0-1 Build-Depends: zlib, libpng, libjpeg-turbo, tiff, openjpeg, libwebp, libraw, jxrlib, openexr Description: Support library for graphics image formats diff --git a/ports/freeimage/portfile.cmake b/ports/freeimage/portfile.cmake index db8d2537a..8713f5ba5 100644 --- a/ports/freeimage/portfile.cmake +++ b/ports/freeimage/portfile.cmake @@ -2,9 +2,9 @@ include(${CMAKE_TRIPLET_FILE}) include(vcpkg_common_functions) set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/FreeImage) vcpkg_download_distfile(ARCHIVE - URLS "http://downloads.sourceforge.net/freeimage/FreeImage3170.zip" - FILENAME "FreeImage3170.zip" - SHA512 703c2626c0bcfe73eb40d720f45745208ca9650a7730759680a2b38ad3f6c719a43008477032bc70b76a95761f7d4b6f901b961359d36b54ace906dd78fb391b + URLS "http://downloads.sourceforge.net/freeimage/FreeImage3180.zip" + FILENAME "FreeImage3180.zip" + SHA512 9d9cc7e2d57552c3115e277aeb036e0455204d389026b17a3f513da5be1fd595421655488bb1ec2f76faebed66049119ca55e26e2a6d37024b3fb7ef36ad4818 ) vcpkg_extract_source_archive(${ARCHIVE}) diff --git a/ports/freeimage/use-external-webp.patch b/ports/freeimage/use-external-webp.patch index ae6328431..4d1757c39 100644 --- a/ports/freeimage/use-external-webp.patch +++ b/ports/freeimage/use-external-webp.patch @@ -1,14 +1,13 @@ diff --git a/Source/FreeImage/PluginWebP.cpp b/Source/FreeImage/PluginWebP.cpp -index 9fb0b69..c401447 100644 +index 7c9f62f..c401447 100644 --- a/Source/FreeImage/PluginWebP.cpp +++ b/Source/FreeImage/PluginWebP.cpp -@@ -24,10 +24,9 @@ +@@ -24,9 +24,9 @@ #include "../Metadata/FreeImageTag.h" -#include "../LibWebP/src/webp/decode.h" -#include "../LibWebP/src/webp/encode.h" --#include "../LibWebP/src/enc/vp8enci.h" -#include "../LibWebP/src/webp/mux.h" +#include +#include diff --git a/ports/freeimage/use-freeimage-config-include.patch b/ports/freeimage/use-freeimage-config-include.patch index 4927aff5b..579f08845 100644 --- a/ports/freeimage/use-freeimage-config-include.patch +++ b/ports/freeimage/use-freeimage-config-include.patch @@ -1,9 +1,9 @@ diff --git a/Source/FreeImage.h b/Source/FreeImage.h -index cc66b7d..cc66812 100644 +index 12182cd..86a1e68 100644 --- a/Source/FreeImage.h +++ b/Source/FreeImage.h @@ -32,6 +32,11 @@ - #define FREEIMAGE_MINOR_VERSION 17 + #define FREEIMAGE_MINOR_VERSION 18 #define FREEIMAGE_RELEASE_SERIAL 0 +// vcpkg specific includes -------------------------------------------------- -- cgit v1.2.3 From ad65638eb3c015aa20743ca4140b1a274cef6659 Mon Sep 17 00:00:00 2001 From: TsukasaSugiura Date: Sun, 11 Nov 2018 23:19:42 +0900 Subject: [freeimage] Fix function overload with libjpeg-turbo 2.0.0 Fix function overload with libjpeg-turbo 2.0.0 (jpeg_read_icc_profile and jpeg_write_icc_profile). --- ports/freeimage/CMakeLists.txt | 3 +++ ports/freeimage/CONTROL | 2 +- ports/freeimage/fix-function-overload.patch | 40 +++++++++++++++++++++++++++++ ports/freeimage/portfile.cmake | 1 + 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 ports/freeimage/fix-function-overload.patch diff --git a/ports/freeimage/CMakeLists.txt b/ports/freeimage/CMakeLists.txt index 2d3e3cb57..997fba37a 100644 --- a/ports/freeimage/CMakeLists.txt +++ b/ports/freeimage/CMakeLists.txt @@ -7,6 +7,9 @@ project(FreeImage C CXX) find_package(zlib REQUIRED) find_package(PNG REQUIRED) find_package(JPEG REQUIRED) +if(NOT JPEG_LIBRARY_DEBUG) + set(JPEG_LIBRARY_DEBUG ${JPEG_LIBRARY_RELEASE}) +endif() find_package(TIFF REQUIRED) find_package(OPENJPEG REQUIRED) diff --git a/ports/freeimage/CONTROL b/ports/freeimage/CONTROL index 844e13ae2..d8bd820e6 100644 --- a/ports/freeimage/CONTROL +++ b/ports/freeimage/CONTROL @@ -1,4 +1,4 @@ Source: freeimage -Version: 3.18.0-1 +Version: 3.18.0-2 Build-Depends: zlib, libpng, libjpeg-turbo, tiff, openjpeg, libwebp, libraw, jxrlib, openexr Description: Support library for graphics image formats diff --git a/ports/freeimage/fix-function-overload.patch b/ports/freeimage/fix-function-overload.patch new file mode 100644 index 000000000..adb1164f6 --- /dev/null +++ b/ports/freeimage/fix-function-overload.patch @@ -0,0 +1,40 @@ +diff --git a/Source/FreeImage/PluginJPEG.cpp b/Source/FreeImage/PluginJPEG.cpp +index 8db177d..efa2c4e 100644 +--- a/Source/FreeImage/PluginJPEG.cpp ++++ b/Source/FreeImage/PluginJPEG.cpp +@@ -503,7 +503,7 @@ marker_is_icc(jpeg_saved_marker_ptr marker) { + return FALSE. You might want to issue an error message instead. + */ + static BOOL +-jpeg_read_icc_profile(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned *icc_data_len) { ++jpeg_read_icc_profile_(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned *icc_data_len) { + jpeg_saved_marker_ptr marker; + int num_markers = 0; + int seq_no; +@@ -745,7 +745,7 @@ read_markers(j_decompress_ptr cinfo, FIBITMAP *dib) { + BYTE *icc_profile = NULL; + unsigned icc_length = 0; + +- if( jpeg_read_icc_profile(cinfo, &icc_profile, &icc_length) ) { ++ if( jpeg_read_icc_profile_(cinfo, &icc_profile, &icc_length) ) { + // copy ICC profile data + FreeImage_CreateICCProfile(dib, icc_profile, icc_length); + // clean up +@@ -785,7 +785,7 @@ jpeg_write_comment(j_compress_ptr cinfo, FIBITMAP *dib) { + Write JPEG_APP2 marker (ICC profile) + */ + static BOOL +-jpeg_write_icc_profile(j_compress_ptr cinfo, FIBITMAP *dib) { ++jpeg_write_icc_profile_(j_compress_ptr cinfo, FIBITMAP *dib) { + // marker identifying string "ICC_PROFILE" (null-terminated) + BYTE icc_signature[12] = { 0x49, 0x43, 0x43, 0x5F, 0x50, 0x52, 0x4F, 0x46, 0x49, 0x4C, 0x45, 0x00 }; + +@@ -1038,7 +1038,7 @@ write_markers(j_compress_ptr cinfo, FIBITMAP *dib) { + jpeg_write_comment(cinfo, dib); + + // write ICC profile +- jpeg_write_icc_profile(cinfo, dib); ++ jpeg_write_icc_profile_(cinfo, dib); + + // write IPTC profile + jpeg_write_iptc_profile(cinfo, dib); diff --git a/ports/freeimage/portfile.cmake b/ports/freeimage/portfile.cmake index 8713f5ba5..6f3cfaebe 100644 --- a/ports/freeimage/portfile.cmake +++ b/ports/freeimage/portfile.cmake @@ -40,6 +40,7 @@ vcpkg_apply_patches( "${CMAKE_CURRENT_LIST_DIR}/use-external-webp.patch" "${CMAKE_CURRENT_LIST_DIR}/use-external-openexr.patch" "${CMAKE_CURRENT_LIST_DIR}/use-freeimage-config-include.patch" + "${CMAKE_CURRENT_LIST_DIR}/fix-function-overload.patch" ) vcpkg_configure_cmake( -- cgit v1.2.3 From 691ed09c3fc98f36aa405807b6774c866b080e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Ma=C5=82ek?= Date: Thu, 15 Nov 2018 09:30:30 +0100 Subject: [berkeleydb] fix exporting DLL symbols on Windows Set preprocessor definitions correctly for static & shared library. Previously DLL was unusable on Windows - the symbols were not exported --- ports/berkeleydb/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ports/berkeleydb/CMakeLists.txt b/ports/berkeleydb/CMakeLists.txt index eada8360a..9297aacef 100644 --- a/ports/berkeleydb/CMakeLists.txt +++ b/ports/berkeleydb/CMakeLists.txt @@ -15,12 +15,12 @@ add_definitions( if (BUILD_SHARED_LIBS) add_definitions( - -D_LIB + -DDB_CREATE_DLL + -D_USRDLL ) else() add_definitions( - -DDB_CREATE_DLL - -D_USRDLL + -D_LIB ) endif() -- cgit v1.2.3 From 56c94a81027dae14ea8adabcbda800d0f7c10d0b Mon Sep 17 00:00:00 2001 From: Simon Brand Date: Thu, 15 Nov 2018 11:18:48 +0000 Subject: Rename example documents The current names and titles of the examples put too much emphasis on the package which is being demonstrated rather than the concept. This can be jarring for newcomers. This patch renames them to put the emphasis on the concept instead. --- README.md | 4 +- docs/about/faq.md | 4 +- docs/examples/installing-and-using-packages.md | 177 +++++++++++++++++++++ docs/examples/packaging-zipfiles.md | 79 ++++++++++ docs/examples/packaging-zlib.md | 79 ---------- docs/examples/patching-libpng.md | 204 ------------------------- docs/examples/patching.md | 204 +++++++++++++++++++++++++ docs/examples/using-sqlite.md | 177 --------------------- docs/index.md | 8 +- docs/users/integration.md | 2 +- 10 files changed, 469 insertions(+), 469 deletions(-) create mode 100644 docs/examples/installing-and-using-packages.md create mode 100644 docs/examples/packaging-zipfiles.md delete mode 100644 docs/examples/packaging-zlib.md delete mode 100644 docs/examples/patching-libpng.md create mode 100644 docs/examples/patching.md delete mode 100644 docs/examples/using-sqlite.md diff --git a/README.md b/README.md index 23cb4e5f4..e0267bce4 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ The best way to use installed libraries with CMake is via the toolchain file `sc In Visual Studio, you can create a New Project (or open an existing one). All installed libraries are immediately ready to be `#include`'d and used in your project without additional configuration. -For more information, see our [using a package](docs/examples/using-sqlite.md) example for the specifics. +For more information, see our [using a package](docs/examples/installing-and-using-packages.md) example for the specifics. Additional notes on macOS and Linux support can be found in the [official announcement](https://blogs.msdn.microsoft.com/vcblog/2018/04/24/announcing-a-single-c-library-manager-for-linux-macos-and-windows-vcpkg/). @@ -50,7 +50,7 @@ and restart Powershell. ## Examples -See the [documentation](docs/index.md) for specific walkthroughs, including [using a package](docs/examples/using-sqlite.md) and [adding a new package](docs/examples/packaging-zlib.md). +See the [documentation](docs/index.md) for specific walkthroughs, including [installing and using a package](docs/examples/installing-and-using-packages.md) and [adding a new package](docs/examples/packaging-zipfiles.md). Our docs are now also available online at ReadTheDocs: ! diff --git a/docs/about/faq.md b/docs/about/faq.md index 0178e051a..57b908f48 100644 --- a/docs/about/faq.md +++ b/docs/about/faq.md @@ -10,12 +10,12 @@ Yes! See [the `export` command](../users/integration.md#export). The `vcpkg update` command lists all packages which are out-of-sync with your current portfiles. To update a package, follow the instructions in the command. ## How do I get more libraries? -The list of libraries is enumerated from the [`ports\`](https://github.com/Microsoft/vcpkg/blob/master/ports) directory. By design, you can add and remove libraries from this directory as you see fit for yourself or your company -- see [Example #2](../examples/packaging-zlib.md). +The list of libraries is enumerated from the [`ports\`](https://github.com/Microsoft/vcpkg/blob/master/ports) directory. By design, you can add and remove libraries from this directory as you see fit for yourself or your company -- see our [packaging example](../examples/packaging-zipfiles.md). We recommend cloning directly from [GitHub](https://github.com/microsoft/vcpkg) and using `git pull` to update the list of portfiles. Once you've updated your portfiles, `vcpkg update` will indicate any installed libraries that are now out of date. ## Can I build a private library with this tool? -Yes. Follow [our Packaging zlib Example](../examples/packaging-zlib.md) for creating a portfile using a fake URL. Then, either pre-seed the `downloads\` folder with a zip containing your private sources or replace the normal calls to `vcpkg_download_distfile` and `vcpkg_extract_source_archive` with functions that unpack your source code. +Yes. Follow [our packaging zlib Example](../examples/packaging-zipfiles.md) for creating a portfile using a fake URL. Then, either pre-seed the `downloads\` folder with a zip containing your private sources or replace the normal calls to `vcpkg_download_distfile` and `vcpkg_extract_source_archive` with functions that unpack your source code. ## Can I use a prebuilt private library with this tool? Yes. The `portfile.cmake` for a library is fundamentally a script that places the headers and binaries into the correct arrangement in the `${CURRENT_PACKAGES_DIR}`, so to pull in prebuilt binaries you can write a portfile which directly downloads and arranges the files. diff --git a/docs/examples/installing-and-using-packages.md b/docs/examples/installing-and-using-packages.md new file mode 100644 index 000000000..50200c877 --- /dev/null +++ b/docs/examples/installing-and-using-packages.md @@ -0,0 +1,177 @@ +## Installing and Using Packages Example: SQLite + + - [Step 1: Install](#install) + - [Step 2: Use](#use) + - [VS/MSBuild Project (User-wide integration)](#msbuild) + - [CMake (Toolchain file)](#cmake) + - [Other integration options](../users/integration.md) + +--- + +## Step 1: Install + +First, we need to know what name [SQLite](https://sqlite.org) goes by in the ports tree. To do that, we'll run the `search` command and inspect the output: +```no-highlight +PS D:\src\vcpkg> .\vcpkg search sqlite +libodb-sqlite 2.4.0 Sqlite support for the ODB ORM library +sqlite3 3.15.0 SQLite is a software library that implements a se... + +If your library is not listed, please open an issue at: + https://github.com/Microsoft/vcpkg/issues +``` +Looking at the list, we can see that the port is named "sqlite3". You can also run the `search` command without arguments to see the full list of packages. + +Installing is then as simple as using the `install` command. +```no-highlight +PS D:\src\vcpkg> .\vcpkg install sqlite3 +-- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-windows +-- DOWNLOADS=D:/src/vcpkg/downloads +-- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/sqlite3_x86-windows +-- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/sqlite3 +-- CURRENT_PORT_DIR=D:/src/vcpkg/ports/sqlite3/. +-- Downloading https://sqlite.org/2016/sqlite-amalgamation-3150000.zip... +-- Downloading https://sqlite.org/2016/sqlite-amalgamation-3150000.zip... OK +-- Testing integrity of downloaded file... +-- Testing integrity of downloaded file... OK +-- Extracting source D:/src/vcpkg/downloads/sqlite-amalgamation-3150000.zip +-- Extracting done +-- Configuring x86-windows-rel +-- Configuring x86-windows-rel done +-- Configuring x86-windows-dbg +-- Configuring x86-windows-dbg done +-- Build x86-windows-rel +-- Build x86-windows-rel done +-- Build x86-windows-dbg +-- Build x86-windows-dbg done +-- Package x86-windows-rel +-- Package x86-windows-rel done +-- Package x86-windows-dbg +-- Package x86-windows-dbg done +-- Performing post-build validation +-- Performing post-build validation done +Package sqlite3:x86-windows is installed +``` + +We can check that sqlite3 was successfully installed for x86 windows desktop by running the `list` command. +```no-highlight +PS D:\src\vcpkg> .\vcpkg list +sqlite3:x86-windows 3.15.0 SQLite is a software library that implements a se... +``` + +To install for other architectures and platforms such as Universal Windows Platform or x64 Desktop, you can suffix the package name with `:`. +```no-highlight +PS D:\src\vcpkg> .\vcpkg install sqlite3:x86-uwp zlib:x64-windows +``` + +See `.\vcpkg help triplet` for all supported targets. + +--- + +## Step 2: Use + +#### VS/MSBuild Project (User-wide integration) + +The recommended and most productive way to use vcpkg is via user-wide integration, making the system available for all projects you build. The user-wide integration will prompt for administrator access the first time it is used on a given machine, but afterwards is no longer required and the integration is configured on a per-user basis. +```no-highlight +PS D:\src\vcpkg> .\vcpkg integrate install +Applied user-wide integration for this vcpkg root. + +All C++ projects can now #include any installed libraries. +Linking will be handled automatically. +Installing new libraries will make them instantly available. +``` +*Note: You will need to restart Visual Studio or perform a Build to update intellisense with the changes.* + +You can now simply use File -> New Project in Visual Studio 2015 or Visual Studio 2017 and the library will be automatically available. For SQLite, you can try out their [C/C++ sample](https://sqlite.org/quickstart.html). + +To remove the integration for your user, you can use `.\vcpkg integrate remove`. + + +#### CMake (Toolchain File) + +The best way to use installed libraries with cmake is via the toolchain file `scripts\buildsystems\vcpkg.cmake`. To use this file, you simply need to add it onto your CMake command line as `-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake`. + +If you are using CMake through Open Folder with Visual Studio 2017 you can define `CMAKE_TOOLCHAIN_FILE` by adding a "variables" section to each of your `CMakeSettings.json` configurations: + +```json +{ + "configurations": [{ + "name": "x86-Debug", + "generator": "Visual Studio 15 2017", + "configurationType" : "Debug", + "buildRoot": "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-m -v:minimal", + "variables": [{ + "name": "CMAKE_TOOLCHAIN_FILE", + "value": "D:\\src\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" + }] + }] +} +``` + +Now let's make a simple CMake project with a main file. +```cmake +# CMakeLists.txt +cmake_minimum_required(VERSION 3.0) +project(test) + +find_package(Sqlite3 REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main sqlite3) +``` +```cpp +// main.cpp +#include +#include + +int main() +{ + printf("%s\n", sqlite3_libversion()); + return 0; +} +``` + +Then, we build our project in the normal CMake way: +```no-highlight +PS D:\src\cmake-test> mkdir build +PS D:\src\cmake-test> cd build +PS D:\src\cmake-test\build> cmake .. "-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake" + // omitted CMake output here // +-- Build files have been written to: D:/src/cmake-test/build +PS D:\src\cmake-test\build> cmake --build . + // omitted MSBuild output here // +Build succeeded. + 0 Warning(s) + 0 Error(s) + +Time Elapsed 00:00:02.38 +PS D:\src\cmake-test\build> .\Debug\main.exe +3.15.0 +``` + +*Note: The correct sqlite3.dll is automatically copied to the output folder when building for x86-windows. You will need to distribute this along with your application.* + +##### Handling libraries without native cmake support + +Unlike other platforms, we do not automatically add the `include\` directory to your compilation line by default. If you're using a library that does not provide CMake integration, you will need to explicitly search for the files and add them yourself using [`find_path()`][1] and [`find_library()`][2]. + +```cmake +# To find and use catch +find_path(CATCH_INCLUDE_DIR catch.hpp) +include_directories(${CATCH_INCLUDE_DIR}) + +# To find and use azure-storage-cpp +find_path(WASTORAGE_INCLUDE_DIR was/blob.h) +find_library(WASTORAGE_LIBRARY wastorage) +include_directories(${WASTORAGE_INCLUDE_DIR}) +link_libraries(${WASTORAGE_LIBRARY}) + +# Note that we recommend using the target-specific directives for a cleaner cmake: +# target_include_directories(main ${LIBRARY}) +# target_link_libraries(main PRIVATE ${LIBRARY}) +``` + +[1]: https://cmake.org/cmake/help/latest/command/find_path.html +[2]: https://cmake.org/cmake/help/latest/command/find_library.html diff --git a/docs/examples/packaging-zipfiles.md b/docs/examples/packaging-zipfiles.md new file mode 100644 index 000000000..ed63637fd --- /dev/null +++ b/docs/examples/packaging-zipfiles.md @@ -0,0 +1,79 @@ +## Packaging Zipfiles Example: zlib + +### Bootstrap with `create` +First, locate a globally accessible archive of the library's sources. Zip, gzip, and bzip are all supported. Strongly prefer official sources or mirrors over unofficial mirrors. + +*Looking at zlib's website, the URL http://zlib.net/zlib1211.zip looks appropriate.* + +Second, determine a suitable package name. This should be ASCII, lowercase, and recognizable to someone who knows the library's "human name". If the library is already packaged in another package manager, prefer that name. + +*Since zlib is already packaged as zlib, we will use the name zlib2 for this example.* + +Finally, if the server's name for the archive is not very descriptive (such as downloading a zipped commit or branch from GitHub), choose a nice archive name of the form `-.zip`. + +*`zlib1211.zip` is a fine name, so no change needed.* + +All this information can then be passed into the `create` command, which will download the sources and bootstrap the packaging process inside `ports\`. + +```no-highlight +PS D:\src\vcpkg> .\vcpkg create zlib2 http://zlib.net/zlib-1.2.11.tar.gz zlib-1.2.11.zip +-- Generated portfile: D:/src/vcpkg/ports/zlib2/portfile.cmake +``` + +### Create the CONTROL file +In addition to the generated `ports\\portfile.cmake`, we also need a `ports\\CONTROL` file. This file is a simple set of fields describing the package's metadata. + +*For zlib2, we'll create the file `ports\zlib2\CONTROL` with the following contents:* +```no-highlight +Source: zlib2 +Version: 1.2.11 +Description: A Massively Spiffy Yet Delicately Unobtrusive Compression Library +``` + +### Tweak the generated portfile +The generated `portfile.cmake` will need some editing to correctly package most libraries in the wild, however we can start by trying out the build. + +```no-highlight +PS D:\src\vcpkg> .\vcpkg build zlib2 +-- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-windows +-- DOWNLOADS=D:/src/vcpkg/downloads +-- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/zlib2_x86-windows +-- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/zlib2 +-- CURRENT_PORT_DIR=D:/src/vcpkg/ports/zlib2/. +-- Using cached D:/src/vcpkg/downloads/zlib-1.2.11.tar.gz +-- Testing integrity of cached file... +-- Testing integrity of cached file... OK +-- Extracting source D:/src/vcpkg/downloads/zlib-1.2.11.tar.gz +-- Extracting done +-- Configuring x86-windows-rel +-- Configuring x86-windows-rel done +-- Configuring x86-windows-dbg +-- Configuring x86-windows-dbg done +-- Build x86-windows-rel +-- Build x86-windows-rel done +-- Build x86-windows-dbg +-- Build x86-windows-dbg done +-- Performing post-build validation +Include files should not be duplicated into the /debug/include directory. If this cannot be disabled in the project cmake, use + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +/debug/share should not exist. Please reorganize any important files, then use + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) +The software license must be available at ${CURRENT_PACKAGES_DIR}/share/zlib2/copyright +Found 3 error(s). Please correct the portfile: + D:\src\vcpkg\ports\zlib2\portfile.cmake +``` + +At this point, it is a matter of reading the error messages and log files while steadily improving the quality of the portfile. Zlib required providing a discrete copy of the LICENSE to copy into the package, suppressing the build and installation of executables and headers, and removing the static libraries after they were installed. + +### Suggested example portfiles +In the `ports\` directory are many libraries that can be used as examples, including many that are not based on CMake. + +- Header only libraries + - rapidjson + - range-v3 +- MSBuild-based + - cppunit + - mpg123 +- Non-CMake, custom buildsystem + - openssl + - ffmpeg diff --git a/docs/examples/packaging-zlib.md b/docs/examples/packaging-zlib.md deleted file mode 100644 index 1d61cfee1..000000000 --- a/docs/examples/packaging-zlib.md +++ /dev/null @@ -1,79 +0,0 @@ -## Example 2: Packaging zlib - -### Bootstrap with `create` -First, locate a globally accessible archive of the library's sources. Zip, gzip, and bzip are all supported. Strongly prefer official sources or mirrors over unofficial mirrors. - -*Looking at zlib's website, the URL http://zlib.net/zlib1211.zip looks appropriate.* - -Second, determine a suitable package name. This should be ASCII, lowercase, and recognizable to someone who knows the library's "human name". If the library is already packaged in another package manager, prefer that name. - -*Since zlib is already packaged as zlib, we will use the name zlib2 for this example.* - -Finally, if the server's name for the archive is not very descriptive (such as downloading a zipped commit or branch from GitHub), choose a nice archive name of the form `-.zip`. - -*`zlib1211.zip` is a fine name, so no change needed.* - -All this information can then be passed into the `create` command, which will download the sources and bootstrap the packaging process inside `ports\`. - -```no-highlight -PS D:\src\vcpkg> .\vcpkg create zlib2 http://zlib.net/zlib-1.2.11.tar.gz zlib-1.2.11.zip --- Generated portfile: D:/src/vcpkg/ports/zlib2/portfile.cmake -``` - -### Create the CONTROL file -In addition to the generated `ports\\portfile.cmake`, we also need a `ports\\CONTROL` file. This file is a simple set of fields describing the package's metadata. - -*For zlib2, we'll create the file `ports\zlib2\CONTROL` with the following contents:* -```no-highlight -Source: zlib2 -Version: 1.2.11 -Description: A Massively Spiffy Yet Delicately Unobtrusive Compression Library -``` - -### Tweak the generated portfile -The generated `portfile.cmake` will need some editing to correctly package most libraries in the wild, however we can start by trying out the build. - -```no-highlight -PS D:\src\vcpkg> .\vcpkg build zlib2 --- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-windows --- DOWNLOADS=D:/src/vcpkg/downloads --- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/zlib2_x86-windows --- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/zlib2 --- CURRENT_PORT_DIR=D:/src/vcpkg/ports/zlib2/. --- Using cached D:/src/vcpkg/downloads/zlib-1.2.11.tar.gz --- Testing integrity of cached file... --- Testing integrity of cached file... OK --- Extracting source D:/src/vcpkg/downloads/zlib-1.2.11.tar.gz --- Extracting done --- Configuring x86-windows-rel --- Configuring x86-windows-rel done --- Configuring x86-windows-dbg --- Configuring x86-windows-dbg done --- Build x86-windows-rel --- Build x86-windows-rel done --- Build x86-windows-dbg --- Build x86-windows-dbg done --- Performing post-build validation -Include files should not be duplicated into the /debug/include directory. If this cannot be disabled in the project cmake, use - file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) -/debug/share should not exist. Please reorganize any important files, then use - file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) -The software license must be available at ${CURRENT_PACKAGES_DIR}/share/zlib2/copyright -Found 3 error(s). Please correct the portfile: - D:\src\vcpkg\ports\zlib2\portfile.cmake -``` - -At this point, it is a matter of reading the error messages and log files while steadily improving the quality of the portfile. Zlib required providing a discrete copy of the LICENSE to copy into the package, suppressing the build and installation of executables and headers, and removing the static libraries after they were installed. - -### Suggested example portfiles -In the `ports\` directory are many libraries that can be used as examples, including many that are not based on CMake. - -- Header only libraries - - rapidjson - - range-v3 -- MSBuild-based - - cppunit - - mpg123 -- Non-CMake, custom buildsystem - - openssl - - ffmpeg diff --git a/docs/examples/patching-libpng.md b/docs/examples/patching-libpng.md deleted file mode 100644 index 2337b73da..000000000 --- a/docs/examples/patching-libpng.md +++ /dev/null @@ -1,204 +0,0 @@ -## Example 3: Patching libpng to work for x86-uwp - -### Initial error logs -First, try building: - -```no-highlight -PS D:\src\vcpkg> vcpkg install libpng:x86-uwp --- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-uwp --- DOWNLOADS=D:/src/vcpkg/downloads --- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/libpng_x86-uwp --- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/libpng --- CURRENT_PORT_DIR=D:/src/vcpkg/ports/libpng/. --- Using cached D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz --- Extracting done --- Configuring x86-uwp-rel --- Configuring x86-uwp-rel done --- Configuring x86-uwp-dbg --- Configuring x86-uwp-dbg done --- Build x86-uwp-rel -CMake Error at scripts/cmake/execute_required_process.cmake:14 (message): - Command failed: C:/Program - Files/CMake/bin/cmake.exe;--build;.;--config;Release - - Working Directory: D:/src/vcpkg/buildtrees/libpng/x86-uwp-rel - - See logs for more information: - - D:\src\vcpkg\buildtrees\libpng\build-x86-uwp-rel-out.log - D:\src\vcpkg\buildtrees\libpng\build-x86-uwp-rel-err.log - -Call Stack (most recent call first): - scripts/cmake/vcpkg_build_cmake.cmake:3 (execute_required_process) - ports/libpng/portfile.cmake:22 (vcpkg_build_cmake) - scripts/ports.cmake:84 (include) - - -Error: build command failed -``` - -Next, looking at the above logs (build-...-out.log and build-...-err.log). - -```no-highlight -// build-x86-uwp-rel-out.log -... -"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) -> -"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) -> -(ClCompile target) -> - D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24\pngerror.c(775): warning C4013: 'ExitProcess' undefined; assuming extern returning int [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj] - - -"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) -> -"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) -> -(Link target) -> - pngerror.obj : error LNK2019: unresolved external symbol _ExitProcess referenced in function _png_longjmp [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj] - D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\Release\libpng16.dll : fatal error LNK1120: 1 unresolved externals [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj] - - 1 Warning(s) - 2 Error(s) - -Time Elapsed 00:00:04.19 -``` - -### Identify the problematic code - -Taking a look at [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658(v=vs.85).aspx) shows that `ExitProcess` is only available for desktop apps. Additionally, it's useful to see the surrounding context: - -```c -/* buildtrees\libpng\src\libpng-1.6.24\pngerror.c:769 */ - /* If control reaches this point, png_longjmp() must not return. The only - * choice is to terminate the whole process (or maybe the thread); to do - * this the ANSI-C abort() function is used unless a different method is - * implemented by overriding the default configuration setting for - * PNG_ABORT(). - */ - PNG_ABORT(); -``` - -A recursive search for `PNG_ABORT` reveals the definition: -```no-highlight -PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> findstr /snipl "PNG_ABORT" * -CHANGES:701: Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros -libpng-manual.txt:432:errors will result in a call to PNG_ABORT() which defaults to abort(). -libpng-manual.txt:434:You can #define PNG_ABORT() to a function that does something -libpng-manual.txt:2753:errors will result in a call to PNG_ABORT() which defaults to abort(). -libpng-manual.txt:2755:You can #define PNG_ABORT() to a function that does something -libpng-manual.txt:4226:PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()), -libpng.3:942:errors will result in a call to PNG_ABORT() which defaults to abort(). -libpng.3:944:You can #define PNG_ABORT() to a function that does something -libpng.3:3263:errors will result in a call to PNG_ABORT() which defaults to abort(). -libpng.3:3265:You can #define PNG_ABORT() to a function that does something -libpng.3:4736:PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()), -png.h:994: * will use it; otherwise it will call PNG_ABORT(). This function was -pngerror.c:773: * PNG_ABORT(). -pngerror.c:775: PNG_ABORT(); -pngpriv.h:459:#ifndef PNG_ABORT -pngpriv.h:461:# define PNG_ABORT() ExitProcess(0) -pngpriv.h:463:# define PNG_ABORT() abort() -``` - -This already gives us some great clues, but the full definition tells the complete story. - -```c -/* buildtrees\libpng\src\libpng-1.6.24\pngpriv.h:459 */ -#ifndef PNG_ABORT -# ifdef _WINDOWS_ -# define PNG_ABORT() ExitProcess(0) -# else -# define PNG_ABORT() abort() -# endif -#endif -``` - -`abort()` is a standard CRT call and certainly available in UWP, so we just need to convince libpng to be more platform agnostic. The easiest and most reliable way to achieve this is to patch the code; while in this particular case we could pass in a compiler flag to override `PNG_ABORT` because this is a private header, in general it is more reliable to avoid adding more required compiler switches when possible (especially when it isn't already exposed as a CMake option). - -### Patching the code to improve compatibility - -We recommend using git to create the patch file, since you'll already have it installed. -```no-highlight -PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git init . -Initialized empty Git repository in D:/src/vcpkg/buildtrees/libpng/src/libpng-1.6.24/.git/ - -PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git add . -warning: LF will be replaced by CRLF in ANNOUNCE. -The file will have its original line endings in your working directory. -... - -PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git commit -m "temp" -[master (root-commit) 68f253f] temp - 422 files changed, 167717 insertions(+) -... -``` - -Now we can modify `pngpriv.h` to use `abort()` everywhere. -```c -/* buildtrees\libpng\src\libpng-1.6.24\pngpriv.h:459 */ -#ifndef PNG_ABORT -# define PNG_ABORT() abort() -#endif -``` - -The output of `git diff` is already in patch format, so we just need to save the patch into the `ports/libpng` directory. -```no-highlight -PS buildtrees\libpng\src\libpng-1.6.24> git diff | out-file -enc ascii ..\..\..\..\ports\libpng\use-abort-on-all-platforms.patch -``` - -Finally, we need to apply the patch after extracting the source. -```cmake -# ports\libpng\portfile.cmake -... -vcpkg_extract_source_archive(${ARCHIVE}) - -vcpkg_apply_patches( - SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/libpng-1.6.24 - PATCHES "${CMAKE_CURRENT_LIST_DIR}/use-abort-on-all-platforms.patch" -) - -vcpkg_configure_cmake( -... -``` - -### Verification - -To be completely sure this works from scratch, we need to remove the package and rebuild it: - -```no-highlight -PS D:\src\vcpkg> vcpkg remove libpng:x86-uwp -Package libpng:x86-uwp was successfully removed -``` -and complete delete the building directory: D:\src\vcpkg\buildtrees\libpng - -Now we try a fresh, from scratch install. -```no-highlight -PS D:\src\vcpkg> vcpkg install libpng:x86-uwp --- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-uwp --- DOWNLOADS=D:/src/vcpkg/downloads --- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/libpng_x86-uwp --- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/libpng --- CURRENT_PORT_DIR=D:/src/vcpkg/ports/libpng/. --- Using cached D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz --- Extracting source D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz --- Extracting done --- Configuring x86-uwp-rel --- Configuring x86-uwp-rel done --- Configuring x86-uwp-dbg --- Configuring x86-uwp-dbg done --- Build x86-uwp-rel --- Build x86-uwp-rel done --- Build x86-uwp-dbg --- Build x86-uwp-dbg done --- Package x86-uwp-rel --- Package x86-uwp-rel done --- Package x86-uwp-dbg --- Package x86-uwp-dbg done -Package libpng:x86-uwp is installed -``` - -Finally, to fully commit and publish the changes, we need to bump the internal release number and add the patch file to source control, then make a Pull Request! - -```no-highlight -# ports\libpng\CONTROL -Source: libpng -Version: 1.6.24-1 -Build-Depends: zlib -``` diff --git a/docs/examples/patching.md b/docs/examples/patching.md new file mode 100644 index 000000000..98115400e --- /dev/null +++ b/docs/examples/patching.md @@ -0,0 +1,204 @@ +## Patching Example: Patching libpng to work for x86-uwp + +### Initial error logs +First, try building: + +```no-highlight +PS D:\src\vcpkg> vcpkg install libpng:x86-uwp +-- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-uwp +-- DOWNLOADS=D:/src/vcpkg/downloads +-- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/libpng_x86-uwp +-- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/libpng +-- CURRENT_PORT_DIR=D:/src/vcpkg/ports/libpng/. +-- Using cached D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz +-- Extracting done +-- Configuring x86-uwp-rel +-- Configuring x86-uwp-rel done +-- Configuring x86-uwp-dbg +-- Configuring x86-uwp-dbg done +-- Build x86-uwp-rel +CMake Error at scripts/cmake/execute_required_process.cmake:14 (message): + Command failed: C:/Program + Files/CMake/bin/cmake.exe;--build;.;--config;Release + + Working Directory: D:/src/vcpkg/buildtrees/libpng/x86-uwp-rel + + See logs for more information: + + D:\src\vcpkg\buildtrees\libpng\build-x86-uwp-rel-out.log + D:\src\vcpkg\buildtrees\libpng\build-x86-uwp-rel-err.log + +Call Stack (most recent call first): + scripts/cmake/vcpkg_build_cmake.cmake:3 (execute_required_process) + ports/libpng/portfile.cmake:22 (vcpkg_build_cmake) + scripts/ports.cmake:84 (include) + + +Error: build command failed +``` + +Next, looking at the above logs (build-...-out.log and build-...-err.log). + +```no-highlight +// build-x86-uwp-rel-out.log +... +"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) -> +"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) -> +(ClCompile target) -> + D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24\pngerror.c(775): warning C4013: 'ExitProcess' undefined; assuming extern returning int [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj] + + +"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\ALL_BUILD.vcxproj" (default target) (1) -> +"D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj" (default target) (3) -> +(Link target) -> + pngerror.obj : error LNK2019: unresolved external symbol _ExitProcess referenced in function _png_longjmp [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj] + D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\Release\libpng16.dll : fatal error LNK1120: 1 unresolved externals [D:\src\vcpkg\buildtrees\libpng\x86-uwp-rel\png.vcxproj] + + 1 Warning(s) + 2 Error(s) + +Time Elapsed 00:00:04.19 +``` + +### Identify the problematic code + +Taking a look at [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658(v=vs.85).aspx) shows that `ExitProcess` is only available for desktop apps. Additionally, it's useful to see the surrounding context: + +```c +/* buildtrees\libpng\src\libpng-1.6.24\pngerror.c:769 */ + /* If control reaches this point, png_longjmp() must not return. The only + * choice is to terminate the whole process (or maybe the thread); to do + * this the ANSI-C abort() function is used unless a different method is + * implemented by overriding the default configuration setting for + * PNG_ABORT(). + */ + PNG_ABORT(); +``` + +A recursive search for `PNG_ABORT` reveals the definition: +```no-highlight +PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> findstr /snipl "PNG_ABORT" * +CHANGES:701: Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros +libpng-manual.txt:432:errors will result in a call to PNG_ABORT() which defaults to abort(). +libpng-manual.txt:434:You can #define PNG_ABORT() to a function that does something +libpng-manual.txt:2753:errors will result in a call to PNG_ABORT() which defaults to abort(). +libpng-manual.txt:2755:You can #define PNG_ABORT() to a function that does something +libpng-manual.txt:4226:PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()), +libpng.3:942:errors will result in a call to PNG_ABORT() which defaults to abort(). +libpng.3:944:You can #define PNG_ABORT() to a function that does something +libpng.3:3263:errors will result in a call to PNG_ABORT() which defaults to abort(). +libpng.3:3265:You can #define PNG_ABORT() to a function that does something +libpng.3:4736:PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()), +png.h:994: * will use it; otherwise it will call PNG_ABORT(). This function was +pngerror.c:773: * PNG_ABORT(). +pngerror.c:775: PNG_ABORT(); +pngpriv.h:459:#ifndef PNG_ABORT +pngpriv.h:461:# define PNG_ABORT() ExitProcess(0) +pngpriv.h:463:# define PNG_ABORT() abort() +``` + +This already gives us some great clues, but the full definition tells the complete story. + +```c +/* buildtrees\libpng\src\libpng-1.6.24\pngpriv.h:459 */ +#ifndef PNG_ABORT +# ifdef _WINDOWS_ +# define PNG_ABORT() ExitProcess(0) +# else +# define PNG_ABORT() abort() +# endif +#endif +``` + +`abort()` is a standard CRT call and certainly available in UWP, so we just need to convince libpng to be more platform agnostic. The easiest and most reliable way to achieve this is to patch the code; while in this particular case we could pass in a compiler flag to override `PNG_ABORT` because this is a private header, in general it is more reliable to avoid adding more required compiler switches when possible (especially when it isn't already exposed as a CMake option). + +### Patching the code to improve compatibility + +We recommend using git to create the patch file, since you'll already have it installed. +```no-highlight +PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git init . +Initialized empty Git repository in D:/src/vcpkg/buildtrees/libpng/src/libpng-1.6.24/.git/ + +PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git add . +warning: LF will be replaced by CRLF in ANNOUNCE. +The file will have its original line endings in your working directory. +... + +PS D:\src\vcpkg\buildtrees\libpng\src\libpng-1.6.24> git commit -m "temp" +[master (root-commit) 68f253f] temp + 422 files changed, 167717 insertions(+) +... +``` + +Now we can modify `pngpriv.h` to use `abort()` everywhere. +```c +/* buildtrees\libpng\src\libpng-1.6.24\pngpriv.h:459 */ +#ifndef PNG_ABORT +# define PNG_ABORT() abort() +#endif +``` + +The output of `git diff` is already in patch format, so we just need to save the patch into the `ports/libpng` directory. +```no-highlight +PS buildtrees\libpng\src\libpng-1.6.24> git diff | out-file -enc ascii ..\..\..\..\ports\libpng\use-abort-on-all-platforms.patch +``` + +Finally, we need to apply the patch after extracting the source. +```cmake +# ports\libpng\portfile.cmake +... +vcpkg_extract_source_archive(${ARCHIVE}) + +vcpkg_apply_patches( + SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/libpng-1.6.24 + PATCHES "${CMAKE_CURRENT_LIST_DIR}/use-abort-on-all-platforms.patch" +) + +vcpkg_configure_cmake( +... +``` + +### Verification + +To be completely sure this works from scratch, we need to remove the package and rebuild it: + +```no-highlight +PS D:\src\vcpkg> vcpkg remove libpng:x86-uwp +Package libpng:x86-uwp was successfully removed +``` +and complete delete the building directory: D:\src\vcpkg\buildtrees\libpng + +Now we try a fresh, from scratch install. +```no-highlight +PS D:\src\vcpkg> vcpkg install libpng:x86-uwp +-- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-uwp +-- DOWNLOADS=D:/src/vcpkg/downloads +-- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/libpng_x86-uwp +-- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/libpng +-- CURRENT_PORT_DIR=D:/src/vcpkg/ports/libpng/. +-- Using cached D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz +-- Extracting source D:/src/vcpkg/downloads/libpng-1.6.24.tar.xz +-- Extracting done +-- Configuring x86-uwp-rel +-- Configuring x86-uwp-rel done +-- Configuring x86-uwp-dbg +-- Configuring x86-uwp-dbg done +-- Build x86-uwp-rel +-- Build x86-uwp-rel done +-- Build x86-uwp-dbg +-- Build x86-uwp-dbg done +-- Package x86-uwp-rel +-- Package x86-uwp-rel done +-- Package x86-uwp-dbg +-- Package x86-uwp-dbg done +Package libpng:x86-uwp is installed +``` + +Finally, to fully commit and publish the changes, we need to bump the internal release number and add the patch file to source control, then make a Pull Request! + +```no-highlight +# ports\libpng\CONTROL +Source: libpng +Version: 1.6.24-1 +Build-Depends: zlib +``` diff --git a/docs/examples/using-sqlite.md b/docs/examples/using-sqlite.md deleted file mode 100644 index 35da141d0..000000000 --- a/docs/examples/using-sqlite.md +++ /dev/null @@ -1,177 +0,0 @@ -# Example: Using Sqlite - - - [Step 1: Install](#install) - - [Step 2: Use](#use) - - [VS/MSBuild Project (User-wide integration)](#msbuild) - - [CMake (Toolchain file)](#cmake) - - [Other integration options](../users/integration.md) - ---- - -## Step 1: Install - -First, we need to know what name [Sqlite](https://sqlite.org) goes by in the ports tree. To do that, we'll run the `search` command and inspect the output: -```no-highlight -PS D:\src\vcpkg> .\vcpkg search sqlite -libodb-sqlite 2.4.0 Sqlite support for the ODB ORM library -sqlite3 3.15.0 SQLite is a software library that implements a se... - -If your library is not listed, please open an issue at: - https://github.com/Microsoft/vcpkg/issues -``` -Looking at the list, we can see that the port is named "sqlite3". You can also run the `search` command without arguments to see the full list of packages. - -Installing is then as simple as using the `install` command. -```no-highlight -PS D:\src\vcpkg> .\vcpkg install sqlite3 --- CURRENT_INSTALLED_DIR=D:/src/vcpkg/installed/x86-windows --- DOWNLOADS=D:/src/vcpkg/downloads --- CURRENT_PACKAGES_DIR=D:/src/vcpkg/packages/sqlite3_x86-windows --- CURRENT_BUILDTREES_DIR=D:/src/vcpkg/buildtrees/sqlite3 --- CURRENT_PORT_DIR=D:/src/vcpkg/ports/sqlite3/. --- Downloading https://sqlite.org/2016/sqlite-amalgamation-3150000.zip... --- Downloading https://sqlite.org/2016/sqlite-amalgamation-3150000.zip... OK --- Testing integrity of downloaded file... --- Testing integrity of downloaded file... OK --- Extracting source D:/src/vcpkg/downloads/sqlite-amalgamation-3150000.zip --- Extracting done --- Configuring x86-windows-rel --- Configuring x86-windows-rel done --- Configuring x86-windows-dbg --- Configuring x86-windows-dbg done --- Build x86-windows-rel --- Build x86-windows-rel done --- Build x86-windows-dbg --- Build x86-windows-dbg done --- Package x86-windows-rel --- Package x86-windows-rel done --- Package x86-windows-dbg --- Package x86-windows-dbg done --- Performing post-build validation --- Performing post-build validation done -Package sqlite3:x86-windows is installed -``` - -We can check that sqlite3 was successfully installed for x86 windows desktop by running the `list` command. -```no-highlight -PS D:\src\vcpkg> .\vcpkg list -sqlite3:x86-windows 3.15.0 SQLite is a software library that implements a se... -``` - -To install for other architectures and platforms such as Universal Windows Platform or x64 Desktop, you can suffix the package name with `:`. -```no-highlight -PS D:\src\vcpkg> .\vcpkg install sqlite3:x86-uwp zlib:x64-windows -``` - -See `.\vcpkg help triplet` for all supported targets. - ---- - -## Step 2: Use - -#### VS/MSBuild Project (User-wide integration) - -The recommended and most productive way to use vcpkg is via user-wide integration, making the system available for all projects you build. The user-wide integration will prompt for administrator access the first time it is used on a given machine, but afterwards is no longer required and the integration is configured on a per-user basis. -```no-highlight -PS D:\src\vcpkg> .\vcpkg integrate install -Applied user-wide integration for this vcpkg root. - -All C++ projects can now #include any installed libraries. -Linking will be handled automatically. -Installing new libraries will make them instantly available. -``` -*Note: You will need to restart Visual Studio or perform a Build to update intellisense with the changes.* - -You can now simply use File -> New Project in Visual Studio 2015 or Visual Studio 2017 and the library will be automatically available. For Sqlite, you can try out their [C/C++ sample](https://sqlite.org/quickstart.html). - -To remove the integration for your user, you can use `.\vcpkg integrate remove`. - - -#### CMake (Toolchain File) - -The best way to use installed libraries with cmake is via the toolchain file `scripts\buildsystems\vcpkg.cmake`. To use this file, you simply need to add it onto your CMake command line as `-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake`. - -If you are using CMake through Open Folder with Visual Studio 2017 you can define `CMAKE_TOOLCHAIN_FILE` by adding a "variables" section to each of your `CMakeSettings.json` configurations: - -```json -{ - "configurations": [{ - "name": "x86-Debug", - "generator": "Visual Studio 15 2017", - "configurationType" : "Debug", - "buildRoot": "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "-m -v:minimal", - "variables": [{ - "name": "CMAKE_TOOLCHAIN_FILE", - "value": "D:\\src\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" - }] - }] -} -``` - -Now let's make a simple CMake project with a main file. -```cmake -# CMakeLists.txt -cmake_minimum_required(VERSION 3.0) -project(test) - -find_package(Sqlite3 REQUIRED) - -add_executable(main main.cpp) -target_link_libraries(main sqlite3) -``` -```cpp -// main.cpp -#include -#include - -int main() -{ - printf("%s\n", sqlite3_libversion()); - return 0; -} -``` - -Then, we build our project in the normal CMake way: -```no-highlight -PS D:\src\cmake-test> mkdir build -PS D:\src\cmake-test> cd build -PS D:\src\cmake-test\build> cmake .. "-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake" - // omitted CMake output here // --- Build files have been written to: D:/src/cmake-test/build -PS D:\src\cmake-test\build> cmake --build . - // omitted MSBuild output here // -Build succeeded. - 0 Warning(s) - 0 Error(s) - -Time Elapsed 00:00:02.38 -PS D:\src\cmake-test\build> .\Debug\main.exe -3.15.0 -``` - -*Note: The correct sqlite3.dll is automatically copied to the output folder when building for x86-windows. You will need to distribute this along with your application.* - -##### Handling libraries without native cmake support - -Unlike other platforms, we do not automatically add the `include\` directory to your compilation line by default. If you're using a library that does not provide CMake integration, you will need to explicitly search for the files and add them yourself using [`find_path()`][1] and [`find_library()`][2]. - -```cmake -# To find and use catch -find_path(CATCH_INCLUDE_DIR catch.hpp) -include_directories(${CATCH_INCLUDE_DIR}) - -# To find and use azure-storage-cpp -find_path(WASTORAGE_INCLUDE_DIR was/blob.h) -find_library(WASTORAGE_LIBRARY wastorage) -include_directories(${WASTORAGE_INCLUDE_DIR}) -link_libraries(${WASTORAGE_LIBRARY}) - -# Note that we recommend using the target-specific directives for a cleaner cmake: -# target_include_directories(main ${LIBRARY}) -# target_link_libraries(main PRIVATE ${LIBRARY}) -``` - -[1]: https://cmake.org/cmake/help/latest/command/find_path.html -[2]: https://cmake.org/cmake/help/latest/command/find_library.html diff --git a/docs/index.md b/docs/index.md index 90245d36a..d7b104ebc 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,13 +2,13 @@ Vcpkg helps you manage C and C++ libraries on Windows, Linux and MacOS. This tool and ecosystem are constantly evolving; your involvement are vital to its success! -- [How to use Sqlite in your application](examples/using-sqlite.md) +- [Installing and Using Packages Example: sqlite](examples/installing-and-using-packages.md) ### Examples -- [Example 1: Using Sqlite](examples/using-sqlite.md) -- [Example 2: Packaging zlib](examples/packaging-zlib.md) -- [Example 3: Patching libpng for x86-uwp](examples/patching-libpng.md) +- [Installing and Using Packages Example: sqlite](examples/installing-and-using-packages.md) +- [Packaging Zipfiles Example: zlib](examples/packaging-zipfiles.md) +- [Patching Example: Patching libpng to work for x86-uwp](examples/patching.md) ### User Help diff --git a/docs/users/integration.md b/docs/users/integration.md index ce52abe23..fbaea41d9 100644 --- a/docs/users/integration.md +++ b/docs/users/integration.md @@ -35,7 +35,7 @@ cmake ../my/project -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.c ``` Projects configured with the Vcpkg toolchain file will have the appropriate Vcpkg folders added to the cmake search paths. This makes all libraries available to be found through `find_package()`, `find_path()`, and `find_library()`. -See [Example: Using Sqlite](../examples/using-sqlite.md) for a fully worked example using our CMake toolchain. +See [Installing and Using Packages Example: sqlite](../examples/installing-and-using-packages.md) for a fully worked example using our CMake toolchain. Note that we do not automatically add ourselves to your compiler include paths. To use a header-only library, simply use `find_path()`, which will correctly work on all platforms: ```cmake -- cgit v1.2.3 From 077b7f1378537478ec97a57af664ebba2efc0c86 Mon Sep 17 00:00:00 2001 From: Simon Brand Date: Fri, 16 Nov 2018 11:24:19 +0000 Subject: Add packaging GitHub repo example --- README.md | 2 +- docs/about/faq.md | 2 +- docs/examples/packaging-github-repos.md | 59 +++++++++++++++++++++++++++++++++ docs/index.md | 1 + 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 docs/examples/packaging-github-repos.md diff --git a/README.md b/README.md index e0267bce4..0aef78d56 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ and restart Powershell. ## Examples -See the [documentation](docs/index.md) for specific walkthroughs, including [installing and using a package](docs/examples/installing-and-using-packages.md) and [adding a new package](docs/examples/packaging-zipfiles.md). +See the [documentation](docs/index.md) for specific walkthroughs, including [installing and using a package](docs/examples/installing-and-using-packages.md), [adding a new package from a zipfile](docs/examples/packaging-zipfiles.md), and [adding a new package from a GitHub repo](docl/examples/packaging-github-repos.md). Our docs are now also available online at ReadTheDocs: ! diff --git a/docs/about/faq.md b/docs/about/faq.md index 57b908f48..b7c9d67c8 100644 --- a/docs/about/faq.md +++ b/docs/about/faq.md @@ -10,7 +10,7 @@ Yes! See [the `export` command](../users/integration.md#export). The `vcpkg update` command lists all packages which are out-of-sync with your current portfiles. To update a package, follow the instructions in the command. ## How do I get more libraries? -The list of libraries is enumerated from the [`ports\`](https://github.com/Microsoft/vcpkg/blob/master/ports) directory. By design, you can add and remove libraries from this directory as you see fit for yourself or your company -- see our [packaging example](../examples/packaging-zipfiles.md). +The list of libraries is enumerated from the [`ports\`](https://github.com/Microsoft/vcpkg/blob/master/ports) directory. By design, you can add and remove libraries from this directory as you see fit for yourself or your company -- see our examples on packaging [zipfiles](../examples/packaging-zipfiles.md) and [GitHub repos](../examples/packaging-github-repos.md). We recommend cloning directly from [GitHub](https://github.com/microsoft/vcpkg) and using `git pull` to update the list of portfiles. Once you've updated your portfiles, `vcpkg update` will indicate any installed libraries that are now out of date. diff --git a/docs/examples/packaging-github-repos.md b/docs/examples/packaging-github-repos.md new file mode 100644 index 000000000..af2e6141a --- /dev/null +++ b/docs/examples/packaging-github-repos.md @@ -0,0 +1,59 @@ +## Packaging Github Repos Example: libogg +### Create the CONTROL file +The `CONTROL` file is a simple set of fields describing the package's metadata. + +*For libogg, we'll create the file `ports\libogg\CONTROL` with the following contents:* +```no-highlight +Source: libogg +Version: 1.3.3 +Description: Ogg is a multimedia container format, and the native file and stream format for the Xiph.org multimedia codecs. +``` + +### Create the portfile +`portfile.cmake` describes how to build and install the package. First we include `vcpkg_common_functions` to give us utilities for carrying this out: + +```no-highlight +include(vcpkg_common_functions) +``` + +Now we download the project from Github with [`vcpkg_from_github`](../maintainers/vcpkg_from_github.md): + +```no-highlight +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO xiph/ogg + REF v1.3.3 + SHA512 0bd6095d647530d4cb1f509eb5e99965a25cc3dd9b8125b93abd6b248255c890cf20710154bdec40568478eb5c4cde724abfb2eff1f3a04e63acef0fbbc9799b + HEAD_REF master +) +``` + +The important parts to update are `REPO` for the GitHub repository path, `REF` for a stable tag/commit to use, and `SHA512` with the checksum of the downloaded zipfile (you can get this easily by setting it to `1`, trying to install the package, and copying the checksum). + +Finally, we configure the project with CMake, install the package, and copy over the license file: + +```no-highlight +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA +) +vcpkg_install_cmake() +file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/libogg RENAME copyright) +``` + +Check the documentation for [`vcpkg_configure_cmake`](../maintainers/vcpkg_configure_cmake.md) and [`vcpkg_install_cmake`](../maintainers/vcpkg_install_cmake.md) if your package needs additional options. + +Now you can run `vcpkg install libogg` to build and install the package. + +### Suggested example portfiles +In the `ports\` directory are many libraries that can be used as examples, including many that are not based on CMake. + +- Header only libraries + - rapidjson + - range-v3 +- MSBuild-based + - cppunit + - mpg123 +- Non-CMake, custom buildsystem + - openssl + - ffmpeg diff --git a/docs/index.md b/docs/index.md index d7b104ebc..69dbdcd1e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,6 +8,7 @@ Vcpkg helps you manage C and C++ libraries on Windows, Linux and MacOS. This too - [Installing and Using Packages Example: sqlite](examples/installing-and-using-packages.md) - [Packaging Zipfiles Example: zlib](examples/packaging-zipfiles.md) +- [Packaging GitHub Repositories Example: libogg](examples/packaging-github-repos.md) - [Patching Example: Patching libpng to work for x86-uwp](examples/patching.md) ### User Help -- cgit v1.2.3 From dc8503bb02ba8afc7641f53fd25d1566d44a9f41 Mon Sep 17 00:00:00 2001 From: Simon Brand Date: Fri, 16 Nov 2018 15:04:10 +0000 Subject: Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0aef78d56..eca2ea365 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ and restart Powershell. ## Examples -See the [documentation](docs/index.md) for specific walkthroughs, including [installing and using a package](docs/examples/installing-and-using-packages.md), [adding a new package from a zipfile](docs/examples/packaging-zipfiles.md), and [adding a new package from a GitHub repo](docl/examples/packaging-github-repos.md). +See the [documentation](docs/index.md) for specific walkthroughs, including [installing and using a package](docs/examples/installing-and-using-packages.md), [adding a new package from a zipfile](docs/examples/packaging-zipfiles.md), and [adding a new package from a GitHub repo](docs/examples/packaging-github-repos.md). Our docs are now also available online at ReadTheDocs: ! -- cgit v1.2.3 From 56c6d87c60d613c28a182f417acb1de624514d84 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 16 Nov 2018 12:03:07 -0800 Subject: bump version in CONTROL file --- ports/berkeleydb/CONTROL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/berkeleydb/CONTROL b/ports/berkeleydb/CONTROL index 18eaae5d9..e77e5793a 100644 --- a/ports/berkeleydb/CONTROL +++ b/ports/berkeleydb/CONTROL @@ -1,3 +1,3 @@ Source: berkeleydb -Version: 4.8.30-1 +Version: 4.8.30-2 Description: A high-performance embedded database for key/value data. -- cgit v1.2.3 From 8bf211d52f747041740d8621399499e3a549d1bb Mon Sep 17 00:00:00 2001 From: kyp Date: Mon, 19 Nov 2018 17:51:30 +0100 Subject: new port: stlab (at v1.3.3) --- ports/stlab/CONTROL | 5 +++++ ports/stlab/portfile.cmake | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 ports/stlab/CONTROL create mode 100644 ports/stlab/portfile.cmake diff --git a/ports/stlab/CONTROL b/ports/stlab/CONTROL new file mode 100644 index 000000000..c1a752a5e --- /dev/null +++ b/ports/stlab/CONTROL @@ -0,0 +1,5 @@ +Source: stlab +Version: 1.3.3 +Description: + stlab is the ongoing work of what was Adobe’s Software Technology Lab. + The Concurrency library provides futures and channels, high level constructs for implementing algorithms that eases the use of multiple CPU cores while minimizing contention. This library solves several problems of the C++11 and C++17 TS futures. \ No newline at end of file diff --git a/ports/stlab/portfile.cmake b/ports/stlab/portfile.cmake new file mode 100644 index 000000000..a2bd71e56 --- /dev/null +++ b/ports/stlab/portfile.cmake @@ -0,0 +1,24 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO stlab/libraries + REF v1.3.3 + SHA512 2c0eec5638b40f8285cc3b0d756df619b53ba44421c47713aaf45196100765a31a6aea3c5bedba4fcc44494b74e3f0a919271601e717e7f274fe15beb93f8889 + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS + -DBUILD_TESTING=OFF +) + +vcpkg_install_cmake() + +# cleanup +file(RENAME ${CURRENT_PACKAGES_DIR}/share/cmake/stlab ${CURRENT_PACKAGES_DIR}/share/stlab) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug ${CURRENT_PACKAGES_DIR}/share/cmake) + +# handle copyright +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/stlab RENAME copyright) \ No newline at end of file -- cgit v1.2.3 From 5f4af89cff6f32b8f754a6bf920632a898bc868c Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Mon, 19 Nov 2018 17:16:29 -0800 Subject: [vcpkg] Improve error messages while installing --- toolsrc/src/vcpkg/dependencies.cpp | 60 +++++++++++++++++--------------------- toolsrc/src/vcpkg/tools.cpp | 2 -- 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/toolsrc/src/vcpkg/dependencies.cpp b/toolsrc/src/vcpkg/dependencies.cpp index 8fb35b0da..8f2b4eaef 100644 --- a/toolsrc/src/vcpkg/dependencies.cpp +++ b/toolsrc/src/vcpkg/dependencies.cpp @@ -488,26 +488,24 @@ namespace vcpkg::Dependencies if (plus) return MarkPlusResult::SUCCESS; plus = true; + auto p_source = cluster.source.get(); + if (!p_source) + { + Checks::exit_with_message( + VCPKG_LINE_INFO, "Error: Cannot find definition for package `%s`.", cluster.spec.name()); + } + if (feature.empty()) { // Add default features for this package. This is an exact reference, so ignore prevent_default_features. - if (auto p_source = cluster.source.get()) + for (auto&& default_feature : p_source->scf->core_paragraph.get()->default_features) { - for (auto&& default_feature : p_source->scf->core_paragraph.get()->default_features) + auto res = mark_plus(default_feature, cluster, graph, graph_plan, prevent_default_features); + if (res != MarkPlusResult::SUCCESS) { - auto res = mark_plus(default_feature, cluster, graph, graph_plan, prevent_default_features); - if (res != MarkPlusResult::SUCCESS) - { - return res; - } + return res; } } - else - { - Checks::exit_with_message(VCPKG_LINE_INFO, - "Error: Unable to install default features because can't find CONTROL for %s", - cluster.spec); - } // "core" is always required. return mark_plus("core", cluster, graph, graph_plan, prevent_default_features); @@ -515,28 +513,20 @@ namespace vcpkg::Dependencies if (feature == "*") { - if (auto p_source = cluster.source.get()) + for (auto&& fpgh : p_source->scf->feature_paragraphs) { - for (auto&& fpgh : p_source->scf->feature_paragraphs) - { - auto res = mark_plus(fpgh->name, cluster, graph, graph_plan, prevent_default_features); + auto res = mark_plus(fpgh->name, cluster, graph, graph_plan, prevent_default_features); - Checks::check_exit(VCPKG_LINE_INFO, - res == MarkPlusResult::SUCCESS, - "Error: Unable to locate feature %s in %s", - fpgh->name, - cluster.spec); - } + Checks::check_exit(VCPKG_LINE_INFO, + res == MarkPlusResult::SUCCESS, + "Error: Internal error while installing feature %s in %s", + fpgh->name, + cluster.spec); + } - auto res = mark_plus("core", cluster, graph, graph_plan, prevent_default_features); + auto res = mark_plus("core", cluster, graph, graph_plan, prevent_default_features); - Checks::check_exit(VCPKG_LINE_INFO, res == MarkPlusResult::SUCCESS); - } - else - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: Unable to handle '*' because can't find CONTROL for %s", cluster.spec); - } + Checks::check_exit(VCPKG_LINE_INFO, res == MarkPlusResult::SUCCESS); return MarkPlusResult::SUCCESS; } @@ -643,7 +633,7 @@ namespace vcpkg::Dependencies } /// Figure out which actions are required to install features specifications in `specs`. - /// Map of all source files in the current environment. + /// Map of all source control files in the current environment. /// Feature specifications to resolve dependencies for. /// Status of installed packages in the current environment. std::vector create_feature_install_plan(const std::unordered_map& map, @@ -666,7 +656,11 @@ namespace vcpkg::Dependencies auto res = mark_plus(spec.feature(), spec_cluster, *m_graph, *m_graph_plan, prevent_default_features); - Checks::check_exit(VCPKG_LINE_INFO, res == MarkPlusResult::SUCCESS, "Error: Unable to locate feature %s", spec); + Checks::check_exit(VCPKG_LINE_INFO, + res == MarkPlusResult::SUCCESS, + "Error: `%s` is not a feature of package `%s`", + spec.feature(), + spec.name()); m_graph_plan->install_graph.add_vertex(ClusterPtr{&spec_cluster}); } diff --git a/toolsrc/src/vcpkg/tools.cpp b/toolsrc/src/vcpkg/tools.cpp index e28291428..f4ee2d653 100644 --- a/toolsrc/src/vcpkg/tools.cpp +++ b/toolsrc/src/vcpkg/tools.cpp @@ -193,7 +193,6 @@ namespace vcpkg System::println("Downloading %s...", tool_name); System::println(" %s -> %s", tool_data.url, tool_data.download_path.string()); Downloads::download_file(fs, tool_data.url, tool_data.download_path, tool_data.sha512); - System::println("Downloading %s... done.", tool_name); } else { @@ -204,7 +203,6 @@ namespace vcpkg { System::println("Extracting %s...", tool_name); Archives::extract_archive(paths, tool_data.download_path, tool_data.tool_dir_path); - System::println("Extracting %s... done.", tool_name); } else { -- cgit v1.2.3