Commit graph

62 commits

Author SHA1 Message Date
Dan Nicholson
715cc306b0 Allow errors in .pc files for --list-all
Normally, the parser will exit immediately when it encounters errors in
.pc files. This is good most of the time, but for --list-all, the
purpose is to just get a quick list of packages and not to validate .pc
files. This is especially the case for pkg-config wrappers such as the
Ruby or Bash completion modules that scrape the output from --list-all
and don't expect to encounter errors there.

Freedesktop #26615 (https://bugs.freedesktop.org/show_bug.cgi?id=26615)
2013-05-17 05:53:13 -07:00
Dan Nicholson
2f41b2de42 Silence errors by default with --list-all
When listing all packages, the purpose is to get a quick look at what's
installed and not to scrutinize the validity of each .pc file. To see
errors from the parser during --list-all, the user can just add
--print-errors.
2013-05-17 05:49:02 -07:00
Dan Nicholson
43c1e0e4af Make the --define-prefix feature available on all platforms
Allowing pkg-config to override the prefix variable in .pc files is a
useful feature for making packages relocatable. There's nothing Windows
specific about it.

Freedesktop #63602 (https://bugs.freedesktop.org/show_bug.cgi?id=63602)
2013-05-17 05:13:15 -07:00
Dan Nicholson
409ee76ce1 Allow more control of redefined prefix behavior
Currently the native Win32 builds default to redefining the prefix
variable in .pc files based on their installation paths. This behavior
is not always desired when pkg-config is being used in a traditional
fixed path environment (e.g., /mingw like /usr).

Allow the default to be set via configure switch
--enable/disable-define-prefix, and allow it to be set both ways at
runtime through the --[dont-]define-prefix pkg-config option.
2013-05-17 05:13:14 -07:00
Dan Nicholson
5f9116931d Flush stderr when not immediately exiting
When printing warnings on stderr that don't immediately exit pkg-config,
flush it so that the messages appear in order with stdout. This is
mostly to keep the test suite passing on Windows where output may appear
differently than on Linux.
2013-04-09 05:41:38 -07:00
Dan Nicholson
86c45f0422 Fix handling of --print/silence-errors for all output options
The intention was that errors would be printed for all output options
besides --exists and --atleast/exact/max-version, which are intended to
operate silently. Since want_exists is always set for these latter
options, we can simply use that as the condition and catch all other
output options automatically.

Freedesktop #54390 (https://bugs.freedesktop.org/show_bug.cgi?id=54390)
2012-12-11 12:00:26 -08:00
Dan Nicholson
9cd35c624f Enforce that only the first --atleast/exact/max-version option honored
This provides the user with output matching the behavior of the code.
When multiple --atleast/exact/max-version options are supplied, only the
first will be honored.
2012-12-11 11:59:40 -08:00
Dan Nicholson
548ba5b223 Imply --exists when --atleast/exact/max-version passed
The --atleast/exact/max-version help description implied that it would
return as --exists does. However, this would only occur if no other
output options were set.

Freedesktop #54389 (https://bugs.freedesktop.org/show_bug.cgi?id=54389)
2012-12-11 11:59:40 -08:00
Dan Nicholson
ec11c93ef8 Explicitly set --exists as the default option
This happened basically by accident before when "pkg-config foo" was run
because the code wouldn't find any options set and just fall through to
the end after processing the package arguments. However, it would act
differently in that Requires.private was only enabled with an explicit
--exists.
2012-12-11 11:59:40 -08:00
Dan Nicholson
d1b7dd42d1 Enforce exclusive output options
Currently, any output option (e.g., --version or --libs) will be set as
valid and what's output is at the mercy of the order of the output
handling code in main(). However, most combinations of output would make
no sense to be used together. For example, mixing --modversion and
--print-provides provides no way to differentiate between the output
from the options. Further, mixing --variable and --cflags currently
causes an error because there's no space separating the option outputs.

Instead, keep track of when an output option has been set and ignore
subsequent output options. There are currently two exceptions:

1. Any combination of --cflags* and --libs* are allowed.

2. Both --print-requires and --print-requires-private can be used
   together as the user may just not care which is private.

Freedesktop #54391 (https://bugs.freedesktop.org/show_bug.cgi?id=54391)
2012-12-11 11:59:40 -08:00
Dan Nicholson
469a3d6366 Use flags for --cflags/--libs options
With the output options gathered in a callback, we can be more clever
with the --cflags/--libs options and set the flags mask straight off
without using the intermediate booleans.
2012-12-11 11:59:40 -08:00
Dan Nicholson
d65b2e58d0 Handle output mode options in callback
This will provide one function to handle all the various options the
user could supply sanely.
2012-12-11 11:59:40 -08:00
Dan Nicholson
1b47b03c2a Convert ints used as bools to gbooleans
This matches the GOption documentation that G_OPTION_ARG_NONE should use
a gboolean.
2012-12-11 11:59:40 -08:00
Dan Nicholson
30e7f31318 Split out package processing to separate function to cleanup main
The code handling processing of the packages from the command line was
in an awkward block in main. Split it out to a separate function to keep
main mostly about output.
2012-12-11 11:59:40 -08:00
Dan Nicholson
a15bb1e72e Cleanup local variable declarations
Having the option entries within main and requiring the option variables
to be static is just wrong. Just declare them at file scope like every
other program does.
2012-12-11 11:59:40 -08:00
Dan Nicholson
e8086bc54f Convert to doubly-linked GList
Using a doubly-linked list allows it to be easily traversed in both
directions and makes removing nodes in place much simpler. This adds an
extra pointer to each node and associated manipulation during any list
processing, but this trade seems acceptable over the repeated hacks to
work with singly-linked lists.
2012-12-03 07:02:27 -08:00
Dan Nicholson
90ed8f193f Allow all combinations of --cflags and --libs variants
Use a bitmask to keep track of what Libs/Cflags to output. This makes it
simple to handle any combination of --cflags and --libs option variants.
A lot of excess code is removed in the process as all the flags options
can now be carried around in a single variable.

Freedesktop #54388 (https://bugs.freedesktop.org/show_bug.cgi?id=54388)
2012-11-03 11:07:59 -07:00
Dan Nicholson
d6a14488db Move --print-variables handling after --exists for consistency
The --print-variables output is inconsistent with other printing options
when --exists is supplied or not. Move the handling after --exists like
--print-requires and others requiring a valid package list so that
--exists is given it takes priority and exits early.

Freedesktop #54384 (https://bugs.freedesktop.org/show_bug.cgi?id=54384)
2012-10-30 17:54:55 -07:00
Dan Nicholson
1184d2085a Don't crash on --print-variables when there are no variables
Apparently g_hash_table_foreach doesn't check for NULL input, so make
sure we don't call it to print the variables if the variable list is
empty.

Freedesktop #54721
2012-10-13 09:06:18 -07:00
Dan Nicholson
3ead3dfb78 Enable Requires and Requires.private for --exists
Prior to pkg-config 0.24, --exists honored Requires and
Requires.private. This was regressed in commits 02d5ae3f and 669bfe2e,
which split the handling of Requires and Requires.private out more
correctly for other options. This adds exists to the group of options
that enable the Requires functionality.

Freedesktop #43149
2012-07-11 05:24:23 -07:00
Dan Nicholson
5345892b8e Always use g_free when allocating memory from glib 2012-05-29 17:17:55 -07:00
LRN
7ac6f32625 Don't use deprecated glib function to construct path on win32
g_win32_get_package_installation_subdirectory() has been deprecated
since GLib 2.18 and in recent (2.31) GLib versions disabled entirely by
default. This patch replaces usage of that function by
g_win32_get_package_installation_directory_of_module() and
g_build_filename(). Use the new functions and rework the code a bit so
it leaks less memory.

g_win32_get_package_installation_directory_of_module() is supported
since GLib 2.16. The minimal GLib version is bumped accordingly.

Freedesktop #45742
2012-05-21 21:08:49 -07:00
Dan Nicholson
b87359cc9b Kill unused result variable
Gets rid of a compiler warning.
2012-05-18 09:44:49 -07:00
Dan Nicholson
e91ab1009a Convert to GOption for command line option parsing
Use glib's GOption instead of popt for command line option
handling. The APIs and output are very similar. A couple minor
differences are:

* The callback for handling --define-variable is associated only with
  that option where popt was just leaving the argument and then it was
  handled in a generic callback.

* Remaining arguments after option parsing are in argc/argv while they
  are collected through poptGetArg with popt.

* GOption does not provide the short --usage summary.

This also works around bugs in the command line option handling with
the ancient internal popt.
2012-05-14 14:19:10 -07:00
Dan Nicholson
a83a14c291 Unify handling of operator and command line option version checking
The code for --exact/atleast/max-version was taking a different path
than the handling of operators like =/>=/<=. Make the long option
versions override the operators and take place during the standard
package checking stage. This also means that --print-errors is
respected.

Fixes Freedesktop #8653
2012-05-10 05:51:35 -07:00
Dieter Verfaillie
79c768aadf Revert "Print out \r\n on windows, not just \n"
This reverts commit 25e8ca84ac. This was
working around a bug with mingw/msys shell which seems to be fixed now.

Freedesktop #17053
2012-05-05 10:49:58 -07:00
Tollef Fog Heen
7c45ef3c84 Drop dead code 2011-05-15 11:05:42 +02:00
Johannes Schmid
d690466af4 Add --print-provides and --print-requires(-private) options
These are useful for applications that need to query the pkg-config
database, e.g.  managers or IDEs.
2010-05-10 20:02:53 +02:00
Dan Nicholson
aa4634eb31 Move popt to subdirectory and make a convenience library of it
This keeps a cleaner separation of the pkg-config sources and the
imported popt sources.
2010-05-09 10:22:02 +02:00
Jorn Amundsen
4b80e49ff8 Add listing of variables
Fixes Freedesktop #133
2010-05-09 09:49:13 +02:00
Tollef Fog Heen
25e8ca84ac Print out \r\n on windows, not just \n
This should hopefully fix bug #17053
2009-12-06 22:34:35 +01:00
Tollef Fog Heen
e04ee5a1b8 Fix up help for --silence-errors
Bug #8616
2009-12-06 22:28:30 +01:00
Tollef Fog Heen
0ff14c5ba8 Reduce the width of arguments
This makes the --help output flow easier and look better.
2009-12-06 22:28:08 +01:00
Tollef Fog Heen
39663612a6 2009-06-12 Tor Lillqvist <tml@iki.fi>
* parse.c: On Win32, if the value of a a variable other than the
	"prefix" one starts with the non-overridden value of "prefix",
	then replace that prefix, too, with the run-time one.

	To avoid shadowing warnings, rename a 'p' variable to 'q'.

	* pkg-config.1: Corresponding update.

	* main.c
	* pkg.h: Move the Win32 redefinition of PKG_CONFIG_PC_PATH from
	main.c to pkg.h as it now is needed in pkg.c, too.
2009-06-30 03:47:01 +02:00
Tollef Fog Heen
669bfe2e0d 2009-03-30 Tollef Fog Heen <tfheen@err.no>
* pkg.[ch], main.c, check/check-missing: Don't recurse Requires at
	all unless we need to.  Add check.  Again, thanks to Loïc Minier
	for most of the idea and the implementation.
2009-03-30 20:49:17 +02:00
Tollef Fog Heen
02d5ae3fb6 2009-03-30 Tollef Fog Heen <tfheen@err.no>
* pkg.[ch], parse.[ch], main.c, check/Makefile.am,
	check/check-missing, check/missing-requires-private.pc:
	Skip Requires.private unless we need to look at them for cflags.
	Add test case.  Thanks to Loïc Minier for most of the idea and the
	implementation.  Debian #475031
2009-03-30 20:40:53 +02:00
Tollef Fog Heen
5998a08da4 2008-04-28 Tollef Fog Heen <tfheen@err.no>
* main.c (main): Make sure log is initialized to prevent
	segfaults.
2008-04-28 20:58:36 +02:00
Tollef Fog Heen
cebb308ce4 2008-03-23 Tollef Fog Heen <tfheen@err.no>
* main.c (main): Add logging support from NetBSD.  Thanks to Julio
       M. Merino Vidal for forwarding the patch from ages ago.
2008-03-23 20:51:50 +01:00
Tollef Fog Heen
dce0339076 2008-02-19 Tor Lillqvist <tml@novell.com>
* main.c: Remove the possibility to have a default PKG_CONFIG_PATH
	in the Registry. It is much more flexible to just use environment
	variables. In general the Registry is not used in the ports of
	GTK+ or GNOME libraries and software to Windows.

	* parse.c (parse_line): On Windows, handle also .pc files found in
	a share/pkgconfig folder when automatically redefining a prefix
	variable for the package.

	* pkg-config.1: Corresponding changes.

2008-02-18  Tor Lillqvist  <tml@novell.com>

	* main.c: Fix some bitrot: On Windows, don't use the compile-time
	PKG_CONFIG_PC_PATH, but deduce a default one at run-time based on
	the location of the executable. This was originally what
	pkg-config did on Windows, but it had bit-rotted.
2008-03-23 20:00:00 +01:00
Tollef Fog Heen
89932ecfcf 2008-03-23 Tollef Fog Heen <tfheen@err.no>
* main.c (main): Fix small portability problem by defining all the
	variables in main that are used in the static initialiser as
	static variables.  This makes the IRIX/mipseb compiler happier.
	Thanks to Roland Illig of NetBSD for the patch.  This doesn't
	apply to some of the Win32 variables, but I don't believe that is
	a problem with the existing compilers there.
2008-03-23 17:34:33 +01:00
Tollef Fog Heen
ed75a7dd4b 2008-01-16 Tollef Fog Heen <tfheen@err.no>
* pkg.h, pkg.c (string_list_to_string), pkg-config.1, main.c
             (main): Add sysroot support and document same.  Triggered by
             setting PKG_CONFIG_SYSROOT_DIR in the environment.
2008-01-16 23:10:25 +01:00
Tollef Fog Heen
69f5752d7d 2006-08-16 Tollef Fog Heen <tfheen@err.no>
* main.c (main): Always add the elements from PKG_CONFIG_PATH.
	Freedesktop #4795.
2006-08-16 19:57:14 +02:00
Tollef Fog Heen
3f5c1fa1b6 Try to print out all the errors and not just the first.
2005-10-16  Tollef Fog Heen  <tfheen@err.no>

	* main.c (main): Try to print out all the errors and not just the
	first.
2005-10-16 18:06:02 +00:00
Tollef Fog Heen
ec5f06d60f Add --short-errors
2005-10-16  Tollef Fog Heen  <tfheen@err.no>

	* pkg.c (get_package_quiet): Add get_package_quiet which is just
	the same as get_package except it sets warn to false.

	* pkg.h: Add prototype for get_package_quiet.

	* main.c (main): Add --short-errors flag to suppress most of the
	output when a module is not found.
2005-10-16 17:31:41 +00:00
Arch Librarian
20d118d57a 2005-05-21 Tollef Fog Heen <tfheen@err.no>
Author: tfheen
Date: 2005-05-21 09:14:47 GMT
2005-05-21  Tollef Fog Heen  <tfheen@err.no>

    * check/check-libs-private: New test to check for support for
    private libraries.

    * check/simple.pc (prefix): Add Libs.private header.

    * check/Makefile.am (TESTS): Add check-libs-private test

    * pkg.h: Adjust function prototypes.

    * pkg.c: Add global ignore_private_libs variable.
    (scan_dir): Use the correct free function.  Stop leaking file
    descriptors.
    (package_get_l_libs, packages_get_l_libs, package_get_L_libs,
    packages_get_L_libs): Stop the recursive silliness and go back to
    old behaviour.
    (packages_get_all_libs): Adjust parameters to packages_get_*_libs
    (enable_private_libs, disable_private_libs): Trivial helper
    functions.

    * pkg-config.1: Update documentation wrt search path (Debian
    #308942), update docs for Libs.private and add the problematic
    handling of mixing = and non-= arguments to the bugs section.

    * parse.h: Adjust parameters for parse_package_file to get private
    libs or not.

    * parse.c (trim_and_sub): Fix memory leak.
    (_do_parse_libs): New function including what's common between
    parse_libs and parse_private_libs.
    (parse_libs_private): New function.  Handle private libraries.
    (parse_line): Add . to the list of valid characters in headers (so
    Libs.private works correctly.
    (parse_line): Fix memory leaks.
    (parse_line): Handle Libs.private.
    (parse_package_file): Fix memory leak.

    * main.c (main): Fix memory leak.

    * NEWS: Document changes to inter-library handling.

    * main.c (main): Handle inter-library dependencies old-style, but
    do private libraries too.  Adjust parameters to
    packages_get_*_libs.

    * configure.in: Change comment wrt inter-library handling to talk
    about private libraries instead.
2005-07-14 13:07:18 +00:00
Arch Librarian
c22e6a1838 2005-04-22 Tollef Fog Heen <tfheen@err.no>
Author: tfheen
Date: 2005-04-22 00:19:24 GMT
2005-04-22  Tollef Fog Heen  <tfheen@err.no>

    * main.c (main): Re-add PKG_CONFIG_LIBDIR support which was
    removed by mistake.
2005-07-14 13:07:11 +00:00
Arch Librarian
986e4ebb03 2005-04-01 Tollef Fog Heen <tfheen@err.no>
Author: tfheen
Date: 2005-04-01 21:46:07 GMT
2005-04-01  Tollef Fog Heen  <tfheen@err.no>

    * configure.in: Try to detect whether this architecture supports
    inter-library dependencies.  If so, we default to assuming that
    this support is used and link to the minimal set of libraries
    rather than traversing the full depends set.

    * main.c (main): Only recurse if we want a static library list or
    if this architecture doesn't support inter-library dependencies.
    This will probably expose bugs for libraries which declare
    dependencies in their .pc files but don't actually link against
    each other.

    * pkg.c (packages_get_all_libs): Add recurse option
    (packages_get_L_libs): Add recurse option
    (package_get_L_libs): Add recurse option
    (packages_get_l_libs): Add recurse option
    (package_get_l_libs): Add recurse option

    * pkg.h: Update prototypes to handle the recurse option.
2005-07-14 13:06:42 +00:00
Arch Librarian
d2080ec6d8 2005-03-18 Tollef Fog Heen <tfheen@err.no>
Author: tfheen
Date: 2005-03-26 14:59:26 GMT
 2005-03-18  Tollef Fog Heen  <tfheen@err.no>

       * main.c (main): Use add_search_dirs for both the compile-time
       defined pc_path and the run-time defined PKG_CONFIG_PATH.

       * pkg.h: Add prototype for add_search_dirs.

       * pkg.c (add_search_dirs): Add new function which takes a
       delimiter-separated list as input and add_search_dir's it.
       (package_init): Remove knowledge about which dirs should be
       initially added.  Moved this to main.c(main)

       * ChangeLog: Add emacs variables to set the date to this
       ChangeLog's standard format

       * Makefile.am (INCLUDES): Pass PKG_CONFIG_PCPATH on to main.c

       * configure.in: Add --with-pc-path to define the default search
       path for .pc files.  (Freedesktop #119, #648)
2005-07-14 13:06:23 +00:00
Arch Librarian
971b0cd7c6 Unstaticify variables. (Freedesktop #2459)
Author: tfheen
Date: 2005-02-21 06:46:31 GMT
Unstaticify variables.  (Freedesktop #2459)
2005-07-14 13:06:06 +00:00
Arch Librarian
72b5088eae Obvious fix:
Author: jamesh
Date: 2003-02-22 07:04:02 GMT
Obvious fix:

2003-02-22  James Henstridge  <james@daa.com.au>

    * pkg.h: add missing prototype.

    * main.c (main): print the url if the package is too old, to match
    the output of verify_package().
2005-07-14 13:05:51 +00:00