# FindPkgConfig

A `pkg-config` module for CMake.

Finds the `pkg-config` executable and adds the `pkg_get_variable()`, `pkg_check_modules()` and `pkg_search_module()` commands. The following variables will also be set:

    PKG_CONFIG_FOUND          ... if pkg-config executable was found
    PKG_CONFIG_EXECUTABLE     ... pathname of the pkg-config program
    PKG_CONFIG_VERSION_STRING ... the version of the pkg-config program found
                                  (since CMake 2.8.8)

`pkg_get_variable`

  Retrieves the value of a pkg-config variable `varName` and stores it in the result variable `resultVar` in the calling scope.

      pkg_get_variable(<resultVar> <moduleName> <varName>)

  If `pkg-config` returns multiple values for the specified variable, `resultVar` will contain a ;-list.

  For example:

      pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)

`pkg_check_modules`

  Checks for all the given modules, setting a variety of result variables in the calling scope.

      pkg_check_modules(<prefix>
                        [REQUIRED] [QUIET]
                        [NO_CMAKE_PATH]
                        [NO_CMAKE_ENVIRONMENT_PATH]
                        [IMPORTED_TARGET [GLOBAL]]
                        <moduleSpec> [<moduleSpec>...])

  When the `REQUIRED` argument is given, the command will fail with an error if module(s) could not be found.

  When the `QUIET` argument is given, no status messages will be printed.

  By default, if `CMAKE_MINIMUM_REQUIRED_VERSION` is 3.1 or later, or if `PKG_CONFIG_USE_CMAKE_PREFIX_PATH` is set to a boolean `True` value, then the `CMAKE_PREFIX_PATH`, `CMAKE_FRAMEWORK_PATH`, and `CMAKE_APPBUNDLE_PATH` cache and environment variables will be added to the `pkg-config` search path. The `NO_CMAKE_PATH` and `NO_CMAKE_ENVIRONMENT_PATH` arguments disable this behavior for the cache variables and environment variables respectively.

  The `IMPORTED_TARGET` argument will create an imported target named `PkgConfig::<prefix>` that can be passed directly as an argument to `target_link_libraries()`. The `GLOBAL` argument will make the imported target available in global scope.

  Each `<moduleSpec>` can be either a bare module name or it can be a module name with a version constraint (operators `=`, `<`, `>`, `<=` and `>=` are supported). The following are examples for a module named `foo` with various constraints:

      foo           # Any version matches
      foo<2         # Only match versions before 2
      foo>=3.1      # Match any version from 3.1 or later
      foo=1.2.3     # Foo must be exactly version 1.2.3

  The following variables may be set upon return. Two sets of values exist, one for the common case (`<XXX> = <prefix>`) and another for the information `pkg-config` provides when it is called with the `--static` option (`<XXX> = <prefix>_STATIC`):

      <XXX>_FOUND          ... set to 1 if module(s) exist
      <XXX>_LIBRARIES      ... only the libraries (without the '-l')
      <XXX>_LINK_LIBRARIES ... the libraries and their absolute paths
      <XXX>_LIBRARY_DIRS   ... the paths of the libraries (without the '-L')
      <XXX>_LDFLAGS        ... all required linker flags
      <XXX>_LDFLAGS_OTHER  ... all other linker flags
      <XXX>_INCLUDE_DIRS   ... the '-I' preprocessor flags (without the '-I')
      <XXX>_CFLAGS         ... all required cflags
      <XXX>_CFLAGS_OTHER   ... the other compiler flags

  All but `<XXX>_FOUND` may be a ;-list if the associated variable returned from `pkg-config` has multiple values.

  There are some special variables whose prefix depends on the number of `<moduleSpec>` given. When there is only one `<moduleSpec>`, `<YYY>` will simply be `<prefix>`, but if two or more `<moduleSpec>` items are given, `<YYY>` will be `<prefix>_<moduleName>`:

      <YYY>_VERSION    ... version of the module
      <YYY>_PREFIX     ... prefix directory of the module
      <YYY>_INCLUDEDIR ... include directory of the module
      <YYY>_LIBDIR     ... lib directory of the module

  Examples

      pkg_check_modules (GLIB2 glib-2.0)

  Looks for any version of glib2. If found, the output variable `GLIB2_VERSION` will hold the actual version found.

      pkg_check_modules (GLIB2 glib-2.0>=2.10)

  Looks for at least version 2.10 of glib2. If found, the output variable `GLIB2_VERSION` will hold the actual version found.

      pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)

  Looks for both glib2-2.0 (at least version 2.10) and any version of gtk2+-2.0. Only if both are found will `FOO` be considered found. The `FOO_glib-2.0_VERSION` and `FOO_gtk+-2.0_VERSION` variables will be set to their respective found module versions.

      pkg_check_modules (XRENDER REQUIRED xrender)

  Requires any version of `xrender`. Example output variables set by a successful call:

      XRENDER_LIBRARIES=Xrender;X11
      XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp

`pkg_search_module`

  The behavior of this command is the same as `pkg_check_modules()`, except that rather than checking for all the specified modules, it searches for just the first successful match.

      pkg_search_module(<prefix>
                        [REQUIRED] [QUIET]
                        [NO_CMAKE_PATH]
                        [NO_CMAKE_ENVIRONMENT_PATH]
                        [IMPORTED_TARGET [GLOBAL]]
                        <moduleSpec> [<moduleSpec>...])

  Examples

      pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)

## Variables Affecting Behavior

`PKG_CONFIG_EXECUTABLE`

  This can be set to the path of the pkg-config executable. If not provided, it will be set by the module as a result of calling `find_program()` internally. The `PKG_CONFIG` environment variable can be used as a hint.

`PKG_CONFIG_USE_CMAKE_PREFIX_PATH`

  Specifies whether `pkg_check_modules()` and `pkg_search_module()` should add the paths in the `CMAKE_PREFIX_PATH`, `CMAKE_FRAMEWORK_PATH` and `CMAKE_APPBUNDLE_PATH` cache and environment variables to the `pkg-config` search path.

  If this variable is not set, this behavior is enabled by default if `CMAKE_MINIMUM_REQUIRED_VERSION` is 3.1 or later, disabled otherwise.