#! /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. # ## Update HDF5 compiler tools after the HDF5 software has been installed ## ## in a new location. ## ## For help page, use "h5redeploy -help" ## ## ## # Constants definitions EXIT_SUCCESS=0 EXIT_FAILURE=1 # Function definitions # show help page usage() { # A wonderfully informative "usage" message. echo "usage: $prog_name [OPTIONS]" echo " OPTIONS:" echo " -help|help This help message" echo " -echo Show all the shell commands executed" echo " -force No prompt, just do it" echo " -prefix=DIR New directory to find HDF5 lib/ and include/" echo " subdirectories [default: current directory]" echo " -exec-prefix=DIR New directory to find HDF5 lib/" echo " subdirectory [default: ]" echo " -libdir=DIR New directory for the HDF5 lib directory" echo " [default: /lib]" echo " -includedir=DIR New directory for the HDF5 header files" echo " [default: /include]" echo " -tool=TOOL Tool to update. TOOL must be in the current" echo " directory and writable. [default: $h5tools]" echo " -show Show the commands without executing them" echo " " exit $EXIT_FAILURE } # display variable values dump_vars(){ echo "====Showing all variable values=====" echo prefix=$prefix echo h5tools=$h5tools echo "====End Showing=====" } # show actions to be taken show_action() { echo "Update the following tools because they are now installed at a new directory" for t in $foundtools; do echo "${t}:" echo " current setting=`sed -e '/^prefix=/s/prefix=//p' -e d $t`" echo " new setting="\""$prefix"\" done } # Report Error message ERROR() { echo "***ERROR***" echo "$1" } # Main # ############################################################################ ## Installation directories: ## ## prefix architecture-independent files. ## ## exec_prefix architecture-dependent files, default is . ## ## libdir libraries, default is /lib. ## ## includedir header files, default is . ## ## Not used here: ## ## bindir executables, . ## ############################################################################ # Initialization h5tools="h5cc h5pcc h5fc h5pfc h5c++" # possible hdf5 tools foundtools= # tools found and will be modified fmode= # force mode, default is off prefix= exec_prefix= libdir= includedir= # Parse options for arg in $@ ; do case "$arg" in -prefix=*) prefix="`echo $arg | cut -f2 -d=`" ;; -exec-prefix=*) exec_prefix="`echo $arg | cut -f2 -d=`" ;; -libdir=*) libdir="`echo $arg | cut -f2 -d=`" ;; -includedir=*) includedir="`echo $arg | cut -f2 -d=`" ;; -echo) set -x ;; -show) SHOW="echo" ;; -tool=*) h5tools="`echo $arg | cut -f2 -d=`" ;; -help|help) usage ;; -force) fmode=yes ;; *) ERROR "Unknown Option($arg)" usage exit $EXIT_FAILURE ;; esac done # Set to default value, one above where i am, if not given by user if [ -z "$prefix" ]; then prefix=`(cd ..;pwd)` fi if [ -z "$exec_prefix" ]; then exec_prefix='${prefix}' # use single quotes to prevent expansion of $ fi if [ -z "$libdir" ]; then libdir='${exec_prefix}'/lib # use single quotes to prevent expansion of $ fi if [ -z "$includedir" ]; then includedir='${prefix}'/include # use single quotes to prevent expansion of $ fi for x in $h5tools; do if [ -f $x ]; then foundtools="$foundtools $x" if [ ! -w $x ]; then ERROR "h5tool($x) is not writable" exit $EXIT_FAILURE fi fi done if [ -z "$foundtools" ]; then ERROR "found no tools to modify" exit $EXIT_FAILURE fi # Show actions to be taken and get consent show_action # Ask confirmation unless fmode is on if [ x-$fmode = x- ]; then echo "Continue? (yes/no)" read ansx ans=`echo $ansx | tr "[A-Z]" "[a-z]"` if [ x-$ans != x-yes ]; then echo ABORT. No tools changed. exit $EXIT_FAILURE fi fi # Create the update commands CMDFILE=/tmp/h5redeploy.$$ touch $CMDFILE chmod 0600 $CMDFILE echo "/^prefix=/c" >> $CMDFILE echo prefix=\""$prefix"\" >> $CMDFILE echo . >> $CMDFILE echo "/^exec_prefix=/c" >> $CMDFILE echo exec_prefix=\""$exec_prefix"\" >> $CMDFILE echo . >> $CMDFILE echo "/^libdir=/c" >> $CMDFILE echo libdir=\""$libdir"\" >> $CMDFILE echo . >> $CMDFILE echo "/^includedir=/c" >> $CMDFILE echo includedir=\""$includedir"\" >> $CMDFILE echo . >> $CMDFILE (echo w; echo q) >> $CMDFILE # Update them if [ "$SHOW" = "echo" ]; then echo "===Update commands are:====" cat $CMDFILE echo "===End Update commands=====" fi for t in $foundtools; do echo Update $t ... COMMAND="ed - $t" if [ "$SHOW" = "echo" ]; then echo $COMMAND else $COMMAND < $CMDFILE fi done # Cleanup rm -f $CMDFILE exit $EXIT_SUCCESS