[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Multiple subdirectories with non-similar configure needs
From: |
Jim Galarowicz |
Subject: |
Re: Multiple subdirectories with non-similar configure needs |
Date: |
Thu, 5 May 2011 10:38:52 -0500 |
Hi all,
I'm writing to see if the patch that Christian developed will become a part of
the mainline autoconf.
My team members do not want to use a non-mainstream method to configure. Is
there is a possibility of this becoming mainstream?
Thanks again! This does work great with no side effects that I can tell.
Jim G
AC_CONFIG_SUBDIR_CUSTOM.patch
Description: Binary data
On Apr 5, 2011, at 12:55 PM, Jim Galarowicz wrote:
> Hi Christian, all,
>
> I've applied the patch to autoconf-2.65 and it works wonderfully!! Thanks so
> much to you and all who have participated in this discussion and action.
>
> Since the email thread started we have two more subdirectories. My
> configure.ac file now has these 5 AC_CONFIG_SUBDIR_CUSTOM lines in it:
>
> AC_CONFIG_SUBDIR_CUSTOM([libcbtf], [--prefix=$CBTF_PREFIX
> --with-boost=$CBTF_BOOST_PREFIX --with-boost-libdir=$CBTF_BOOST_PREFIX_LIB])
>
> AC_CONFIG_SUBDIR_CUSTOM([libcbtf-xml], [--prefix=$CBTF_PREFIX
> --with-cbtf=$CBTF_PREFIX --with-libxerces-c-prefix=$CBTF_XERCESC_PREFIX])
>
> AC_CONFIG_SUBDIR_CUSTOM([libcbtf-mrnet], [--prefix=$CBTF_PREFIX
> --with-cbtf=$CBTF_PREFIX --with-cbtf-xml=$CBTF_PREFIX
> --with-libxerces-c-prefix=$CBTF_XERCESC_PREFIX
> --with-mrnet=$CBTF_MRNET_PREFIX])
>
> AC_CONFIG_SUBDIR_CUSTOM([messages], [--prefix=$CBTF_PREFIX
> --with-cbtf=$CBTF_PREFIX --with-mrnet=$CBTF_MRNET_PREFIX
> --with-libxerces-c-prefix=$CBTF_XERCESC_PREFIX --with-cbtf-xml=$CBTF_PREFIX
> --with-cbtf-mrnet=$CBTF_PREFIX])
>
> AC_CONFIG_SUBDIR_CUSTOM([services], [ --prefix=$CBTF_PREFIX
> --with-mrnet=$CBTF_MRNET_PREFIX --with-cbtf-messages=$CBTF_PREFIX
> --with-libmonitor=$CBTF_ROOT --with-libunwind=$CBTF_ROOT
> --with-papi=$CBTF_ROOT --with-tls=implicit --with-binutils=$CBTF_ROOT
> --with-cbtf=$CBTF_PREFIX])
>
> I'm able to bootstrap, configure --prefix=$CBTF_PREFIX at the top level and
> have each of the subdirectories configure with their respective configure
> lines. Very cool indeed!
>
> Thanks again!
>
> Will this make it into the main line release?
>
> Jim G.
>
>
> On 04/01/2011 09:56 AM, Christian Rössel wrote:
>> Hi Jim, hi Ralf, hi all,
>>
>> On 03/29/2011 08:35 AM, Ralf Wildenhues wrote:
>>> > Hello Jim,
>>> >
>>> > * Jim Galarowicz wrote on Mon, Mar 28, 2011 at 09:08:02PM CEST:
>>>> >> I was wondering if anyone can point me to any information on how to
>>>> >> configure from a top-level directory multiple sub-directories with
>>>> >> different configure requirements.
>>> >
>>> > Well, you can just write code yourself that calls the sub configure
>>> > scripts with the arguments you intend for it. Basically your own
>>> > version of AC_CONFIG_SUBDIRS, if you like.
>> I wrote a macro (AC_CONFIG_SUBDIR_CUSTOM, patch applied) to pass
>> different arguments to different sub-configures. Like AC_CONFIG_SUBDIRS
>> it preserves
>> * --cache-file
>> * --silent
>> and passes always
>> * --srcdir
>> * --prefix
>> * --disable-option-checking
>>
>> AC_CONFIG_SUBDIR_CUSTOM takes at least two arguments, the directory
>> where the sub-configure resides and the additional arguments to be
>> passed to this specific sub-configure. An optional third parameter
>> controls if the sub-configure is recognized by a configure --help=recursive.
>>
>>
>>> > GCC does this in its own tree (except the code is partly in the
>>> > makefile, not only the toplevel configure script).
>>> >
>>> > For simple things, it often suffices to adjust $ac_configure_args during
>>> > configure (beware of the eval quoting though!).
>>> >
>>> > However, you haven't written what kind of adjustments you need at all,
>>> > so it's not clear how to help more.
>>> >
>>>> >> My subdirectories are: libcbtf, libcbtf-xml, libcbtf-mrnet. Each
>>>> >> subdirectory has different package requirements and has been set up
>>>> >> to use autoconf, automake, libtool, m4, etc..
>> Jim, you would use it like this in your toplevel configure.ac:
>>
>> AC_CONFIG_SUBDIR_CUSTOM([libcbtf], [$arguments_to_libcbtf])
>> AC_CONFIG_SUBDIR_CUSTOM([libcbtf-xml], [$arguments_to_libcbtf-xml])
>> AC_CONFIG_SUBDIR_CUSTOM([libcbtf-mrnet], [$arguments_to_libcbtf-mrnet])
>>
>> Cheers,
>> Christian
>>
>> ------------------------------------------------------------------------------------------------
>> ------------------------------------------------------------------------------------------------
>> Forschungszentrum Juelich GmbH
>> 52425 Juelich
>> Sitz der Gesellschaft: Juelich
>> Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
>> Vorsitzender des Aufsichtsrats: MinDirig Dr. Karl Eugen Huthmacher
>> Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender),
>> Dr. Ulrich Krafft (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
>> Prof. Dr. Sebastian M. Schmidt
>> ------------------------------------------------------------------------------------------------
>> ------------------------------------------------------------------------------------------------
>>
>> Besuchen Sie uns auf unserem neuen Webauftritt unterwww.fz-juelich.de
>>
>>
>> AC_CONFIG_SUBDIR_CUSTOM.patch
>>
>>
>> diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
>> index 46a0341..d028ede 100644
>> --- a/lib/autoconf/status.m4
>> +++ b/lib/autoconf/status.m4
>> @@ -191,7 +191,7 @@ m4_define([_AC_CONFIG_DEPENDENCY_DEFAULT],
>>
>> # _AC_CONFIG_UNIQUE(MODE, DEST)
>> # -----------------------------
>> -# MODE is `FILES', `HEADERS', `LINKS', `COMMANDS', or `SUBDIRS'.
>> +# MODE is `FILES', `HEADERS', `LINKS', `COMMANDS', `SUBDIRS' or
>> CONFIG_SUBDIR_CUSTOM.
>> #
>> # Verify that there is no double definition of an output file.
>> #
>> @@ -1097,7 +1097,7 @@ m4_define([AC_OUTPUT_COMMANDS_POST])
>> AC_DEFUN([AC_CONFIG_SUBDIRS],
>> [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])]dnl
>> [AC_REQUIRE([AC_DISABLE_OPTION_CHECKING])]dnl
>> -[m4_map_args_w([$1], [_AC_CONFIG_UNIQUE([SUBDIRS],
>> +[m4_map_args_w([$1], [_AC_CONFIG_UNIQUE([SUBDIRS or CONFIG_SUBDIR_CUSTOM],
>> _AC_CONFIG_COMPUTE_DEST(], [))])]dnl
>> [m4_append([_AC_LIST_SUBDIRS], [$1], [
>> ])]dnl
>> @@ -1106,6 +1106,41 @@ AC_DEFUN([AC_CONFIG_SUBDIRS],
>> [AC_SUBST([subdirs], ["$subdirs m4_normalize([$1])"])])
>>
>>
>> +# AC_CONFIG_SUBDIR_CUSTOM(DIR, ARGUMENTS [, DISABLE_HELP_RECURSIVE])
>> +# ------------------------------------------------------------------
>> +# Build a list custom_subdirs of tuples (DIR, ARGUMENTS) where DIR is
>> +# unique in _AC_LIST_CUSTOM_SUBDIRS and _AC_LIST_SUBDIRS. This list is used
>> in
>> +# _AC_OUTPUT_SUBDIRS to invoke nested configures in directory DIR with
>> +# arguments ARGUMENTS. The arguments are modified as in the
>> AC_CONFIG_SUBDIRS
>> +# case, see _AC_SUB_CONFIGURE_ARGS. If the third argument
>> +# DISABLE_HELP_RECURSIVE is given, configure --help=recursive will omit DIR.
>> +AC_DEFUN([AC_CONFIG_SUBDIR_CUSTOM],
>> +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])]dnl
>> +[AC_REQUIRE([AC_DISABLE_OPTION_CHECKING])]dnl
>> +[m4_foreach_w([_AC_Sub], [$1],
>> + [_AC_CONFIG_UNIQUE([SUBDIRS or CONFIG_SUBDIR_CUSTOM],
>> + m4_bpatsubst(m4_defn([_AC_Sub]),
>> [:.*]))])]dnl
>> +
>> +# build a list of (directory,arguments) tuples that will be processed in
>> _AC_OUTPUT_SUBDIRS
>> +[if test -z "$custom_subdirs"; then
>> +
>> custom_subdirs="custom_sub_configure_dir=\"m4_normalize([$1])\";custom_sub_configure_args=\"m4_normalize([$2])\""
>> +else
>> +
>> custom_subdirs="$custom_subdirs|custom_sub_configure_dir=\"m4_normalize([$1])\";custom_sub_configure_args=\"m4_normalize([$2])\""
>> +fi]
>> +
>> +# per default, enable --help=recursive in directory $1.
>> +[m4_ifval([$3],
>> + [],
>> + [m4_append([_AC_LIST_SUBDIRS], [$1], [
>> +])dnl
>> +])]dnl
>> +[AS_LITERAL_IF([$1], [],
>> + [AC_DIAGNOSE([syntax], [$0: you should use literals])])]dnl
>> +[AC_SUBST([subdirs_custom], ["$subdirs_custom m4_normalize([$1])"])]dnl
>> +)
>> +# AC_CONFIG_SUBDIR_CUSTOM
>> +
>> +
>> # _AC_OUTPUT_SUBDIRS
>> # ------------------
>> # This is a subroutine of AC_OUTPUT, but it does not go into
>> @@ -1116,12 +1151,50 @@ m4_define([_AC_OUTPUT_SUBDIRS],
>> # CONFIG_SUBDIRS section.
>> #
>> if test "$no_recursion" != yes; then
>> + ac_popdir=`pwd`
>> +
>> + # call configures in list $custom_subdirs with directory-specific
>> arguments.
>> + OIFS=$IFS
>> + IFS='|'
>> + list=$custom_subdirs
>> + for dir_and_args in $list; do
>> + IFS=$OIFS
>> + eval $dir_and_args
>> + if test "x$custom_sub_configure_dir" = x; then continue; fi
>> + ac_custom_sub_configure_args=
>> + _AC_SUB_CONFIGURE_ARGS([$custom_sub_configure_args],
>> + [ac_custom_sub_configure_args])
>> + _AC_SUB_CONFIGURE([$custom_sub_configure_dir],
>> + [$ac_custom_sub_configure_args])
>> + cd "$ac_popdir"
>> + IFS='|'
>> + done
>> + IFS=$OIFS
>> +
>> + # call configures in $subdirs with fixed arguments.
>> + ac_sub_configure_args=
>> + _AC_SUB_CONFIGURE_ARGS([$ac_configure_args],
>> + [ac_sub_configure_args])
>> + for ac_dir in : $subdirs; do test "x$ac_dir" = x:&& continue
>> + echo "ac_dir(inside): $ac_dir"
>> + _AC_SUB_CONFIGURE([$ac_dir],
>> + [$ac_sub_configure_args])
>> + cd "$ac_popdir"
>> + done
>> +fi
>> +])# _AC_OUTPUT_SUBDIRS
>>
>> +
>> +# _AC_SUB_CONFIGURE_ARGS(ARGUMENTS_IN, ARGUMENTS_OUT)
>> +# ---------------------------------------------------
>> +# Create ARGUMENTS_OUT from ARGUMENTS_IN for use in nested configure calls.
>> +m4_define([_AC_SUB_CONFIGURE_ARGS],
>> +[
>> # Remove --cache-file, --srcdir, and --disable-option-checking arguments
>> # so they do not pile up.
>> ac_sub_configure_args=
>> ac_prev=
>> - eval "set x $ac_configure_args"
>> + eval "set x $1"
>> shift
>> for ac_arg
>> do
>> @@ -1153,7 +1226,7 @@ if test "$no_recursion" != yes; then
>> case $ac_arg in
>> *\'*) ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
>> esac
>> - AS_VAR_APPEND([ac_sub_configure_args], [" '$ac_arg'"]) ;;
>> + AS_VAR_APPEND([$2], [" '$ac_arg'"]) ;;
>> esac
>> done
>>
>> @@ -1163,66 +1236,68 @@ if test "$no_recursion" != yes; then
>> case $ac_arg in
>> *\'*) ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
>> esac
>> - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
>> + $2="'$ac_arg' $$2"
>>
>> # Pass --silent
>> if test "$silent" = yes; then
>> - ac_sub_configure_args="--silent $ac_sub_configure_args"
>> + $2="--silent $$2"
>> fi
>>
>> # Always prepend --disable-option-checking to silence warnings, since
>> # different subdirs can have different --enable and --with options.
>> - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
>> + $2="--disable-option-checking $$2"
>> +])# _AC_SUB_CONFIGURE_ARGS
>>
>> - ac_popdir=`pwd`
>> - for ac_dir in : $subdirs; do test "x$ac_dir" = x:&& continue
>>
>> - # Do not complain, so a configure script can configure whichever
>> - # parts of a large source tree are present.
>> - test -d "$srcdir/$ac_dir" || continue
>> -
>> - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
>> - _AS_ECHO_LOG([$ac_msg])
>> - _AS_ECHO([$ac_msg])
>> - AS_MKDIR_P(["$ac_dir"])
>> - _AC_SRCDIRS(["$ac_dir"])
>> -
>> - cd "$ac_dir"
>> -
>> - # Check for guested configure; otherwise get Cygnus style configure.
>> - if test -f "$ac_srcdir/configure.gnu"; then
>> - ac_sub_configure=$ac_srcdir/configure.gnu
>> - elif test -f "$ac_srcdir/configure"; then
>> - ac_sub_configure=$ac_srcdir/configure
>> - elif test -f "$ac_srcdir/configure.in"; then
>> - # This should be Cygnus configure.
>> - ac_sub_configure=$ac_aux_dir/configure
>> - else
>> - AC_MSG_WARN([no configuration information is in $ac_dir])
>> - ac_sub_configure=
>> - fi
>> -
>> - # The recursion is here.
>> - if test -n "$ac_sub_configure"; then
>> - # Make the cache file name correct relative to the subdirectory.
>> - case $cache_file in
>> - [[\\/]]* | ?:[[\\/]]* ) ac_sub_cache_file=$cache_file ;;
>> - *) # Relative name.
>> - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
>> - esac
>> -
>> - AC_MSG_NOTICE([running $SHELL $ac_sub_configure
>> $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir])
>> - # The eval makes quoting arguments work.
>> - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
>> - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
>> - AC_MSG_ERROR([$ac_sub_configure failed for $ac_dir])
>> - fi
>> +# _AC_SUB_CONFIGURE(DIR, ARGUMENTS)
>> +# ---------------------------------
>> +# Call nested configure in DIR with arguments ARGUMENTS.
>> +m4_define([_AC_SUB_CONFIGURE],
>> +[
>> + sub_configure_dir=$1
>> + sub_configure_args=$2
>> +
>> + # Do not complain, so a configure script can configure whichever
>> + # parts of a large source tree are present.
>> + test -d "$srcdir/$sub_configure_dir" || continue
>> +
>> + ac_msg="=== configuring in $sub_configure_dir (`pwd`/$sub_configure_dir)"
>> + _AS_ECHO_LOG([$ac_msg])
>> + _AS_ECHO([$ac_msg])
>> + AS_MKDIR_P(["$sub_configure_dir"])
>> + _AC_SRCDIRS(["$sub_configure_dir"])
>> +
>> + cd "$sub_configure_dir"
>> +
>> + # Check for guested configure; otherwise get Cygnus style configure.
>> + if test -f "$ac_srcdir/configure.gnu"; then
>> + ac_sub_configure=$ac_srcdir/configure.gnu
>> + elif test -f "$ac_srcdir/configure"; then
>> + ac_sub_configure=$ac_srcdir/configure
>> + elif test -f "$ac_srcdir/configure.in"; then
>> + # This should be Cygnus configure.
>> + ac_sub_configure=$ac_aux_dir/configure
>> + else
>> + AC_MSG_WARN([no configuration information is in $sub_configure_dir])
>> + ac_sub_configure=
>> + fi
>>
>> - cd "$ac_popdir"
>> - done
>> -fi
>> -])# _AC_OUTPUT_SUBDIRS
>> + # The recursion is here.
>> + if test -n "$ac_sub_configure"; then
>> + # Make the cache file name correct relative to the subdirectory.
>> + case $cache_file in
>> + [[\\/]]* | ?:[[\\/]]* ) ac_sub_cache_file=$cache_file ;;
>> + *) # Relative name.
>> + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
>> + esac
>>
>> + AC_MSG_NOTICE([running $SHELL $ac_sub_configure $sub_configure_args
>> --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir])
>> + # The eval makes quoting arguments work.
>> + eval "\$SHELL \"\$ac_sub_configure\" $sub_configure_args \
>> + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
>> + AC_MSG_ERROR([$ac_sub_configure failed for $sub_configure_dir])
>> + fi
>> +])# _AC_SUB_CONFIGURE
>>
>>
>>
>> @@ -1304,7 +1379,10 @@ if test "$no_create" != yes; then
>> $ac_cs_success || AS_EXIT([1])
>> fi
>> dnl config.status should not do recursion.
>> -AC_PROVIDE_IFELSE([AC_CONFIG_SUBDIRS], [_AC_OUTPUT_SUBDIRS()])dnl
>> +AC_PROVIDE_IFELSE([AC_CONFIG_SUBDIRS],
>> + [_AC_OUTPUT_SUBDIRS()],
>> + [AC_PROVIDE_IFELSE([AC_CONFIG_SUBDIR_CUSTOM],
>> + [_AC_OUTPUT_SUBDIRS()])])dnl
>> if test -n "$ac_unrecognized_opts"&& test "$enable_option_checking" != no;
>> then
>> AC_MSG_WARN([unrecognized options: $ac_unrecognized_opts])
>> fi
>>
>>
>>
>> _______________________________________________
>> Autoconf mailing list
>> address@hidden
>> http://lists.gnu.org/mailman/listinfo/autoconf
>
> _______________________________________________
> Autoconf mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/autoconf
- Re: Multiple subdirectories with non-similar configure needs,
Jim Galarowicz <=