Validate .pc file Requires lines
authorKeith Packard <keithp@keithp.com>
Wed, 12 Feb 2014 22:15:45 +0000 (14:15 -0800)
committerUli Schlachter <psychon@znc.in>
Sat, 22 Mar 2014 13:44:52 +0000 (14:44 +0100)
This walks through the .pc.in files and makes sure all of the Requires
lines express sufficient dependency information.

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
Makefile.am
check-pc-requires [new file with mode: 0755]

index 387c2f2..e912489 100644 (file)
@@ -86,8 +86,14 @@ pkgconfig_DATA += xcb-xvmc.pc
 endif
 
 
+AM_TESTS_ENVIRONMENT = \
+       AM_SRCDIR=${srcdir}
+
+TESTS=check-pc-requires
+
 EXTRA_DIST = \
 tools/README \
 tools/api_conv.pl \
 tools/constants \
-autogen.sh
+autogen.sh \
+$(TESTS)
diff --git a/check-pc-requires b/check-pc-requires
new file mode 100755 (executable)
index 0000000..0fd9c65
--- /dev/null
@@ -0,0 +1,70 @@
+#!/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:' $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:/s/$/ '"$missing"'/' $pcin
+                       else
+                           echo $package missing $missing
+                           status=1
+                       fi
+                       ;;
+               esac
+       fi
+done
+exit $status