On Sun, Jan 10, 2010 at 5:55 AM, Dr. David Kirkby <david.kir...@onetel.net> wrote: > Please read if you intend to edit any shell scripts, such as spkg-install.
... Which is just another reason why I personally never ever use "set -e"... William > > I just tried to build Sage 4.3 on a Sun Blade 2000 running Solaris 8 - an > old operating system I know, but it shows once again how different systems > can find bugs that new ones do not. > > The output from the python-2.6.2.p4.spkg is this: > --------------------------------------------------------------- > python-2.6.2.p4/src/Tools/world/README > python-2.6.2.p4/src/Tools/world/world > Finished extraction > **************************************************** > Host system > uname -a: > SunOS solaris8 5.8 Generic_108528-11 sun4u sparc SUNW,Sun-Blade-1000 > **************************************************** > **************************************************** > CC Version > gcc -v > Using built-in specs. > Target: sparc-sun-solaris2.8 > Configured with: ../gcc-4.0.4/configure --prefix=/usr/local/gcc-4.0.4 > --enable-languages=c,c++,f95 > Thread model: posix > gcc version 4.0.4 > **************************************************** > > real 0m0.241s > user 0m0.010s > sys 0m0.020s > sage: An error occurred while installing python-2.6.2.p4 > Please email sage-devel http://groups.google.com/group/sage-devel > ------------------------------------------------------------------- > > There is absolutely no hint of what error occurred, no message about how you > might try fixing it yourself using ./sage -sh etc. An inspection of > spkg-install, which I've reproduced below, shows a problem. > > -----------------spkg-install ------------- > # This tells Bash to exit the script if any statement returns a non-true > # value. > set -e > # PATCH > > cp patches/ctypes__init__.py src/Lib/ctypes/__init__.py > if [ $? -ne 0 ]; then > echo "Error copying patched ctypes" > exit 1 > fi > --------------------------------------------------- > > Should that copy fail (and I'm not saying that is the reason the Solaris 8 > build failed), the error message "Error copying patched ctypes" would NOT be > shown. > > The 'set -e' will cause the script to exit *immediately* the copy fails, > before the the next line, which checks for the error code. > > Hence use 'set -e' with caution. It's pointless using it before any command > where you check the error code. It is worth using it before commands which > you doubt will fail, and feel the effort of testing each one individually is > not worthwhile. > > In fact, looking at the python install script, it appears that every copy, > with the exception of one where an Itanium fix is applied, does actually get > checked. So on the whole, the spkg-install is reasonably robust. But adding > the set -e at the top stops all of the error checking occuring. > > The way to use 'set -e' and and 'set +e' is as follows. > > 1) Use 'set -e' whenever you want to exit *immediately* if something fails, > and do not intend testing for any error. > > 2) The effect of 'set -e' can be switched off using 'set +e' > > 3) Put 'set -e' and 'set +e' between commands where you do not wish to > bother writing a test to catch an error. You might think its not worth > checking the following 3 commands for errors > > rm -fr python/python2.6 python/python2.5 > sleep 3 > export LDFLAGS > > > in which case, wrap set -e and set +e around them. Then if they fail, the > script will exit with an error, but not indicate why the error occured. > > # I doubt the following commands will fail, and if they > # do, I want to exit, and accept the user will not be told > # what the problem is. > set -e > rm -fr python/python2.6 python/python2.5 > sleep 3 > export LDFLAGS > set +e > > It is much better to exit on errors than to simply carry on. But of course > it's better still if you can give feedback why the error occurred. But > checking every single command would be very tedious. You might find it a bit > tedious to write > > rm -fr python/python2.6 python/python2.5 > if [ $? -ne 0 ]; then > echo "Error trying to delete some files" > exit 1 > fi > sleep 3 > if [ $? -ne 0 ]; then > echo "Error trying to sleep for 3 seconds, Perhaps the clock has > failed!!!" > exit 1 > fi > export LDFLAGS > if [ $? -ne 0 ]; then > echo "Error exporting LDFLAGS. Perhaps trade sanctions are in effect." > exit 1 > fi > > PS The main reason I decided to try a build on Solaris 8 was I needed more > heat in my garage to stop water pipes freezing. Last night I stuck a > computer in there, unconnected except to a mains socket. I thought that a > bit of a waste of CPU time, so are going to replace it with a machine which > has an old version of Solaris on it. If Sage builds on Solaris 8, then it > should build on any Solaris 9 or Solaris 10 too. In contrast, building on > Solaris 10 does not provide any evidence it will build on Solaris 8. > > Dave > > -- > To post to this group, send an email to sage-devel@googlegroups.com > To unsubscribe from this group, send an email to > sage-devel+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/sage-devel > URL: http://www.sagemath.org > > -- William Stein Associate Professor of Mathematics University of Washington http://wstein.org
-- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org