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
Attachment:
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 >> Autoconf@xxxxxxx >> http://lists.gnu.org/mailman/listinfo/autoconf > > _______________________________________________ > Autoconf mailing list > Autoconf@xxxxxxx > http://lists.gnu.org/mailman/listinfo/autoconf
_______________________________________________ Autoconf mailing list Autoconf@xxxxxxx https://lists.gnu.org/mailman/listinfo/autoconf