mirror of
https://github.com/SwallowOS/xorg_lib_libxcb
synced 2025-11-03 21:24:21 +08:00
Program using the xcb sub-modules has indirect compile and runtime dependency of core xcb. To ensure this out we currently list xcb in the Requires field of the pkg-config files. While this provides all the required dependencies for successful compilation this causes over-linking and hides potential linking miss-use against the xcb modules. By moving to Requires.private we retain the compilation and runtime compatibility and avoids any runtime problems. Cc: Keith Packard <keithp@keithp.com> Cc: Alan Coopersmith <alan.coopersmith@oracle.com> References: http://people.freedesktop.org/~dbn/pkg-config-guide.html#faq References: https://wiki.mageia.org/en/Overlinking_issues_in_packaging References: http://err.no/personal/blog/2008/Mar/25 Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Uli Schlachter <psychon@znc.in>
71 lines
1.1 KiB
Bash
Executable File
71 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
case "$AM_SRCDIR" in
|
|
"")
|
|
AM_SRCDIR="."
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
fix=n
|
|
status=0
|
|
case "$1" in
|
|
"-fix")
|
|
fix=y
|
|
;;
|
|
esac
|
|
|
|
for inc in src/*.h; do
|
|
package=xcb-`basename $inc .h`
|
|
pcin="$AM_SRCDIR"/$package.pc.in
|
|
if [ -f $pcin ]; then
|
|
included=`grep '# *include' $inc |
|
|
sed -e 's/[^<"]*[<"]//' -e 's/[>"]//' |
|
|
grep -v 'xcb.h\|xproto.h'`
|
|
requires=`grep '^Requires.private:' $pcin`
|
|
missing=""
|
|
for i in $included; do
|
|
ibase=`basename $i .h`
|
|
r="xcb-$ibase"
|
|
rpcin="$AM_SRCDIR"/$r.pc.in
|
|
if [ -f $rpcin ]; then
|
|
m="$r"
|
|
for has in $requires; do
|
|
if [ $has = $r ]; then
|
|
m=""
|
|
fi
|
|
done
|
|
case "$m" in
|
|
"")
|
|
;;
|
|
*)
|
|
case "$missing" in
|
|
"")
|
|
missing=$m
|
|
;;
|
|
*)
|
|
missing="$missing $m"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
case "$missing" in
|
|
"")
|
|
;;
|
|
*)
|
|
if [ "$fix" = "y" ]; then
|
|
echo $package adding dependency on $missing
|
|
sed -i '/^Requires.private:/s/$/ '"$missing"'/' $pcin
|
|
else
|
|
echo $package missing $missing
|
|
status=1
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
exit $status
|