vcpkg 2023.06.20 and 2023.07.21 Releases: GitHub Dependency Graph Support, Android Tested Triplets, Xbox Triplet Improvements, and More…

vcpkg 2023.06.20 and 2023.07.21 Releases: GitHub Dependency Graph Support, Android Tested Triplets, Xbox Triplet Improvements, and More…

Augustin Popa

The 2023.07.21 release of the vcpkg package manager is available. This blog post summarizes changes from April 16th, 2023 to July 21th, 2023 for the Microsoft/vcpkg, Microsoft/vcpkg-tool, and Microsoft/vcpkg-docs GitHub repos.

Some stats for this period:

  • 59 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.
  • 976 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 2,249 total libraries available in the vcpkg public registry.
  • 87 contributors submitted PRs, issues, or participated in discussions in the repo.
  • The main vcpkg repo has over 5,500 forks and 19,300 stars on GitHub.

 

Notable Changes

Notable changes for this release are summarized below:

 

GitHub Dependency Graph API

In June, we announced vcpkg integration with the GitHub dependency graph. This is available for all vcpkg users on the 2023.07.21 release. If you are a GitHub user, we highly recommend checking it out to visualize your repo’s dependencies. We will continue building on this integration in the future and are looking for feedback!

PR: Microsoft/vcpkg-tool/#989

 

Android Tested Triplets

We have promoted several Android community triplets to tested triplets. This means they are now tested and validated on all port changes (as of the 2023.06.20 release) and will be listed in the tested triplets table in each release.

The new Android tested triplets are:

  • arm-neon-android
  • x64-android
  • arm64-android

PR: Microsoft/vcpkg/#29406

 

Xbox Triplet Improvements

In a previous release, community triplets were released for vcpkg users wishing to target Xbox. In this release, several improvements were made to this experience:

  • Added a post build check that libraries don’t link with kernel32, as Xbox does not have kernel32.
  • GameDKLatestis now included in binary cache keys. Xbox triplets require the user of the GameDK, GRDK, and GXDK headers which are supplied through external environment variables. With this change, binary caching will track the version of these dependencies for the purpose of determining when a binary can be restored without re-building.
  • Improvements to triplet selection and turning on the xbox identifier.

PR: Microsoft/vcpkg-tool#1059

 

Updates to depend-info Command

vcpkg depend-infodisplays all transitive dependencies for a package in several formats, including plain text, DGML, DOT, etc. This feature can be useful to gain a better understanding of a package’s dependency graph. A user contribution recently added the Mermaid format as an additional option. Furthermore, we made some changes to the way depend-info is used by moving the display options under a common --format subcommand. We believe this layout will make it easier to scale this feature in the future if we add further formatting styles. For more details on how to use depend-info after these changes, see our vcpkg depend-info documentation.

PRs: Microsoft/vcpkg-tool/#1080, Microsoft/vcpkg-tool/#935 (thanks @WimLefrere!)

 

Allow vcpkg remove, export, and x-package-info without overlay triplets

In cases where a vcpkg user creates and manages overlay triplets, the commands vcpkg remove, export, and x-package-info can now be run without having to specify those overlay triplets every time. This was extra information that the commands don’t need in order to run successfully.

 

Previous behavior (example):

vcpkg install --overlay-triplets a-directory-containing-triplets zlib:my-custom-triplet

Runs without issues.

vcpkg remove zlib:my-custom-triplet

Throws an error, vcpkg doesn’t know what my-custom-triplet is.

vcpkg.exe remove zlib:my-custom-triplet example

Instead, you previously had to say:

vcpkg remove --overlay-triplets a-directory-containing-triplets zlib:my-custom-triplet

 

New behavior (example):

vcpkg install --overlay-triplets a-directory-containing-triplets zlib:my-custom-triplet

vcpkg remove zlib:my-custom-triplet

Both commands should run successfully.
vcpkg remove zlib:my-custom-triplet example

PR: Microsoft/vcpkg-tool/#1110

 

Overrides Can Select Ports That Are No Longer in the Baseline

It is now possible to override ports that aren’t available in the baseline in a vcpkg.json file. While very rare with ports in the vcpkg open-source registry, it is possible for a port to be removed from a more recent baseline if it stops being compatible with the rest of the catalog and is no longer being maintained to stop breaking other ports. Previously, it was impossible to reference one of these archived ports in a more recent vcpkg installation using port versioning features. Now, you can use overrides to bring in the port and version that you want even if it isn’t in the current baseline.

PR: Microsoft/vcpkg-tool/#1109

 

Documentation Changes

 

Bug Fixes / Performance Improvements

  • Cleaned up error message when attempting vcpkg upgrade in manifest mode (PR: Microsoft/vcpkg-tool#1066, thanks @autoantwort!).
  • When vcpkg install runs, elapsed time will now be shown even if there was a build failure (PR: Microsoft/vcpkg-tool#1098, thanks @autoantwort!).
  • Fixed a regression with binary caching where it wouldn’t restore packages correctly if vcpkg upgrade was run in the past (PR: Microsoft/vcpkg-tool/#1083).
  • When a port gets installed, hard links are now created to the relevant files in the Packages directory where possible to save disk space and disk R/W operations. Previously, a copy of the files was made every time, now it’s a fallback mechanism (PR: Microsoft/vcpkg-tool/#1076, thanks @autoantwort!).
  • Fixed a regression causing the integrate install command to have to be run twice in certain situations to get past an error message (PR: Microsoft/vcpkg-tool/#1033, thanks @dubejf!).
  • Android hosts now use the android triplet by default (PR: Microsoft/vcpkg-tool#1114, thanks funsafe-ptr!).
  • Fixed some issues with integrate install for some users targeting Visual Studio 2017 or later (PR: Microsoft/vcpkg-tool/#1034, thanks dubejf!).
  • Other minor bug and crash fixes.

 

Total Ports Available for Tested Triplets

triplet ports available
x64-windows 2,100
x86-windows 2,028
x64-windows-static 1,996
x64-windows-static-md 2,010
arm64-windows 1,682
x64-uwp 1,151
arm-uwp 1,100
x64-linux 2,050
x64-osx 1,965
arm-neon-android 1,399
x64-android 1,466
arm64-android 1,419

 

While vcpkg supports a much larger variety of target platforms and architectures, 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 (70 commits)
  • autoantwort (66 commits)
  • RT2Code (13 commits)
  • jiayuehua (13 commits)
  • SchaichAlonso (12 commits)
  • Neumann-A (12 commits)
  • AenBleidd (11 commits)
  • myd7349 (10 commits)
  • Osyotr (9 commits)
  • FtZPetruska (9 commits)
  • Pospelove (8 commits)
  • xiaozhuai (8 commits)
  • chausner (5 commits)
  • coryan (5 commits)
  • JackBoosY (5 commits)
  • jacobkahn (4 commits)
  • BurningEnlightenment (4 commits)
  • WimLefrere (4 commits)
  • talregev (3 commits)
  • eao197 (3 commits)
  • traversaro (3 commits)
  • funsafeptr (3 commits)
  • dubejf (3 commits)
  • Thomas1664 (3 commits)
  • horenmar (2 commits)
  • ZeeWanderer (2 commits)
  • ex-purple (2 commits)
  • yurybura (2 commits)
  • danielaparker (2 commits)
  • m-kuhn (2 commits)
  • jwillemsen (1 commit)
  • Ryan-rsm-McKenzie (1 commit)
  • mathisloge (1 commit)
  • daschuer (1 commit)
  • wravery (1 commit)
  • bold84 (1 commit)
  • quyykk (1 commit)
  • davisp (1 commit)

 

Is your company looking for a better C/C++ dependency management experience?

We are partnering with companies to help them get started with vcpkg and overcome any initial hurdles. We have also been making product and documentation changes based on feedback we receive from these partnerships. If you are interested in trying out vcpkg or just have some thoughts to share with us, feel free to reach out at vcpkg@microsoft.com.

 

Learn More

You can find the full 2023.07.21 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 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.