pc

PC(5) File Formats Manual PC(5)

NAME

   file.pc  pkg-config file format

DESCRIPTION

   pkg-config  files  provide  a  useful  mechanism  for storing various information about libraries and packages on a given system.  Information stored by .pc files include compiler and
   linker flags necessary to use a given library, as well as any other relevant metadata.

   These .pc files are processed by a utility called pkg-config, of which pkgconf is an implementation.

FILE SYNTAX

   The .pc file follows a format inspired by RFC822.  Comments are prefixed by a pound sign, hash sign or octothorpe (#), and variable assignment is similar to POSIX  shell.   Properties
   are defined using RFC822-style stanzas.

VARIABLES

   Variable definitions start with an alphanumeric string, followed by an equal sign, and then the value the variable should contain.

   Variable references are always written as "${variable}".  It is possible to escape literal "${" as "$${".

PROPERTIES

   Properties  are  set  using RFC822-style stanzas which consist of a keyword, followed by a colon (:) and then the value the property should be set to.  Variable substitution is always
   performed regardless of property type.

   There are three types of property:

   Literal
           The property will be set to the text of the value.

   Dependency List
           The property will be set to a list of dependencies parsed from the text.  Dependency lists are defined by this ABNF syntax:

           package-list = *WSP *( package-spec *( package-sep ) )
           package-sep  = WSP / ","
           package-spec = package-key [ ver-op package-version ]
           ver-op       = "<" / "<=" / "=" / "!=" / ">=" / ">"

   Fragment List
           The property will be set to a list of fragments parsed from the text.  The input text must be in a format that is suitable for passing to a POSIX shell without any  shell  ex
           pansions after variable substitution has been done.

PROPERTY KEYWORDS

   Name    The displayed name of the package.  (mandatory; literal)

   Version
           The version of the package.  (mandatory; literal)

   Description
           A description of the package.  (mandatory; literal)

   URL     A URL to a webpage for the package.  This is used to recommend where newer versions of the package can be acquired.  (mandatory; literal)

   Cflags  Required compiler flags.  These flags are always used, regardless of whether static compilation is requested.  (optional; fragment list)

   Cflags.private
           Required compiler flags for static compilation.  (optional; fragment list; pkgconf extension)

   Libs    Required  linking  flags  for  this package.  Libraries this package depends on for linking against it, which are not described as dependencies should be specified here.  (op
           tional; fragment list)

   Libs.private
           Required linking flags for this package that are only required when linking statically.  Libraries this package depends on for linking against it statically, which are not de
           scribed as dependencies should be specified here.  (optional; fragment list)

   Requires
           Required dependencies that must be met for the package to be usable.  All dependencies must be satisfied or the pkg-config implementation must not use the package.  (optional;
           dependency list)

   Requires.private
           Required dependencies that must be met for the package to be usable for static linking.  All dependencies must be satisfied or the pkg-config implementation must not  use  the
           package for static linking.  (optional; dependency list)

   Conflicts
           Dependencies that must not be met for the package to be usable.  If any package in the proposed dependency solution match any dependency in the Conflicts list, the package be
           ing considered is not usable.  (optional; dependency list)

   Provides
           Dependencies  that may be provided by an alternate package.  If a package cannot be found, the entire package collection is scanned for providers which can match the requested
           dependency.  (optional; dependency list; pkgconf extension)

EXTENSIONS

   Features that have been marked as a pkgconf extension are only guaranteed to work with the pkgconf implementation of pkg-config.  Other implementations may or may not support the  ex
   tensions.

   Accordingly, it is suggested that .pc files which absolutely depend on these extensions declare a requirement on the pkgconf virtual.

EXAMPLES

   An example .pc file:

   # This is a comment
   prefix=/home/kaniini/pkg   # this defines a variable
   exec_prefix=${prefix}      # defining another variable with a substitution
   libdir=${exec_prefix}/lib
   includedir=${prefix}/include

   Name: libfoo                                  # human-readable name
   Description: an example library called libfoo # human-readable description
   Version: 1.0
   URL: http://www.pkgconf.org
   Requires: libbar > 2.0.0
   Conflicts: libbaz <= 3.0.0
   Libs: -L${libdir} -lfoo
   Libs.private: -lm
   Cflags: -I${includedir}/libfoo

SEE ALSO

   pkgconf(1), pkg.m4(7)

Debian December 15, 2017 PC(5)