bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Gnulib-related problems building Bison from git


From: Akim Demaille
Subject: Re: Gnulib-related problems building Bison from git
Date: Wed, 6 Jul 2022 07:53:28 +0200

Hi Bruno,

Thanks for the feedback!

> Le 4 juil. 2022 à 23:31, Bruno Haible <bruno@clisp.org> a écrit :
> 
>> @@ -4518,7 +4526,9 @@ func_emit_initmacro_end ()
>>   echo "      sed_dirname4='s,\\(.\\)/[^/]*\$,\\1,'"
>>   echo "      sed_basename1='s,.*/,,'"
>>   echo "changequote([, ])dnl"
>> -  if $automake_subdir && ! "$2" && test -n "$sourcebase" && test 
>> "$sourcebase" != '.'; then
>> +  if (($2 && $automake_subdir_test) || (! $2 && $automake_subdir)) \
>> +     && test -n "$sourcebase" \
>> +     && test "$sourcebase" != '.'; then
>>     subdir="$sourcebase/"
>>   else
>>     subdir=
> 
> Three things are wrong here:
>  - If $2, subdir should be set to "$testsbase/", not "$sourcebase/".

That was unclear to me, I expected to put everything in lib/, but
it does work with testsbase, thanks!

>  - Parentheses introduce a subshell, which is more expensive to execute
>    than a compound shell command. IOW,
>      { command1 && command2; } || { command3 && command4; }
>    is more efficient than
>      (command1 && command2) || (command3 && command4)

Sure...  I'm getting rusty.

>  - Some bash versions interpret '((' as the start of an evaluation
>    command. To please these shells, you would have to add a space,
>    i.e. write   ( (   instead of   ((

I was unaware of this.  Actually I should not have used (...), so
I shouldn't have needed to know :)

> I don't believe that the unconditional reference to $sourcebase is
> correct here. Look at the various invocations of func_emit_shellvars_init;
> you need to accommodate all different cases.

You are right, I had overlooked other calls.

I do not understand all the details.  Here's my updated proposal.

Cheers.

commit 18d46e1a0ef90bd8425db984d8cf811e7d690394
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Mon Jul 4 07:18:07 2022 +0200

    gnulib-tool: add support for --automake-subdir-tests
    
    <https://lists.gnu.org/r/bug-gnulib/2022-01/msg00111.html>
    
    * gnulib-tool (main): Handle --automake-subdir-test.
    (func_emit_shellvars_init, func_emit_lib_Makefile_am): Use
    $sourcebase when handling tests and --automake-subdir-test is
    given.
    (func_append_actionarg): Support --automake-subdir-test.
    (func_create_testdir): Add missing argument for func_emit_initmacro_end.

diff --git a/ChangeLog b/ChangeLog
index 8694db8900..1130ffd6cb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2022-07-06  Akim Demaille  <akim@lrde.epita.fr>
+
+       gnulib-tool: add support for --automake-subdir-test
+       <https://lists.gnu.org/r/bug-gnulib/2022-01/msg00111.html>
+       * gnulib-tool (main): Handle --automake-subdir-test.
+       (func_emit_shellvars_init, func_emit_lib_Makefile_am): Use
+       $sourcebase when handling tests and --automake-subdir-test is
+       given.
+       (func_append_actionarg): Support --automake-subdir-test.
+       (func_create_testdir): Add missing argument for func_emit_initmacro_end.
+
 2022-07-03  Bruno Haible  <bruno@clisp.org>
 
        lib-symbol-visibility: Improve documentation.
diff --git a/gnulib-tool b/gnulib-tool
index 5993143f3c..21aa6c4fab 100755
--- a/gnulib-tool
+++ b/gnulib-tool
@@ -311,6 +311,8 @@ Options for --import, --add/remove-import:
       --automake-subdir     Specify that the makefile in the source-base
                             directory be generated in such a way that it can
                             be 'include'd from the toplevel Makefile.am.
+      --automake-subdir-tests
+                            Likewise, but for the tests directory.
       --macro-prefix=PREFIX  Specify the prefix of the macros 'gl_EARLY' and
                             'gl_INIT'. Default is 'gl'.
       --po-domain=NAME      Specify the prefix of the i18n domain. Usually use
@@ -1118,7 +1120,8 @@ func_determine_path_separator
 # - gnu_make        true if --gnu-make was given, false otherwise
 # - makefile_name   from --makefile-name
 # - tests_makefile_name  from --tests-makefile-name
-# - automake_subdir  true if --automake-subdir was given, false otherwise
+# - automake_subdir        true if --automake-subdir was given, false otherwise
+# - automake_subdir_tests  true if --automake-subdir-tests was given, false 
otherwise
 # - libtool         true if --libtool was given, false if --no-libtool was
 #                   given, blank otherwise
 # - macro_prefix    from --macro-prefix
@@ -1167,6 +1170,7 @@ func_determine_path_separator
   makefile_name=
   tests_makefile_name=
   automake_subdir=false
+  automake_subdir_tests=false
   libtool=
   macro_prefix=
   po_domain=
@@ -1414,6 +1418,9 @@ func_determine_path_separator
       --automake-subdir )
         automake_subdir=true
         shift ;;
+      --automake-subdir-tests )
+        automake_subdir_tests=true
+        shift ;;
       --libtool )
         libtool=true
         shift ;;
@@ -1527,6 +1534,7 @@ func_determine_path_separator
        || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" 
\
        || test -n "$avoidlist" || test -n "$lgpl" || test -n "$makefile_name" \
        || test -n "$tests_makefile_name" || test "$automake_subdir" != false \
+       || test "$automake_subdir_tests" != false \
        || test -n "$macro_prefix" || test -n "$po_domain" \
        || test -n "$witness_c_macro" || test -n "$vc_files"; then
       echo "gnulib-tool: invalid options for 'update' mode" 1>&2
@@ -1617,8 +1625,8 @@ func_determine_path_separator
       func_fatal_error "minimum supported autoconf version is 2.64. Try adding 
AC_PREREQ([$DEFAULT_AUTOCONF_MINVERSION]) to your configure.ac." ;;
   esac
 
-  # Determine whether --automake-subdir is supported.
-  if $automake_subdir; then
+  # Determine whether --automake-subdir/--automake-subdir-tests are supported.
+  if $automake_subdir || $automake_subdir_tests; then
     found_subdir_objects=false
     if test -n "$configure_ac"; then
       my_sed_traces='
@@ -1644,7 +1652,7 @@ func_determine_path_separator
       done
     fi
     if ! $found_subdir_objects; then
-      func_fatal_error "Option --automake-subdir is only supported if the 
definition of AUTOMAKE_OPTIONS in Makefile.am contains 'subdir-objects'."
+      func_fatal_error "Option --automake-subdir/--automake-subdir-tests are 
only supported if the definition of AUTOMAKE_OPTIONS in Makefile.am contains 
'subdir-objects'."
     fi
   fi
 
@@ -4520,6 +4528,8 @@ func_emit_initmacro_end ()
   echo "changequote([, ])dnl"
   if $automake_subdir && ! "$2" && test -n "$sourcebase" && test "$sourcebase" 
!= '.'; then
     subdir="$sourcebase/"
+  elif $automake_subdir_tests && "$2" && test -n "$testsbase" && test 
"$testsbase" != '.'; then
+    subdir="$testsbase/"
   else
     subdir=
   fi
@@ -4584,12 +4594,21 @@ func_emit_initmacro_done ()
 #                            false otherwise
 # - base             base directory, relative to the top-level directory
 # - automake_subdir  true if --automake-subdir was given, false otherwise
+# - automake_subdir_tests  true if --automake-subdir-tests was given, false 
otherwise
 func_emit_shellvars_init ()
 {
   # Define the base directory, relative to the top-level directory.
   echo "  gl_source_base='$2'"
   # Define the prefix for the file name of generated files.
-  if $automake_subdir && ! $1; then
+  if $1 && $automake_subdir_tests; then
+    # When tests share the same Makefile as the whole project, they
+    # share the same base prefix.
+    if test "$2" = "$testsbase"; then
+      echo "  gl_source_base_prefix='\$(top_build_prefix)$sourcebase/'"
+    else
+      echo "  gl_source_base_prefix='\$(top_build_prefix)$2/'"
+    fi
+  elif ! $1 && $automake_subdir; then
     echo "  gl_source_base_prefix='\$(top_build_prefix)$2/'"
   else
     echo "  gl_source_base_prefix="
@@ -5586,6 +5605,9 @@ s,^\(.................................................[^ 
]*\) *,
   if $automake_subdir; then
     func_append_actionarg "--automake-subdir"
   fi
+  if $automake_subdir_tests; then
+    func_append_actionarg "--automake-subdir-tests"
+  fi
   if test "$cond_dependencies" = true; then
     func_append_actionarg "--conditional-dependencies"
   else
@@ -6857,7 +6879,7 @@ func_create_testdir ()
      echo "  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], 
[\$gl_module_indicator_condition])"
      func_emit_autoconf_snippets "$testsrelated_modules" "$main_modules 
$testsrelated_modules" func_verify_module true false false
      echo "  m4_popdef([gl_MODULE_INDICATOR_CONDITION])"
-     func_emit_initmacro_end ${macro_prefix}tests
+     func_emit_initmacro_end ${macro_prefix}tests true
    fi
    # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
    # created using libtool, because libtool already handles the dependencies.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]