vcpkg July 2022 Release is Now Available: Shared Libraries on Linux, Improved vcpkg new, Optional name and version Fields, and More…
The July 2022 release of the vcpkg package manager is available. This blog post summarizes changes from June 16th, 2022 to July 24th, 2022 for the microsoft/vcpkg and microsoft/vcpkg-tool GitHub repos.
Some stats for this period:
- 15 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.
- 360 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,967 total libraries available in the vcpkg public registry. When including all available versions, there are 10,106 port versions.
- The July release of the main vcpkg repo includes 278 commits.
- 90 contributors submitted PRs, issues, or participated in discussions in the repo.
- The main vcpkg repo has 4.7k forks and 16.3k stars on GitHub.
Better support for shared libraries on Linux
This update includes a community triplet for installing shared libraries on Linux: x64-linux-dynamic. This was made possible by adding rpath support to make ports relocatable. After building a port, the binaries are patched to have correct rpath values relative to lib/ (or debug/lib/). This update is significant because it makes it much easier to handle shared libraries on Linux, meaning users don’t have to install libraries statically on Linux to get the best user experience.
PR: Microsoft/vcpkg#23035 (thank you @Osyotr!)
‘vcpkg new’ now generates both port and artifact manifest files
As part of the vcpkg artifacts experience, a new command called new was added that can generate a vcpkg-configuration.json file. The file is a manifest for artifacts that vcpkg can install for a project. In this update, the implementation was re-written in C++ and the command now also generates a vcpkg.json file for declaring ports for a project. It also fills in the default registry with the current baseline git SHA. Going forward, vcpkg new will be useful for configuring a project for use with vcpkg, whether it requires ports or artifacts.
name and version fields are no longer required in vcpkg.json files
We sometimes get asked by users why vcpkg.json files require a name and a version field to be filled in. This is a consequence of the same file being used both for authoring ports and for consuming them in an application. These fields are required metadata for ports so they can be organized and referenced appropriately by end users. However, it is clear that these fields don’t serve much purpose if you are only using vcpkg to acquire other dependencies and aren’t producing your own vcpkg ports.
As a result, we have made these fields optional in vcpkg.json. This is also consistent with how vcpkg-configuration.json is structured for artifacts. However, there are implications when generating manifests using vcpkg new – this command should be called with either a pair of –name and –version properties or with –application, which designates the manifest as one that won’t need these fields.
vcpkg find artifact can be filtered by registry
It is now possible to search for artifacts under a specific registry by running
vcpkg find artifact:<registry name>
vcpkg-init.ps1 installer now works with PowerShell on Linux
When we announced the vcpkg artifacts experience, there were two ways to install vcpkg with this support. On Linux/macOS, we provided a bash script, and on Windows, a PowerShell script. In this release of vcpkg, the PowerShell installer script now also works on macOS and Linux, so you can freely use it in these environments. For updated instructions on how to install, use, or remove vcpkg using one of these scripts, see: microsoft/vcpkg-tool: Components of microsoft/vcpkg ‘s binary. (github.com)
The following documentation changes were made this release:
- Added documentation for remove command.
- Added documentation for x-update-baseline command, used to update version baselines for configured registries.
- Revised documentation for vcpkg_cmake_configure, a port helper function.
- Revised documentation for vcpkg_extract_source_archive, a port helper function:
- Don’t list deprecated overload first
- Documents REF
- Document each option in a list for improved discoverability, instead of a large block
- Replace static list of ports with a GitHub query that will find uses in all ports
PRs: Microsoft/vcpkg#25264, Microsoft/vcpkg#25256, Microsoft/vcpkg#25255, Microsoft/vcpkg#25178
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:
- dg0yt (22 commits)
- autoantwort (22 commits)
- Osyotr (12 commits)
- Thomas1664 (10 commits)
- Neumann-A (4 commits)
- coryan (3 commits)
- AenBleidd (3 commits)
- ekilmer (2 commits)
- m-kuhn (2 commits)
- eao197 (2 commits)
- myd7349 (2 commits)
- RT222 (1 commit)
- an-tao (1 commit)
- cenit (1 commit)
- Be-ing (1 commit)
- bsiegert (1 commit)
You can find the full July 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.
Vcpkg is the best what we have now, but still has many problems. What’s a future of vcpkg? Will it be one big pirts repository as now?
Hi Pavel, right now we are extending vcpkg in several areas:
1) The new vcpkg artifacts experience will make it possible to acquire developer tools to get a working environment (see: https://devblogs.microsoft.com/cppblog/vcpkg-artifacts/)
2) We are extending the Visual Studio and Visual Studio Code integration. The vcpkg tool will be easier to install with these IDEs and we are working on artifacts integration there too.
With the registries feature we also made it easier to use private libraries with vcpkg, so a workflow doesn’t need to depend on only the open-source ports repository.
Is there anything in particular you find challenging or burdensome about using vcpkg? Anything we can improve?
Is there any way to specify dependencies specific to a build configuration, say adding Catch2 as a dependency but only for the test build?
Add a feature to your manifest and use