#!/bin/sh # set -v # set -x # # Installation script for the tools of the lab that plug on Alliance # # Author: Frédéric Pétrot (fred@pasta.fr.ea) # for version 0 # # $Id: instool,v 1.3 1999/02/01 14:47:54 alliance Exp $ # SYS=`uname -a | awk '{print $1}'` VER=`uname -a | awk '{print $3}' | awk -F. '{print $1}'` NOD=`uname -n` # depends vraiement de l'archi...est n'a ete teste que sur trash... if [ ! $NOD = "trash" ] ; then echo "Please, run this script from trash" exit 1 fi if [ $SYS = "SunOS" -a $VER = "5" ] ; then MAIL=/labo/gnu/bin/elm DF=/usr/ucb/df DU=/usr/ucb/du DATE=`/asim/gnu/bin/date +"%Y.%m.%d_%H.%M.%S"` elif [ $SYS = "SunOS" -a $VER = "4" ] ; then MAIL=/labo/gnu/bin/elm DF=/usr/bin/df DU=/usr/bin/du DATE=`/asim/gnu/bin/date +"%Y.%m.%d_%H.%M.%S"` elif [ $SYS = "Linux" ] ; then MAIL=/usr/bin/elm DF=/bin/df DU=/bin/du DATE=`/asim/gnu/bin/date +"%Y.%m.%d_%H.%M.%S"` else echo "`basename $0` is ran on an unknown system" echo "use it at your own risks, ..." MAIL=mail DF=df DU=du fi RSH=rsh LOG=$HOME/`basename $0`.$$ BUG=$HOME/`basename $0`_bug.$$ TMP=$HOME/`basename $1` ALCTEAM="alliance-programmers@asim.lip6.fr" BUGTEAM="fred ludo czo" # rep par defaut : alliance/archi/$MACHINE # alliance/share/... TARGET="SunOS Solaris Linux_elf" LABO=/users/soft5/newlabo/alliance CELL_EXTENSIONS="al ap vst vbe cp hns edi spi db dat IDX" CELLS=$LABO/share/cells ETC=$LABO/share/etc MANS=$LABO/share/man echo " @@@@@@ @@@@@@@@@@ @@@@" echo " @@ @ @@ @ @@" echo " @@ @ @@ @ @@" echo " @@ @@@ @@@ @@@@@@ @@ @@@ @@@ @@" echo " @@ @@@ @ @@ @ @@ @@ @@ @@ @@ @@" echo " @@ @@ @@ @@@ @@ @@ @@ @@ @@ @@" echo " @@ @@ @@ @@@@ @@ @@ @@ @@ @@ @@" echo " @@ @@ @@ @@@@ @@ @@ @@ @@ @@ @@" echo " @@ @@ @@ @ @@@ @@ @@ @@ @@ @@ @@" echo " @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@" echo " @@@@@@ @@@@ @@@@ @ @@@@@ @@@@@@ @@@ @@@ @@@@@@" echo echo " Alliance Tools Installation Script" echo echo " Alliance CAD System 3.2, instool beta0" echo " Copyright (c) now, MASI, CAO-VLSI Team" echo " E-mail support: cao-vlsi@lip6.fr" echo echo "News: " echo " the installed binaries are now suffixed '.new'" echo " the include are shared" echo " the authorized cells extensions are $CELL_EXTENSIONS" echo " a log of all installations is available in $HOME/log" echo " a message MUST be given for each installation" echo " the default shell is now sh" if [ $# -lt 2 -o $# -gt 4 ] ; then echo "Syntax: `basename $0` [-v] tool-home-directory message" exit 1 fi if [ $1 = "-v" ]; then verbose=1 shift else verbose=0 fi if [ -z $1 -o -z "${2:-''}" ] ; then echo "Syntax: `basename $0` [-v] tool-home-directory message" exit 1 fi if [ $verbose -ne 0 ] ; then echo "`basename $0` : Checking directories" fi if [ ! -d $1 ] ; then echo "`basename $0` cannot install tool $1" echo "Directory $1 doesn't exist!" exit 2 fi if [ ! -d $1/labo ] ; then echo "`basename $0` cannot install tool $1" echo "Directory $1/labo doesn't exist!" exit 3 fi for i in $TARGET ; do if [ ! -d $1/labo/$i ] ; then echo "`basename $0` cannot install tool $1" echo "Directory $1/labo/$i doesn't exist!" exit 4 fi done bin=0; lib=0; inc=0 for i in $TARGET ; do if [ -d $1/labo/$i/bin ] ; then bin=`expr $bin + 1` fi if [ -d $1/labo/$i/lib ] ; then lib=`expr $lib + 1` fi if [ -d $1/labo/$i/include ] ; then inc=`expr $inc + 1` fi done if [ $bin -eq 0 ]; then echo "No binaries to install, ..." unset bin elif [ ! $bin -eq 3 ]; then echo "`basename $0` cannot install tool $1" echo "Directory $1/labo/archi/bin doesn't exist on all architectures" exit 5 fi if [ $lib -eq 0 -a $inc -eq 0 ]; then echo "No libraries to install, ..." unset lib inc elif [ ! \( $lib -eq 3 -a $inc -eq 3 \) ]; then echo "`basename $0` cannot install tool $1" echo "Directory $1/labo/archi/lib or/and $1/labo/archi/include " echo "doesn't exist on all architectures" exit 6 fi if [ ${bin:-0} -eq 0 -a ${lib:-0} -eq 0 -a ${inc:-0} -eq 0 ] ; then echo "`basename $0` cannot install tool $1" echo "Nothing to be installed" exit 0 fi trap "rm -f $HOME/*.$$ $LOG; exit 0" 0 1 2 15 #trap "exit 12" 0 1 2 15 if [ $verbose -ne 0 ] ; then echo "`basename $0` : Checking directories contents for consistency" fi b=0 if [ ! ${bin:-0} -eq 0 ]; then for i in $TARGET ; do ls -1 $1/labo/$i/bin > $HOME/$i.bin.$$ 2> /dev/null if [ ! -s $HOME/$i.bin.$$ ] ; then b=`expr $b + 1` fi done if [ $b -eq 3 ] ; then for i in $TARGET ; do echo "Please remove $1/labo/$i/bin since it is empty" done unset bin fi fi l=0 h=0 if [ ! ${lib:-0} -eq 0 ]; then for i in $TARGET ; do ls -1 $1/labo/$i/lib > $HOME/$i.lib.$$ 2> /dev/null ls -1 $1/labo/$i/lib/*.a | awk -F/ '{print $NF}' > $HOME/$i.lib.a.$$ 2> /dev/null diff $HOME/$i.lib.$$ $HOME/$i.lib.a.$$ > /dev/null 2>&1 if [ ! $? -eq 0 ] ; then echo "`basename $0` cannot install tool $1" echo "directory $1/labo/$i/lib contains files " echo "that do not end with .a" exit 7 fi ls -1 $1/labo/$i/include > $HOME/$i.inc.$$ 2> /dev/null ls -1 $1/labo/$i/include/*.h | awk -F/ '{print $NF}' > $HOME/$i.inc.h.$$ 2> /dev/null diff $HOME/$i.inc.$$ $HOME/$i.inc.h.$$ > /dev/null 2>&1 if [ ! $? -eq 0 ] ; then echo "`basename $0` cannot install tool $1" echo "directory $1/labo/$i/include contains files " echo "that do not end with .h" exit 7 fi if [ ! -s $HOME/$i.lib.$$ ] ; then l=`expr $l + 1` fi if [ ! -s $HOME/$i.inc.$$ ] ; then h=`expr $h + 1` fi if [ \( ! -s $HOME/$i.lib.$$ -a -s $HOME/$i.inc.$$ \) -o \ \( -s $HOME/$i.lib.$$ -a ! -s $HOME/$i.inc.$$ \) ] ; then echo "`basename $0` cannot install tool $1" echo "Libraries requires includes and vice-versa" exit 7 fi done if [ $l -eq 3 ] ; then echo "Please remove $1/labo/archi/lib since it is empty " unset lib fi if [ $h -eq 3 ] ; then echo "Please remove $1/labo/archi/include since it is empty " unset inc fi fi if [ ${bin:-0} -eq 0 -a ${lib:-0} -eq 0 -a ${inc:-0} -eq 0 ] ; then echo "`basename $0` cannot install tool $1" echo "Nothing to install" exit 1 fi DIR=`echo ${bin:+bin} ${lib:+lib} ${inc:+include}` bins=0; libs=0; incs=0 for i in $TARGET ; do for j in $TARGET ; do if [ ! ${bin:-0} -eq 0 ]; then diff $HOME/$j.bin.$$ $HOME/$i.bin.$$ > /dev/null 2>&1 bins=`expr $bins + $?` fi if [ ! ${lib:-0} -eq 0 ]; then diff $HOME/$j.lib.$$ $HOME/$i.lib.$$ > /dev/null 2>&1 libs=`expr $libs + $?` diff $HOME/$j.inc.$$ $HOME/$i.inc.$$ > /dev/null 2>&1 incs=`expr $incs + $?` fi done done if [ $bins -gt 0 -o $libs -gt 0 -o $incs -gt 0 ] ; then echo "`basename $0` cannot install tool $1" echo "all bin/lib/include directories do not contain the same files" echo "for all target architectures" exit 8 fi echo "`basename $0`: Checking for space on disk :" s=`$DU -s $1/labo/cells $1/labo/etc $1/labo/man \ 2>/dev/null | tail -1 | cut -f 1` for i in $TARGET; do for j in $DIR; do d=`$DU -s $1/labo/$i/$j | tail -1 | cut -f 1` s=`expr $s + $d` done done a=`$DF $LABO | sed -e 's/ */ /g' | tail -1 | cut -f 4` if [ $verbose -ne 0 ] ; then echo "Available disk space $a" echo "Required disk space $s" fi if [ $s -gt $a ] ; then echo "`basename $0`: cannot install tool $1" echo "Not enough space on device for the installation" echo "Ring me again in a few days, ..." exit 23 fi # # echo "+---------------------------------------------------" >> $LOG # echo $DATE >> $LOG # # if [ $verbose -ne 0 ] ; then # echo "`basename $0` : Copying the directories contents" # echo "May take a while, ..." # echo "Cells [$CELL_EXTENSIONS]" # fi # # c=0; nc=0 # if [ -d $1/labo/cells ] ; then # cd $1/labo/cells # for d in `\ls -d *`; do # if [ ! -d $d ]; then continue; fi # echo > $TMP.ext.$$ # for i in $CELL_EXTENSIONS; do # ls -1 $1/labo/cells/$d/*.$i 2> /dev/null > $TMP.cell.$$ # if [ -s $TMP.cell.$$ ] ; then # echo $i >> $TMP.ext.$$ # fi # done # if [ ! -s $TMP.ext.$$ ] ; then # echo "Please remove the $1/labo/cells/$d directory as it" # echo "contains no cells" # else # echo "+---------------------------------------------------" >> $LOG # mkdir -p $CELLS/$d # if [ -f $1/labo/cells/$d/CATAL ]; then # cp $1/labo/cells/$d/CATAL $CELLS/$d # fi # echo "Cells:" >> $LOG # for i in `cat $TMP.ext.$$` ; do # cp $1/labo/cells/$d/*.$i $CELLS/$d >> $BUG 2>&1 # if [ $? -ne 0 ] ; then # echo "`basename $0`: cp returned a non-zero exit status" # echo "that sucks pretty much so I quit leaving things as is" # exit 17 # fi # ls -1 $1/labo/cells/$d | grep \.$i | fmt -70 >> $LOG # done # fi # done # else # if [ $verbose -ne 0 ] ; then # echo "none" # fi # fi # cd # # if [ $verbose -ne 0 ] ; then # echo "Etc" # fi # # if [ -d $1/labo/etc ] ; then # for i in $TARGET; do # if [ -f $1/labo/etc/$i.mk ] ; then # echo "`basename $0` cannot install tool $1" # echo "You're not allowed to install '$i.mk' by yourself boy!" # exit 9 # fi # done # # if [ -f $1/labo/etc/libraries.mk ] ; then # echo "`basename $0` cannot install tool $1" # echo "You're not allowed to install 'libraries.mk' by yourself boy!" # exit 9 # fi # ls -1 $1/labo/etc/* > /dev/null 2> $TMP.etc.$$ # if [ ! -s $TMP.etc.$$ ] ; then # cp $1/labo/etc/* $ETC >> $BUG 2>&1 # if [ $? -ne 0 ] ; then # echo "`basename $0`: cp returned a non-zero exit status" # echo "that sucks pretty much so I quit leaving things as is" # exit 17 # fi # echo "+---------------------------------------------------" >> $LOG # echo "Etc :" >> $LOG # ls -1 $1/labo/etc | fmt -70 >> $LOG # else # echo "Please remove the $1/labo/etc directory as it" # echo "contains no files" # fi # else # if [ $verbose -ne 0 ] ; then # echo "none" # fi # fi # # if [ $verbose -ne 0 ] ; then # echo "Manual pages" # fi # # if [ -d $1/labo/man ] ; then # echo "+---------------------------------------------------" >> $LOG # echo "Manuals :" >> $LOG # for i in 1 2 3 4 5 6 7 8 9 ; do # if [ -d $1/labo/man/man$i ] ; then # ls -1 $1/labo/man/man$i/*.$i > /dev/null 2> $TMP.man$i.$$ # if [ -s $TMP.man$i.$$ ] ; then # echo "Please remove the $1/labo/man/man$i directory as it" # echo "contains no files" # else # cp $1/labo/man/man$i/*.$i $MANS/man$i >> $BUG 2>&1 # if [ $? -ne 0 ] ; then # echo "`basename $0`: cp returned a non-zero exit status" # echo "that sucks pretty much so I quit leaving things as is" # exit 17 # fi # ls -1 $1/labo/man/man$i | grep \.$i | fmt -70 >> $LOG # fi # fi # done # for i in 1 2 3 4 5 6 7 8 9 ; do # if [ -f $TMP.man$i.$$ ] ; then # cat $TMP.man$i.$$ >> $TMP.man.$$ # fi # if [ -f $TMP.man.$$ ] ; then # if [ -s $TMP.man.$$ ] ; then # echo "Please remove the $1/labo/man directory tree as it" # echo "contains no files" # fi # fi # done # else # if [ $verbose -ne 0 ] ; then # echo "none" # fi # fi # if [ $verbose -ne 0 ] ; then echo "The real stuff right now, ..." fi for i in $TARGET ; do echo "+---------------------------------------------------" >> $LOG echo "Target $i " >> $LOG for j in $DIR ; do echo "+---------------------" >> $LOG echo "directory $j " >> $LOG if [ $j = "bin" ] ; then for k in $1/labo/$i/$j/*; do cp $k $LABO/archi/$i/$j/`basename $k`.$DATE if [ $? -ne 0 ] ; then echo "`basename $0`: cp returned a non-zero exit status" echo "that sucks pretty much so I quit leaving things as is" exit 17 fi rm -f $LABO/archi/$i/$j/`basename $k` > /dev/null 2>&1 ln -s $LABO/archi/$i/$j/`basename $k`.$DATE $LABO/archi/$i/$j/`basename $k` if [ $? -ne 0 ] ; then echo "`basename $0`: ln returned a non-zero exit status" echo "that sucks pretty much so I quit leaving things as is" exit 17 fi done elif [ $j = "lib" ] ; then for k in $1/labo/$i/$j/*; do cp $k $LABO/archi/$i/$j >> $BUG 2>&1 if [ $? -ne 0 ] ; then echo "`basename $0`: cp returned a non-zero exit status" echo "that sucks pretty much so I quit leaving things as is" exit 17 fi if [ $i = "SunOS" ] ; then $RSH heavy ranlib $LABO/archi/$i/$j/`basename $k` fi done else cp $1/labo/$i/$j/* $LABO/archi/$i/$j >> $BUG 2>&1 if [ $? -ne 0 ] ; then echo "`basename $0`: cp returned a non-zero exit status" echo "that sucks pretty much so I quit leaving things as is" exit 17 fi fi ls -1 $1/labo/$i/$j | fmt -70 >> $LOG done done for i in $DIR; do if [ $i = "lib" ] ; then if [ -f $HOME/libraries.mk.* ] ; then echo "`basename $0`: Sorry, somebody is updating libraries.mk" echo "waiting until the update is done to finish" fi while [ -f $HOME/libraries.mk.$$ ]; do sleep 2 echo "Still waiting, ..." done $HOME/bin/updatelibmk $LABO/archi/SunOS > $HOME/libraries.mk.$$ mv $ETC/libraries.mk $ETC/libraries.mk.$DATE if [ $? -ne 0 ] ; then echo "`basename $0`: mv returned a non-zero exit status" echo "while copying libraries.mk to libraries.mk.$$" echo "that sucks pretty much so I quit leaving things as is" exit 17 fi mv $HOME/libraries.mk.$$ $ETC/libraries.mk if [ $? -ne 0 ] ; then echo "`basename $0`: mv returned a non-zero exit status" echo "while copying libraries.mk to libraries.mk.$$" echo "that sucks pretty much so I quit leaving things as is" exit 17 fi fi done echo >> $LOG if [ -s $BUG ] ; then $MAIL -s "ALC : Problem while installing `basename $1`" $BUGTEAM < $BUG fi $MAIL -s "ALC : Install of `basename $1`" `basename $1` < $LOG echo $* | $MAIL -s "ALC : Install of `basename $1`" $ALCTEAM cat $LOG >> $HOME/log/`basename $1`.log exit 0