autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 03/12] use a shell function for _AC_LINK_IFELSE


From: Eric Blake
Subject: Re: [PATCH 03/12] use a shell function for _AC_LINK_IFELSE
Date: Wed, 22 Oct 2008 22:13:00 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.17) Gecko/20080914 Thunderbird/2.0.0.17 Mnenhy/0.7.5.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 10/22/2008 12:25 PM:
> Paolo Bonzini <bonzini <at> gnu.org> writes:
> 
>>>   (exit $ac_status); }])
>> in _AC_RUN_LOG_STDERR and _AC_RUN_LOG could also be changed to an
>> ac_func_set_status shell function that does just "return $1".  A
>> candidate for m4sh maybe?
> 
> Absolutely!  Nice catch.  I think an m4sh addition would be nice, whether or 
> not we end up using it in _AC_DO.

More research - zsh and pdksh optimize a lone '(exit n)', and change $?
without forking a subshell.  However, bash 3.2 and ash still proceed to
fork.  When it comes to exiting the overall script, this is only one more
fork than a shell function.  But within _AC_RUN_LOG_STDERR, it adds up fast.

I'm thinking of borrowing from automake (but naming the function
as_func_exit instead of Exit):
http://lists.gnu.org/archive/html/automake-patches/2008-09/msg00009.html
Even if not many forks are saved, the benefit of writing a shell function
will make for smaller configure files, as AS_EXIT is expanded lots of
times, and

  as_func_exit $var

is shorter than

  { (exit $var); exit $var; }

How likely is it that m4sh users care about 'set -e' bugs prior to
exiting?  Should m4sh cater to that OSF1/Tru64 sh bug?  Here's what I'm
thinking of implementing; does the idea look okay?

# AS_SET_STATUS(VALUE)
# --------------------
# Set $? to VALUE, without forking.
m4_define([AS_SET_STATUS],
[AS_REQUIRE([_AS_EXIT_PREPARE])dnl
as_func_set_status $1])

m4_defun([AS_EXIT],
[AS_REQUIRE([_AS_EXIT_PREPARE])dnl
as_func_exit m4_default([$1], [1])])

m4_defun([_AS_EXIT_PREPARE],
[as_func_set_status ()
{
  return $[]1
}
as_func_exit ()
{
  set +e
  as_func_set_status $[]1
  exit $[]1
}
])

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkj/+cwACgkQ84KuGfSFAYA54gCgxKr0I1nP/0p4uVXiJpEHsmPS
75cAn2+9KSZ7gPvnZg/2kDaT/K2QXI33
=ZHvE
-----END PGP SIGNATURE-----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]