William Stein wrote: > On Thu, Jul 23, 2009 at 2:37 AM, Dr. David > Kirkby<[email protected]> wrote: >> William Stein wrote: >>> On Thu, Jul 23, 2009 at 2:18 AM, Dr. David >>> Kirkby<[email protected]> wrote: >>>> William Stein wrote: >>>>> On Thu, Jul 23, 2009 at 1:22 AM, Dr. David >>>>> Kirkby<[email protected]> wrote: >>>>>> I've noticed a couple of issues on Solaris, where it appears packages >>>>>> have been installed properly (the $SAGE_HOME/spkg/installed/foobar is >>>>>> created), but this has not actually happened. >>>>>> >>>>>> On one occasion 'cp -a' was called, which failed to copy files to >>>>>> $SAGE_HOME/local/include, as '-a' is not an option on Solaris to the cp >>>>>> command. Sun's 'cp' reported this as an error, but this did not cause >>>>>> the 'make' to stop. >>>>> After every single command in spkg-install one *must* check the error >>>>> return value. That's why there is code like the following all over in >>>>> them: >>>>> >>>>> if [ $? -ne 0 ]; then >>>>> echo "blah went wrong" >>>>> exit 1 >>>>> fi >>>>> >>>>> Anywhere such code doesn't happen is a bug. >>>> Well, there are a lot of bugs then, as a lot of code I see does not >>>> check every command. Checking at the end does not work. >>>> >>>> I just looked at one random package I've never looked at before - >>>> (numpy-1.3.0.p1] >>>> >>>> This contains: >>>> >>>> cp ../patches/gnu.py numpy/distutils/fcompiler/gnu.py >>>> cp ../patches/__init__.py numpy/distutils/fcompiler/__init__.py >>>> >>>> There are no checks. There is a check later: >>>> >>>> if [ $? -ne 0 ]; then >>>> echo "Error building numpy." >>>> exit 1 >>>> fi >>>> >>>> but that does not help, as the following script I wrote shows. >>>> >>>> #!/bin/sh >>>> # Try to do something which will fail as non-root >>>> >>>> touch /this-should-fail >>>> pwd >>>> if [ $? -ne 0 ]; then >>>> echo "This script failed" >>>> exit 1 >>>> fi >>>> >>>> the 'touch' command gives an error, but the message "This script failed" >>>> is *not* printed, as the 'pwd' command later succeeded. If I remove the >>>> 'pwd' command, so it prints the error message. >>>> >>>> >>>> >>>> >>>> Writing >>>> >>>> if [ $? -ne 0 ]; then >>>> echo "This script failed" >>>> exit 1 >>>> fi >>>> >>>> >>>> after every single command in spkg-install would make the code very long, >>>> >>> Nonetheless, we should be checking the error code after every line >>> executes, one way or another. Is there a way to automatically do this >>> in bash? >> I'm not aware of one, but I'll ask on comp.unix.shell - that is my >> favorite place to ask for this sort of information. >> >> Even if you solve it in spkg-install, it still leaves all the makefiles >> that are used in packages - it is clear to me they don't check that >> their actions have succeeded. If the did, things like a missing >> 'install-sh' would cause it to exit, rather than continue and exit with >> an exit code of 0. >> >> dave > > Fortunately you're not right. If an error is raised by any command in > a makefile, then the make program terminates with an error and exit > code. As a little test, try this make file:
> wst...@boxen:~/tmp$ more makefile > all: > ls / > touch /x > echo "hello" > Good, but the fact remains some installations (like singular's) are breaking and not reporting the error. I assume the 'install-sh' was called from a makefile, but perhaps not. Either way, the is a problem here. > Burcin -- bravo, using "set -e" is a great idea. This is now trac #6598: > > http://trac.sagemath.org/sage_trac/ticket/6598 > > William That certainly looks useful. Next time I create a package, I'll try that out and implement it if it looks to be ok. dave --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---
