summaryrefslogtreecommitdiff
path: root/scripts/ac_check_iraf_build
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/ac_check_iraf_build')
-rwxr-xr-xscripts/ac_check_iraf_build139
1 files changed, 139 insertions, 0 deletions
diff --git a/scripts/ac_check_iraf_build b/scripts/ac_check_iraf_build
new file mode 100755
index 0000000..aff6b92
--- /dev/null
+++ b/scripts/ac_check_iraf_build
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+# Attempt to determine the success or failure of an IRAF package build (since
+# mkpkg does not report a useful exit status) by checking the log for any
+# unexpected patterns (assumed to be errors) and confirming whether all the
+# binaries listed in an optional package manifest have been created.
+#
+# Status: 0 success
+# 1 invocation error
+# 2 probable error messages in log
+# 4 build incomplete with respect to manifest
+# 6 both of the above
+
+usage="Usage: ac_check_iraf_build PATH"
+
+# Source some common IRAF package defs (log_name etc.) from the same dir:
+. `dirname "$0"`/ac_iraf_defs
+
+# Parse argument(s):
+st=1
+unset pkg_path
+while [ "$1" != "" ]; do
+ case "$1" in
+ -h)
+ st=0; pkg_path=""
+ break
+ ;;
+ -*)
+ st=1
+ ;;
+ *)
+ if [ "$pkg_path" ]; then
+ st=1
+ else
+ st=0; pkg_path=$1
+ fi
+ ;;
+ esac
+ shift
+done
+
+if [ $st != 0 -o -z "$pkg_path" ]; then
+ echo "$usage" >&2
+ exit $st
+fi
+
+# Add a trailing slash if needed (as per IRAF custom):
+pkg_path=`echo "$pkg_path" | sed -e 's|/*$|/|'`
+
+# Make sure the specified path is readable:
+if [ ! -d "$pkg_path" -o ! -r "$pkg_path" ]; then
+ echo "ERROR: cannot read dir: $pkg_path" >&2
+ exit 1
+fi
+
+# Make sure we can find a package build log and a package-specific list of
+# patterns to be ignored within it:
+bld_log="${pkg_path}${log_name}"
+if [ ! -r "$bld_log" ]; then
+ echo "ERROR: cannot read $bld_log" >&2
+ st=1
+fi
+pkg_patterns="${pkg_path}${pkg_patterns}"
+if [ ! -r "$pkg_patterns" ]; then
+ echo "ERROR: cannot read $pkg_patterns" >&2
+ st=1
+fi
+
+# Check for an optional manifest:
+manifest="${pkg_path}${pkg_manifest}"
+if [ ! -r "$manifest" ]; then
+ echo "Warning: no manifest in $pkg_path" >&2
+ manifest=""
+fi
+
+# Exit due to missing files above:
+[ $st != 0 ] && exit 1
+
+# The environment must already be configured for running/building IRAF:
+if [ -z "$iraf" ]; then
+ echo "ERROR: must configure \$iraf first (eg. AstroConda"\
+ "\"source activate iraf\")" >&2
+ exit 1
+fi
+
+# Add a trailing slash if needed:
+iraf=`echo $iraf | sed -e 's|/*$|/|'`
+
+# Check for master list of expected IRAF build log patterns (used in addition
+# to the package-specific list):
+iraf_patterns="$iraf/ur/mkpkg_patterns"
+if [ ! -r "$iraf_patterns" ]; then
+ echo "ERROR: missing $iraf_patterns" >&2
+ exit 1
+fi
+
+# Look for unexpected string patterns in the log file (NB. grep returns 1 when
+# all lines are successfully filtered out):
+err_log="${pkg_path}${err_log_name}"
+if tr -d '\015' < "$bld_log" | egrep -v -f "$iraf_patterns" -f "$pkg_patterns" > "$err_log"; then
+ st=2
+ echo "ERROR: unexpected build messages in $err_log" >&2
+else
+ rm -f "$err_log"
+fi
+
+# Check the existence of each file listed in the manifest. Currently there is
+# no support for architecture-specific manifests (as we had in Ureka), since we
+# haven't actually used any to date.
+if [ "$manifest" ]; then
+
+ nmissing=0
+ lmissing=""
+
+ exec < $manifest
+ while read line
+ do
+ case "$line" in
+ '#'*|'')
+ continue
+ ;;
+ *)
+ if [ ! -r "${pkg_path}${line}" ]; then
+ nmissing=$((nmissing+1))
+ lmissing="${lmissing} ${line}"$'\n'
+ fi
+ ;;
+ esac
+ done
+
+ if [ $nmissing -gt 0 ]; then
+ echo "ERROR: $nmissing expected file(s) missing after installation:" >& 2
+ echo "$lmissing" >& 2
+ st=$((st+4))
+ fi
+fi
+
+exit $st
+