#!/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 COPYING file, which can be found at the root of the source code # distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. # 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 <$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 <&2 exit 0