List:MySQL++« Previous MessageNext Message »
From:Jonathan Wakely Date:December 17 2007 8:56pm
Subject:Re: patch for bootstrap script
View as plain text  
On 17/12/2007, Warren Young <mysqlpp@stripped> wrote:
> Jonathan Wakely wrote:
> > Should bootstrap be patched like so?
>
> Hmmm, sh logic doesn't work like I thought, apparently.
>
> What we have here is a mix of things which must succeed and things which
> don't have to.  Your version makes one of the latter mandatory, which
> can make it fail unnecessarily.

Ah, I see.  You could have done this:

mandatory1 && mandatory2 && { not_mandatory >/dev/null 2>&1 ;
mandatory3 ; } && mandatory4 etc.

The { bracketed group } will return the exit status of the last
command in the group, so that lets you chain them all, but ignore the
exit status of "non_mandatory"

e.g. this prints "yes"
true && true && { false ; true ; } && echo yes

> I've checked in something that should have the effect you want.  Can you
> try it on your bakefile-less system?  I'd rather not remove Bakefile
> here just to test that it fails gracefully on such a system.

Now I get this output:

+ bakefilize
./bootstrap: line 48: bakefilize: command not found
+ '[' -n '' ']'
+ '[' -z '' ']'
+ echo BOOTSTRAP 'FAILED!'
BOOTSTRAP FAILED!
+ echo

+ exit 1

which is better, but I think the placement of the set +/-x commands is
still off.

You should be able to reproduce this like so:
ln -s /bin/false bakefile
PATH=.:$PATH ./bootstrap

just "rm bakefile" when finished.

If the second part fails I see this:

+ bakefilize
+ bakefile_gen
[1/1] generating autoconf from ./mysql++.bkl
writing ./Makefile.in
writing ./autoconf_inc.m4
Exception exceptions.TypeError: "'NoneType' object is not callable" in  ignored
Exception exceptions.TypeError: "'NoneType' object is not callable" in  ignored
2 files modified
+ bakefile -f gnu -o Makefile.simple -DBUILDLIBRARY=no mysql++.bkl
no changes in Makefile.simple
+ set +x
aclocal: couldn't open directory `/usr/local/share/aclocal': No such
file or directory
BOOTSTRAP FAILED!

(not sure about the warnings, but the aclocal error is because I have
no /usr/local/share/aclocal directory, bakefile isn't installed under
/usr/local, so I've modified bootstrap to use a BAKEFILE_ROOT dir,
which I can override:
BAKEFILE_ROOT=${BAKEFILE_ROOT:-/usr/local}

that syntax won't work in traditional "sh" so for portability it should be:

if [ -z "$BAKEFILE_ROOT" ] ; then
  BAKEFILE_ROOT=/usr/local
fi

I changed the aclocal call to use -I $BAKEFILE_ROOT/share/aclocal/ and
I set BAKEFILE_ROOT when running boostrap.

Jon
Thread
patch for bootstrap scriptJonathan Wakely15 Dec
  • Re: patch for bootstrap scriptWarren Young17 Dec
    • Re: patch for bootstrap scriptJonathan Wakely17 Dec
      • Re: patch for bootstrap scriptWarren Young28 Dec
        • Re: patch for bootstrap scriptJonathan Wakely28 Dec