vcpkg June 2022 Release is Now Available: Force Download vcpkg Dependencies, Documentation Changes, and More
The June 2022 release of the vcpkg package manager is available. This includes a hotfix that fixed a regression in the binary caching experience. This blog post summarizes changes from May 11th, 2022 to June 15th, 2022 for the microsoft/vcpkg and microsoft/vcpkg-tool GitHub repos.
In the past month, the ISO C++ 2022 Annual Developer Survey results were released. We want to thank the C++ community for taking the time to provide feedback on vcpkg in the survey. This year, 19% (+4% year over year) of respondents indicated they were using vcpkg. We hope to see more and more of the community adopting package managers in their workflows going forward.
Some stats for this period:
- 20 new ports were added to the open-source registry. If you are unfamiliar with the term ‘port’, they are packages that are built from source and are typically C/C++ libraries.
- 292 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 nine main triplets.
- There are now 1,956 total libraries available in the vcpkg public registry. When including all available versions, there are 10,016 port versions (new milestone!).
- The June release of the main vcpkg repo includes 247 commits.
- 93 contributors submitted PRs, issues, or participated in discussions in the repo.
- The main vcpkg repo has 4.6k forks and 15.9k stars on GitHub.
Force vcpkg to download binary dependencies rather than use system ones
The vcpkg tool depends on several tools to do its work, including ninja and CMake. From the beginning, vcpkg has been able to download copies of these tools automatically does so by default if the tools are not detected on the system at an appropriate version. The downside of this is that in some cases, vcpkg may assume that an incompatible system version of a tool is valid and attempt to use it, only to fail.
In this release, we merged a PR from a community contributor that adds support for an environment variable called VCPKG_FORCE_DOWNLOADED_BINARIES. If this variable is set, vcpkg will ignore any existing system binaries and always download its own copies of the tools it depends on. This results in a more self-contained vcpkg that will reliably run across many machines with different OS flavors and system packages. This behavior is off by default however, so please set this variable if this is a scenario that interests you. Note: this environment variable is effectively the opposite of VCPKG_FORCE_SYSTEM_BINARIES, which always forces the use of system binaries.
We are revamping our documentation based on user feedback. Here is a summary of changes made in this release:
- New documentation article for the vcpkg install command.
- New documentation article for the vcpkg integrate command.
- New documentation article for the vcpkg search command.
- New documentation article for Common Command Options. This provides a reference for different options available for vcpkg commands run in the command line.
- New documentation in Environment and Configuration on the new environment variable: VCPKG_FORCE_DOWNLOADED_BINARIES.
- Split content on CMake, MSBuild, manual integration, and the export command into separate documentation articles.
- Added documentation describing criteria for vcpkg releases.
- Wording changes, fixed links, and other improvements for several other articles.
This is just the start of what will hopefully be a much longer list of changes over the coming months. We will continue to improve our documentation with each release.
Helper port for less common build systems
Through a community contribution by Neumann-A, the helper function vcpkg-cmake-get-vars was moved to its own port so it can be independently maintained and versioned. For context, this helper extracts compiler flags and paths to the compiler and linker so the user can build the port. If you are contributing or changing a port that uses a build system that we do not already have a helper for, this new port is for you.
Fixed vcpkg commands failing when a custom port is installed
Power users of vcpkg may be familiar with overlay ports, a feature that makes it possible to override ports with alternate versions. Users modifying the behavior of vcpkg itself may also be accustomed to switching between different branches in their fork of the vcpkg repo. Due to a bug, if you installed an overlay port or branch switched out of a branch with currently installed ports, then attempted to run a vcpkg command again (e.g. install or remove), vcpkg would throw an error, expecting the data about the custom-installed ports to be available despite the fact that it is no longer relevant to the new operation. Thanks to a community contribution, now when you run a command in this context, vcpkg will no longer fail.
Total Ports Available for Tested Triplets
While vcpkg supports a much larger variety of target platforms x architectures, the list above is routinely tested 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 and vcpkg-tool repos in this release:
- Thomas1664 (13 commits)
- Neumann-A (10 commits)
- autoantwort (10 commits)
- dg0yt (10 commits)
- Ryan-rsm-McKenzie (5 commits)
- DragonJoker (5 commits)
- m-kuhn (3 commits)
- Hoikas (3 commits)
- RT222 (3 commits)
- myd7349 (2 commits)
- winsoft666 (2 commits)
- hmoffatt (2 commits)
- AenBleidd (2 commits)
- daschuer (1 commit)
- eao197 (1 commit)
- yurybura (1 commit)
- danielaparker (1 commit)
- coryan (1 commit)
- longhuan2018 (1 commit)
- luncliff (1 commit)
- klalumiere (1 commit)
You can find the full June release notes on GitHub for the main repo. Recent updates to the vcpkg tool can be viewed on the vcpkg-tool Releases page. 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. For an overview of our top priorities and backlog, take a look at our roadmap page.