vcpkg/docs/examples/packaging-github-repos.md
nicole mazzuca 0fec1340eb
[vcpkg manifest] Add documentation! (#13488)
* [vcpkg docs] add docs for manifest files

These are just for the maintainer docs,
not user docs.

* [vcpkg] EBNF-ify platform expression parsing

this modifies nothing about what strings are accepted or rejected,
it just moves stuff around.

also adds tests.

* [vcpkg docs] add manifest mode example

* [wip] docs for augustin

also fix tabs

* [vcpkg manifest] switch to using maps for features

* Apply suggestions from code review

* un-experimentize format-manifest

* flesh out the user manifest mode docs

* CRs

* billy CRs

* final personal pass-thru
2020-09-14 15:07:02 -07:00

2.2 KiB

Packaging Github Repos Example: libogg

Create the manifest file

The manifest file (called vcpkg.json) is a json file describing the package's metadata.

For libogg, we'll create the file ports/libogg/vcpkg.json with the following content:

{
  "name": "libogg",
  "version-string": "1.3.3",
  "description": "Ogg is a multimedia container format, and the native file and stream format for the Xiph.org multimedia codecs."
}

You can format the manifest file to our specifications with vcpkg format-manifest ports/libogg/vcpkg.json.

Create the portfile

portfile.cmake describes how to build and install the package. First we download the project from Github with vcpkg_from_github:

vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO xiph/ogg
    REF v1.3.3
    SHA512 0bd6095d647530d4cb1f509eb5e99965a25cc3dd9b8125b93abd6b248255c890cf20710154bdec40568478eb5c4cde724abfb2eff1f3a04e63acef0fbbc9799b
    HEAD_REF master
)

The important parts to update are REPO for the GitHub repository path, REF for a stable tag/commit to use, and SHA512 with the checksum of the downloaded zipfile (you can get this easily by setting it to 1, trying to install the package, and copying the checksum).

Finally, we configure the project with CMake, install the package, and copy over the license file:

vcpkg_configure_cmake(
    SOURCE_PATH ${SOURCE_PATH}
    PREFER_NINJA
)
vcpkg_install_cmake()
file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/libogg RENAME copyright)

Check the documentation for vcpkg_configure_cmake and vcpkg_install_cmake if your package needs additional options.

Now you can run vcpkg install libogg to build and install the package.

Suggested example portfiles

In the ports/ directory are many libraries that can be used as examples, including many that are not based on CMake.

  • Header only libraries
    • rapidjson
    • range-v3
  • MSBuild-based
    • cppunit
    • mpg123
  • Non-CMake, custom buildsystem
    • openssl
    • ffmpeg