mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-15 07:40:23 +08:00
157 lines
4.2 KiB
Bash
Executable File
157 lines
4.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright by The HDF Group.
|
|
# Copyright by the Board of Trustees of the University of Illinois.
|
|
# All rights reserved.
|
|
#
|
|
# This file is part of HDF5. The full HDF5 copyright notice, including
|
|
# terms governing use, modification, and redistribution, is contained in
|
|
# the files COPYING and Copyright.html. COPYING can be found at the root
|
|
# of the source code distribution tree; Copyright.html can be found at the
|
|
# root level of an installed copy of the electronic HDF5 document set and
|
|
# is linked from the top-level documents page. It can also be found at
|
|
# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have
|
|
# access to either file, you may request a copy from help@hdfgroup.org.
|
|
#
|
|
|
|
# Check that all the files in MANIFEST exist and (if this is a
|
|
# GIT checkout) that all the GIT-managed files appear in the
|
|
# MANIFEST.
|
|
#
|
|
|
|
verbose=yes
|
|
MANIFEST=/tmp/HD_MANIFEST.$$
|
|
AUTOGEN=./autogen.sh
|
|
AUTOGEN_LOG=/tmp/autogen.log.$$
|
|
|
|
# Main
|
|
test "$verbose" && echo " Checking MANIFEST..." 1>&2
|
|
# clean up $MANIFEST file when exits
|
|
trap "rm -f $MANIFEST" 0
|
|
|
|
# Only split lines on newline, not whitespace
|
|
set -f
|
|
IFS='
|
|
'
|
|
|
|
# First make sure i am in the directory in which there is an MANIFEST file
|
|
# and then do the checking from there. Will try the following,
|
|
# current directory, parent directory, the directory this command resides.
|
|
if [ -f MANIFEST ]; then
|
|
continue
|
|
elif [ -f ../MANIFEST ]; then
|
|
cd ..
|
|
else
|
|
commanddir=`dirname $0`
|
|
if [ -d "$commanddir" -a -f $commanddir/MANIFEST ]; then
|
|
cd $commanddir
|
|
continue
|
|
else
|
|
echo MANIFEST file not found. Abort.
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Do an autogen if generated files (e.g., configure) is not present
|
|
if [ ! -f configure ]; then
|
|
echo " running $AUTOGEN"
|
|
$AUTOGEN > $AUTOGEN_LOG 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo $AUTOGEN encountered error. Abort.
|
|
echo output from $AUTOGEN:
|
|
cat $AUTOGEN_LOG
|
|
exit 1
|
|
fi
|
|
rm $AUTOGEN_LOG
|
|
fi
|
|
|
|
# Check for duplicate entries. This can be done at any time, but it may as
|
|
# well be sooner so that if something else fails the presence of duplicates
|
|
# will already be known.
|
|
errcode=0
|
|
DUPLICATES=`perl -ne 's/#.*//; next if /^\s*$/; if ($uniq{$_}++) { print $_; }' MANIFEST`
|
|
if [ "$DUPLICATES" ]; then
|
|
cat 1>&2 <<EOF
|
|
These entries appear more than once in the MANIFEST:
|
|
$DUPLICATES
|
|
Please remove the duplicate lines and try again.
|
|
|
|
EOF
|
|
errcode=1
|
|
fi
|
|
|
|
# Copy the manifest file to get a list of file names.
|
|
grep '^\.' MANIFEST | expand | cut -f1 -d' ' >$MANIFEST
|
|
|
|
for file in `cat $MANIFEST`; do
|
|
if [ ! -f $file ]; then
|
|
echo "- $file"
|
|
fail=yes
|
|
fi
|
|
done
|
|
|
|
# Get the list of files under version control and check that they are
|
|
# present.
|
|
#
|
|
# First get a list of all the pending files with git status and
|
|
# check those.
|
|
git_stat=`git status -s`
|
|
for file in $git_stat; do
|
|
|
|
# Newly added files are not listed by git ls-files, which
|
|
# we check later.
|
|
|
|
# The line listing new files starts with 'A'.
|
|
letter=`echo $file | head -c 1`
|
|
if [ "$letter" = "A" ]; then
|
|
# Convert the git status columns to './' so it matches
|
|
# the manifest file name.
|
|
#
|
|
# There is a space between the status columns and file name, hence
|
|
# the '3'.
|
|
path=`echo $file | sed 's/^.\{3\}/\.\//g'`
|
|
# Ignore directories
|
|
if [ ! -d $path ]; then
|
|
if (grep ^$path$ $MANIFEST >/dev/null); then
|
|
:
|
|
else
|
|
echo "- $path"
|
|
fail=yes
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Next check git ls-files, which gets a list of all files that are
|
|
# checked in.
|
|
git_ls=`git ls-files`
|
|
for file in $git_ls; do
|
|
path="./${file}"
|
|
# Ignore directories
|
|
if [ ! -d $path ]; then
|
|
if (grep ^$path$ $MANIFEST >/dev/null); then
|
|
:
|
|
else
|
|
echo "+ $path"
|
|
fail=yes
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Finish up
|
|
if [ "X$fail" = "Xyes" ]; then
|
|
cat 1>&2 <<EOF
|
|
The MANIFEST is out of date. Files marked with a minus sign (-) no
|
|
longer exist; files marked with a plus sign (+) are GIT-managed but do
|
|
not appear in the MANIFEST. Please remedy the situation and try again.
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
if [ $errcode -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
test "$verbose" && echo " The MANIFEST is up to date." 1>&2
|
|
exit 0
|