[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/4] gnulib-tool: avoid forks with func_get_* functions.
From: |
Ralf Wildenhues |
Subject: |
[PATCH 2/4] gnulib-tool: avoid forks with func_get_* functions. |
Date: |
Sun, 28 Dec 2008 11:19:19 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
* gnulib-tool (func_get_description)
(func_get_status, func_get_notice, func_get_filelist)
(func_get_dependencies, func_get_autoconf_early_snippet)
(func_get_autoconf_snippet, func_get_automake_snippet)
(func_get_include_directive, func_get_link_directive)
(func_get_license, func_get_maintainer, func_get_tests_module):
Change semantics so that each function sets an output variable
instead of printing the result to stdout. Adjust callers.
(func_modules_transitive_closure, func_modules_add_dummy)
(func_modules_notice, func_modules_to_filelist)
(func_emit_lib_Makefile_am, func_emit_tests_Makefile_am)
(func_import, func_note_Makefile_am_edit, func_done_dir)
(func_create_testdir, func_create_megatestdir): Likewise,
adjust callers of func_get_* functions.
---
gnulib-tool | 184 +++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 128 insertions(+), 56 deletions(-)
diff --git a/gnulib-tool b/gnulib-tool
index d5eb9df..c172d6c 100755
--- a/gnulib-tool
+++ b/gnulib-tool
@@ -1365,41 +1365,48 @@ func_cache_lookup_module ()
# func_get_description module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_desc
func_get_description ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_desc\""
+ eval "module_desc=\"\$${cachevar}_desc\""
}
# func_get_status module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_status
func_get_status ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_status\""
+ eval "module_status=\"\$${cachevar}_status\""
}
# func_get_notice module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_notice
func_get_notice ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_notice\""
+ eval "module_notice=\"\$${cachevar}_notice\""
}
# func_get_filelist module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_files
func_get_filelist ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_files\""
- echo m4/gnulib-common.m4
+ eval "module_files=\"\$${cachevar}_files\"\${nl}m4/gnulib-common.m4"
case "$autoconf_minversion" in
2.59)
- echo m4/onceonly.m4
+ module_files="$module_files${nl}m4/onceonly.m4"
;;
esac
}
@@ -1407,45 +1414,59 @@ func_get_filelist ()
# func_get_dependencies module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_deps
func_get_dependencies ()
{
+ module_deps=
# ${module}-tests always implicitly depends on ${module}.
- echo "$1" | sed -n -e 's/-tests$//p'
+ case $1 in
+ *-tests*)
+ module_deps=`echo "$1" | sed -n -e 's/-tests$//p'` ;;
+ esac
# Then the explicit dependencies listed in the module description.
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_deps\""
+ eval "module_deps=\"\$module_deps\$nl\$${cachevar}_deps\""
}
# func_get_autoconf_early_snippet module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_config_early
func_get_autoconf_early_snippet ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_config_early\""
+ eval "module_config_early=\"\$${cachevar}_config_early\""
}
# func_get_autoconf_snippet module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_config
func_get_autoconf_snippet ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_config\""
+ eval "module_config=\"\$${cachevar}_config\""
}
# func_get_automake_snippet module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_makefile
func_get_automake_snippet ()
{
- func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_makefile\""
+ mymodule=$1
+ func_cache_lookup_module "$mymodule"
+ eval "module_makefile=\"\$${cachevar}_makefile\""
case "$1" in
*-tests)
# *-tests module live in tests/, not lib/.
# Synthesize an EXTRA_DIST augmentation.
- all_files=`func_get_filelist $1`
+ func_get_filelist "$mymodule"
+ all_files=$module_files
tests_files=`for f in $all_files; do \
case $f in \
tests/*) echo $f ;; \
@@ -1453,8 +1474,9 @@ func_get_automake_snippet ()
done | sed -e 's,^tests/,,'`
extra_files="$tests_files"
if test -n "$extra_files"; then
- echo "EXTRA_DIST +=" $extra_files
- echo
+ set x $extra_files
+ shift
+ func_append module_makefile "${nl}EXTRA_DIST += $*"
fi
;;
*)
@@ -1471,7 +1493,8 @@ func_get_automake_snippet ()
eval "echo \\"\\$${cachevar}_makefile\\"" \
| sed -e "$sed_combine_lines" \
| sed -n -e "$sed_extract_mentioned_files" | sed -e 's/#.*//'`
- all_files=`func_get_filelist $1`
+ func_get_filelist "$mymodule"
+ all_files=$module_files
lib_files=`for f in $all_files; do \
case $f in \
lib/*) echo $f ;; \
@@ -1483,8 +1506,9 @@ func_get_automake_snippet ()
for f in $already_mentioned_files; do echo $f; done \
| LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/lib-files`
if test -n "$extra_files"; then
- echo "EXTRA_DIST +=" $extra_files
- echo
+ set x $extra_files
+ shift
+ func_append module_makefile "${nl}EXTRA_DIST += $*"
fi
# Synthesize also an EXTRA_lib_SOURCES augmentation.
# This is necessary so that automake can generate the right list of
@@ -1497,14 +1521,15 @@ func_get_automake_snippet ()
# If some .c file exists and is not used with AC_LIBOBJ - for example,
# a .c file is preprocessed into another .c file for BUILT_SOURCES -,
# automake will generate a useless dependency; this is harmless.
- case "$1" in
+ case "$mymodule" in
relocatable-prog-wrapper) ;;
*)
sed_extract_c_files='/\.c$/p'
extra_files=`echo "$extra_files" | sed -n -e "$sed_extract_c_files"`
if test -n "$extra_files"; then
- echo "EXTRA_lib_SOURCES +=" $extra_files
- echo
+ set x $extra_files
+ shift
+ func_append module_makefile "${nl}EXTRA_lib_SOURCES += $*"
fi
;;
esac
@@ -1516,8 +1541,9 @@ func_get_automake_snippet ()
done | sed -e 's,^build-aux/,,'`
if test -n "$buildaux_files"; then
sed_prepend_auxdir='s,^,$(top_srcdir)/'"$auxdir"'/,'
- echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e
"$sed_prepend_auxdir"`
- echo
+ set x `echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"`
+ shift
+ func_append module_makefile "${nl}EXTRA_DIST += $*"
fi
# Synthesize an EXTRA_DIST augmentation also for the files from top/.
top_files=`for f in $all_files; do \
@@ -1527,8 +1553,9 @@ func_get_automake_snippet ()
done | sed -e 's,^top/,,'`
if test -n "$top_files"; then
sed_prepend_topdir='s,^,$(top_srcdir)/,'
- echo "EXTRA_DIST += "`echo "$top_files" | sed -e "$sed_prepend_topdir"`
- echo
+ set x `echo "$top_files" | sed -e "$sed_prepend_topdir"`
+ shift
+ func_append module_makefile "${nl}EXTRA_DIST += $*"
fi
;;
esac
@@ -1537,54 +1564,65 @@ func_get_automake_snippet ()
# func_get_include_directive module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_include
func_get_include_directive ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_include\"" | \
- sed -e 's/^\(["<]\)/#include \1/'
+ module_include=`eval "echo \\"\\$${cachevar}_include\\"" | \
+ sed -e 's/^\(["<]\)/#include \1/'`
}
# func_get_link_directive module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_link
func_get_link_directive ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_link\""
+ eval "module_link=\"\$${cachevar}_link\""
}
# func_get_license module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_license
func_get_license ()
{
func_cache_lookup_module "$1"
- {
- eval "echo \"\$${cachevar}_license\""
- # The default is GPL.
- echo "GPL"
- } | sed -e 's,^ *$,,' | sed -e 1q
+ eval "module_license=\"\$${cachevar}_license\""
+ # The default is GPL.
+ case $module_license in
+ *[!\ \ ]*) ;;
+ *) module_license=GPL ;;
+ esac
}
# func_get_maintainer module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_maint
func_get_maintainer ()
{
func_cache_lookup_module "$1"
- eval "echo \"\$${cachevar}_maint\""
+ eval "module_maint=\"\$${cachevar}_maint\""
}
# func_get_tests_module module
# Input:
# - local_gnulib_dir from --local-dir
+# Output:
+# - module_tests
func_get_tests_module ()
{
# The naming convention for tests modules is hardwired: ${module}-tests.
if test -f "$gnulib_dir/modules/$1"-tests \
|| { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \
&& test -f "$local_gnulib_dir/modules/$1"-tests; }; then
- echo "$1"-tests
+ module_tests=$1-tests
fi
}
@@ -1631,7 +1669,8 @@ func_modules_transitive_closure ()
if test -n "$module"; then
if func_acceptable $module; then
func_append outmodules " $module"
- deps=`func_get_dependencies $module`
+ func_get_dependencies $module
+ deps=$module_deps
# Duplicate dependencies are harmless, but Jim wants a warning.
duplicated_deps=`echo "$deps" | LC_ALL=C sort | LC_ALL=C uniq -d`
if test -n "$duplicated_deps"; then
@@ -1639,12 +1678,13 @@ func_modules_transitive_closure ()
fi
for dep in $deps; do
if test -n "$incobsolete" \
- || { status=`func_get_status $dep`; test "$status" != obsolete;
}; then
+ || { func_get_status $dep; test "$module_status" != obsolete;
}; then
func_append inmodules " $dep"
fi
done
if test -n "$inctests"; then
- testsmodule=`func_get_tests_module $module`
+ func_get_tests_module $module
+ testsmodule=$module_tests
if test -n "$testsmodule"; then
func_append inmodules " $testsmodule"
fi
@@ -1681,7 +1721,8 @@ ba
func_verify_nontests_module
if test -n "$module"; then
# Extract the value of "lib_SOURCES += ...".
- for file in `func_get_automake_snippet "$module" | sed -e
"$sed_remove_backslash_newline" | sed -n -e 's,^lib_SOURCES[
]*+=\([^#]*\).*$,\1,p'`; do
+ func_get_automake_snippet "$module"
+ for file in `echo "$module_makefile" | sed -e
"$sed_remove_backslash_newline" | sed -n -e 's,^lib_SOURCES[
]*+=\([^#]*\).*$,\1,p'`; do
# Ignore .h files since they are not compiled.
case "$file" in
*.h) ;;
@@ -1709,7 +1750,8 @@ func_modules_notice ()
for module in $modules; do
func_verify_module
if test -n "$module"; then
- msg=`func_get_notice $module`
+ func_get_notice $module
+ msg=$module_notice
if test -n "$msg"; then
echo "Notice from module $module:"
echo "$msg" | sed -e 's/^/ /'
@@ -1731,8 +1773,8 @@ func_modules_to_filelist ()
for module in $modules; do
func_verify_module
if test -n "$module"; then
- fs=`func_get_filelist $module`
- func_append files " $fs"
+ func_get_filelist $module
+ func_append files " $module_files"
fi
done
files=`for f in $files; do echo $f; done | LC_ALL=C sort -u`
@@ -1823,7 +1865,8 @@ func_emit_lib_Makefile_am ()
func_verify_nontests_module
if test -n "$module"; then
{
- func_get_automake_snippet "$module" |
+ func_get_automake_snippet "$module"
+ echo "$module_makefile" |
sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
-e "$sed_eliminate_LDFLAGS" \
@@ -1846,7 +1889,8 @@ func_emit_lib_Makefile_am ()
fi
rm -f amsnippet.tmp
# Test whether there are some source files in subdirectories.
- for f in `func_get_filelist "$module"`; do
+ func_get_filelist "$module"
+ for f in $module_files; do
case $f in
lib/*/*.c) uses_subdirs=yes ;;
esac
@@ -2070,7 +2114,8 @@ func_emit_tests_Makefile_am ()
fi
if test -n "$module"; then
{
- func_get_automake_snippet "$module" |
+ func_get_automake_snippet "$module"
+ echo "$module_makefile" |
sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
-e "$sed_eliminate_LDFLAGS" \
@@ -2093,7 +2138,8 @@ func_emit_tests_Makefile_am ()
fi
rm -f amsnippet.tmp
# Test whether there are some source files in subdirectories.
- for f in `func_get_filelist "$module"`; do
+ func_get_filelist "$module"
+ for f in $module_files; do
case $f in
lib/*/*.c | tests/*/*.c) uses_subdirs=yes ;;
esac
@@ -2616,7 +2662,8 @@ func_import ()
for module in $testsrelated_modules; do
func_verify_nontests_module
if test -n "$module"; then
- all_files=`func_get_filelist $module`
+ func_get_filelist $module
+ all_files=$module_files
lib_files=`for f in $all_files; do \
case $f in \
lib/*) echo $f ;; \
@@ -2640,7 +2687,8 @@ func_import ()
if test -n "$lgpl"; then
license_incompatibilities=
for module in $main_modules; do
- license=`func_get_license $module`
+ func_get_license $module
+ license=$module_license
case $license in
'GPLed build tool') ;;
'public domain' | 'unlimited' | 'unmodifiable license text') ;;
@@ -3360,6 +3408,7 @@ s,//*$,/,'
func_verify_module
if test -n "$module"; then
func_get_autoconf_early_snippet "$module"
+ echo "$module_config_early"
fi
done \
| sed -e '/^$/d;' -e 's/^/ /'
@@ -3393,7 +3442,8 @@ s,//*$,/,'
for module in $main_modules; do
func_verify_module
if test -n "$module"; then
- func_get_autoconf_snippet "$module" \
+ func_get_autoconf_snippet "$module"
+ echo "$module_config" \
| sed -e '/^$/d;' -e 's/^/ /' \
-e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add
AM_GNU_GETTEXT([external]) or similar to configure.ac./' \
-e "$sed_replace_build_aux"
@@ -3413,7 +3463,8 @@ s,//*$,/,'
for module in $testsrelated_modules; do
func_verify_module
if test -n "$module"; then
- func_get_autoconf_snippet "$module" \
+ func_get_autoconf_snippet "$module"
+ echo "$module_config" \
| sed -e '/^$/d;' -e 's/^/ /' \
-e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add
AM_GNU_GETTEXT([external]) or similar to configure.ac./' \
-e "$sed_replace_build_aux" \
@@ -3623,7 +3674,8 @@ s,//*$,/,'
# then the #include "..." directives without #ifs, sorted for convenience,
# then the #include directives that are surrounded by #ifs. Not sorted.
for module in `LC_ALL=C join "$tmp"/modules1 "$tmp"/modules2`; do
- include_directive=`func_get_include_directive "$module"`
+ func_get_include_directive "$module"
+ include_directive=$module_include
case "$nl$include_directive" in
*"$nl#if"*)
echo "$include_directive" 1>&5
@@ -3643,6 +3695,7 @@ s,//*$,/,'
for module in $main_modules; do
func_get_link_directive "$module"
+ echo "$module_link"
done \
| LC_ALL=C sort -u | sed -e '/^$/d' -e 's/^/ /' > "$tmp"/link
if test `wc -l < "$tmp"/link` != 0; then
@@ -3712,7 +3765,8 @@ func_create_testdir ()
# on GPL modules - therefore we don't want a warning in this case.
inctests=""
for requested_module in $saved_modules; do
- requested_license=`func_get_license "$requested_module"`
+ func_get_license "$requested_module"
+ requested_license=$module_license
if test "$requested_license" != GPL; then
# Here we use func_modules_transitive_closure, not just
# func_get_dependencies, so that we also detect weird situations like
@@ -3721,7 +3775,8 @@ func_create_testdir ()
modules="$requested_module"
func_modules_transitive_closure
for module in $modules; do
- license=`func_get_license "$module"`
+ func_get_license "$module"
+ license=$module_license
case "$license" in
'GPLed build tool') ;;
'public domain' | 'unlimited' | 'unmodifiable license text') ;;
@@ -3907,6 +3962,7 @@ func_create_testdir ()
;;
*)
func_get_autoconf_early_snippet "$module"
+ echo "$module_config_early"
;;
esac
fi
@@ -3948,7 +4004,8 @@ func_create_testdir ()
# These modules are meant to be used only in the top-level
directory.
;;
*)
- func_get_autoconf_snippet "$module" \
+ func_get_autoconf_snippet "$module"
+ echo "$module_config" \
| sed -e "$sed_replace_build_aux"
;;
esac
@@ -3958,7 +4015,8 @@ func_create_testdir ()
for module in $modules; do
func_verify_tests_module
if test -n "$module"; then
- func_get_autoconf_snippet "$module" \
+ func_get_autoconf_snippet "$module"
+ echo "$module_config" \
| sed -e "$sed_replace_build_aux"
fi
done
@@ -4035,6 +4093,7 @@ func_create_testdir ()
func_verify_nontests_module
if test -n "$module"; then
func_get_autoconf_early_snippet "$module"
+ echo "$module_config_early"
fi
done \
| sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
@@ -4070,7 +4129,8 @@ func_create_testdir ()
for module in $modules; do
func_verify_nontests_module
if test -n "$module"; then
- func_get_autoconf_snippet "$module" \
+ func_get_autoconf_snippet "$module"
+ echo "$module_config" \
| sed -e "$sed_replace_build_aux"
fi
done
@@ -4490,6 +4550,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_description "$module"
+ echo "$module_desc"
fi
done
;;
@@ -4500,6 +4561,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_status "$module"
+ echo "$module_status"
fi
done
;;
@@ -4510,6 +4572,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_notice "$module"
+ echo "$module_notice"
fi
done
;;
@@ -4520,6 +4583,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_filelist "$module"
+ echo "$module_files"
fi
done
;;
@@ -4530,6 +4594,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_dependencies "$module"
+ echo "$module_deps"
fi
done
;;
@@ -4540,6 +4605,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_autoconf_snippet "$module"
+ echo "$module_config"
fi
done
;;
@@ -4550,6 +4616,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_automake_snippet "$module"
+ echo "$module_makefile"
fi
done
;;
@@ -4560,6 +4627,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_include_directive "$module"
+ echo "$module_include"
fi
done
;;
@@ -4570,6 +4638,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_link_directive "$module"
+ echo "$module_link"
fi
done
;;
@@ -4580,6 +4649,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_license "$module"
+ echo "$module_license"
fi
done
;;
@@ -4590,6 +4660,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_maintainer "$module"
+ echo "$module_maint"
fi
done
;;
@@ -4600,6 +4671,7 @@ case $mode in
func_verify_module
if test -n "$module"; then
func_get_tests_module "$module"
+ echo "$module_tests"
fi
done
;;
--
1.6.1.rc3.96.g159c88