On Tue, 12 Jul 2011 03:30:25 +0800 YunQiang Su <wzss...@gmail.com> wrote:
> Could you give me more details about how you start it? > > I cannot reproduce it. > Two ways: Alone from the command line: $~ savi SaVi: did not attempt to launch a missing binary executable. please note the home directory Through Geomview $~ geomview -run savi SaVi: did not attempt to launch a missing binary executable. At this point Geomview starts but SaVi doesn't. Now, if I change from home directory to /usr/lib/savi Savi works both ways. Well, I think the bug is in the file /usr/lib/savi/savi, line 71. The variable SAVIBIN is set to bin/SaVi which is only correct when the working directory is /usr/lib/savi. Changing this line to SAVIBIN=${SAVI}/bin/SaVi fix things for me. Attached is a trace using the original /usr/lib/savi/savi file. Best Regards, -- Manolo Díaz
#! /bin/sh ###################################################### # # SaVi by Lloyd Wood (lloydw...@users.sourceforge.net), # Patrick Worfolk (worf...@alum.mit.edu) and # Robert Thurman. # # Copyright (c) 1997 by The Geometry Center. # Also Copyright (c) 2010 by Lloyd Wood. # # This file is part of SaVi. SaVi is free software; # you can redistribute it and/or modify it only under # the terms given in the file COPYRIGHT which you should # have received along with this file. SaVi may be # obtained from: # http://savi.sourceforge.net/ # http://www.geom.uiuc.edu/locate/SaVi # ###################################################### # # Script that is always used to launch the binary SaVi executable # # $Id: savi,v 1.59 2011/04/17 20:47:53 lloydwood Exp $ # # Set locations of tcl and tk library code needed at runtime # Cygwin and Mac OS X are special cases, handled later. # The version numbers used here should match the versions given # in the src/Makefile_defs_ARCH file used to compile SaVi. # Try under /usr/lib and /usr/local/lib. # If using other versions or locations, insert in the next lines. # TCL_LIBRARY="" + TCL_LIBRARY= TK_LIBRARY="" + TK_LIBRARY= if [ ! -d "$TK_LIBRARY" ]; then TCL_LIBRARY=/usr/lib/tcl8.5 TK_LIBRARY=/usr/lib/tk8.5 fi + [ ! -d ] + TCL_LIBRARY=/usr/lib/tcl8.5 + TK_LIBRARY=/usr/lib/tk8.5 if [ ! -d "$TK_LIBRARY" ]; then TCL_LIBRARY=/usr/local/lib/tcl8.5 TK_LIBRARY=/usr/local/lib/tk8.5 fi + [ ! -d /usr/lib/tk8.5 ] + TCL_LIBRARY=/usr/local/lib/tcl8.5 + TK_LIBRARY=/usr/local/lib/tk8.5 if [ ! -d "$TK_LIBRARY" ]; then # Mandriva One 2010 TCL_LIBRARY=/usr/include TK_LIBRARY=/usr/include fi + [ ! -d /usr/local/lib/tk8.5 ] + TCL_LIBRARY=/usr/include + TK_LIBRARY=/usr/include # # If SAVI environment variable is not defined # then set it to be the path of this file # : ${SAVI:=`dirname "$0"`} + dirname /usr/lib/savi/savi + : /usr/lib/savi # # If you copy this script from the SaVi installation and run it # elsewhere, then you should uncomment the following line: # SAVI=/usr/local/savi # and replace /usr/local/savi with the location of # your SaVi installation. # export SAVI + export SAVI # # Default executable relative location and name # SAVIBIN=bin/SaVi + SAVIBIN=bin/SaVi # # Default parameters to pass to executable # params="" + params= # # Check for known machine types # if [ -f /vmlinuz -o -f /boot/vmlinuz ]; then ARCH=linux if [ -f /etc/debian_version ]; then # Ubuntu is the most popular Debian variant. ARCH=ubuntu fi elif [ -d /devices ]; then ARCH=sun elif [ -d /usr/bsd -a -d /usr/sbin ]; then ARCH=irix elif [ -d /cygdrive ]; then ARCH=cygwin elif [ -d /System ]; then ARCH=macosx # Tk in 10.5 Leopard has menubar bugs. # Not required by 10.6 Snow Leopard or 10.4 Tiger users if [ -d /Developer/SDKs ]; then # we can guess version from libraries available if [ ! -d /Developer/SDKs/MacOSX10.6.sdk ]; then # We're not later than 10.5 if [ -d /Developer/SDKs/MacOSX10.5.sdk ]; then # We are 10.5 - use popup menus instead. # Comment out these lines if ActiveTcl is installed # and SaVi has been compiled with it - see src/Makefile_defs_macosx echo "SaVi: using popup menus to work around a Mac OS X 10.5-specific problem." >&2 params="-redrawn-menus ${params}" fi fi fi elif [ -d /sys/boot ]; then ARCH=freebsd else ARCH=unknown fi + [ -f /vmlinuz -o -f /boot/vmlinuz ] + [ -d /devices ] + [ -d /usr/bsd -a -d /usr/sbin ] + [ -d /cygdrive ] + [ -d /System ] + [ -d /sys/boot ] + ARCH=unknown # are we 64-bit? Known to affect linux installs. MACHINE=`uname -m` + uname -m + MACHINE=x86_64 KNOWN64=x86_64 + KNOWN64=x86_64 SIXTYFOUR=no + SIXTYFOUR=no if [ ${MACHINE} = ${KNOWN64} ]; then SIXTYFOUR=yes fi + [ x86_64 = x86_64 ] + SIXTYFOUR=yes # # Set platform-specific Tcl/Tk locations if needed # if [ ${ARCH} = "cygwin" ]; then # Cygwin installs Insight Tcl/Tk here. TCL_LIBRARY=/usr/share/tcl8.4 TK_LIBRARY=/usr/share/tk8.4 elif [ ${ARCH} = "macosx" ]; then # Mac OS X installs libraries in shared folder TCL_LIBRARY=/usr/lib TK_LIBRARY=/usr/lib fi + [ unknown = cygwin ] + [ unknown = macosx ] # # Sanity check $SAVI location # if [ ! -f "$SAVI/savi" ]; then echo "SaVi: a copy of this script is not at $SAVI/savi. Is \$SAVI set correctly?" >&2 fi + [ ! -f /usr/lib/savi/savi ] # # Verify that tcl and tk directories exist # EDIT=no + EDIT=no if [ ! -d "$TCL_LIBRARY" ]; then echo "SaVi: specified TCL_LIBRARY $TCL_LIBRARY was not found." >&2 echo " Does Tcl need to be installed?" >&2 EDIT=yes fi + [ ! -d /usr/include ] if [ ! -d "$TK_LIBRARY" ]; then echo "SaVi: specified TK_LIBRARY $TK_LIBRARY was not found." >&2 echo " Does Tk need to be installed?" >&2 EDIT=yes fi + [ ! -d /usr/include ] if [ ${EDIT} = "yes" ]; then echo " edit this script to set correct LIBRARY locations. Read the comments." >&2 fi + [ no = yes ] export TCL_LIBRARY + export TCL_LIBRARY export TK_LIBRARY + export TK_LIBRARY # # Do we need to complain that SaVi has not been compiled properly? # NOTFOUND=no + NOTFOUND=no COMPLAIN=no + COMPLAIN=no MAKEFILE=no + MAKEFILE=no # # Try specific binary, then default to filename without extension # if [ ! ${ARCH} = "unknown" ]; then SAVIBIN="${SAVI}/${SAVIBIN}" PLATFORMSAVIBIN="${SAVI}/${SAVIBIN}-${ARCH}.bin" if [ -f "${PLATFORMSAVIBIN}" ]; then # found the platform-specific executable if [ -f "${SAVIBIN}" ]; then # if default as well, indicate a choice was made - the safer choice. echo "SaVi: selected platform-specific binary $SAVI/$PLATFORMSAVIBIN" >&2 fi SAVIBIN="${PLATFORMSAVIBIN}" else # try default SaVi binary; assuming it's for our platform. if [ ! -f "${SAVIBIN}" ]; then echo "nofied">&2 # couldn't find default binary. Are we 64-bit? if [ ${SIXTYFOUR} = yes ]; then SAVI64BIN="${SAVI}/${SAVIBIN}-${KNOWN64}.bin" if [ -f "${SAVI64BIN}" ]; then # found the 64-bit executable SAVIBIN="${SAVI64BIN}" echo "SaVi: found 64-bit binary $SAVI/$SAVI64BIN" >&2 else echo "SaVi: couldn't find 64-bit binary $SAVI/$SAVI64BIN" >&2 NOTFOUND=yes fi else # couldn't find any SaVi* binary. NOTFOUND=yes fi fi fi fi + [ ! unknown = unknown ] if [ ${NOTFOUND} = yes ]; then echo "SaVi: couldn't find platform-specific binary $SAVI/$PLATFORMSAVIBIN" >&2 echo "SaVi: couldn't find generic executable binary $SAVI/$SAVIBIN." >&2 COMPLAIN=yes if [ ! -f "${SAVI}/src/main.o" ]; then echo "SaVi: can't see expected main.o object file in the $SAVI/src/ directory." >&2 echo " Has the master Makefile been run to call the C Makefile?" >&2 MAKEFILE=yes fi fi + [ no = yes ] if [ ! -f "${SAVI}/tcl/tclIndex" ]; then echo "SaVi: couldn't find generated list of Tcl commands in $SAVI/tcl/tclIndex" >&2 echo " Has the master Makefile been run to call the Tcl Makefile?" >&2 MAKEFILE=yes COMPLAIN=yes fi + [ ! -f /usr/lib/savi/tcl/tclIndex ] if [ ${MAKEFILE} = "yes" ]; then echo " The master Makefile in $SAVI must run all other makefiles to make SaVi work." >&2 fi + [ no = yes ] if [ ${COMPLAIN} = "yes" ]; then echo "SaVi: Try compiling SaVi by making in the same directory as this script:" >&2 echo " cd $SAVI" >&2 echo " make ARCH=$ARCH" >&2 echo " before running this script again to launch and run the SaVi binary." >&2 fi + [ no = yes ] # # Run binary # if [ ! -f ${SAVIBIN} ]; then echo "SaVi: did not attempt to launch a missing binary executable.">&2 else # # Find what directory this script was invoked from # OLDCWD=`pwd`; export OLDCWD # # Change directory # cd "$SAVI" # # See if we need to add a -geomview flag # if [ -t 1 ]; then exec > /dev/null else case "$*" in *-geomview*) ;; *) set -- -geomview $*;; esac # send SAVI env variable to geomview echo "(setenv SAVI \"$SAVI\")" fi exec ${SAVIBIN} $* ${params} fi+ [ ! -f bin/SaVi ] + echo SaVi: did not attempt to launch a missing binary executable. SaVi: did not attempt to launch a missing binary executable.