Go to main content

man pages section 1: User Commands

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

ppkg-config (1)

Name

ppkg-config - config

Synopsis

As a replacement for "pkg-config"
$ ppkg-config --libs --cflags --static gio-2.0

#outputs (lines artificially broken up for readability):
# -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
# -pthread -lgio-2.0 -lz -lresolv -lgobject-2.0
# -lgmodule-2.0 -ldl -lgthread-2.0 -pthread -lrt -lglib-2.0

"pkg-config.pl" can be used as an alias for "ppkg-config" on platforms
that support it.  It can also be installed as "pkg-config" though this
is not recommended if your system has a native "pkg-config".

Compare to:
$ pkg-config --libs --cflags --static gio-2.0

#outputs ( "" ):
# -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
# -pthread -lgio-2.0 -lz -lresolv -lgobject-2.0 -lgmodule-2.0
# -ldl -lgthread-2.0 -lrt -lglib-2.0

From another Perl module
use PkgConfig;

my $o = PkgConfig->find('gio');
if($o->errmsg) {
#handle error
} else {
my $prefix = $o->get_var('prefix');
my @cflags = $o->get_cflags;
my @ldflags = $o->get_ldflags;
}

Description

User Contributed Perl Documentation                             PPKG-CONFIG(1)



NAME
       PkgConfig - Pure-Perl Core-Only replacement for pkg-config

SYNOPSIS
   As a replacement for "pkg-config"
           $ ppkg-config --libs --cflags --static gio-2.0

           #outputs (lines artificially broken up for readability):
           # -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
           # -pthread -lgio-2.0 -lz -lresolv -lgobject-2.0
           # -lgmodule-2.0 -ldl -lgthread-2.0 -pthread -lrt -lglib-2.0

       "pkg-config.pl" can be used as an alias for "ppkg-config" on platforms
       that support it.  It can also be installed as "pkg-config" though this
       is not recommended if your system has a native "pkg-config".

       Compare to:
           $ pkg-config --libs --cflags --static gio-2.0

           #outputs ( "" ):
           # -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
           # -pthread -lgio-2.0 -lz -lresolv -lgobject-2.0 -lgmodule-2.0
           # -ldl -lgthread-2.0 -lrt -lglib-2.0

   From another Perl module
           use PkgConfig;

           my $o = PkgConfig->find('gio');
           if($o->errmsg) {
               #handle error
           } else {
               my $prefix = $o->get_var('prefix');
               my @cflags = $o->get_cflags;
               my @ldflags = $o->get_ldflags;
           }

DESCRIPTION
       "PkgConfig" provides a pure-perl, core-only replacement for the
       "pkg-config" utility.

       This is not a description of the uses of "pkg-config" but rather a
       description of the differences between the C version and the Perl one.

       While "pkg-config" is a compiled binary linked with glib, the pure-perl
       version has no such requirement, and will run wherever Perl ( >= 5.6 )
       does.

       The main supported options are the common "--libs", "--cflags",
       "--static", "--exists" and "--modversion".

   SCRIPT OPTIONS
       USAGE

           <packagename1 pkgname2..> [ --options ]

       ARGUMENTS

       By default, a library name must be supplied unless one of --version, or
       --real-version is specified.

       The output should normally be suitable for passing to your favorite
       compiler.

       --libs

       (Also) print linker flags. Dependencies are traverse in order. Top-
       level dependencies will appear earlier in the command line than bottom-
       level dependencies.

       --libs-only-L

       Prints -L/-R part of "--libs". It defines library search path but
       without libraries to link with.

       --libs-only-l

       Prints the -l part of "--libs".

       --libs-only-other

       Prints the part of "--libs" not covered by "--libs-only-L" and
       "--libs-only-l", such as "--pthread".

       --list-all

       List all know packages.

       --cflags

       (Also) print compiler and C preprocessor flags.

       --cflags-only-I

       Prints the -I part of "--cflags"

       --cflags-only-other

       Prints the parts of "--cflags" not covered by "--cflags-only-I".

       --modversion

       Print the version of a given package.

       --static

       Use extra dependencies and libraries if linking against a static
       version of the requested library

       --exists

       Return success (0) if the package exists in the search path.

       --with-path=PATH

       Prepend "PATH" to the list of search paths containing ".pc" files.

       This option can be specified multiple times with different paths, and
       they will all be added.

       --env-only

       Using this option, only paths specified in "PKG_CONFIG_PATH" are
       recognized and any hard-coded defaults are ignored.

       --guess-paths

       Invoke "gcc" and "ld" to determine default linker and include paths.
       Default paths will be excluded from explicit -L and -I flags.

       --define-variable=VARIABLE=VALUE

       Define a variable, overriding any such variable definition in the .pc
       file, and allowing your value to interpolate with subsequent uses.

       --variable=VARIABLE

       This returns the value of a variable defined in a package's .pc file.

       --print-variables

       Print all defined variables found in the .pc files.

       --version

       The target version of "pkg-config" emulated by this script

       --real-version

       The actual version of this script

       --debug

       Print debugging information

       --silence-errors

       Turn off errors. This is the default for non-libs/cflag/modversion
       arguments

       --print-errors

       Print errors to STDERR and takes precedence over "--silence-errors"

       --short-errors

       Ignored, but recognized for compatibility.

       --errors-to-stdout

       Print errors to STDOUT and takes precedence over "--print-errors"

       ENVIRONMENT

       the "PKG_CONFIG_PATH" and "PKG_CONFIG_LIBDIR" variables are honored and
       used as a colon-delimited (semicolon-delimited on Windows) list of
       directories with contain ".pc" files.

       Other environment variables recongized by both "pkg-config" and
       PkgConfig include:

       PKG_CONFIG_ALLOW_SYSTEM_CFLAGS
       PKG_CONFIG_ALLOW_SYSTEM_LIBS

       If Win32API::Registry is installed, on Windows (but not Cygwin)
       PkgConfig will also consult these registry keys.  The names are
       ignored, but the values are paths containing ".pc" files.

       HKEY_CURRENT_USER\Software\pkgconfig\PKG_CONFIG_PATH
       HKEY_LOCAL_MACHINE\Software\pkgconfig\PKG_CONFIG_PATH

       Registry support should be considered somewhat experimental, subject to
       change in the future, though not without good reason.  The rationale
       for this caveat is that this feature is documented in several places,
       but I have yet to find a working version that implements this feature.

   MODULE OPTIONS
       PkgConfig->find

           my $result = PkgConfig->find($library, %options);

       Find a library and return a result object.  $library can be either a
       single name of a library, or a reference to an array of library names

       The options are in the form of hash keys and values, and the following
       are recognized:

       "search_path"
       "search_path_override"
           Prepend search paths in addition to the paths specified in
           $ENV{PKG_CONFIG_PATH} The value is an array reference.

           the "_override" variant ignores defaults (like "PKG_CONFIG_PATH").

       "file_path"
           Specifies the full path of the of the .pc file that you wish to
           load.  It does not need to be in the search path (although any
           dependencies will need to be).  Useful if you know the full path of
           the exact .pc file that you want.

       "exclude_cflags"
       "exclude_ldflags"
       "exclude_cflags_override"
       "exclude_ldflags_override"
           Some ".pc" files specify default compiler and linker search paths,
           e.g.  "-I/usr/include -L/usr/lib". Specifying them on the command
           line can be problematic as it drastically changes the search order.

           The above options will either append or replace the options which
           are excluded and filtered.

           The default excluded linker and compiler options can be obtained
           via @PkgConfig::DEFAULT_EXCLUDE_LFLAGS and
           @PkgConfig::DEFAULT_EXCLUDE_CFLAGS, respectively.

       "static"
           Also specify static libraries.

       "no_recurse"
           Do not recurse dependencies. This is useful for just doing version
           checks.

       "VARS"
           Define a hashref of variables to override any variable definitions
           within the .pc files. This is equivalent to the "--define-variable"
           command-line option.

       A "PkgConfig" object is returned and may be queried about the results:

       $o->errmsg

       An error message, if any. This is a string and indicates an error.

       $o->pkg_exists

       Boolean value, true if the package exists.

       $o->pkg_version

       The version of the package

       $o->get_cflags

       $o->get_ldflags

       Returns compiler and linker flags, respectively.

       In list context, these methods return a list with each argument split
       on unescaped spaces.

       In list context returns a list of compiler and linker flags,
       respectively.

       In scalar context returns a string of compiler and linker flags with
       spaces and quotes escaped correctly.

       $o->get_var($name)

       Get the variable with the given name.

       PkgConfig->Guess

       This is a class method, and will replace the hard-coded default linker
       and include paths with those discovered by invoking ld(1) and cpp(1).

       Currently this only works with GCC-supplied "ld" and GNU "ld".

   INSTALL
       The "Makefile.PL" that comes with "PkgConfig" can take one or more
       "--script" options to change of the name of the script or scripts that
       are installed.

       --script ppkg-config
           This is the default and works on all platforms

       --script pkg-config.pl
           This is installed by default on all platforms except for Windows,
           where the .pl may confuse the shell and cause the script to be
           opened in a text editor.

       --script pkg-config
           This is the default name of the real "pkg-config" and so you have
           to specifically enable it if you want it.

       --script none
           Don't install any scripts.

       Example, install all script names:

        % perl Makefile.PL --script ppkg-config --script pkg-config.pl --script pkg-config

       Example, don't install any scripts:

        % perl Makefile.PL --script none

       You can also set the environment variable PERL_PKG_CONFIG_SCRIPTS to
       the desired --script value (separating each script name with a comma
       ",") to ensure that upgrades of PkgConfig do the same.

   CAVEATS
       On Strawberry Perl "ppkg-config" acts like Strawberry is the system.
       This means that

       o   The .pc files that are bundled with Strawberry are searched by
           default.

       o   The Strawberry include and lib directories are used to compute the
           exclusion lists.

       As of Strawberry 5.20.0.1 PkgConfig is bundled with Strawberry and
       "pkg-config" is installed by default (in addition to "ppkg-config",
       though the "ppkg-config" alias is NOT bundled with Strawberry itself).

       For details on how to patch the .pc files bundled with older
       Strawberries, see the "README.win32" that comes with this Distribution.

   BUGS
       The order of the flags is not exactly matching to that of "pkg-config".
       From my own observation, it seems this module does a better job, but I
       might be wrong.

       Unlike "pkg-config", the scripts "--exists" function will return
       nonzero if a package or any of its dependencies are missing. This
       differs from the behavior of "pkg-config" which will just check for the
       definition of the package itself (without dependencies).


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+------------------------------+
       |ATTRIBUTE TYPE |       ATTRIBUTE VALUE        |
       +---------------+------------------------------+
       |Availability   | library/perl-5/pkgconfig-532 |
       +---------------+------------------------------+
       |Stability      | Volatile                     |
       +---------------+------------------------------+

SEE ALSO
       pkg-config <http://www.freedesktop.org/wiki/Software/pkg-config>
           The original C implementation

       pkgconf <https://github.com/pkgconf/pkgconf>
           An alternative C implementation

       PkgConfig::LibPkgConf
           Perl bindings for "libpkgconf", the same library that "pkgconf" is
           built on.

       ExtUtils::PkgConfig
           A wrapper around the "pkg-config" binary that can be used in your
           "Makefile.PL" or "Build.PL".

       <http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/pkg-config/>
           Another perl implementation of pkg-config

       pkg-config <https://github.com/ruby-gnome2/pkg-config>
           Pure Ruby implementation.

       pykg-config <https://pypi.python.org/pypi/pykg-config/1.2.0>
           A Python implementation.

AUTHOR
       Original Author: M. Nunberg
       Current maintainer: Graham Ollis <plicease@cpan.org>

       Other contributors include:

       Vladimir Timofeev (vovkasm)
       kmx
       Sanel Zukan
       Breno G. de Oliveira (garu)
       Gregor Herrmann
       Ilya Pavlov (ILUX, Ilya33)
       Shawn Laffan (SLAFFAN, shawnlaffan)
       Ari Jolma (AJOLMA)

COPYRIGHT AND LICENSE
       Copyright (C) 2012 M. Nunberg

       This is free software; you can redistribute it and/or modify it under
       the same terms as the Perl 5 programming language system itself.



NOTES
       Source code for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This software was built from source available at
       https://github.com/oracle/solaris-userland.  The original community
       source was downloaded from
       http://www.cpan.org/authors/id/P/PL/PLICEASE/PkgConfig-0.23026.tar.gz.

       Further information about this software can be found on the open source
       community website at http://search.cpan.org/dist/PkgConfig/.



perl v5.32.0                      2018-10-15                    PPKG-CONFIG(1)