pkg-config
pkg-config(g)                                       pkg-config(g)



NAME
       pkg-config   -   Return  metainformation  about  installed
       libraries

SYNOPSIS
       pkg-config   [--modversion]   [--help]    [--print-errors]
       [--silence-errors]   [--cflags]  [--libs]  [--libs-only-L]
       [--libs-only-l]  [--cflags-only-I]   [--variable=VARIABLE-
       NAME]       [--define-variable=VARIABLENAME=VARIABLEVALUE]
       [--uninstalled]   [--exists]   [--atleast-version=VERSION]
       [--exact-version=VERSION]          [--max-version=VERSION]
       [LIBRARIES...]

DESCRIPTION
       The pkg-config program is  used  to  retrieve  information
       about  installed libraries in the system.  It is typically
       used to compile and link against one  or  more  libraries.
       Here is a typical usage scenario in a Makefile:

       program: program.c
            cc program.c `pkg-config --cflags --libs gnomeui`



       pkg-config  retrieves information about packages from spe-
       cial metadata files. These files are named after the pack-
       age,  with the extension .pc. By default, pkg-config looks
       in the directory prefix/lib/pkgconfig for these files;  it
       will  also  look in the colon-separated (on Windows, semi-
       colon-separated) list  of  directories  specified  by  the
       PKG_CONFIG_PATH environment variable.


       The  package name specified on the pkg-config command line
       is defined to be the name of the metadata file, minus  the
       .pc  extension. If a library can install multiple versions
       simultaneously, it must give each  version  its  own  name
       (for  example,  GTK 1.2 might have the package name "gtk+"
       while GTK 2.0 has "gtk+-2.0").


OPTIONS
       The following options are supported:

       --modversion
              Requests  that  the  version  information  of   the
              libraries  specified  on  the  command line be dis-
              played.  If pkg-config can find all  the  libraries
              on  the command line, each library's version string
              is printed to stdout, one version per line. In this
              case  pkg-config exits successfully. If one or more
              libraries  is  unknown,  pkg-config  exits  with  a
              nonzero  code, and the contents of stdout are unde-
              fined.

       --help Displays a help message and terminates.


       --print-errors
              If one or more of the modules on the command  line,
              or  their  dependencies,  are  not  found, or if an
              error occurs in parsing a problem  to  be  printed.
              With  "predicate"  options  such as "--exists" pkg-
              config runs silently by default, because it's  usu-
              ally  used  in  scripts that want to control what's
              output. This option can  be  used  alone  (to  just
              print  errors  encountered  locating modules on the
              command line) or with other options.  The  PKG_CON-
              FIG_DEBUG_SPEW  environment variable overrides this
              option.


       --silence-errors
              If one or more of the modules on the command  line,
              or  their  dependencies,  are  not  found, or if an
              error  occurs  in  parsing  a  problem  from  being
              printed.   With   "predicate"   options   such   as
              "--exists" pkg-config  runs  silently  by  default,
              because  it's  usually used in scripts that want to
              control what's output. So this option is only  use-
              ful  with  options such as "--cflags" or "--modver-
              sion" that print errors by  default.  The  PKG_CON-
              FIG_DEBUG_SPEW  environment variable overrides this
              option.


       --errors-to-stdout
              If printing errors, print  them  to  stdout  rather
              than the default stderr


       The  following  options  are used to compile and link pro-
       grams:

       --cflags
              This  prints  pre-processor   and   compile   flags
              required  to  compile  the  packages on the command
              line, including flags for all  their  dependencies.
              Flags  are "compressed" so that each identical flag
              appears only once. pkg-config exits with a  nonzero
              code  if  it can't find metadata for one or more of
              the packages on the command line.

       --libs This option is identical  to  "--cflags",  only  it
              prints  the  link flags. As with "--cflags", dupli-
              cate flags are merged  (maintaining  proper  order-
              ing),  and  flags  for dependencies are included in
              the output.

       --libs-only-L
              This prints the -L/-R part of "--libs". That is, it
              defines the library search path but doesn't specify
              which libraries to link with.

       --libs-only-l
              This  prints  the  -l  part  of  "--libs"  for  the
              libraries  specified on the command line. Note that
              the union of  "--libs-only-l"  and  "--libs-only-L"
              may  be smaller than "--libs", due to flags such as
              -rdynamic.


       --variable=VARIABLENAME
              This returns the value of a variable defined  in  a
              package's  .pc file. Most packages define the vari-
              able "prefix", for example, so you can say:
                $ pkg-config --variable=prefix glib-2.0
                /usr/

       --define-variable=VARIABLENAME=VARIABLEVALUE
              This sets a global value for a variable, overriding
              the value in any example, so you can say:
                $ pkg-config --print-errors --define-variable=prefix=/foo --variable=prefix glib-2.0
                /foo


       --uninstalled
              Normally  if  you request the package "foo" and the
              package "foo-uninstalled" exists,  pkg-config  will
              prefer the "-uninstalled" variant. This allows com-
              pilation/linking against uninstalled  packages.  If
              you  specify the "--uninstalled" option, pkg-config
              will  return  successfully  if  any  "-uninstalled"
              packages are being used, and return failure (false)
              otherwise.   (The  "PKG_CONFIG_DISABLE_UNINSTALLED"
              environment  variable keeps pkg-config from implic-
              itly choosing "-uninstalled" packages, so  if  that
              variable  is  set, they will only have been used if
              you pass a name like "foo-uninstalled" on the  com-
              mand line explicitly.)


       --exists

       --atleast-version=VERSION

       --exact-version=VERSION

       --max-version=VERSION
              These  options  test whether the package or list of
              packages on the command line are known to  pkg-con-
              fig, and optionally whether the version number of a
              package meets certain contraints.  If all  packages
              exist  and  meet the specified version constraints,
              pkg-config exits successfully. Otherwise  it  exits
              unsuccessfully.

              Rather than using the version-test options, you can
              simply give a version constraint after each package
              name, for example:
                $ pkg-config --exists 'glib-2.0 >= 1.3.4 libxml = 1.8.3'
              Remember  to  use  --print-errors if you want error
              messages.


       --msvc-syntax
              This option is available only on Windows. It causes
              pkg-config  to  output  -l and -L flags in the form
              recognized by the Microsoft Visual C++ command-line
              compiler,     cl.    Specifically,    instead    of
              -Lx:/some/path it prints /libpath:x/some/path,  and
              instead  of  -lfoo it prints foo.lib. Note that the
              --libs output consists of flags for the linker, and
              should  be  placed  on  the cl command line after a
              /link switch.


       --dont-define-prefix
              This option is available only on Windows.  It  pre-
              vents pkg-config from automatically trying to over-
              ride the value of the variable "prefix" in each .pc
              file.


       --prefix-variable=PREFIX
              Also  this  option is available only on Windows. It
              sets the name of the variable that pkg-config auto-
              matically sets as described above.


ENVIRONMENT VARIABLES
       PKG_CONFIG_PATH
              A colon-separated (on Windows, semicolon-separated)
              list of directories to search for .pc  files.   The
              default  directory  will  always  be searched after
              searching the path; the default is libdir/pkgconfig
              where  libdir  is  the  libdir where pkg-config was
              installed.


       PKG_CONFIG_DEBUG_SPEW
              If set, causes pkg-config to  print  all  kinds  of
              debugging information and report all errors.


       PKG_CONFIG_TOP_BUILD_DIR
              A value to set for the magic variable pc_top_build-
              dir which may appear in .pc files. If the  environ-
              ment   variable  is  not  set,  the  default  value
              '$(top_builddir)'  will  be  used.  This   variable
              should  refer  to  the top builddir of the Makefile
              where the compile/link flags reported by pkg-config
              will  be  used.   This  only  matters  when compil-
              ing/linking against a package that hasn't yet  been
              installed.


       PKG_CONFIG_DISABLE_UNINSTALLED
              Normally  if  you request the package "foo" and the
              package "foo-uninstalled" exists,  pkg-config  will
              prefer the "-uninstalled" variant. This allows com-
              pilation/linking against uninstalled packages.   If
              this  environment variable is set, it disables said
              behavior.


       PKG_CONFIG_ALLOW_SYSTEM_CFLAGS
              Don't strip -I/usr/include out of cflags.


       PKG_CONFIG_ALLOW_SYSTEM_LIBS
              Don't strip -L/usr/lib out of libs


WINDOWS SPECIALITIES
       If a .pc file is found in a  directory  that  matches  the
       usual  conventions  (i.e.,  ends with \lib\pkgconfig), the
       prefix for that package is assumed to be  the  grandparent
       of  the directory where the file was found, and the prefix
       variable is overridden for that file accordingly.

       In addition to the PKG_CONFIG_PATH  environment  variable,
       the   Registry   keys   HKEY_CURRENT_USER\Software\pkgcon-
       fig\PKG_CONFIG_PATH  and  HKEY_LOCAL_MACHINE\Software\pkg-
       config\PKG_CONFIG_PATH  can be used to specify directories
       to search for .pc files. Each (string) value in these keys
       is treated as a directory where to look for .pc files.


AUTOCONF MACROS
       PKG_CHECK_MODULES(VARIABLEBASE,MODULELIST[,ACTION-IF-
       FOUND,[ACTION-IF-NOT-FOUND]])

              The  macro PKG_CHECK_MODULES can be used in config-
              ure.in to check whether modules  exist.  A  typical
              usage would be:
               PKG_CHECK_MODULES(MYSTUFF, gtk+-2.0 >= 1.3.5 libxml = 1.8.4)

              This    would    result    in    MYSTUFF_LIBS   and
              MYSTUFF_CFLAGS substitution variables, set  to  the
              libs  and  cflags  for the given module list.  If a
              module is missing or  has  the  wrong  version,  by
              default  configure  will  abort  with a message. To
              replace the default action, specify  an  ACTION-IF-
              NOT-FOUND.  PKG_CHECK_MODULES  will  not  print any
              error messages if you specify your  own  ACTION-IF-
              NOT-FOUND.   However,  it  will  set  the  variable
              MYSTUFF_PKG_ERRORS, which you can  use  to  display
              what went wrong.


METADATA FILE SYNTAX
       To  add  a library to the set of packages pkg-config knows
       about, simply install a .pc file. You should install  this
       file to libdir/pkgconfig.


       Here is an example file:
       # This is a comment
       prefix=/home/hp/unst   # this defines a variable
       exec_prefix=${prefix}  # defining another variable in terms of the first
       libdir=${exec_prefix}/lib
       includedir=${prefix}/include

       Name: GObject                            # human-readable name
       Description: Object/type system for GLib # human-readable description
       Version: 1.3.1
       Requires: glib-2.0 = 1.3.1
       Conflicts: foobar <= 4.5
       Libs: -L${libdir} -lgobject-1.3
       Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib/include


       You  would  normally generate the file using configure, of
       course, so that the prefix, etc. are  set  to  the  proper
       values.


       Files  have  two kinds of line: keyword lines start with a
       keyword plus a colon, and variable definitions start  with
       an  alphanumeric  string plus an equals sign. Keywords are
       defined in advance and have special meaning to pkg-config;
       variables do not, you can have any variables that you wish
       (however, users may expect to retrieve the usual directory
       name variables).


       Note  that  variable  references are written "${foo}"; you
       can escape literal "${" as "$${".


       Name:  This field should be a human-readable name for  the
              package.  Note that it is not the name passed as an
              argument to pkg-config.

       Description:
              This should be a brief description of the package

       Version:
              This should be the  most-specific-possible  package
              version string.

       Requires:
              This is a comma-separated list of packages that are
              required by  your  package.  Flags  from  dependent
              packages  will  be  merged in to the flags reported
              for your package. Optionally, you can  specify  the
              version  of  the required package (using the opera-
              tors =, <, >, >=, <=); specifying a version  allows
              pkg-config  to perform extra sanity checks. You may
              only mention the  same  package  one  time  on  the
              Requires:  line.  If  the  version  of a package is
              unspecified, any  version  will  be  used  with  no
              checking.

       Conflicts:
              This  optional  line  allows  pkg-config to perform
              additional sanity checks, primarily to detect  bro-
              ken  user installations.  The syntax is the same as
              Requires: except that you can list the same package
              more  than  once here, for example "foobar = 1.2.3,
              foobar = 1.2.5, foobar >= 1.3", if you have  reason
              to  do  so. If a version isn't specified, then your
              package conflicts with all  versions  of  the  men-
              tioned  package.  If a user tries to use your pack-
              age and a conflicting package  at  the  same  time,
              then pkg-config will complain.

       Libs:  This  line  should  give the link flags specific to
              your package.  Don't add  any  flags  for  required
              packages;  pkg-config will add those automatically.


       Cflags:
              This line should list the compile flags specific to
              your  package.   Don't  add  any flags for required
              packages; pkg-config will add those  automatically.


AUTHOR
       pkg-config  was  written by James Henstridge, rewritten by
       Martijn van Beers, and rewritten again by  Havoc  Penning-
       ton.  Tim  Janik, Owen Taylor, and Raja Harinath submitted
       suggestions and some code.  gnome-config  was  written  by
       Miguel  de Icaza, Raja Harinath and various hackers in the
       GNOME team.  It was inspired by Owen  Taylor's  gtk-config
       program.


BUGS
       Hah!





                                                    pkg-con1ig(g)