build-sys: fix update-potfiles script

Now are using "git ls-files" to avoid finding non-project
files or autoheaders which could break the dist tarball.

For non-git source dirs we assume that any existing POTFILES.in is
up-todate (build from tarball) or we provide at least an empty list
to not be a show-stopper for builds from poor "git archive".

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
This commit is contained in:
Ruediger Meier 2014-06-03 19:07:37 +02:00
parent f339d2a5c2
commit 0a8e0e8b2f
1 changed files with 32 additions and 10 deletions

View File

@ -3,16 +3,38 @@
# Copyright (C) 2009 Karel Zak <kzak@redhat.com>
#
# find all *.c files,
# find all git-tracked and existing *.c and *.h files
# exclude some (sub)directories
# sort the list
# exclude /samples/ subdirectories
# exclude ./tests/ from the list
# and remove "./" prefix
[ ! -f "po/Makevars" ] && \
echo "You must run this script in the top-level directory"
if [ ! -f "po/Makevars" ]; then
echo "error: update-potfiles must run in the top-level directory" >&2
exit 1
fi
find -name "*.c" -or -name "*.h" | \
sort | \
sed '/samples/d; /config\.h/d; /util-linux-.*/d; /\.\/tests/d; s/^\.\///' \
> po/POTFILES.in
# find all git-tracked files
source_files=$(git ls-files . 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$source_files" ]; then
echo "$0: warning: update-potfiles requires git" >&2
# we still go through the rest of this script to provide at least an empty
# list or remove non-existing (deleted) files
source_files=$(cat po/POTFILES.in 2>/dev/null)
fi
# apply include/exclude patterns
source_files=$(
echo "$source_files" \
| sed \
-e '/\(\.h\|\.c\)$/!d' \
-e '/^tests\//d' \
-e '/\/samples\//d' \
)
# throw away non-existing files (dirty git repo)
echo "$source_files" \
| xargs -r find 2>/dev/null \
| sort \
> po/POTFILES.in
# if this script is broken then we have probably an empty list
[ -s po/POTFILES.in ] || echo "$0: warning: po/POTFILES.in is empty" >&2