bug-gnulib
[Top][All Lists]
Advanced

[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

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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