#! /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. # # Tests for the H5check_version function. # # Programmer: Albert Cheng # Sep 28, 2009 # Variables filled in by the configure process. # Determine the configure options of the hdf5 library and executables. Shared_Lib=@enable_shared@ Static_Lib=@enable_static@ Static_exec=@STATIC_EXEC@ # Function definitions # Print a line-line message left justified in a field of 70 characters. # LINEMSG() { SPACES=" " echo "$* $SPACES" | cut -c1-70 | tr -d '\012' } # Print a "SKIP" message SKIP() { LINEMSG $* echo " -SKIP-" } # Run a test and print PASS or *FAIL*. If a test fails then increment # the `nerrors' global variable and (if $verbose is set) display the # difference between the actual output and the expected output. The # expected output generated according to the parameter values and compared # against actual output. # The expected and actual output files are removed unless $HDF5_NOCLEANUP # has a non-zero value. # $1: the set value of $HDF5_DISABLE_VERSION_CHECK. (unset means not to set # it at all. # $2: Change the version number(s) to cause a mismatch. (none means no # mismatch). # # Expected results: # Value of $HDF5_DISABLE_VERSION_CHECK # unset "" -1 0 1 2 3 # Matched OK OK OK OK OK OK OK # Mismatched W/A W/A W/A W/A W2/OK OK W2/OK # Result codes: # OK: No warning, exit 0. # W/A: Warning, abort and exit non-0. # W2/OK: Different Warning, exit 0. # # Implemented only exit code matching. Still need to match output. TESTING() { DEBUGPRINT command is $0 $* TEST_NAME=tcheck_version # The test name TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary expect=expected_out actual=actual_out actual_err=actual_err_out arguments= h5DisableVersion="$1" wrongversionnumbers="$2" if [ "$h5DisableVersion" = unset ]; then envcmd="" # noop else envcmd="env HDF5_DISABLE_VERSION_CHECK=$h5DisableVersion" fi if [ "$wrongversionnumbers" = none ]; then # OK: No warning, exit 0 cp /dev/null $expect expected_code=0 else arguments=-t"$wrongversionnumbers" case "$h5DisableVersion" in 2) # OK: No warning, exit 0 cp /dev/null $expect expected_code=0 ;; [13-9]|[1-9][0-9]*) # W2/OK: Different Warning, exit 0. cp /dev/null $expect #NEED FIX expected_code=0 ;; *) # W/A: Warning, abort and exit non-0. cp /dev/null $expect #NEED FIX expected_code=1 # non-zero since abort exit code maybe ;; # machine dependent. esac fi # Run test. LINEMSG $envcmd $TEST_NAME $arguments ( echo "#############################" echo "Expected output for $TEST_ERR" echo "#############################" $envcmd $RUNSERIAL $TEST_BIN $arguments ) >$actual 2>$actual_err ret_code=$? if [ \( $expected_code -eq 0 -a $expected_code -eq $ret_code \) -o \ \( $expected_code -ne 0 -a $ret_code -ne 0 \) ]; then echo " PASSED" else echo "*FAILED*" echo " Expected exit code ($expected_code) differs from actual code ($ret_code)" nerrors="`expr $nerrors + 1`" fi # Clean up output file if test -z "$HDF5_NOCLEANUP"; then rm -f $expected_out $actual_out $actual_err fi } # Echo parameters for debugging if verbose mode is on. DEBUGPRINT() { if [ -n "$verbose" ]; then echo $* fi } # MAIN Body nerrors=0 H5_HAVE_EMBEDDED_LIBINFO=`grep '#define H5_HAVE_EMBEDDED_LIBINFO ' ../src/H5pubconf.h` # The build (current) directory might be different than the source directory. if test -z "$srcdir"; then srcdir=. fi # Skip the rest if embedded-libinfo is not enabled. if [ -z "$H5_HAVE_EMBEDDED_LIBINFO" ]; then echo "embedded-libinfo is not enabled. Test skipped." exit 0 fi h5libsettings=../src/libhdf5.settings # Figure out library version numbers from the header file. h5versmajor=`grep '#define H5_VERS_MAJOR' $srcdir/../src/H5public.h | cut -f2` h5versminor=`grep '#define H5_VERS_MINOR' $srcdir/../src/H5public.h | cut -f2` h5versrelease=`grep '#define H5_VERS_RELEASE' $srcdir/../src/H5public.h | cut -f2` DEBUGPRINT $h5versmajor.$h5versminor.$h5versrelease # Three Categories of tests: # Normal: where the version numbers all matched (wrong_version == none). # Mismatched version numbers (could be Major or minor version # or release numbers or a combination of all three.) # Test all the above with different values of the environment variable, # HDF5_DISABLE_VERSION_CHECK, as unset, "", -1, 0, 1, 2, 3 for val_disable_version_check in unset "" -1 0 1 2 3; do for wrong_version in none M m r Mm Mr mr; do TESTING "$val_disable_version_check" "$wrong_version" done done # Check and report results. if [ $nerrors -gt 0 ]; then echo "***$nerrors errors encountered***" exit 1 else echo "No error encountered" exit 0 fi