[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: AC_DEFUN_ONCE and conditional dependencies
From: |
Eric Blake |
Subject: |
Re: AC_DEFUN_ONCE and conditional dependencies |
Date: |
Mon, 02 Jul 2012 20:10:58 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1 |
On 07/02/2012 07:20 PM, Bruno Haible wrote:
> Hi Eric,
>
> How can we fix this?
>
> I'm thinking about two macros AC_DEFUN_ONCE_IFNEEDED, AC_REQUIRE_IFNEEDED
Again, avoiding the AC_ namespace unless Autoconf 2.80 adds this methods
might be wise, we'd be safer with the names gl_DEFUN_ONCE_IFNEEDED and
gl_REQUIRE_IFNEEDED.
> that will operate like AC_DEFUN_ONCE and AC_REQUIRE except that they will
> ensure that the body is executed only when actually needed.
>
> AC_DEFUN_ONCE_IFNEEDED would use shell functions, roughly like this:
>
> AC_DEFUN_ONCE_IFNEEDED([FOO], [
> AC_REQUIRE([DEPENDENCY1])
> AC_REQUIRE_IFNEEDED([DEPENDENCY2])
> BODY-CODE
> ])
>
> =>
>
> AC_DEFUN([FOO],
> [
> AC_REQUIRE([FOO_BODY])
> foo_func
> ])
> AC_DEFUN([FOO_BODY], [
> AC_REQUIRE([DEPENDENCY1])
> AC_REQUIRE([DEPENDENCY2])
> foo_var=false
> foo_func ()
> {
> if ! $foo_var; then
> dependency2_func
> BODY-CODE
> foo_var=true
> fi
> }
> ])
>
> Eric, is it possible to write such macros? It is complicated, sure. But
> is there something that makes the idea unimplementable?
Yes, I think such an implementation should be possible. Doing it using
only the constructs available in autoconf 2.59 will be a bit
interesting, but I can certainly help out.
It might even be shorter to do:
AC_DEFUN([FOO_BODY], [
AC_REQUIRE([DEPENDENCY1])
AC_REQUIRE([DEPENDENCY2])
foo_func ()
{
foo_func() { :; }
dependency2_func
BODY-CODE
}
])
to use self-redefining shell functions instead of having to use both a
shell function and a witness variable.
--
Eric Blake address@hidden +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature