build-cpp / cmkr

Modern build system based on CMake and TOML.
https://cmkr.build
MIT License
423 stars 28 forks source link

Add versioning support for Vcpkg ports. #114

Open angelfor3v3r opened 1 year ago

angelfor3v3r commented 1 year ago

Vcpkg ports support versioning.

It seems like the current official way of listing versions is to run a git command line git blame -l versions/<port-first-char>-/<portname>.json. There's also 3rd party sites such as this one that display version history.

I'm not sure what the best way is to go about implementing this, but I think we can do a syntax like [“<port name>[<features, here>]==<version number>#<port version>"]. A more specific example would be ["imgui[dx9-binding, freetype]==v1.89.6#1 which means imgui with dx9-bindings, freetype features, version v1.89.6 and port #1.

It seems like Vcpkg supports having dependencies with a version key inside. The builtin-baseline brings in ports with that version number at the time of the commit and Vcpkg will decide if it satisfies the minimum version specified in the version key. But then it gets a bit more complicated because you can specify older versions using the overrides key, with names and versions inside that too.

There's a lot of information about them here.

At the moment, the only way to use old versions is to specify old commit tags/hash, which I assume isn't ideal if you want to lock to specific port versions, and it might be missing newly added ports too.

If I'm misunderstanding how Vcpkg versioning works, please let me know so I can update the issue. So far, this sounds like a huge hassle to support.