diff options
author | Bruno Haible <bruno@clisp.org> | 2021-04-11 21:25:54 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2021-04-11 21:25:54 +0200 |
commit | 80a344e3237b878734295cbe696b7f1e4a8541f0 (patch) | |
tree | 25fae0a848e083103ee2a721f8846d7991370cbd /gnulib-tool | |
parent | 8b857ed1ad1cbbf265d43016ee7ee93c7b7c6cb4 (diff) | |
download | gnulib-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-x | gnulib-tool | 31 |
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. |