[petsc-dev] [petsc-users] make test failed

Satish Balay balay at mcs.anl.gov
Fri Jun 22 12:53:24 CDT 2012


ok pushed a fix.

http://petsc.cs.iit.edu/petsc/releases/petsc-3.3/rev/7a4f6980d770

satish


On Wed, 20 Jun 2012, Barry Smith wrote:

> 
>   Add a little python function that is called at the beginning of ./configure that goes through all the scripts and removes \r if they exist in the scripts.
> 
>   On non-Windows the function will do nothing and on Windows if either Mecurial or properly extracted tarball will do nothing. Will only do something if user extracted tarball wrong.
> 
>    Problem solved, doesn't require changing anything else in PETSc.
> 
> 
>    Barry
> 
> On Jun 19, 2012, at 11:51 PM, Satish Balay wrote:
> 
> > On Tue, 19 Jun 2012, Barry Smith wrote:
> > 
> >>> It appears that the extra '\r' char is causing bash to process strings
> >>> incorrectly.
> > 
> >> Yes, but exactly how? Run the winzip to get the extra \r in
> >> them.
> > 
> > BTW: unix2dos is equivalent to winzip wrt reproduction.
> > 
> >> Then start removing them as you run the script to determine
> >> exactly where the grief comes from. I do not think the extra \r are
> >> always harmful, just if they come up in the wrong place. If you
> >> determine this you can reformat the original code to not have the
> >> bad \r cause grief.
> > 
> > Assume the extra char is 'x' [instead of '\r'] for illustration.
> > 
> > i.e:
> > var='foo'\r
> > is represented as
> > var='foo'x
> > 
> > Note: the above is valid syntax [but 'var' will have extra stuff that
> > wasn't intended]
> > 
> > 
> > The primary issue is - if you have the following code [in dos formatted text]:
> >>>> 
> > if [ 'a' == 'a']
> > then
> >  echo "yes"
> > else
> >  echo "no"
> > fi
> > <<<
> > It is interpreted as:
> >>>> 
> > if [ 'a' == 'a']x
> > thenx
> >  echo "yes"x
> > elsex
> >  echo "no"x
> > fix
> > <<<
> > 
> > And you get the error "syntax error: unexpected end of file"
> > 
> > One way to workarround is to add 'var=foo' before '\r' and
> > get some valid bash syntax. i.e something like:
> > 
> >>>> 
> > if [ 'a' == 'a'] then a='a'x
> >  echo "yes"; a='a'x
> > else a='a'x
> >  echo "no"; a='a'x
> > fi; a='a'x
> > <<<<
> > 
> > So the fixed mpiexec.uni looks something like:
> >>>>>> 
> > $ cat mpiexec.uni 
> > #!/bin/sh
> > if [ $1 !=  "-np" -a $1 != "-n" ]; then a=a
> > progname=$*; a=a
> > elif  [ $2 =  "1" ]; then a=a
> > shift ; shift; a=a
> > progname=$* ; a=a
> > else a=a
> > echo "Uniprocessor version of MPI can only use one processor"; a=a
> > exit 1; a=a
> > fi; a=a
> > a=a
> > # Execute the program
> > $progname;a=a
> > exit 0;a=a
> > <<<<<<<
> > 
> > There is an alternative of setting the following env before running
> > bash scripts in cygwin - but these commands appear to be cygwin/bash
> > specific [so cannot easily automate?]
> > 
> >>>>>>>> 
> > export SHELLOPTS
> > set -o igncr
> > <now run the script>
> > <<<<<<<<
> > 
> > Satish
> > 
> 
> 




More information about the petsc-dev mailing list