mautrix-meta: 0.3.0 -> 0.3.1
[NixPkgs.git] / doc / languages-frameworks / pkg-config.section.md
blob0b25396314cbbc73033b9bf699f04e5fb2439294
1 # pkg-config {#sec-pkg-config}
3 *pkg-config* is a unified interface for declaring and querying built C/C++ libraries.
5 Nixpkgs provides a couple of facilities for working with this tool.
7 ## Writing packages providing pkg-config modules {#pkg-config-writing-packages}
9 Packages should set `meta.pkgConfigModules` with the list of package config modules they provide.
10 They should also use `testers.hasPkgConfigModules` to check that the final built package matches that list,
11 and optionally check that the pkgconf modules' version metadata matches the derivation's.
12 Additionally, the [`validatePkgConfig` setup hook](https://nixos.org/manual/nixpkgs/stable/#validatepkgconfig), will do extra checks on to-be-installed pkg-config modules.
14 A good example of all these things is miniz:
16 ```nix
17 { pkg-config, testers, ... }:
19 stdenv.mkDerivation (finalAttrs: {
20   /* ... */
22   nativeBuildInputs = [ pkg-config validatePkgConfig ];
24   passthru.tests.pkg-config = testers.hasPkgConfigModules {
25     package = finalAttrs.finalPackage;
26     versionCheck = true;
27   };
29   meta = {
30     /* ... */
31     pkgConfigModules = [ "miniz" ];
32   };
34 ```
36 ## Accessing packages via pkg-config module name {#sec-pkg-config-usage}
38 ### Within Nixpkgs {#sec-pkg-config-usage-internal}
40 A [setup hook](#setup-hook-pkg-config) is bundled in the `pkg-config` package to bring a derivation's declared build inputs into the environment.
41 This will populate environment variables like `PKG_CONFIG_PATH`, `PKG_CONFIG_PATH_FOR_BUILD`, and `PKG_CONFIG_PATH_HOST` based on:
43  - how `pkg-config` itself is depended upon
45  - how other dependencies are depended upon
47 For more details see the section on [specifying dependencies in general](#ssec-stdenv-dependencies).
49 Normal pkg-config commands to look up dependencies by name will then work with those environment variables defined by the hook.
51 ### Externally {#sec-pkg-config-usage-external}
53 The `defaultPkgConfigPackages` package set is a set of aliases, named after the modules they provide.
54 This is meant to be used by language-to-nix integrations.
55 Hand-written packages should use the normal Nixpkgs attribute name instead.