diff --git a/src/tools/Makefile.Host b/src/tools/Makefile.Host index 17cdac1fd..f2e68df8c 100644 --- a/src/tools/Makefile.Host +++ b/src/tools/Makefile.Host @@ -8,7 +8,7 @@ include $(TOP)/config/CONFIG_BASE # # WIN32 also uses rm.pl, cp.pl, mkdir.pl, rmdir.pl # byt they are called from here, not installed -SCRIPTS := installEpics.pl makeBaseApp.pl makeBaseApp +SCRIPTS := installEpics.pl makeBaseApp.pl makeBaseApp installEpics # Before anything is done, installEpics has to be in place. # The first action in a full build & install is 'make inc.host', diff --git a/src/tools/installEpics b/src/tools/installEpics new file mode 100755 index 000000000..d5472dc6d --- /dev/null +++ b/src/tools/installEpics @@ -0,0 +1,97 @@ +#!/bin/sh + +# InstallEpics +# +# InstallEpics is used within makefiles to copy new versions of +# files into a destination directory. +# +########################################################## +TOOL=`basename $0` +MODE=755 +CREATE_DIR=0 +USAGE="Usage: + $TOOL [ -m mode ] file ... directory + + -m mode Set the mode for the installed file (0755 by default) + file Name of file + directory Destination directory +" +# get command line options +while getopts m:g:o:csd OPT +do + + case $OPT in + m) MODE=$OPTARG;; + g | o) echo "$USAGE"; echo "$i $OPTARG not implemented";; + c | s) echo "$USAGE"; echo "$i not implemented";; + d) CREATE_DIR=1;; + --) break;; + esac +done +shift `expr $OPTIND - 1` + +# at least two args required +if [ $# -lt 2 ] +then + echo "Nothing to install" + exit +fi + +INSTALL_DIR= +FILELIST= +for i +do + FILELIST="${FILELIST} ${INSTALL_DIR}"; INSTALL_DIR=$i; shift; +done + +if [ ! -d "${INSTALL_DIR}" ] ;then + if [ ${CREATE_DIR} != "0" ] ;then + OLDIFS=${IFS} + IFS=/ + DIRNAME= + for DIR in ${INSTALL_DIR} + do + if [ "${DIR}" = "." ] || [ "${DIR}" = ".." ] ;then + if [ "${DIRNAME}" = "" ] ;then + DIRNAME=${DIR} + else + DIRNAME=${DIRNAME}/${DIR} + fi + else + DIRNAME=${DIRNAME}/${DIR} + if [ ! -d "${DIRNAME}" ] ;then + mkdir "${DIRNAME}" + fi + fi + done + IFS=${OLDIFS} + else + echo "$USAGE\n Can't find directory '${INSTALL_DIR}'" + exit 1 + fi +fi + +for FILE in ${FILELIST} +do + if [ ! -f ${FILE} ] ;then + echo "$USAGE\n Can't find file '${FILE}'" + exit 1 + fi + + TEST= + FILEBASENAME=`basename ${FILE}` + if [ -f ${INSTALL_DIR}/${FILEBASENAME} ] ; then + #Is ${INSTALL_DIR}/${FILEBASENAME} link timestamp newer than ${FILE} + TEST=`find ${INSTALL_DIR} -name "${FILEBASENAME}" -newer ${FILE} -print` + fi + if [ "${TEST}x" = "x" ] ; then + #echo "Installing ${FILEBASENAME}" + rm -f ${INSTALL_DIR}/${FILEBASENAME} + cp -p ${FILE} ${INSTALL_DIR}/${FILEBASENAME} + chmod ${MODE} ${INSTALL_DIR}/${FILEBASENAME} + else + echo "${INSTALL_DIR}/${FILEBASENAME} is up to date" + fi +done + +exit 0