On 27 Jan 2013, at 03:27, Bruce Korb <bruce.k...@gmail.com> wrote: > Hi Gary,
Hey Bruce! > Speaking of bootstrap wishes, how about a hack that captures the > "You may need to include this" list? As the various modules > change dependencies and add new headers, I'd as soon glue the > "you may need to add" cruft to the end of config.h. Well, the beauty of the hook and require core of my bootstrap rewrite is that you don't need to wish for such things... just write some new shell functions in your bootstrap.conf (feeling free to build on the shoulders of all the require_* functions provided by bootstrap) and then hook them in at the place you'd like them to be called back. Here's something I hacked together in 30 minutes (that is, only very light testing was performed) to add to your bootstrap.conf: # sharutils_append_all_gnulib_includes_config_h # --------------------------------------------- # Append all gnulib mandated header files to the end of the first # AC_CONFIG_HEADER{,S} file from $configure_ac. sharutils_append_all_gnulib_includes_config_h () { $debug_cmd func_extract_trace AC_CONFIG_HEADERS test -n "$func_extract_trace_result" \ || func_extract_trace AC_CONFIG_HEADER test -n "$func_extract_trace_result" && { $require_all_gnulib_includes test -n "$all_gnulib_includes" && { for header in $func_extract_trace_result; do # Take care to honor config.h:config-h.in specifications. case $header in *:*) header=`echo $header |sed 's|^.*:||'` ;; *) header=$header.in ;; esac func_verbose "appending gnulib includes to '$header'" echo "$all_gnulib_includes" >> $header # Ignore remaining header specs. break done } } } func_add_hook func_fini sharutils_append_all_gnulib_includes_config_h # require_all_gnulib_includes # --------------------------- # Ensure `$all_gnulib_includes' contains a sorted uniquified list of # every gnulib mandated header file. require_all_gnulib_includes=func_require_all_gnulib_includes func_require_all_gnulib_includes () { $debug_cmd $require_gnulib_tool test true = "$gnulib_tool" || { $require_all_gnulib_modules $require_gnulib_tool_base_options gnulib_mode=--extract-include-directive gnulib_tool_all_options="$gnulib_mode $gnulib_tool_base_options" all_gnulib_includes=`\ $gnulib_tool $gnulib_tool_all_options $all_gnulib_modules \ |sed '/^$/d' |sort |uniq` # put <> includes before "" includes all_gnulib_includes=`\ echo "$all_gnulib_includes" | grep -v '"'; echo "$all_gnulib_includes" | grep '"'` test -n "all_gnulib_includes" || func_verbose "found gnulib includes" } require_all_gnulib_includes=: } # require_all_gnulib_modules # -------------------------- # Ensure `$all_gnulib_modules' contains the fully expanded list of # gnulib modules with dependencies expanded. require_all_gnulib_modules=func_require_all_gnulib_modules func_require_all_gnulib_modules () { $debug_cmd $require_gnulib_tool test true = "$gnulib_tool" || { $require_gnulib_tool_base_options all_gnulib_modules=$gnulib_modules gnulib_mode=--extract-dependencies gnulib_tool_all_options="$gnulib_mode $gnulib_tool_base_options" while :; do my_add_modules=false for module in $gnulib_modules; do for depend in `$gnulib_tool $gnulib_tool_all_options $module`; do case " "`echo $my_full_module_list`" " in *" $depend "*) ;; *) my_add_modules=: my_full_module_list="$my_full_module_list $depend" ;; esac done done $my_add_modules || break done } test "$all_gnulib_modules" = "$gnulib_modules" \ || func_verbose 'recursively expanding $gnulib_modules list' require_all_gnulib_modules=: } Note, that I factored the require_gnulib_tool_base_options function out just now in latest libtool master HEAD of bootstrap in order to avoid having to copy the gnulib-tool option setting code out of bootstrap into the functions above. It may work for you anyway, provided that you are already using the gnulib-tool defaults for --aux-dir, --m4-base, --doc-base, --lib, --local-dir and --source-base, but I'd recommend pulling the latest libtool bootstrap just to be future-proof. :) HTH, -- Gary V. Vaughan (gary AT gnu DOT org)