summaryrefslogtreecommitdiff
path: root/check-tarball.sh
blob: 86bec147b704a839cce45d5d8bf4a484bc033b6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/bash

# This script checks the contents of a dist tarball against a make
# clean'ed working copy.  The idea is to see if we have unused files
# sitting in cvs that could be removed or if we have files that should
# be dist'ed but aren't.
#
# Of course, a working copy will have a number of files that the
# tarball shouldn't have (e.g. autogen.sh) and vice versa
# (e.g. Makefile).  Fortunately, that's a pretty small fixed list so
# we just filter out those differences.
#
# The script should be run on a ./configure'd component from the
# modular release, for example:
#
#   ./check-tarball.sh cvs/lib/Xi
#
# will check the Xi library, assuming that ./configure has already
# been run in that working copy.  As the script runs, it will make
# clean the working copy.
#
# At the end of the run, the script will diff the list of files in the
# working copy against the list of files in the tarball.  Files in the
# working copy but not in the tarball will show up as deleted lines in
# the diff output.  For example, lib/Xi has XFreeLst.c in the working
# copy but it isn't dist'ed, giving this output:
#
#   --- module-files-24058.txt      2005-09-28 14:09:48.000000000 -0400
#   +++ tar-files-24058.txt 2005-09-28 14:09:49.000000000 -0400
#   @@ -50,7 +50,6 @@
#    src/XDevBell.c
#    src/XExtInt.c
#    src/XExtToWire.c
#   -src/XFreeLst.c
#    src/XGetBMap.c
#    src/XGetDCtl.c
#    src/XGetFCtl.c

# Strip trailing /
dir=${1%%/}

echo Checking $dir

if test ! -e $dir/Makefile; then
    echo $dir not ./configure\'d, bailing out
    exit 1
fi

make -C $dir dist
make -C $dir clean

# We can't easily extract name and version from the configure.ac, so
# we just glob for the dist tarball.

tarball=$dir/*.tar.bz2

blacklist="config.log config.status autogen.sh$ Makefile.in$ Makefile$ config.h$ .libs/ .deps/ configure$ ^autom4te.cache.* CVS/.* .*/$ .cvsignore$ .*tar.bz2$ .*tar.gz$ .*\.o$ .*\.lo$ .*\.Plo$ .*\.la$ .*\.pc$ stamp-h.$ ^libtool$ .*~$"

# handle grep escape madness
escaped_blacklist=$(for f in $blacklist; do echo -n '\('$f'\)\|'; done)
escaped_blacklist=${escaped_blacklist%%\\|}

module_files=module-files-$$.txt
tar_files=tar-files-$$.txt

find -L $dir -type f | sed -e "s,^$dir/,," | grep -v $escaped_blacklist | sort > $module_files

tar tf $tarball | cut -d / -f 2- | grep -v $escaped_blacklist | sort | tail +2 > $tar_files

echo 
echo === diffs to module files: ===
echo 

diff -u $module_files $tar_files

rm $module_files $tar_files