pkg-config
(1)
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=VARIABLENAME]
[--define-variable=VARIABLENAME=VARIABLEVALUE] [--unin-
stalled] [--exists] [--atleast-version=VERSION] [--exact-
version=VERSION] [--max-version=VERSION] [LIBRARIES...]
Description
User Commands pkg-config(1)
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=VARIABLENAME]
[--define-variable=VARIABLENAME=VARIABLEVALUE] [--unin-
stalled] [--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 special
metadata files. These files are named after the package,
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, semicolon-sepa-
rated) 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 simul-
taneously, it must give each version its own name (for exam-
ple, 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 displayed. 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 suc-
cessfully. If one or more libraries is unknown, pkg-
config exits with a nonzero code, and the contents of
stdout are undefined.
--help
SunOS 5.11 Last change: 7 Jul 2013 1
User Commands pkg-config(1)
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 .pc file, then this option will
cause errors explaining the problem to be 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. This option
can be used alone (to just print errors encountered
locating modules on the command line) or with other
options. The PKG_CONFIG_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 a .pc file, then this option will
keep errors explaining the 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 useful with options such as "--cflags"
or "--modversion" that print errors by default. The
PKG_CONFIG_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 programs:
--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 "com-
pressed" 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", duplicate flags are
merged (maintaining proper ordering), and flags for
dependencies are included in the output.
SunOS 5.11 Last change: 7 Jul 2013 2
User Commands pkg-config(1)
--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 pack-
age's .pc file. Most packages define the variable "pre-
fix", 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 pack-
age "foo-uninstalled" exists, pkg-config will prefer
the "-uninstalled" variant. This allows compila-
tion/linking against uninstalled packages. If you spec-
ify 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 implicitly choosing "-unin-
stalled" packages, so if that variable is set, they
will only have been used if you pass a name like "foo-
uninstalled" on the command line explicitly.)
--exists
--atleast-version=VERSION
--exact-version=VERSION
--max-version=VERSION
These options test whether the package or list of pack-
ages on the command line are known to pkg-config, and
optionally whether the version number of a package
SunOS 5.11 Last change: 7 Jul 2013 %
User Commands pkg-con4ig(1)
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 mes-
sages.
--msvc-syntax
This option is available only on Windows. It causes
pkg-config to output -l and -L flags in the form recog-
nized by the Microsoft Visual C++ command-line com-
piler, 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 prevents
pkg-config from automatically trying to override 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 automatically
sets as described above.
--static
Output libraries suitable for static linking. That
means including any private libraries in the output.
This relies on proper tagging in the .pc files, else a
too large number of libraries will ordinarily be out-
put.
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 search-
ing the path; the default is libdir/pkgcon-
fig:datadir/pkgconfig where libdir is the libdir where
pkg-config and datadir is the datadir where pkg-config
was installed.
SunOS 5.11 Last change: 7 Jul 2013 %
User Commands pkg-con5ig(1)
PKG_CONFIG_DEBUG_SPEW
If set, causes pkg-config to print all kinds of debug-
ging information and report all errors.
PKG_CONFIG_TOP_BUILD_DIR
A value to set for the magic variable pc_top_builddir
which may appear in .pc files. If the environment vari-
able 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 compiling/linking against a package that hasn't
yet been installed.
PKG_CONFIG_DISABLE_UNINSTALLED
Normally if you request the package "foo" and the pack-
age "foo-uninstalled" exists, pkg-config will prefer
the "-uninstalled" variant. This allows compila-
tion/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
PKG_CONFIG_SYSROOT_DIR
Modify -I and -L to use the directories located in tar-
get sysroot. this option is usefull when crosscompil-
ing package that use pkg-config to determine CFLAGS anf
LDFLAGS. -I and -L are modified to point to the new
system root. this means that a -I/usr/include/libfoo
will become -I/var/target/usr/include/libfoo with a
PKG_CONFIG_SYSROOT_DIR equal to /var/target (same rule
apply to -L)
PKG_CONFIG_LIBDIR
Replaces the default pkg-config search directory.
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 direc-
tory where the file was found, and the prefix variable is
SunOS 5.11 Last change: 7 Jul 2013 %
User Commands pkg-con6ig(1)
overridden for that file accordingly.
In addition to the PKG_CONFIG_PATH environment variable, the
Registry keys HKEY_CURRENT_USER\Software\pkgconfig\PKG_CON-
FIG_PATH and HKEY_LOCAL_MACHINE\Software\pkgconfig\PKG_CON-
FIG_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
FOUND,[ACTION-IF-NOT-FOUND]])
PKG_CHECK_MODULES(VARIABLE-PREFIX,MODULES[,ACTION-IF-
The macro PKG_CHECK_MODULES can be used in configure.ac
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.
Note that if there is a possibility the first call to
PKG_CHECK_MODULES might not happen, you should be sure
to include an explicit call to PKG_PROG_PKG_CONFIG in
your configure.ac
PKG_PROG_PKG_CONFIG([MIN-VERSION])
Defines the PKG_CONFIG variable to the best pkg-config
available, useful if you need pkg-config but don't want
to use PKG_CHECK_MODULES.
PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-
IF-NOT-FOUND])
Check to see whether a particular set of modules
exists. Similar to PKG_CHECK_MODULES(), but does not
set variables or print errors.
Similar to PKG_CHECK_MODULES, make sure that the first
instance of this or PKG_CHECK_MODULES is called, or
make sure to call PKG_CHECK_EXISTS manually
SunOS 5.11 Last change: 7 Jul 2013 %
User Commands pkg-con7ig(1)
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
URL: http://www.gtk.org
Requires: glib-2.0 = 1.3.1
Conflicts: foobar <= 4.5
Libs: -L${libdir} -lgobject-1.3
Libs.private: -lm
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 val-
ues.
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
URL: An URL where people can get more information about and
download the package
SunOS 5.11 Last change: 7 Jul 2013 %
User Commands pkg-con8ig(1)
Version:
This should be the most-specific-possible package ver-
sion 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 pack-
age. Optionally, you can specify the version of the
required package (using the operators =, <, >, >=, <=);
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 addi-
tional sanity checks, primarily to detect broken 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 ver-
sion isn't specified, then your package conflicts with
all versions of the mentioned package. If a user tries
to use your package 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.
Libs.private:
This line should list any private libraries in use.
Private libraries are libraries which are not exposed
through your library, but are needed in the case of
static linking.
Cflags:
This line should list the compile flags specific to
your package. Don't add any flags for required pack-
ages; pkg-config will add those automatically.
AUTHOR
pkg-config was written by James Henstridge, rewritten by
Martijn van Beers, and rewritten again by Havoc Pennington.
Tim Janik, Owen Taylor, and Raja Harinath submitted sugges-
tions and some code. gnome-config was written by Miguel de
SunOS 5.11 Last change: 7 Jul 2013 %
User Commands pkg-con9ig(1)
Icaza, Raja Harinath and various hackers in the GNOME team.
It was inspired by Owen Taylor's gtk-config program.
BUGS
pkg-config does not handle mixing of parameters with and
without = well. Stick with one.
ATTRIBUTES
See attributes(5) for descriptions of the following
attributes:
+---------------+----------------------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+----------------------------+
|Availability | developer/build/pkg-config |
+---------------+----------------------------+
|Stability | Volatile |
+---------------+----------------------------+
NOTES
This software was built from source available at
https://java.net/projects/solaris-userland. The original
community source was downloaded from http://pkgcon-
fig.freedesktop.org/releases/pkg-config-0.23.tar.gz
Further information about this software can be found on the
open source community website at http://www.freedesk-
top.org/wiki/Software/pkg-config.
SunOS 5.11 Last change: 7 Jul 2013 %