Commit graph

6 commits

Author SHA1 Message Date
Dan Nicholson
9adfd9ebfc Only strip duplicate arguments when they appear consecutively
pkg-config strips all duplicate arguments from the flag output string.
This is done for 2 reasons:

1. When a package shows up twice in the final package list after
resolving all Requires, stripping was used to ensure it's flags only
showed up once at the correct location.

2. An optimization so that the output string is not excessively long.

Since commit c6ec7869, 1. is no longer necessary as the final package
list only contains each package once. 2. causes problems when applied
too aggressively since some arguments have different semantics depending
on the prior or subsequent arguments.

To keep a bit of optimization, the stripping is reduced to only removing
consecutive duplicate arguments. This should ensure that the semantics
are kept intact while removing obviously unnecessary arguments.

The drawback is that some arguments will now appear multiple times in
the output when they previously would have only appeared once. Here we
have to rely on the tools using these arguments to handle the duplicates
appropriately since there is no way for pkg-config to encode all the
semantics of those arguments. Another thing that can help this situation
is if pkg-config is used for all packages in the Requires chain so that
the Libs/Cflags of each package only pertain to itself and don't encode
the compiling/linking rules of a 3rd party package.

Freedesktop #16101 (https://bugs.freedesktop.org/show_bug.cgi?id=16101)
2012-12-04 13:04:57 -08:00
Dan Nicholson
5b6ec1b6e9 Output -l and other Libs flags in the order they appear
Often other Libs flags have semantics that are based on their context
with -l arguments. For example, the GNU linker options
-Bdynamic/-Bstatic pertain only to the objects or link options that
follow them. So, a valid link command containing these options would get
mangled by pkg-config since it separates -l flags from others..

-Bdynamic -la -Bstatic -lb -> -Bdynamic -Bstatic -la -lb

Instead, output -l and other Libs flags in a single pass so they mantain
their ordering.

Freedesktop #19950 (https://bugs.freedesktop.org/show_bug.cgi?id=19950)
2012-12-04 13:04:57 -08:00
Dan Nicholson
05f319d3e5 Output -L Libs flags before other Libs flags
Outputting other Libs flags such as -Wl,foo just prior to the -l Libs
flags gives a better chance the --libs output will be correct. This
should be no change in the usage of the output since pkg-config
currently groups all flag types together.
2012-12-04 13:04:57 -08:00
Dan Nicholson
e0d3ce93a0 Sort -other Libs and Cflags by package order instead of path order
For some flags, pkg-config will sort them by the depth of their .pc path
before outputting. The idea is that flags from a deeper path should come
earlier in the command line. This makes sense for -L and -I flags, but
not for generic linker and compiler flags. For these flags and -l flags,
it makes sense to sort them only by package order.
2012-12-04 13:04:57 -08:00
Dan Nicholson
428362266e Remove duplicate packages after resolving requires
Makes the resolved package list be correctly serialized with each
package only appearing once. This provides more consistency between the
various flag outputs by ensuring that the flags from each package are
only grabbed once. This makes a difference since the duplicate flag
stripping happens from the end of the output (-l) or the beginning of
the output (-L/-I/other).
2012-12-03 07:05:43 -08:00
Dan Nicholson
f5b93bf1b1 Test stripping of duplicate flags
pkg-config aggressively strips all duplicate arguments from the final
output it builds. This is not only and optimization, but it also allows
the flag ordering to work correctly when a package on the command line
is required by another on the command line.
2012-11-28 05:52:13 -08:00