# FindPkgConfig

A pkg-config module for CMake.

Finds the `pkg-config` executable and add the `pkg_check_modules()` and `pkg_search_module()` commands.

In order to find the `pkg-config` executable, it uses the `PKG_CONFIG_EXECUTABLE` variable or the `PKG_CONFIG` environment variable first.

`pkg_get_variable`

  Retrieves the value of a variable from a package:

      pkg_get_variable(<RESULT> <MODULE> <VARIABLE>)

  If multiple values are returned variable 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.

      pkg_check_modules(<PREFIX> [REQUIRED] [QUIET]
                        [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
                        [IMPORTED_TARGET]
                        <MODULE> [<MODULE>]*)

  When the `REQUIRED` argument was set, macros will fail with an error when module(s) could not be found.

  When the `QUIET` argument is set, 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, the `CMAKE_PREFIX_PATH`, `CMAKE_FRAMEWORK_PATH`, and `CMAKE_APPBUNDLE_PATH` cache and environment variables will be added to `pkg-config` search path. The `NO_CMAKE_PATH` and `NO_CMAKE_ENVIRONMENT_PATH` arguments disable this behavior for the cache variables and the 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()`.

  It sets the following variables:

      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)

  For the following variables two sets of values exist; first one is the common one and has the given PREFIX. The second set contains flags which are given out when `pkg-config` was called with the `--static` option.

      <XPREFIX>_FOUND          ... set to 1 if module(s) exist
      <XPREFIX>_LIBRARIES      ... only the libraries (w/o the '-l')
      <XPREFIX>_LIBRARY_DIRS   ... the paths of the libraries (w/o the '-L')
      <XPREFIX>_LDFLAGS        ... all required linker flags
      <XPREFIX>_LDFLAGS_OTHER  ... all other linker flags
      <XPREFIX>_INCLUDE_DIRS   ... the '-I' preprocessor flags (w/o the '-I')
      <XPREFIX>_CFLAGS         ... all required cflags
      <XPREFIX>_CFLAGS_OTHER   ... the other compiler flags

      <XPREFIX> = <PREFIX>        for common case
      <XPREFIX> = <PREFIX>_STATIC for static linking

  Every variable containing multiple values will be a ;-list.

  There are some special variables whose prefix depends on the count of given modules. When there is only one module, <PREFIX> stays unchanged. When there are multiple modules, the prefix will be changed to <PREFIX>_<MODNAME>:

      <XPREFIX>_VERSION    ... version of the module
      <XPREFIX>_PREFIX     ... prefix-directory of the module
      <XPREFIX>_INCLUDEDIR ... include-dir of the module
      <XPREFIX>_LIBDIR     ... lib-dir of the module

      <XPREFIX> = <PREFIX>  when |MODULES| == 1, else
      <XPREFIX> = <PREFIX>_<MODNAME>

  A <MODULE> parameter can have the following formats:

      {MODNAME}            ... matches any version
      {MODNAME}>={VERSION} ... at least version <VERSION> is required
      {MODNAME}={VERSION}  ... exactly version <VERSION> is required
      {MODNAME}<={VERSION} ... modules must not be newer than <VERSION>

  Examples

      pkg_check_modules (GLIB2   glib-2.0)

      pkg_check_modules (GLIB2   glib-2.0>=2.10)

  Requires at least version 2.10 of glib2 and defines e.g. `GLIB2_VERSION=2.10.3`

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

  Requires both glib2 and gtk2, and defines e.g. `FOO_glib-2.0_VERSION=2.10.3` and `FOO_gtk+-2.0_VERSION=2.8.20`

      pkg_check_modules (XRENDER REQUIRED xrender)

  Defines for example:

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

`pkg_search_module`

  Same as `pkg_check_modules()`, but instead it checks for given modules and uses the first working one.

      pkg_search_module(<PREFIX> [REQUIRED] [QUIET]
                        [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
                        [IMPORTED_TARGET]
                        <MODULE> [<MODULE>]*)

  Examples

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

`PKG_CONFIG_EXECUTABLE`

  Path to the pkg-config executable.

`PKG_CONFIG_USE_CMAKE_PREFIX_PATH`

  Whether `pkg_check_modules()` and `pkg_search_module()` should add the paths in `CMAKE_PREFIX_PATH`, `CMAKE_FRAMEWORK_PATH`, and `CMAKE_APPBUNDLE_PATH` cache and environment variables to `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.