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 --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
