summaryrefslogtreecommitdiff
path: root/gnulib-tool
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2021-04-11 21:25:54 +0200
committerBruno Haible <bruno@clisp.org>2021-04-11 21:25:54 +0200
commit80a344e3237b878734295cbe696b7f1e4a8541f0 (patch)
tree25fae0a848e083103ee2a721f8846d7991370cbd /gnulib-tool
parent8b857ed1ad1cbbf265d43016ee7ee93c7b7c6cb4 (diff)
downloadgnulib-80a344e3237b878734295cbe696b7f1e4a8541f0.tar.gz
Support several gnulib-tool invocations under the same configure.ac.
Reported by Reuben Thomas <rrt@sc3d.org> in <https://lists.gnu.org/archive/html/bug-gnulib/2021-04/msg00104.html>. This is done by defining the Gnulib module indicator variables per gnulib-tool invocation. So that a generated .h file is no longer influenced by the set of modules used in other gnulib-tool invocations. * gnulib-tool (func_compute_include_guard_prefix): Set module_indicator_prefix. (func_emit_lib_Makefile_am, func_emit_tests_Makefile_am): Use it to modify $(GNULIB_*) variable references in the Automake snippets. (func_emit_initmacro_start): Push macro definitions for GL_MACRO_PREFIX and GL_MODULE_INDICATOR_PREFIX. (func_emit_initmacro_end): Pop these macro definitions. * pygnulib/GLConfig.py (GLConfig.getIncludeGuardPrefix): New method. * pygnulib/GLEmiter.py (GLEmiter.initmacro_start): Push macro definitions for GL_MACRO_PREFIX and GL_MODULE_INDICATOR_PREFIX. (GLEmiter.initmacro_end): Pop these macro definitions. (GLEmiter.lib_Makefile_am, GLEmiter.tests_Makefile_am): Use the module indicator prefix to modify $(GNULIB_*) variable references in the Automake snippets. * m4/gnulib-common.m4 (gl_MODULE_INDICATOR_INIT_VARIABLE, gl_MODULE_INDICATOR_SET_VARIABLE): Use the value of GL_MODULE_INDICATOR_PREFIX. * m4/arpa_inet_h.m4: Use new idiom for header files that contain references to Gnulib module indicator variables: - Define the main macro through AC_DEFUN_ONCE. - Define a macro gl_*_H_REQUIRE_DEFAULTS that initializes the Gnulib module indicator variables (each prefixed with GL_MODULE_INDICATOR_PREFIX). - Invoke this macro in the gl_*_MODULE_INDICATOR macro. * m4/ctype.m4: Likewise. * m4/dirent_h.m4: Likewise. * m4/fcntl_h.m4: Likewise. * m4/fnmatch_h.m4: Likewise. * m4/glob_h.m4: Likewise. * m4/iconv_h.m4: Likewise. * m4/inttypes.m4: Likewise. * m4/langinfo_h.m4: Likewise. * m4/locale_h.m4: Likewise. * m4/malloc_h.m4: Likewise. * m4/math_h.m4: Likewise. * m4/monetary_h.m4: Likewise. * m4/netdb_h.m4: Likewise. * m4/poll_h.m4: Likewise. * m4/pthread_h.m4: Likewise. * m4/pty_h.m4: Likewise. * m4/sched_h.m4: Likewise. * m4/search_h.m4: Likewise. * m4/signal_h.m4: Likewise. * m4/spawn_h.m4: Likewise. * m4/stddef_h.m4: Likewise. * m4/stdio_h.m4: Likewise. * m4/stdlib_h.m4: Likewise. * m4/string_h.m4: Likewise. * m4/strings_h.m4: Likewise. * m4/sys_file_h.m4: Likewise. * m4/sys_ioctl_h.m4: Likewise. * m4/sys_random_h.m4: Likewise. * m4/sys_resource_h.m4: Likewise. * m4/sys_select_h.m4: Likewise. * m4/sys_socket_h.m4: Likewise. * m4/sys_stat_h.m4: Likewise. * m4/sys_time_h.m4: Likewise. * m4/sys_times_h.m4: Likewise. * m4/sys_types_h.m4: Likewise. * m4/sys_uio_h.m4: Likewise. * m4/sys_utsname_h.m4: Likewise. * m4/sys_wait_h.m4: Likewise. * m4/termios_h.m4: Likewise. * m4/threads.m4: Likewise. * m4/time_h.m4: Likewise. * m4/uchar.m4: Likewise. * m4/unistd_h.m4: Likewise. * m4/utime_h.m4: Likewise. * m4/wchar_h.m4: Likewise. * m4/wctype_h.m4: Likewise. * modules/arpa_inet (configure.ac): Invoke the macro gl_*_H_REQUIRE_DEFAULTS explicitly. * modules/ctype (configure.ac): Likewise. * modules/dirent (configure.ac): Likewise. * modules/fcntl-h (configure.ac): Likewise. * modules/fnmatch-h (configure.ac): Likewise. * modules/glob-h (configure.ac): Likewise. * modules/iconv-h (configure.ac): Likewise. * modules/inttypes-incomplete (configure.ac): Likewise. * modules/langinfo (configure.ac): Likewise. * modules/locale (configure.ac): Likewise. * modules/malloc-h (configure.ac): Likewise. * modules/math (configure.ac): Likewise. * modules/monetary (configure.ac): Likewise. * modules/netdb (configure.ac): Likewise. * modules/poll-h (configure.ac): Likewise. * modules/pthread-h (configure.ac): Likewise. * modules/pty (configure.ac): Likewise. * modules/sched (configure.ac): Likewise. * modules/search (configure.ac): Likewise. * modules/signal-h (configure.ac): Likewise. * modules/spawn (configure.ac): Likewise. * modules/stddef (configure.ac): Likewise. * modules/stdio (configure.ac): Likewise. * modules/stdlib (configure.ac): Likewise. * modules/string (configure.ac): Likewise. * modules/strings (configure.ac): Likewise. * modules/sys_file (configure.ac): Likewise. * modules/sys_ioctl (configure.ac): Likewise. * modules/sys_random (configure.ac): Likewise. * modules/sys_resource (configure.ac): Likewise. * modules/sys_select (configure.ac): Likewise. * modules/sys_socket (configure.ac): Likewise. * modules/sys_stat (configure.ac): Likewise. * modules/sys_time (configure.ac): Likewise. * modules/sys_times (configure.ac): Likewise. * modules/sys_types (configure.ac): Likewise. * modules/sys_uio (configure.ac): Likewise. * modules/sys_utsname (configure.ac): Likewise. * modules/sys_wait (configure.ac): Likewise. * modules/termios (configure.ac): Likewise. * modules/threads-h (configure.ac): Likewise. * modules/time (configure.ac): Likewise. * modules/uchar (configure.ac): Likewise. * modules/unistd (configure.ac): Likewise. * modules/utime-h (configure.ac): Likewise. * modules/wchar (configure.ac): Likewise. * modules/wctype-h (configure.ac): Likewise. * m4/af_alg.m4: Update after a macro name changed. * m4/ctime.m4: Likewise. * m4/explicit_bzero.m4: Likewise. * m4/ffs.m4: Likewise. * m4/ffsl.m4: Likewise. * m4/ffsll.m4: Likewise. * m4/flock.m4: Likewise. * m4/fstat.m4: Likewise. * m4/getaddrinfo.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/gettimeofday.m4: Likewise. * m4/hostent.m4: Likewise. * m4/ioctl.m4: Likewise. * m4/localtime.m4: Likewise. * m4/mbslen.m4: Likewise. * m4/memchr.m4: Likewise. * m4/memmem.m4: Likewise. * m4/mempcpy.m4: Likewise. * m4/memrchr.m4: Likewise. * m4/mktime.m4: Likewise. * m4/nanosleep.m4: Likewise. * m4/passfd.m4: Likewise. * m4/pselect.m4: Likewise. * m4/rawmemchr.m4: Likewise. * m4/select.m4: Likewise. * m4/servent.m4: Likewise. * m4/sigabbrev_np.m4: Likewise. * m4/sigdescr_np.m4: Likewise. * m4/sockpfaf.m4: Likewise. * m4/stat.m4: Likewise. * m4/stpcpy.m4: Likewise. * m4/stpncpy.m4: Likewise. * m4/strcase.m4: Likewise. * m4/strcasestr.m4: Likewise. * m4/strchrnul.m4: Likewise. * m4/strdup.m4: Likewise. * m4/strerror.m4: Likewise. * m4/strerror_r.m4: Likewise. * m4/strerrorname_np.m4: Likewise. * m4/strftime-fixes.m4: Likewise. * m4/strncat.m4: Likewise. * m4/strndup.m4: Likewise. * m4/strnlen.m4: Likewise. * m4/strpbrk.m4: Likewise. * m4/strptime.m4: Likewise. * m4/strsep.m4: Likewise. * m4/strsignal.m4: Likewise. * m4/strstr.m4: Likewise. * m4/strtok_r.m4: Likewise. * m4/strverscmp.m4: Likewise. * m4/time_r.m4: Likewise. * m4/time_rz.m4: Likewise. * m4/timegm.m4: Likewise. * m4/timespec_get.m4: Likewise. * m4/tzset.m4: Likewise. * modules/accept (configure.ac): Likewise. * modules/bind (configure.ac): Likewise. * modules/connect (configure.ac): Likewise. * modules/flock (configure.ac): Likewise. * modules/getpeername (configure.ac): Likewise. * modules/getsockname (configure.ac): Likewise. * modules/getsockopt (configure.ac): Likewise. * modules/listen (configure.ac): Likewise. * modules/recv (configure.ac): Likewise. * modules/recvfrom (configure.ac): Likewise. * modules/send (configure.ac): Likewise. * modules/sendto (configure.ac): Likewise. * modules/setsockopt (configure.ac): Likewise. * modules/shutdown (configure.ac): Likewise. * modules/socket (configure.ac): Likewise. Use the gl_*_H_REQUIRE_DEFAULTS macros. * modules/nonblocking (configure.ac): Use the gl_*_H_REQUIRE_DEFAULTS and gl_MODULE_INDICATOR_INIT_VARIABLE macros. * modules/sigpipe (configure.ac): Likewise. * modules/windows-stat-override (configure.ac): Likewise. * m4/nonblocking.m4: Update a comment. * m4/sigpipe.m4: Likewise.
Diffstat (limited to 'gnulib-tool')
-rwxr-xr-xgnulib-tool31
1 files changed, 24 insertions, 7 deletions
diff --git a/gnulib-tool b/gnulib-tool
index 23b2c44565..1a9a45aaf1 100755
--- a/gnulib-tool
+++ b/gnulib-tool
@@ -3438,13 +3438,14 @@ func_modules_to_filelist_separately ()
}
# func_compute_include_guard_prefix
-# Determine include_guard_prefix.
+# Determine include_guard_prefix and module_indicator_prefix.
# Input:
# - macro_prefix prefix of gl_LIBOBJS macros to use
# Output:
# - include_guard_prefix replacement for ${gl_include_guard_prefix}
# - sed_replace_include_guard_prefix
# sed expression for resolving ${gl_include_guard_prefix}
+# - module_indicator_prefix prefix of GNULIB_<modulename> variables to use
func_compute_include_guard_prefix ()
{
if test "$macro_prefix" = gl; then
@@ -3453,6 +3454,7 @@ func_compute_include_guard_prefix ()
include_guard_prefix='GL_'`echo "$macro_prefix" | LC_ALL=C tr '[a-z]' '[A-Z]'`
fi
sed_replace_include_guard_prefix='s/\${gl_include_guard_prefix}/'"${include_guard_prefix}"'/g'
+ module_indicator_prefix="${include_guard_prefix}"
}
# func_execute_command command [args...]
@@ -3636,6 +3638,7 @@ func_update_file ()
# - makefile_name from --makefile-name
# - libtool true if libtool will be used, false or blank otherwise
# - macro_prefix prefix of gl_LIBOBJS macros to use
+# - module_indicator_prefix prefix of GNULIB_<modulename> variables to use
# - po_domain prefix of i18n domain to use (without -gnulib suffix)
# - witness_c_macro from --witness-c-macro
# - actioncmd (optional) command that will reproduce this invocation
@@ -3695,6 +3698,7 @@ func_emit_lib_Makefile_am ()
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
-e "$sed_eliminate_LDFLAGS" \
-e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
+ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' \
-e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
-e "$sed_transform_check_PROGRAMS" \
@@ -3706,7 +3710,9 @@ func_emit_lib_Makefile_am ()
} | combine_lines "${libname}_${libext}_SOURCES" > "$tmp"/amsnippet1
{
func_get_automake_snippet_unconditional "$module" |
- LC_ALL=C sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g'
+ LC_ALL=C \
+ sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
+ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,'
} > "$tmp"/amsnippet2
# Skip the contents if it's entirely empty.
if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then
@@ -3994,6 +4000,7 @@ func_emit_po_POTFILES_in ()
# - m4base relative directory containing autoconf macros
# - testsbase relative directory containing unit test code
# - macro_prefix prefix of gl_LIBOBJS macros to use
+# - module_indicator_prefix prefix of GNULIB_<modulename> variables to use
# - witness_c_macro from --witness-c-macro
# - for_test true if creating a package for testing, false otherwise
# - single_configure true if a single configure file should be generated,
@@ -4049,6 +4056,7 @@ func_emit_tests_Makefile_am ()
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
-e "$sed_eliminate_LDFLAGS" \
-e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \
+ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' \
-e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
-e "$sed_transform_check_PROGRAMS" \
@@ -4060,7 +4068,9 @@ func_emit_tests_Makefile_am ()
} | combine_lines "libtests_a_SOURCES" > "$tmp"/amsnippet1
{
func_get_automake_snippet_unconditional "$module" |
- LC_ALL=C sed -e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g'
+ LC_ALL=C \
+ sed -e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \
+ -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,'
} > "$tmp"/amsnippet2
# Skip the contents if it's entirely empty.
if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then
@@ -4252,7 +4262,8 @@ func_emit_tests_Makefile_am ()
# func_emit_initmacro_start macro_prefix
# emits the first few statements of the gl_INIT macro to standard output.
-# - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
+# - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
+# - module_indicator_prefix prefix of GNULIB_<modulename> variables to use
func_emit_initmacro_start ()
{
macro_prefix_arg="$1"
@@ -4280,12 +4291,16 @@ func_emit_initmacro_start ()
# in which to expect them.
echo " m4_pushdef([${macro_prefix_arg}_LIBSOURCES_LIST], [])"
echo " m4_pushdef([${macro_prefix_arg}_LIBSOURCES_DIR], [])"
+ # Scope for m4 macros.
+ echo " m4_pushdef([GL_MACRO_PREFIX], [${macro_prefix_arg}])"
+ # Scope the GNULIB_<modulename> variables.
+ echo " m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [${module_indicator_prefix}])"
echo " gl_COMMON"
}
# func_emit_initmacro_end macro_prefix
# emits the last few statements of the gl_INIT macro to standard output.
-# - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
+# - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
func_emit_initmacro_end ()
{
macro_prefix_arg="$1"
@@ -4304,6 +4319,8 @@ func_emit_initmacro_end ()
echo " m4_if(m4_sysval, [0], [],"
echo " [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])"
echo " ])"
+ echo " m4_popdef([GL_MODULE_INDICATOR_PREFIX])"
+ echo " m4_popdef([GL_MACRO_PREFIX])"
echo " m4_popdef([${macro_prefix_arg}_LIBSOURCES_DIR])"
echo " m4_popdef([${macro_prefix_arg}_LIBSOURCES_LIST])"
echo " m4_popdef([AC_LIBSOURCES])"
@@ -5438,7 +5455,7 @@ s,^\(.................................................[^ ]*\) *,
func_append_actionarg "$module"
done
- # Determine include_guard_prefix.
+ # Determine include_guard_prefix and module_indicator_prefix.
func_compute_include_guard_prefix
# Default the makefile name to Makefile.am.
@@ -6379,7 +6396,7 @@ func_create_testdir ()
exec 0<&5 5<&-
}
- # Determine include_guard_prefix.
+ # Determine include_guard_prefix and module_indicator_prefix.
func_compute_include_guard_prefix
# Create Makefile.ams that are for testing.