# Pkgconfig module

This module is a simple generator for
[pkg-config](https://pkg-config.freedesktop.org/) files.

## Usage

```meson
pkg = import('pkgconfig')
bar_dep = dependency('bar')
lib = library('foo', dependencies : [bar])
pkg.generate(lib)
```

### pkg.generate()

The generated file's properties are specified with the following
keyword arguments.

- `description` a string describing the library, used to set the `Description:` field
- `extra_cflags` a list of extra compiler flags to be added to the
  `Cflags` field after the header search path
- `filebase` the base name to use for the pkg-config file; as an
  example, the value of `libfoo` would produce a pkg-config file called
  `libfoo.pc`
- `install_dir` the directory to install to, defaults to the value of
  option `libdir` followed by `/pkgconfig`
- `libraries` a list of built libraries (usually results of
  shared_library) that the user needs to link against. Arbitrary strings can
  also be provided and they will be added into the `Libs` field. Since 0.45.0
  dependencies of built libraries will be automatically added, see the
  [Implicit dependencies](#implicit-dependencies) section below for the exact
  rules. Since 0.58.0 custom_target() objects are supported as long as they are
  linkable (has known extension such as `.a`, `.so`, etc).
- `libraries_private` list of built libraries or strings to put in the
  `Libs.private` field. Since 0.45.0 dependencies of built libraries will be
  automatically added, see the [Implicit dependencies](#implicit-dependencies)
  section below for the exact rules. Since 0.58.0 custom_target() objects are
  supported as long as they are linkable (has known extension such as `.a`,
  `.so`, etc).
- `name` the name of this library, used to set the `Name:` field
- `subdirs` which subdirs of `include` should be added to the header
  search path, for example if you install headers into
  `${PREFIX}/include/foobar-1`, the correct value for this argument
  would be `foobar-1`
- `requires` list of strings, pkgconfig-dependencies or libraries that
  `pkgconfig.generate()` was used on to put in the `Requires` field.
  *Since 1.9.0* internal dependencies are supported if `pkgconfig.generate()`
  was used on the underlying library.
- `requires_private` the same as `requires` but for the `Requires.private` field
- `cflags_private` (*Since 1.11.0*) compiler flags added when linking with a static
  library. Note: currently, the FreeDesktop.org pkg-config implementation does
  [not support Cflags.private](https://gitlab.freedesktop.org/pkg-config/pkg-config/-/issues/38)
- `url` a string with a url for the library
- `license` (*Since 1.9.0*) a string with a SPDX license to add to the generated file.
- `variables` a list of strings with custom variables to add to the
  generated file. The strings must be in the form `name=value` and may
  reference other pkgconfig variables,
  e.g. `datadir=${prefix}/share`. The names `prefix`, `libdir` and
  `includedir` are reserved and may not be used. *Since 0.56.0* it can also be a
  dictionary but ordering of Meson dictionaries are not guaranteed, which could
  cause issues when some variables reference other variables.
  Spaces in values are escaped with `\`, this is required in the case the value is
  a path that and is used in `cflags` or `libs` arguments. *Since 0.59.0* if
  escaping is not desired (e.g. space separate list of values) `unescaped_variables`
  keyword argument should be used instead. *Since 0.62.0* builtin directory variables
  that are referenced are automatically created by default.
- `uninstalled_variables` used instead of the `variables` keyword argument, when
  generating the uninstalled pkg-config file. Since *0.54.0*
  Spaces in values are escaped with `\`, this is required in the case the value is
  a path that and is used in `cflags` or `libs` arguments. *Since 0.59.0* if
  escaping is not desired (e.g. space separate list of values)
  `unescaped_uninstalled_variables` keyword argument should be used instead.
- `version` a string describing the version of this library, used to set the
  `Version:` field. (*since 0.46.0*) Defaults to the project version if unspecified.
- `d_module_versions` a list of module version flags used when compiling
   D sources referred to by this pkg-config file
- `dataonly` field. (*since 0.54.0*) this is used for architecture-independent
   pkg-config files in projects which also have architecture-dependent outputs.
- `conflicts` (*since 0.36.0, incorrectly issued a warning prior to 0.54.0*) list of strings to be put in the `Conflicts` field.

Since 0.46 a `StaticLibrary` or `SharedLibrary` object can optionally
be passed as first positional argument. If one is provided a default
value will be provided for all required fields of the pc file:
- `install_dir` is set to `pkgconfig` folder in the same location than the provided library.
- `description` is set to the project's name followed by the library's name.
- `name` is set to the library's name.

Since 0.54.0 uninstalled pkg-config files are generated as well. They
are located in `<build dir>/meson-uninstalled/`. It is sometimes
useful to build projects against libraries built by Meson without
having to install them into a prefix. In order to do so, just set
`PKG_CONFIG_PATH=<builddir>/meson-uninstalled` before building your
application. That will cause pkg-config to prefer those
`-uninstalled.pc` files and find libraries and headers from the Meson
builddir. This is an experimental feature provided on a best-effort
basis, it might not work in all use-cases.

*Since 1.9.0* you can specify a license identifier. To use the current project
licence, simply use `license: meson.project_license()` as argument to `generate()`.

### Implicit dependencies

The exact rules followed to find dependencies that are implicitly
added into the pkg-config file have evolved over time. Here are the
rules as of Meson *0.49.0*, previous versions might have slightly
different behaviour.

- Not found libraries or dependencies are ignored.
- Libraries and dependencies are private by default (i.e. added into
  `Requires.private:` or `Libs.private:`) unless they are explicitly added in
  `libraries` or `requires` keyword arguments, or is the main library (first
  positional argument).
- Libraries and dependencies will be de-duplicated, if they are added in both
  public and private (e.g `Requires:` and `Requires.private:`) it will be removed
  from the private list.
- Shared libraries (i.e. `shared_library()` and **NOT** `library()`) add only
  `-lfoo` into `Libs:` or `Libs.private:` but their dependencies are not pulled.
  This is because dependencies are only needed for static link.
- Other libraries (i.e. `static_library()` or `library()`) add `-lfoo` into `Libs:`
  or `Libs.private:` and recursively add their dependencies into `Libs.private:` or
  `Requires.private:`.
- Dependencies provided by pkg-config are added into `Requires:` or
  `Requires.private:`. If a version was specified when declaring that dependency
  it will be written into the generated file too.
- The threads dependency (i.e. `dependency('threads')`) adds `-pthread` into
  `Libs:` or `Libs.private:`.
- Internal dependencies (i.e.
  `declare_dependency(compiler_args : '-DFOO', link_args : '-Wl,something', link_with : foo)`)
  add `compiler_args` into `Cflags:` if public, `link_args` and `link_with` into
  `Libs:` if public or `Libs.private:` if private.
- Other dependency types add their compiler arguments into `Cflags:` if public,
  and linker arguments into `Libs:` if public or `Libs.private:` if private.
- Once a pkg-config file is generated for a library using `pkg.generate(mylib)`,
  any subsequent call to `pkg.generate()` where mylib appears, will generate a
  `Requires:` or `Requires.private` instead of a `Libs:` or `Libs.private:`.

### Relocatable pkg-config files

By default, the files generated by `pkg.generate` contain a hardcoded prefix path.
In order to make them relocatable, a `pkgconfig.relocatable` builtin option is provided.
See [Pkgconfig module options](Builtin-options.md#pkgconfig-module).
