dnl `uname -m` quoting is a nightmare dnl TTimo: You could do: `uname -a` changequote([[, ]]) #! /bin/sh # # Product setup script # # TTimo - run in fink environement # I am not entirely sure this is needed # but in any case, it doesn't hurt ifdef([[M4_OSX]], [[source /sw/bin/init.sh]]) # Go to the proper setup directory (if not already there) cd `dirname $0` # defaults FATAL_ERROR="Fatal error, no tech support email configured in this setup" # try to get root prior to running setup? # 0: no # 1: prompt, but run anyway if fails # 2: require, abort if root fails GET_ROOT=0 XSU_ICON="" # You may want to set USE_XHOST to 1 if you want an X11 application to # be launched with root privileges right after installation USE_XHOST=0 # this is the message for su call, printf SU_MESSAGE="You need to run this installation as the super user.\nPlease enter the root password." NULL=/dev/null # See if we have the XPG4 utilities (Solaris) if test -d /usr/xpg4/bin; then PATH=/usr/xpg4/bin:$PATH fi # Return the appropriate architecture string DetectARCH() { status=1 case `uname -m` in i?86) echo "x86" status=0;; 90*/*) echo "hppa" status=0;; *) case `uname -s` in IRIX*) echo "mips" status=0;; *) arch=`uname -p 2> /dev/null || uname -m` if test "$arch" = powerpc; then echo "ppc" else echo $arch fi status=0;; esac esac return $status } # Return the appropriate version string DetectLIBC() { status=1 if [ `uname -s` != Linux ]; then echo "glibc-2.1" return $status fi if [ -f `echo /lib/libc.so.6* | tail -1` ]; then if fgrep GLIBC_2.1 /lib/libc.so.6* 2> $NULL >> $NULL; then echo "glibc-2.1" status=0 else echo "glibc-2.0" status=0 fi elif [ -f /lib/libc.so.5 ]; then echo "libc5" status=0 else echo "unknown" fi return $status } DetectOS() { os=`uname -s` if test "$os" = "OpenUNIX"; then echo SCO_SV else echo $os fi return 0 } # Detect the environment arch=`DetectARCH` libc=`DetectLIBC` os=`DetectOS` # Import preferences from a secondary script if [ -f setup.data/config.sh ]; then . setup.data/config.sh elif [ -f SETUP.DAT/CONFIG.SH\;1 ]; then # HP-UX and other systems unable to get LFN correctly . SETUP.DAT/CONFIG.SH\;1 fi # Add some standard paths for compatibility PATH=$PATH:/usr/ucb # call setup with -auth when ran through su/xsu auth=0 if [ "$1" = "-auth" ] then auth=1 [[shift]] fi if [ "$auth" -eq 1 ] then # if root is absolutely required # this happens if xsu/su execs setup.sh but it still doesn't have root rights if [ "$GET_ROOT" -eq 2 ] then # NOTE TTimo: this causes the following error message in some cases: # return: can only `return' from a function or sourced script # BUT: in other cases, the return is legit, if you replace by an exit call, it's broken return 1 fi fi # Feel free to add some additional command-line arguments for setup here. args="" # Find the installation program # try_run [-absolute] [-fatal] INSTALLER_NAME [PARAMETERS_PASSED] # -absolute option: if what you are trying to execute has an absolute path # NOTE: maybe try_run_absolute would be easier # -fatal option: if you want verbose messages in case # - the script could not be found # - it's execution would fail # INSTALLER_NAME: setup.gtk or setup # PARAMETERS_PASSED: additional arguments passed to the setup script try_run() { absolute=0 if [ "$1" = "-absolute" ]; then absolute=1 [[shift]] fi fatal=0 # older bash < 2.* don't like == operator, using = if [ "$1" = "-fatal" ]; then # got fatal fatal=1 [[shift]] fi setup=$1 [[shift]] # First find the binary we want to run failed=0 if [ "$absolute" -eq 0 ] then setup_bin="setup.data/bin/$os/$arch/$libc/$setup" # trying $setup_bin if [ ! -f "$setup_bin" ]; then setup_bin="setup.data/bin/$os/$arch/$setup" # libc dependant version failed, trying again if [ ! -f "$setup_bin" ]; then failed=1 fi fi if [ "$failed" -eq 1 ]; then if [ "$fatal" -eq 1 ]; then cat <<__EOF__ This installation doesn't support $libc on $os / $arch (tried to run $setup) $FATAL_ERROR __EOF__ fi return $failed fi # Try to run the binary ($setup_bin) # The executable is here but we can't execute it from CD # NOTE TTimo: this is dangerous, we also use $setup to store the name of the try_run setup="$HOME/.setup$$" rm -f "$setup" cp "$setup_bin" "$setup" chmod 700 "$setup" fi # echo Running "$setup" "$@" if [ "$fatal" -eq 0 ]; then "$setup" "$@" failed="$?" else "$setup" "$@" 2>> $NULL failed="$?" fi if [ "$absolute" -eq 0 ] then # don't attempt removal when we are passed an absolute path # no, I don't want to imagine a faulty try_run as root on /bin/su rm -f "$setup" fi return "$failed" } # if we have not been through the auth yet, and if we need to get root, then prompt if [ "$auth" -eq 0 ] && [ "$GET_ROOT" -ne 0 ] then GOT_ROOT=`id -u` if [ "$GOT_ROOT" != "0" ] then if [ "$USE_XHOST" -eq 1 ]; then xhost +127.0.0.1 2> $NULL > $NULL fi try_run xsu -e -a -u root -c "sh `pwd`/setup.sh -auth" $XSU_ICON status="$?" # echo "got $status" # if try_run successfully executed xsu, it will return xsu's exit code # xsu returns 2 if ran and cancelled (i.e. the user 'doesn't want' to auth) # it will return 0 if the command was executed correctly # summing up, if we get 1, something failed if [ "$status" -eq 0 ] then # the auth command was properly executed exit 0 elif [ "$status" -eq 1 ] then ifdef([[M4_OSX]], [[echo "You need to run the installer as root" ; exit 1]]) # xsu wasn't found, or failed to run # if xsu actually ran and the auth was cancelled, $status is 2 # try with su printf "$SU_MESSAGE\n" try_run -absolute /bin/su root -c "export DISPLAY=$DISPLAY;sh `pwd`/setup.sh -auth" status="$?" elif [ "$status" -eq 3 ] then # the auth failed or was canceled # we don't want to even start the setup if not root echo "Please run this installation as the super user" exit 1 fi # continue running as is fi fi # Try to run the setup program # TTimo - setup.gtk only # try_run setup.gtk $args $* # status=$? # if [ $status -eq 2 ]; then # setup.gtk couldn't connect to X11 server - ignore try_run -fatal setup.gtk $args $* || { # TTimo echo "setup.gtk failed to start?" echo "DISPLAY: $DISPLAY" echo "Do you need to issue an xhost + command to let root access X11?" ifdef([[M4_OSX]], [[echo "See http://www.qeradiant.com/wikifaq/index.php?OSX%20fink%20installer%20known%20issues for details"]]) echo "The setup program seems to have failed on $arch/$libc" echo echo $FATAL_ERROR status=1 } #fi exit $status