diff options
Diffstat (limited to 'Install.in')
-rwxr-xr-x | Install.in | 983 |
1 files changed, 983 insertions, 0 deletions
diff --git a/Install.in b/Install.in new file mode 100755 index 0000000..fc3433a --- /dev/null +++ b/Install.in @@ -0,0 +1,983 @@ +#!/bin/sh +### Copyright (C) 1991, 1992, Cygnus Support +### All Rights Reserved. + +### This really needs to nestle up snuggly to the Release notes. If you change +### this script, please be sure the release notes get coordinated too. + +set -e + +### this is our version number. +VERSION=cygnus-sol2-||RELNO|| + +### this is the default installation repository. We use this to test whether or +### not GCC_EXEC_PREFIX should be set when doing "Install test comp-tools". +#INSTALLDIR_DEFAULT=/giga/rich/tmp/installdir +INSTALLDIR_REAL=/opt +INSTALLDIR_DEFAULT=${INSTALLDIR_REAL} +### this is where we install into. (useful for testing). +INSTALLDIR=${INSTALLDIR_DEFAULT} + +### where to write the log files +LOGDIR=${INSTALLDIR}/${VERSION} + +### who to call in bad situations +HOTLINE="the Cygnus Support Hotline at +1 415 322 7836" + +### what the release doc is called and a few sections thereof +NOTES="the Installation Notes" +CHANGING_PATHS="\"Changing the Paths\"" +NO_ACCESS="\"No Access to ${INSTALLDIR}\?\"" +MIGHT_WRONG="\"Some Things that Might go Wrong\"" +WHY_FIXINCLUDES="Why Convert System Header Files\?" +ANOTHER_TAPE="\"Steps to install with another machine\'s tape drive\"" + +### for debugging +#PATH=/bin:/usr/bin ; export PATH + +### default the tape device +case "${TAPE}" in + "") TAPE=||DEVdflt|| + ;; + *) + ;; +esac # ${TAPE} + +### clear and/or initialize some variables +ARCH= +TOOLS= +FTPRELEASE=no + +REMOVE=no +EXTRACT=no +FIXINCLUDES=no +TESTINSTALLATION=no + +INSTALLHOST=default +ERROR= + +### where the binaries are in the release +#EXECDIR=${VERSION}/H-${INSTALLHOST} +EXECDIR=${VERSION} + +### some tool defaults +### perhaps these should be hard coded to absolute paths instead? +TAR=tar +TARKEYS="xvvopf -" +SED=sed +MT=mt + +### trigger words on the command line are: +### bin, src +### emacs, comp-tools +### -tape=/dev/device +### -installdir=/foo +### extract, fixincludes, test-installation, remove + +for arg in $* ; do + case "${arg}" in +### options + -tape=* | --tape=* | --tap=* | --ta=* | --t=*) + TAPE=`echo ${arg} | ${SED} 's/-*t[a-z]*=//'` + ;; + + -installdir=* | --installdir=* | --installdi=* | --installd=* | --install=* | --instal=* | --insta=* | --inst=* | --ins=* | --in=* | --i=*) + INSTALLDIR=`echo ${arg} | ${SED} 's/-*i[a-z]*=//'` + # we will make it an absolute path shortly. + ;; + +### actions + *remove* | rm | -rm | --rm) ACTIONS="${ACTIONS} rm" ;; + *extract*) ACTIONS="${ACTIONS} extract" ;; + *fix*) ACTIONS="${ACTIONS} fix" ;; + *test*) ACTIONS="${ACTIONS} test" ;; +### hosts + *src* | *sour*) ARCH="${ARCH} src" ;; + *bin*) ARCH="${ARCH} bin" ;; + +### packages + *emacs*) TOOLS="${TOOLS} emacs" ;; + *comp*) TOOLS="${TOOLS} comp" ;; + *help*) ERROR=true ;; + *) + echo '***' I do not understand the option \"${arg}\". + ERROR=true + ;; + esac # ${arg} +done # arg in $* + +### +### +### check for a myriad of sins +### +### + +if [ ! -d "${INSTALLDIR}" ] ; then + echo '*** ' Can not cd to \"${INSTALLDIR}\" because it does not exist. + echo '*** ' Try creating it with \"mkdir ${INSTALLDIR}\" and then try running Install again. + exit 1 +else + if (cd "${INSTALLDIR}") ; then + true + else + echo '*** ' Can not cd to \"${INSTALLDIR}\" because I do not have execute permission. + ls -lad ${INSTALLDIR} + echo '*** ' Please fix this and then try running Install again. + exit 1 + fi # ! cd ${INSTALLDIR} +fi # ! -d ${INSTALLDIR} + +# Make INSTALLDIR absolute (parts below might need it that way). +# FIXME, do they really? +# FIXME, handle pwd failure from upper dir permission +INSTALLDIR=`cd ${INSTALLDIR} ; pwd` +LOGDIR=${INSTALLDIR}/${VERSION} + +case "${ERROR}" in + "") +### default tools + case "${TOOLS}" in + "") TOOLS="||BUNDLE||" ;; + *) ;; + esac # ${TOOLS} + + INSTALLHOST= + +### decide where we are: try arch first. + if (arch) > /dev/null 2>&1 ; then + MAYBE=`arch` + else + true + fi # (arch) + + case "${MAYBE}" in + sun3) INSTALLHOST=${MAYBE} + ;; + *) +### next try uname + if (uname > /dev/null) 2>&1 ; then + UNAME=`echo \`uname -s\`\`uname -m\`\`uname -r\`` + else + UNAME="machine without a uname command (type of machine unknown)" + fi # (uname) + +### map into names we recognize + case "${UNAME}" in + AIX*) + INSTALLHOST=rs6000 + MT=tctl + ;; + ULTRIXRISC) INSTALLHOST=decstation ;; + SunOSsun4*5*) INSTALLHOST=sparc-sun-solaris2 ;; + SunOSsun4*) INSTALLHOST=sun4 ;; + SunOSsun3*) INSTALLHOST=sun3 ;; + IRIX*) INSTALLHOST=iris4 ;; + *) INSTALLHOST=unknown ;; + esac # ${UNAME} + ;; + esac # ${MAYBE} + +### default arch + case "${ARCH}" in + "") ARCH="bin src" ;; + *) ;; + esac # ${ARCH} + +### default actions + + case "${ACTIONS}" in + "") + case "${FTPRELEASE}" in + "yes") ACTIONS="test" ;; + "no" ) ACTIONS="extract test" ;; + esac # ${FTPRELEASE} + + +### fixincludes only if comp-tools + for tool in ${TOOLS} ; do + case ${tool} in + comp) + if echo ${ARCH} | grep bin > /dev/null 2>&1 ; then + ACTIONS="${ACTIONS} fix" + fi + ;; + *) ;; + esac # ${TOOLS} + done # for tool in ${TOOLS} + ;; + *) ;; + esac # ${ACTIONS} + ;; + *) ;; +esac # ${ERROR} + +case "${ERROR}" in + "") +### if binaries are not intended for this machine + case "${INSTALLHOST}" in + "||HOSTstr||") ### binaries are intended for this machine + for action in ${ACTIONS} ; do + case ${action} in + test) + for tool in ${TOOLS} ; do + OURWD=`(cd ${INSTALLDIR}; pwd) 2>/dev/null` + DEFAULTWD=`(cd ${INSTALLDIR_REAL}; pwd) 2>/dev/null` + case ${tool} in + comp) + case "${OURWD}" in + "${DEFAULTWD}") ;; + *) + echo '***' If you want to use the compilation tools in an alternate + echo '*** ' directory, GCC_EXEC_PREFIX must be set. You probably + echo '*** ' want to set it with: + echo GCC_EXEC_PREFIX=${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/ ; export GCC_EXEC_PREFIX + GCC_EXEC_PREFIX=${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/ ; export GCC_EXEC_PREFIX + echo '*** ' This is what I will use for the installation tests. + # skip C++ msg on Solaris + case "${INSTALLHOST}" in + sparc-sun-solaris2) ;; + *) + echo '*** ' And for g++ I will use the options: + echo '*** ' -I${INSTALLDIR}/${EXECDIR}/lib/g++-include + echo '*** ' -L${INSTALLDIR}/${EXECDIR}/lib + ;; + esac # ${INSTALLHOST} + echo '*** ' For further help, please refer to ${CHANGING_PATHS} + echo '*** ' in ${NOTES}. + + GPLUSOPTIONS="-I${INSTALLDIR}/${EXECDIR}/lib/g++-include -L${INSTALLDIR}/${EXECDIR}/lib" + ;; + esac # ${INSTALLDIR} + ;; + emacs) + case "${OURWD}" in + "${DEFAULTWD}") ;; + *) + echo '***' I cannot test Emacs. + echo '*** ' The provided Emacs binary can only run from the default + echo '*** ' installation directory. If you wish to run emacs, please + echo '*** ' refer to ${CHANGING_PATHS} in ${NOTES}. + exit 1 + ;; + esac # ${INSTALLDIR} + ;; + *) true ;; + esac # ${tool} + done # for tool in ${TOOLS} + ;; + *) true ;; + esac # ${action} + done # for action in ${ACTIONS} + ;; + + *) + for action in ${ACTIONS} ; do + case ${action} in + rm | extract) true ;; + fix) + if echo ${TOOLS} | grep comp > /dev/null ; then + NOTFIXED="fixincludes" + if echo ${ACTIONS} | grep test > /dev/null ; then + JOINER=" or " + else + true + fi # echo ${ACTIONS} + else +# echo '***' If you only install Emacs you do not need to run fixincludes. +# ERROR=true + true + fi # echo ${TOOLS} + ;; + test) NOTTESTED="the installation tests" ;; + esac # ${action} + done # for action in ${ACTIONS} + ;; + esac # ${INSTALLHOST} + ;; + *) ;; +esac # ${ERROR} + +if [ -n "${NOTFIXED}" -o -n "${NOTTESTED}" ] ; then + case "${INSTALLHOST}" in + "||HOSTstr||") ;; + *) + echo '*** ' This machine appears to be a \"${INSTALLHOST}\". + echo '*** ' You may still run \"$0 -extract ...\" on this machine and then + echo '*** ' run the other steps on the machine on which you wish to install. + echo '*** ' You will need to do these steps separately. + echo '*** ' For more information, please refer to + echo '*** ' ${ANOTHER_TAPE} in ${NOTES}. + ERROR=true + ;; + esac # ${INSTALLHOST} +fi # [ -n ${NOTFIXED -o -n ${NOTTESTED} ] + +### if we can't read the tape drive... +popdir=`pwd` + +if [ ! -d "${LOGDIR}" ] ; then + if mkdir ${LOGDIR}; then + true + else + echo '*** ' Can not write logs to \"${LOGDIR}\" because it does not exist. + echo '*** ' Try creating it with \"mkdir ${LOGDIR}\" and then try running Install again. + exit 1 + fi +else + if [ ! -w "${LOGDIR}" ] ; then + echo '*** ' Can not write logs to \"${LOGDIR}\" because I do not have write permission. + ls -lad ${LOGDIR} + echo '*** ' Please fix this and then try running Install again. + exit 1 + fi # ! -r ${LOGDIR} +fi # ! -d ${LOGDIR} + + +cd ${INSTALLDIR} + +### There is a window here that I don't know how to handle gracefully from +### shell. If the directory DID exist and WAS executable but dissappeared +### before we could cd into it, we're kinda hosed. If you get a call about +### this, make sure the directory exists, is readable, is executable, is the +### either the default installation directory or the -installdir=directory +### given on the command line. Then ask them to just try again. A few times. +### If you get the same error every time, we've got a very strange bug. I +### can't help you. + +if [ "$?" != "0" ] ; then + echo '***' Cannot cd to \"${INSTALLDIR}\". This is a problem. + echo '*** ' For further help, please refer to + echo '*** ' ${NO_ACCESS} in ${NOTES} or call + echo '*** ' ${HOTLINE} + exit 1 +fi + +if echo ${ACTIONS} | grep extract > /dev/null ; then + if [ -z "${ERROR}" -a ! -r "${TAPE}" ] ; then + ### try checking for a relative tape path + if [ -r ${popdir}/${TAPE} ] ; then + TAPE=${popdir}/${TAPE} + echo '***' Using TAPE device \"${TAPE}\". + else + echo '***' Can not read from TAPE device, \"${TAPE}\". + cd ${popdir} ; ls -lasd ${TAPE} + echo '*** ' Try using \"./Install -tape=/dev/something ...\" to name your tape + echo '*** ' drive or refer to ${MIGHT_WRONG} in + echo '*** ' ${NOTES}. + exit 1 + fi # ! -r ${popdir}/${TAPE} + fi # -z ${ERROR} +fi # extract in ${ACTIONS} + +cd ${popdir} + +### bail out + +case "${ERROR}" in +"") ;; +*) + cat <<EOF +You may supply at least one format on the command line. Recognized formats +are: + binaries for binaries + source for source code +The default is both source and binaries. + +You may also supply actions. Recognized actions are: + extract read the appropriate files from tape + fixincludes build a directory of corrected header files for comp-tools + test run a very brief verification of your installation +Default actions are extract, fixincludes, and test, although fixincludes is not +necessary for emacs. + +There are two other options: + -tape=DEVICE asks Install to read the necessary files from DEVICE. The + default DEVICE is ||DEVdflt||, the ||TAPdflt||, cartridge tape + drive on most ||HOSTstr||s. + -installdir=DIRECTORY asks Install to install files into DIRECTORY. + The default DIRECTORY is ${INSTALLDIR_DEFAULT}. +No action has been taken. +EOF + exit 1 + ;; +esac + + +### +### +### build a file list +### (easy this round because we have only one package). +### + +FILE_LIST= +TRIGGERS= + +for arch in ${ARCH} ; do + case ${arch} in + bin) + FILE_LIST="${FILE_LIST} \ + ${VERSION}/Install \ + ${VERSION}/CYGNUS \ + ${EXECDIR}/lib \ + ${EXECDIR}/bin \ + ${VERSION}/include \ + ${VERSION}/info \ + ${VERSION}/lib \ + ${VERSION}/man" + for tool in ${TOOLS} ; do + case ${tool} in + comp) TRIGGERS="${TRIGGERS} ${EXECDIR}/bin/gcc" ;; + emacs) TRIGGERS="${TRIGGERS} ${EXECDIR}/bin/emacs" ;; + *) + echo '***' Oops. Sanity failure on triggers for binaries for ${tool}. + exit 1 + ;; + esac + done + ;; + src) + FILE_LIST="${FILE_LIST} \ + ${VERSION}/Install \ + ${VERSION}/CYGNUS \ + ${VERSION}/src" + for tool in ${TOOLS} ; do + case ${tool} in + comp) TRIGGERS="${TRIGGERS} ${VERSION}/src/gcc/gcc.c" ;; + emacs) TRIGGERS="${TRIGGERS} ${VERSION}/src/emacs/src/emacs.c" ;; + *) + echo '***' Oops. Sanity failure on triggers for source for ${tool}. + exit 1 + ;; + esac + done + ;; + *) + echo '***' Oops. Sanity failure on triggers for arch ${arch}. + ;; + esac +done + +### +### +### removal +### +### + +if echo ${ACTIONS} | grep rm > /dev/null 2>&1 ; then + if [ ! -d "${INSTALLDIR}" ] ; then + echo '***' Cannot remove anything from \"${INSTALLDIR}\" because it does not exist. + echo '*** ' You probably do not need to remove anything. + else + popdir=`pwd` + if [ ! -d "${INSTALLDIR}" ] ; then + echo '***' Can not cd to \"${INSTALLDIR}\" because it does not exist. + echo '*** ' You probably do not need to remove anything. + exit 1 + else + if [ ! -r "${INSTALLDIR}" ] ; then + echo '***' Can not cd to \"${INSTALLDIR}\" because I do not have execute permission. + ls -lad ${INSTALLDIR} + echo '*** ' Please fix this and then try running Install again. For + echo '*** ' more information, please refer to ${NO_ACCESS} + echo '*** ' in ${NOTES}. + exit 1 + fi + fi + + cd ${INSTALLDIR} + +### see also the above note about the timing window. + + if [ "$?" != "0" ] ; then + echo '***' Cannot cd to \"${INSTALLDIR}\". This is a problem. + echo '*** ' For further help, please refer to + echo '*** ' ${NO_ACCESS} in ${NOTES} or call + echo '*** ' ${HOTLINE} + exit 1 + else + true + fi + + if [ ! -d "${VERSION}" ] ; then + echo '***' Cannot remove anything from \"${INSTALLDIR}/${VERSION}\" because it does not exist. + echo '*** ' You probably do not need to remove anything. + exit 1 + else + true + fi + + echo Removing from \"${INSTALLDIR}\"... + + if rm -rf ${FILE_LIST} ; then + # if neither binaries nor source are installed, remove installdir + if [ -d ${INSTALLDIR}/${EXECDIR} \ + -o -d ${INSTALLDIR}/${VERSION}/src ] ; then + true + else + if rm -rf "${INSTALLDIR}/${VERSION}" ; then + true + else + if [ ! -w "${INSTALLDIR}" ] ; then + echo '***' I can not remove ${INSTALLDIR}/${VERSION} + echo '*** ' because I do not have write access to \"${INSTALLDIR}\" + echo '*** ' Please fix this and try running Install again. For more information + echo '*** ' please refer to ${NO_ACCESS} in ${NOTES}. + exit 1 + else + echo '***' I do not know why I can not remove ${INSTALLDIR}/${VERSION}. This is + echo '*** ' probably not a problem. + fi + exit 1 + fi + fi + + echo Removed. + else + echo '***' There appears to have been a removal error. + echo '*** ' Chances are that this is not a problem, but you might try removing + echo '*** ' again. + exit 1 + fi + fi + echo Cygnus Support software distribution removed! +else + true +fi # if removing + +### +### +### extraction +### +### + +if echo ${ACTIONS} | grep extract > /dev/null 2>&1 ; then + if [ ! -d "${INSTALLDIR}" ] ; then + echo Trying to create \"${INSTALLDIR}\"... + if mkdir ${INSTALLDIR} ; then + echo Created \"${INSTALLDIR}\". + else + echo '***' I can not make directory, \"${INSTALLDIR}\". + +### attempt to diagnose... + + DIR=`echo ${INSTALLDIR} | ${SED} -e 's:/[^/]*$::'` + if [ ! -d "${DIR}" ] ; then + echo '*** ' It looks as though \"${DIR}\" does not even exist. + exit 1 + else + if [ ! -w "${DIR}" ] ; then + echo '*** ' It looks as though you do not have write access to \"${DIR}\". + echo '*** ' Please fix this and try running Install again. For more information + echo '*** ' please refer to ${NO_ACCESS} in ${NOTES}. + exit 1 + else + echo '*** ' I do not know why I can not create \"${INSTALLDIR}\". This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # ! -w ${DIR} + fi # ! -d ${DIR} + fi # mkdir ${INSTALLDIR} + else + true + fi # ! -d ${INSTALLDIR} + + cd ${INSTALLDIR} + + if [ "$?" = "0" ] ; then + for trigger in ${TRIGGERS} ; do + if [ -r "${trigger}" ] ; then + echo '***' \"${INSTALLDIR}/${trigger}\" exists and I will not overwrite it. + echo '*** ' If you really want to install it again, please remove it first. + exit 1 + else + true + fi # -r ${trigger} + done # for trigger + else + echo '***' I can not cd to \"${INSTALLDIR}\". + +### attempt to diagnose... + + if [ ! -r "${INSTALLDIR}" ] ; then + echo '*** ' It looks as though you do not have execute permission to \"${INSTALLDIR}\". + else + true + fi # ! -r ${INSTALLDIR} + + echo '*** ' For further help, please refer to + echo '*** ' ${NO_ACCESS} in ${NOTES}. + exit 1 + fi # status is zero + + +### remove redundant names from the list + echo ${FILE_LIST} ${COMMONS} ${EMACSHIBIN} | tr ' ' ' +' | sort | uniq > ${LOGDIR}/extract_list + + echo It will take some time for me to read the tape. + echo Verbose output will be saved in ${LOGDIR}/tar.log + echo Extracting into \"${INSTALLDIR}\"... + +### make sure things come off the tape as they were written, but minus what could be a security hole. + umask 0 + +### using the no rewind device, so rewind and fsf to be sure. + + if ${MT} -f ${TAPE} rewind > /dev/null 2>&1 ; then + if ${MT} -f ${TAPE} fsf 1 ; then + true + else + echo '***' Could not forward space tape device \"${TAPE}\". + exit 1 + fi + else + if test -r ${TAPE} ; then + true + else + echo '***' Could not rewind tape device \"${TAPE}\". + exit 1 + fi + fi # mt ${TAPE} rewind + + if dd if=${TAPE} bs=124b | compress -d | ${TAR} ${TARKEYS} `cat ${LOGDIR}/extract_list` > ${LOGDIR}/tar.log 2>&1 && test -d ${VERSION} ; then + if [ -d ${INSTALLDIR}/${EXECDIR}/bin ] ; then + echo Extracted. + else + echo '***' The extraction has failed. The directory + echo '***' ${INSTALLDIR}/${EXECDIR}/bin was not extracted. + echo '*** ' The output from the tar command has been logged in ${LOGDIR}/tar.log + echo '*** ' I do not know how to continue until this problem has been + echo '*** ' corrected. If you do not know how to fix it either, please + echo '*** ' call ${HOTLINE}. + exit 1 + fi + + if (${MT} -f ${TAPE} rewind > /dev/null 2>&1) ; then + true + else + true + fi # mt rewind + else + echo '***' There appears to have been an extraction error. + echo '*** ' The output from the tar command has been logged in ${LOGDIR}/tar.log + echo '*** ' I do not know how to continue until this problem has been + echo '*** ' corrected. If you do not know how to fix it either, please + echo '*** ' call ${HOTLINE}. + exit 1 + fi # dd | compress | tar .... + + rm -f ${LOGDIR}/extract_list + echo Cygnus Support software distribution extracted! +else + true +fi # extraction in actions + +### +### +### fixincludes +### +### + +if echo ${ACTIONS} | grep fix > /dev/null 2>&1 ; then + echo Running fixincludes for ${INSTALLHOST}. + echo Verbose output will be stored in ${LOGDIR}/fixincludes.log + echo This will take some time. + LIB=${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include ; export LIB + + if mkdir ${LIB}/tmpdir && mv ${LIB}/*.h ${LIB}/tmpdir ; then + if ${INSTALLDIR}/${VERSION}/lib/fixincludes ${LIB} /usr/include ${INSTALLDIR}/${VERSION}/src/gcc > ${LOGDIR}/fixincludes.log ; then + mv ${LIB}/tmpdir/* ${LIB} && rmdir ${LIB}/tmpdir + echo Finished with fixincludes. + else + echo '***' There seems to have been a problem with fixincludes. + echo '*** ' The verbose output from the fixincludes script has been logged in + echo '*** ' ${INSTALLDIR}/${VERSION}/fixincludes.log. + echo '*** ' I do not know how to continue until this problem has been + echo '*** ' corrected. If you do not know how to fix it either, please + echo '*** ' call ${HOTLINE}. + mv ${LIB}/tmpdir/* ${LIB} && rmdir ${LIB}/tmpdir + exit 1 + fi # + else + echo '***' Not able to create the temporary include dir + echo '*** ' Please ensure that write permissions for + echo '*** ' ${LIB} are allowed. + echo '*** ' Or call ${HOTLINE} for more information. + exit 1 + fi + echo Fixed include files installed! +else + true +fi # fix in actions + +### +### +### testing the installation +### +### + +if echo ${ACTIONS} | grep test > /dev/null 2>&1 && echo ${ARCH} | grep bin > /dev/null 2>&1 ; then + popdir=`pwd` + cd ${LOGDIR} + for tool in ${TOOLS} ; do + case ${tool} in + comp) + if [ -f ${INSTALLDIR}/${EXECDIR}/bin/gcc ] ; then + cat > ${LOGDIR}/hello.c <<'e!o!f' +#include <stdio.h> + +extern int printf(); + +int main(int argc, char **argv) { + (void) printf("hello: The compilation tools appear to be installed correctly on your %s.\n", + MACHINE); + return(0); +} /* main() */ +e!o!f + if ${INSTALLDIR}/${EXECDIR}/bin/gcc -Wall -O -g \ + -DMACHINE=\"${INSTALLHOST}\" ${LOGDIR}/hello.c -o ${LOGDIR}/hello ; then + if ${LOGDIR}/hello ; then + echo This is good. + else + echo '***' Hello.c fails to run. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # ./hello + else + echo '***' Hello.c fails to compile. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # run gcc + +### now check for fixed includes. + cat > ${LOGDIR}/test-ioctl.c << 'e!o!f' +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <math.h> + +double atof(const char *); + +#ifdef __sun__ +#include <sys/filio.h> + +extern int ioctl(); +extern int perror(); +#endif /* __sun__ */ + +extern int printf(); + +int main(int argc, char **argv) { +#ifdef __sun__ + long l; + int fd; + int retval; + + if ((fd = open("/dev/tty", O_RDONLY)) == -1) { + (void) perror("test-ioctl: can't open /dev/null"); + return(1); + } else if ((retval = ioctl(fd, FIONREAD, &l)) != 0) { + (void) perror("test-ioctl: ioctl failed"); + (void) printf("test-ioctl: Most likely, you have not run \"Install fixincludes\" on this machine.\n"); + return(2); + } +#endif /* __sun__ */ + + printf("test-ioctl: Ansi versions of the system header files, (the fixed includes),\n"); + printf("test-ioctl: appear to be installed correctly.\n"); + +/* that's right. If closing /dev/tty fails, I don't want to know about it. */ + + return(0); +} +e!o!f + + case "||HOSTstr||" in + sun3 | sun4 | decstation) + if ${INSTALLDIR}/${EXECDIR}/bin/gcc -Wall -O -g \ + -DMACHINE=\"${INSTALLHOST}\" ${LOGDIR}/test-ioctl.c -o ${LOGDIR}/test-ioctl ; then + if ${LOGDIR}/test-ioctl ; then + echo This is good. + else + case "$?" in + 1) + echo '***' test-ioctl.c fails to read /dev/tty. If you were running Install + echo '*** ' in batch or from a daemon, please try running it again interactively. + echo '*** ' If not, please call ${HOTLINE} + exit 1 + ;; + 2) + echo '***' test-ioctl.c fails to ioctl. + echo '*** ' Most likely you need to run \"Install fixincludes\". + echo '*** ' Please run \"Install fixincludes\" and + echo '*** ' then try this test again. For an explanation see + echo '*** ' ${WHY_FIXINCLUDES} in ${NOTES}. + exit 1 + ;; + *) + echo '***' test-ioctl.c fails to run. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + ;; + esac # $? + exit 1 + fi # test-ioctl + else +### this presupposes that hello.c DID compile. + echo '***' test-ioctl.c fails to compile. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # run gcc + ;; + iris4) + if [ ! -f ${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include/sys/cfeiroute.h ] + then + echo '***' You seem to be missing ${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include/sys/cfeiroute.h. + echo '*** ' Most likely you need to run \"Install fixincludes\". + echo '*** ' Please run \"Install fixincludes\" and + echo '*** ' then try this test again. For an explanation see + echo '*** ' ${WHY_FIXINCLUDES} in ${NOTES}. + exit 1 + fi # test fixincluded file + ;; + sparc-sun-solaris2) + if [ ! -f ${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include/ieeefp.h ] + then + echo '***' You seem to be missing ${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include/ieeefp.h. + echo '*** ' Most likely you need to run \"Install fixincludes\". + echo '*** ' Please run \"Install fixincludes\" and + echo '*** ' then try this test again. For an explanation see + echo '*** ' ${WHY_FIXINCLUDES} in ${NOTES}. + exit 1 + fi + ;; + + rs6000) + if [ ! -f ${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include/piostruct.h ] + then + echo '***' You seem to be missing ${INSTALLDIR}/${EXECDIR}/lib/gcc-lib/||HOSTstr||/||GCCvn||/include/piostruct.h. + echo '*** ' Most likely you need to run \"Install fixincludes\". + echo '*** ' Please run \"Install fixincludes\" and + echo '*** ' then try this test again. For an explanation see + echo '*** ' ${WHY_FIXINCLUDES} in ${NOTES}. + exit 1 + fi # test fixincluded file + ;; + esac # ||HOSTstr|| + else + true + fi # test if gcc present + +### now check for g++. + if [ -f ${INSTALLDIR}/${EXECDIR}/bin/g++ ] ; then + cat > ${LOGDIR}/hello.C << 'e!o!f' +#include <iostream.h> + +int main(int argc, char**argv) +{ + char *machine = MACHINE; + cout << "hello: g++ appears to be installed correctly on your " + << machine << ".\n"; + return(0); +} +e!o!f + if ${INSTALLDIR}/${EXECDIR}/bin/gcc ${GPLUSOPTIONS} -Wall -O -g \ + -DMACHINE=\"${INSTALLHOST}\" ${LOGDIR}/hello.C -o ${LOGDIR}/Hello -lg++ ; then + if ${LOGDIR}/Hello ; then + echo This is good. + else + echo '***' hello.C fails to run. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # ./Hello + else + ### this presupposes that hello.c DID compile. + echo '***' hello.C fails to compile. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # run g++ + + ### now check for static initialization. + cat > ${LOGDIR}/static-init.C << 'e!o!f' +#include <iostream.h> +int Three; + +struct Foo { + Foo(int i) { Three = i; } +}; + +Foo foo(3); + +int main(int argc, char**argv) +{ + if (Three != 3) { + cout << "static-init: static initialization fails.\n"; + return(1); + } + + cout << "static-init: static initialization appears to work.\n"; + return(0); +} +e!o!f + if ${INSTALLDIR}/${EXECDIR}/bin/gcc ${GPLUSOPTIONS} -Wall -O -g \ + -DMACHINE=\"${INSTALLHOST}\" ${LOGDIR}/static-init.C -o ${LOGDIR}/static-init -lg++ ; then + if ${LOGDIR}/static-init ; then + echo This is good. + else + echo '***' Static initialization is not working. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # run static-init + else + ### this presupposes that it DID compile. + echo '***' static-init.c fails to compile. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi # run g++ + else # no g++, so don't test it + true + fi # no g++ + ;; + emacs) + cat > ${LOGDIR}/hello.el <<'e!o!f' +(server-start) +(message "Emacs appears to be installed correctly.") +(kill-emacs 0) +e!o!f + if ${INSTALLDIR}/${EXECDIR}/bin/emacs -batch -l ${LOGDIR}/hello.el ; then + echo This is good. + else + echo '***' Emacs fails to run. This is a problem. + echo '*** ' Please call ${HOTLINE} + exit 1 + fi + ;; + src) # if anyone can tell me how to test the installation of source... + true + ;; + *) + echo '***' I do not know how to test for tool \"${tool}\" because I have never + echo '*** ' heard of it. This is a problem. Please call ${HOTLINE}. + exit 1 + ;; + esac + done + rm -f hello* test-ioctl* static-init* Hello* + cd ${popdir} + echo Cygnus Support software distribution tested! +else + true +fi + +echo Done. + +exit 0 + +### +### Local Variables: +### comment-column: 0 +### fill-column: 131 +### End: +### + +### End of Install |