If setlocale isn't called, GNU gettext will try to convert translated
text to ASCII because the default locale is C. It isn't always possible
and it causes question marks to be shown on FreeBSD.
The iteration order of GHashTable changed in GLib 2.59, which broke the
check-print-options test, as it relied on a fixed output order from the
--list-all argument to pkg-config.
Fix that by making print_package_list() output in alphabetical order by
Package.key; and update the test to match. This should work with older
and newer versions of GLib.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Requires.private and Libs.private are skipped unless --static is in use.
However, the parser was checking for Libs.private and this option in a
single conditional unlike Requires.private. This was making the check
fall through to the else and emit an "Unknown keyword" debug message
when --static was not used. This was harmless but not true.
https://bugs.freedesktop.org/show_bug.cgi?id=99770
Treat -isystem and -idirafter as -I Cflags since they control the
compiler search path. Adjust the sysroot handling so that the arguments
to these options have the sysroot prefixed. However, leave them out of the
system Cflags handling since these directives are explicitly trying to
adjust the compiler's system header search behavior.
The special-flags test case output needs adjustment since all the flags
are now considered -I flags and come out in the order specified in the
pc file.
https://bugs.freedesktop.org/show_bug.cgi?id=97337
Backport two patches from upstream glib to handle -Wformat-nonliteral
included by default with GCC 6. Ideally the snapshot should be updated,
but this fix the issue until that happens.
https://bugs.freedesktop.org/show_bug.cgi?id=95326
The issue of PKG_PROG_PKG_CONFIG being run first from a conditional
affects more than PKG_CHECK_MODULES and PKG_CHECK_EXISTS since
PKG_PROG_PKG_CONFIG is AC_REQUIRE'd from many other macros. Describe the
issue completely in the PKG_PROG_PKG_CONFIG section.
The sentence is clearly referring to the issue of running
PKG_PROG_PKG_CONFIG from outside of a conditional. Thanks to Reuben
Thomas for the suggestion.
https://bugs.freedesktop.org/show_bug.cgi?id=99885
The pkg-config source code is full of weird whitespace, the sort that
git diff --check would complain about. Attached is a small patch that
cleans this up in pkg.m4 so that it doesn't propagate into other
packages.
https://bugs.freedesktop.org/show_bug.cgi?id=99522
In Autoconf output from PKG_CHECK_MODULES in pkg.m4, the "checking for"
message refers to the first argument of PKG_CHECK_MODULES, the variable
prefix, instead of the second argument, the module being checked for.
This results in strange output (like ALL CAPS module names) in various
packages. And when probing for modules, one can't always use a variable
prefix that matches the module name (since ‘-’ and other characters
aren't allowed in variable names), so the Autoconf output is going to
refer to something odd.
The status output should reference the module name being probed for,
both because it looks nicer and because, when debugging problems, this
references the actual thing being probed for on the system, rather than
an internal implementation detail.
Signed-off-by: Guillem Jover <guillem@hadrons.org>
https://bugs.freedesktop.org/show_bug.cgi?id=98334
None of the environment variables affecting the system include and
library paths were documented. This includes the pkg-config specific
variables like PKG_CONFIG_SYSTEM_INCLUDE_PATH as well as the GCC
variables like C_INCLUDE_PATH.
https://bugs.freedesktop.org/show_bug.cgi?id=99224
Currently pkg-config scans all .pc files from the search path during
initialization. That makes some of the code simpler and works fine when
there are not many .pc files on the system. When there are a lot of .pc
files, then this represents a lot of wasted effort.
Rework the package gathering so that it happens as needed. To support
the --list-all mode, the scanning at initialization can still be done.
https://bugs.freedesktop.org/show_bug.cgi?id=98215
If the original prefix setting is empty, skip prepending the redefined
prefix to other variables. This works the same as if the pc file doesn't
have a prefix variable at all.
https://bugs.freedesktop.org/show_bug.cgi?id=97453-empty
Adds a hash table to the package list expansion to avoid iterating over
the children of package nodes that have already been visited. Without
this, the expansion is exponential. For library sets with a high degree
of dependency, iteration over the tree with revisiting results, in
practice, in significant slow down at best and pkg-config failure due to
memory exhaustion at worst. The resulting algorithm is equivalent to a
topological sort.
In the last internal glib update, the glib configure script changed the
OSX framework flags from the form of "-framework Foo" to
"-Wl,framework,Foo". Unfortunately, libtool only understands the prior
form and doesn't include the appropriate -framework flags in the
libglib-2.0.la file. This ultimately causes pkg-config to fail to link
properly:
Undefined symbols for architecture x86_64:
"_CFRelease", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_CFStringGetCString", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_CFStringGetCStringPtr", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_CFStringGetLength", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_CFURLCopyFileSystemPath", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_CFURLCreateFromFSRef", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_FSFindFolder", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
"_kCFAllocatorSystemDefault", referenced from:
_find_folder in libglib-2.0.a(libglib_2_0_la-gutils.o)
ld: symbol(s) not found for architecture x86_64
Upstream has fixed this by including the new style -framework flags in
the glib-2.0.pc file. We can't use that here as we're bootstrapping
pkg-config itself. Rather than work around this with an OSX platform
check in pkg-config's configure, carry a downstream patch to revert
glib's configure to using the old format.
https://bugs.freedesktop.org/show_bug.cgi?id=92902
Add some more tests for handling unusual variables such as those that
are quoted or that contain shell characters. This should help make the
--variable output more reliable in the future.
https://bugs.freedesktop.org/show_bug.cgi?id=93284
The change to unquote values in the --variable output broke users that
had shell special characters in the variable. Instead, only unquote if
the value starts with " or '. A larger fix to do a full unquote, split
and escaping like --cflags/--libs is possible, but that might break the
old semantics even further.
Add a new function, parse_package_variable(), to handle that logic.
https://bugs.freedesktop.org/show_bug.cgi?id=93284
pkg-config allows a way to override package variables through the
--define-prefix interface, but this is very cumbersome to do in a global
way since it always needs to be passed on the command line and the
override cannot be scoped to a single packge.
Allow overriding package variables using environment variables of the
form PKG_CONFIG_$PACKAGE_$VARIABLE. For example, setting
PKG_CONFIG_GLADEUI_2_0_CATALOGDIR will override the variable
"catalogdir" in the "gladeui-2.0" package.
https://bugs.freedesktop.org/show_bug.cgi?id=90917
This adds a set of NMake Makefiles that can be used to build pkg-config on
Windows using Visual Studio. Note that, since the Visual Studio builds of
GLib does not use pkg-config, this NMake Makefile set does not support the
build of the bundled GLib sources, instead, having GLib built beforehand
is required.
This adds a pre-configured config.h(.win32.in) that can be used for builds
on Visual Studio, where autotools is normally not available, so that we
can build pkg-config on Visual Studio.
Port the code to use the GDir APIs from dirent so that we don't have to
depend on a dirent implementation on platforms that do not have it, such
as Visual Studio, so that it is possible to build pkg-config out of the
box on any platform that is supported by GLib (and the bundled GLib).
Using # leaves the comments within the generated configure file, which
is just unnecessary bloat since no one would read the generated
configure file for the documentation of the macros.
This was determined by counting the number of changes to pkg.m4 since
the initial serial number was added. The trailing comment is also
updated to have the version number substituted.
While PKG_PROG_PKG_CONFIG checks the version of pkg-config available at
build time, it doesn't check the version of the pkg-config macros being
used. PKG_PREREQ (like AC_PREREQ or LT_PREREQ) can be used to check the
version of the macros in use when configure is being generated by the
developer.
https://bugs.freedesktop.org/show_bug.cgi?id=89267