What’s New in vcpkg (April 2024)

Augustin Popa

What’s New in vcpkg (April 2024)

This blog post summarizes changes to the vcpkg package manager as part of the 2024.04.26 release as well as changes to vcpkg documentation throughout April. This month’s vcpkg release includes improvements for visually generated dependency graphs, a new triplet variable for tweaking what files are considered by the ABI hashing algorithm, several changes to our documentation, and some performance and bug fixes.

Some stats for this period:

  • There are now 2,426 total ports available in the vcpkg public registry. A port is a versioned recipe for building a package from source, such as a C or C++ library.
  • 12 new ports were added to the open-source registry.
  • 279 updates were made to existing ports. As always, we validate each change to a port by building all other ports that depend on or are depended by the library that is being updated for our 13 main triplets.
  • 16 contributors submitted PRs, issues, or participated in discussions in the main repo.
  • The main vcpkg repo has over 6,000 forks and 21,700 stars on GitHub.

 

An overview of vcpkg in 10 minutes

For the Pure Virtual C++ conference this year, I gave an overview of vcpkg in just under 10 minutes. You can check out the video below:

vcpkg changelog (2024.04.26 release)

The following changes were made in the April release:

 

vcpkg depend-info improvements

The vcpkg depend-info command displays dependencies for a set of port packages in one of multiple possible visual forms. Several improvements were made to this feature by our community contributor @dg0yt.

 

Multi-package, triplet, and features support

Added support for displaying multiple packages, including triplets and optional features (documentation). Examples:

$ vcpkg depend-info zlib
vcpkg-cmake:
zlib: vcpkg-cmake
$ vcpkg depend-info zlib:arm64-linux
vcpkg-cmake:
zlib:arm64-linux: vcpkg-cmake
$ vcpkg depend-info zlib:arm64-linux zlib --triplet x64-linux --host-triplet x64-linux-dynamic
vcpkg-cmake:host:
zlib:arm64-linux: vcpkg-cmake:host
zlib: vcpkg-cmake:host

 

Improved readability for depend-info –dot

Improved readability for depend-info –dot output with added line breaks and a change to the “Sans” font. Example:

$ vcpkg depend-info --dot ableton-link
digraph G{ rankdir=LR; node [fontname=Sans]; edge [minlen=3]; overlap=false;
"ableton";
"ableton" -> "ableton-link";
"ableton-link";
"ableton-link" -> "asio";
"ableton-link" -> "vcpkg-cmake";
"ableton-link" -> "vcpkg-cmake-config";
"asio";
"asio" -> "vcpkg-cmake";
"asio" -> "vcpkg-cmake-config";
"vcpkg-cmake";
"vcpkg-cmake-config";
"2 singletons...";
}

A diagram of a diagram Description automatically generated

 

Colorization by triplet type

Multi-triplet graphs generated with the “dot” format are now colorized based on whether they are a default triplet, custom triplet, or host triplet. Example:

$ vcpkg depend-info proj:arm64-linux proj tiff[core] –triplet x64-linux-dynamic –dot | dot -Tpng -oimg.png && xdg-open img.png

A diagram of a diagram Description automatically generated

PRs: Microsoft/vcpkg-tool#1369, Microsoft/vcpkg-tool#1370, Microsoft/vcpkg-tool#1371, thanks @dg0yt!

 

New triplet variable: VCPKG_HASH_ADDITIONAL_FILES

Added variable VCPKG_HASH_ADDITIONAL_FILES for use in triplet files (documentation). This allows you to provide a list of files to include in the calculation of package ABI hashes, giving you more fine-tuned control over the binary caching experience (PR: Microsoft/vcpkg-tool#797, thanks @Neumann-A!).

 

Bug fixes and performance improvements

  • Fixed a performance regression where library information was being read twice and removed an unnecessary architecture check (PR: Microsoft/vcpkg-tool#1352, thanks @Thomas1664!).
  • Fixed a bug with default features sometimes getting applied when they were explicitly disabled in the top-level manifest (Originally reported issue: Microsoft/vcpkg/issues#35694. PR with fix: Microsoft/vcpkg-tool#1331, thanks @dg0yt!).

 

Documentation changes

  • Moved Glossary to a top-level node in the table of contents and added several new terms. The Glossary defines vcpkg-specific terms.
  • Added an example helper port in the Authoring script ports article to help clarify how it works.
  • Added a warning in multiple places in the documentation that when environment variables are set via a command, they will only apply to the current terminal session, not future sessions.
  • Added a CMake FetchContent section to the build failures troubleshooting guide. This addresses issues where FetchContent dependencies aren’t found during a build.
  • Added clarification about how toolset versions are matched to the triplets reference article (thanks @tsondergaard!).
  • Fixed some broken URLs.
  • Fixed various typos (thanks @xPaw, @alex-held, @fedorbirjukov!).

If you have any suggestions for our documentation, please submit an issue in our GitHub repo or see the box at the bottom of a particular article.

 

Total ports available for tested triplets

triplet ports available
x64-windows 2,281
x86-windows 2,195
x64-windows-static 2,176
x64-windows-static-md 2,203
arm64-windows 1,862
x64-uwp 1,270
arm64-uwp 1,235
x64-linux 2,249
x64-osx 2,138
arm64-osx 2,061
arm-neon-android 1,566
x64-android 1,618
arm64-android 1,592

While vcpkg supports a much larger variety of target platforms and architectures (as community triplets), the list above is validated exhaustively to ensure updated ports don’t break other ports in the catalog.

 

Thank you to our contributors

vcpkg couldn’t be where it is today without contributions from our open-source community. Thank you for your continued support! The following people contributed to the vcpkg, vcpkg-tool, or vcpkg-docs repos in this release:

  • dg0yt (27 commits)
  • jiayuehua (16 commits)
  • Neumann-A (8 commits)
  • miyanyan (5 commits)
  • talregev (5 commits)
  • waywardmonkeys (3 commits)
  • RT2Code (3 commits)
  • Thomas1664 (3 commits)
  • autoantwort (3 commits)
  • AenBleidd (2 commits)
  • xPaw (2 commits)
  • HappySeaFox (1 commit)
  • Honeybunch (1 commit)
  • alagoutte (1 commit)
  • Tradias (1 commit)
  • Pospelove (1 commit)
  • traversaro (1 commit)
  • luncliff (1 commit)
  • cenit (1 commit)
  • TrueBrain (1 commit)
  • fwcd (1 commit)
  • SchaichAlonso (1 commit)
  • JackBoosY (1 commit)
  • alex-held (1 commit)
  • fedorbirjukov (1 commit)
  • tsondergaard (1 commit)

 

Learn more

You can find the full 2024.04.26 release notes on GitHub for the main repo. Recent updates to the vcpkg tool can be viewed on the vcpkg-tool Releases page. To contribute to vcpkg documentation, visit the vcpkg-docs repo. If you’re new to vcpkg or curious about how a package manager can make your life easier as a C/C++ developer, check out the vcpkg website – vcpkg.io.

If you would like to contribute to vcpkg and its library catalog, or want to give us feedback on anything, check out our GitHub repo. Please report bugs or request updates to ports in our issue tracker or join more general discussion in our discussion forum.

0 comments

Leave a comment

Feedback usabilla icon