Problem recursing configure into add-on's stand alone sub-project.
Ryan Arnold
rsa@us.ibm.com
Thu Sep 17 21:53:00 GMT 2009
On Tue, 2009-09-15 at 11:52 -0500, Ryan Arnold wrote:
> On Wed, Sep 9, 2009 at 10:12 AM, Ryan Arnold <ryan.arnold@gmail.com> wrote:
> > I have an add-on 'foo' which I enable with
> >
> > --enable-add-ons=foo,nptl
> >
> > The addon 'foo' requires a sub-project to be statically linked into
> > it. We'll call this 'bar'.
> >
> > Sub-project 'bar' is maintained officially out-of-tree and has it's
> > own configure.ac and Makefile.in.
> >
> > So the structure is:
> >
> > glibc/foo/
> > glibc/foo/configure.in
> > glibc/foo/bar
> > glibc/foo/bar/configure.ac
> >
> > The glibc/foo/configure.in looks like this:
> >
> > GLIBC_PROVIDES
> >
> > libc_add_on_canonical=dfp
> >
> > AC_CONFIG_SUBDIRS([bar])
> >
> > The GLIBC configure stage does indeed recurse into here and generates
> > configure as:
> >
> > # This file is generated from configure.in by Autoconf. DO NOT EDIT!
> >
> > libc_add_on_canonical=dfp
> >
> > subdirs="$subdirs bar"
> >
> > Unfortunately configure DOESN'T recurse into foo/bar/configure.in.
> >
> > Does anyone know how to get this to work? The documentation isn't helpful.
> >
> > I tried doing AC_CONFIG_SUBDIRS([foo/bar]) but that doesn't work.
> >
> > I've also tried adding libc_add_on_subdirs=bar to foo/configure.in but
> > that doesn't work either.
> >
> > Outside of the glibc build system AC_CONFIG_SUBDIRS(bar) is enough to
> > get this to work. I suspect it's due to the 'addon' machinery.
> >
> > Ryan S. Arnold
> >
>
> Hi Roland, et al
>
> Roland suggested the following fix, and I've verified that this works.
>
> There are a few caveats which I will discuss below:
>
> diff --git a/aclocal.m4 b/aclocal.m4
> index 4efa41e..0000000 100644
> --- a/aclocal.m4
> +++ b/aclocal.m4
> @@ -5,6 +5,7 @@ dnl AC_REQUIREs or AC_BEFOREs duplicatin
> dnl
> define([GLIBC_PROVIDES], [dnl
> AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
> +AC_PROVIDE([AC_CONFIG_SUBDIRS])dnl
> AC_PROVIDE([_AS_ECHO_N_PREPARE])dnl
> AC_PROVIDE([_AS_CR_PREPARE])dnl
> AC_PROVIDE([_AS_TR_SH_PREPARE])dnl
> diff --git a/configure.in b/configure.in
> index 4584afe..0000000 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -6,6 +6,9 @@ AC_CONFIG_SRCDIR([include/features.h])
> AC_CONFIG_HEADERS([config.h])
> AC_CONFIG_AUX_DIR([scripts])
>
> +dnl This is here and in GLIBC_PROVIDES so that configure fragments can use it.
> +AC_CONFIG_SUBDIRS()
> +
> AC_CANONICAL_HOST
>
> AC_PROG_CC
>
> With this fix the important thing to note is that
> AC_CONFIG_SUBDIRS([<dir>]) MUST have the add-on in the path that's
> used in <dir>, e.g.
>
> The minimal glibc/foo/configure.in needs to look like this.
>
> GLIBC_PROVIDES
>
> libc_add_on_canonical=foo
>
> AC_CONFIG_SUBDIRS([foo/bar])
>
> An additional point:
>
> The add-on foo maintainer may find that the first time configure is
> run, when foo/configure hasn't been generated, that foo/bar/configure
> isn't run.
>
> The file foo/configure isn't generated until the first invocation of
> 'make' detects that the add-on foo needs to be generated. The way
> around this is to base level configure glibc, make (at least through
> the configure stage), and then reconfigure to verifty that the add-on
> builds correctly. Then distribute add-on foo with a pregenerated
> 'foo/configure'. In this way the top-level configure for the
> client/customer/user will invoke foo/bar/configure.
>
> Thanks for the fix Roland.
As a follow-up, here's a link to the git commit for Roland's fix.
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7967983fd42380b090a63b53fe57a05e1d1c0b4f
It looks like he resolved the issue with AC_CONFIG_SUBDIRS needing a
add-on relative path. I'll try it out with just
AC_CONFIG_SUBDIRS([bar]).
Ryan S. Arnold
More information about the Libc-help
mailing list