automake-ng
[Top][All Lists]
Advanced

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

[Automake-NG] [PATCH 2/4] [ng] subdir-objects: enable unconditionally


From: Stefano Lattarini
Subject: [Automake-NG] [PATCH 2/4] [ng] subdir-objects: enable unconditionally
Date: Fri, 8 Jun 2012 10:28:58 +0200

The fact that Automake-generated Makefiles places compiled
object files in the current directory by default, also when the
corresponding source file is in a subdirectory, is basically an
historical accident, due to the fact that the 'subdir-objects'
option had only been introduced in April 1999, starting with
commit 'user-dep-gen-branchpoint-56-g88b5959', and never made
the default, likely to avoid backwards-compatibility issues.

Since we believe the behaviour enabled by the 'subdir-objects'
is the only natural and most useful one, we make it the only
only one available, simplifying the Automake implementation and
APIs a little in the process.

* NG-NEWS: Update.
* doc/automake-ng.texi (Program and Library Variables): The output
object files are not anymore placed in the current directory by
default, but rather in the same directory of the source file.
(LIBOBJS): Now the $(LIBOBJS) and $(ALLOCA) variables can also be
be used outside of the directory where their sources lie.
(List of Automake options): Don't document the 'subdir-objects'
option anymore.
Other related minor adjustments.
* automake.in (LANG_PROCESS): Remove, it's not needed anymore.
(handle_languages): Don't test whether option 'subdir-objects'
is set (just assume it is), and do not use the '%SUBDIROBJ%'
transform when processing '.am' fragments.
(lang_sub_obj): Delete, it would just return 'LANG_SUBDIR'
unconditionally now.
(lang_c_rewrite): Adjust.  Don't test whether the option
'subdir-objects' is set (just assume it is).
(lang_yacc_rewrite): Likewise.
(lang_lex_rewrite): Likewise.
(handle_single_transform): Likewise.  Remove an obsolete
comment.  Add a proper "FIXME" comments about a fragment
of code that might have become dead code now.
(handle_LIBOBJS_or_ALLOCA): Simplify assuming that the option
'subdir-objects' is always set.  Accordingly, there's no need
to warn anymore if '$(LIBOBJS)' or '$(ALLOCA)' are used outside
the '$config_libobj_dir' directory (as specified by autoconf
macro 'AC_CONFIG_LIBOBJ_DIR').
* lib/am/depend2.am: Assume the '?SUBDIROBJ?' Automake time
conditional is always true, and remove its use accordingly.
lib/am/depend2.am
* t/ax/depcomp.sh: Adjust to the fact that 'subdir-objects' is
always in effect.
* t/ccnoco2.sh: Likewise.
* t/cscope.tap: Likewise.
* t/depcomp8a.sh: Likewise.
* t/depcomp8b.sh: Likewise.
* t/libtool3.sh: Likewise.
* t/pr401.sh: Likewise.
* t/pr401b.sh: Likewise.
* t/pr401c.sh: Likewise.
* t/lex-line.sh: Likewise.
* t/yacc-line.sh: Likewise.
* t/yacc5.sh: Likewise.
* t/parallel-tests-suffix-prog.sh: Likewise.
* t/fort4.sh: Likewise, and extend a bit.
* t/fort5.sh: Likewise.
* t/gcj.sh: Likewise.
* t/subpkg.sh: Likewise.
* t/subpkg-yacc.sh: Likewise.
* t/xsource.sh: Likewise.
* t/libobj20a.sh: Remove as obsolete.
* t/libobj20b.sh: Adjust heading comments.
* t/libobj20c.sh: Likewise.
* t/subdir3.sh: Remove as obsolete.
* t/subobj4.sh: Likewise.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 NG-NEWS                         |   12 +++++
 automake.in                     |  112 +++++++++++++--------------------------
 doc/automake-ng.texi            |   37 +++----------
 lib/am/depend2.am               |    3 +-
 lib/am/lex.am                   |    2 +-
 lib/am/yacc.am                  |    2 +-
 t/ax/depcomp.sh                 |    6 +--
 t/ccnoco2.sh                    |   33 ++++++------
 t/cscope.tap                    |    2 +
 t/depcomp8a.sh                  |   22 +-------
 t/depcomp8b.sh                  |   22 +-------
 t/fort4.sh                      |   41 ++++++++------
 t/fort5.sh                      |   17 +++---
 t/gcj.sh                        |   37 +++++++++++--
 t/lex-line.sh                   |   28 ++--------
 t/libobj20a.sh                  |   45 ----------------
 t/libobj20b.sh                  |    2 +-
 t/libobj20c.sh                  |    2 +-
 t/libtool3.sh                   |    9 ++--
 t/parallel-tests-suffix-prog.sh |    1 +
 t/pr401.sh                      |   11 ----
 t/pr401b.sh                     |    9 ----
 t/pr401c.sh                     |   10 ----
 t/subdir3.sh                    |   36 -------------
 t/subobj4.sh                    |   53 ------------------
 t/subpkg-yacc.sh                |   15 ++++--
 t/subpkg.sh                     |   10 +++-
 t/xsource.sh                    |   18 ++++---
 t/yacc-line.sh                  |   37 ++++---------
 t/yacc5.sh                      |   28 +---------
 30 files changed, 203 insertions(+), 459 deletions(-)
 delete mode 100755 t/libobj20a.sh
 delete mode 100755 t/subdir3.sh
 delete mode 100755 t/subobj4.sh

diff --git a/NG-NEWS b/NG-NEWS
index 1e3c464..b7ecce2 100644
--- a/NG-NEWS
+++ b/NG-NEWS
@@ -69,6 +69,18 @@ Warnings and diagnostic
   access to less context and information.
 
 
+Compilation and Object Files
+=============================
+
+* If a source file is placed in a subdirectory, the corresponding compiled
+  object will always be put into the subdirectory named after the source
+  file, rather than in the current directory.  For instance, 'src/file.c'
+  and 'src/file.f90' will be compiled to 'src/file.o', and 'sub/dir/mu.cc'
+  will be compiled to 'sub/dir/mu.o'.
+  That is, Automake-NG will unconditionally behave as Automake would do if
+  its 'subdir-objects' option were active.
+
+
 Serial testsuite harness (obsolescent)
 ======================================
 
diff --git a/automake.in b/automake.in
index a787866..14b328a 100644
--- a/automake.in
+++ b/automake.in
@@ -286,7 +286,6 @@ my $gen_copyright = "\
 # subdir if the source file is.  In this case the file name cannot
 # have '..' components.
 use constant LANG_IGNORE  => 0;
-use constant LANG_PROCESS => 1;
 use constant LANG_SUBDIR  => 2;
 
 # These are used when keeping track of whether an object can be built
@@ -1360,7 +1359,6 @@ sub handle_languages
                         '-c'      => $lang->compile_flag || '',
                         # These are not used, but they need to be defined
                         # so &transform do not complain.
-                        SUBDIROBJ     => 0,
                         'DERIVED-EXT' => 'BUG',
                         DIST_SOURCE   => 1,
                         VERBOSE   => $verbose,
@@ -1375,9 +1373,7 @@ sub handle_languages
            # needed.
            my $output_flag = $lang->output_flag || '';
            $output_flag = '-o'
-             if (! $output_flag
-                 && $lang->name eq 'c'
-                 && option 'subdir-objects');
+             if (! $output_flag && $lang->name eq 'c');
 
            # Compute a possible derived extension.
            # This is not used by depend2.am.
@@ -1400,8 +1396,7 @@ sub handle_languages
 
                             COMPILE   => '$(' . $lang->compiler . ')',
                             LTCOMPILE => '$(LT' . $lang->compiler . ')',
-                            -o        => $output_flag,
-                            SUBDIROBJ => !! option 'subdir-objects');
+                            -o        => $output_flag);
        }
 
        # Now include code for each specially handled object with this
@@ -1627,10 +1622,6 @@ sub handle_single_transform ($$$$$%)
          next;
        }
 
-       # If the source file is in a subdirectory then the '.o' is put
-       # into the current directory, unless the subdir-objects option
-       # is in effect.
-
        # Split file name into base and extension.
        next if ! /^(?:(.*)\/)?([^\/]*?)(\.[^.]+)$/;
         prog_error ("source file '$_' missing dotted extension")
@@ -1683,7 +1674,7 @@ sub handle_single_transform ($$$$$%)
            # generates another source file which we must then process
            # further.
            my $subr = \&{'lang_' . $lang->name . '_rewrite'};
-            defined &$subr or $subr = \&lang_sub_obj;
+            defined &$subr or $subr = sub { return LANG_SUBDIR; };
            my ($r, $source_extension)
                = &$subr ($directory, $base, $extension,
                          $obj, $have_per_exec_flags, $var);
@@ -1747,15 +1738,10 @@ sub handle_single_transform ($$$$$%)
            # flags are used) we cannot compile the file with an
            # inference rule: we need an explicit rule.
            #
-           # If the source is in a subdirectory and the object is in
-           # the current directory, we also need an explicit rule.
-           #
            # If both source and object files are in a subdirectory
-           # (this happens when the subdir-objects option is used),
            # then the inference will work.
            #
            if ($renamed
-               || ($directory ne '' && ! option 'subdir-objects')
                # We must also use specific rules for a nodist_ source
                # if its language requests it.
                || ($lang->nodist_specific && ! $transform{'DIST_SOURCE'}))
@@ -1824,6 +1810,8 @@ sub handle_single_transform ($$$$$%)
            $linker = '';
        }
 
+        # FIXME: this is likely an internal error now that we use
+        # FIXME: subdir-objects unconditionally ...
        err_am "object '$object' created by '$full' and '$object_map{$object}'"
          if (defined $object_map{$object}
              && $object_map{$object} ne $full);
@@ -2154,25 +2142,17 @@ sub handle_LIBOBJS_or_ALLOCA ($)
   if ($config_libobj_dir
       && $relative_dir ne $config_libobj_dir)
     {
-      if (option 'subdir-objects')
-       {
-         # In the top-level Makefile we do not use $(top_builddir), because
-         # we are already there, and since the targets are built without
-         # a $(top_builddir), it helps BSD Make to match them with
-         # dependencies.
-         $dir = "$config_libobj_dir/" if $config_libobj_dir ne '.';
-         $dir = "$topsrcdir/$dir" if $relative_dir ne '.';
-         define_variable ('LIBOBJDIR', INTERNAL, $dir);
-         $clean_files{"\$($var)"} = MOSTLY_CLEAN;
-         # If LTLIBOBJS is used, we must also clear LIBOBJS (which might
-         # be created by libtool as a side-effect of creating LTLIBOBJS).
-         $clean_files{"\$($var)"} = MOSTLY_CLEAN if $var =~ s/^LT//;
-       }
-      else
-       {
-         error ("'\$($var)' cannot be used outside '$config_libobj_dir' if"
-                . " 'subdir-objects' is not set");
-       }
+      # In the top-level Makefile we do not use $(top_builddir), because
+      # we are already there, and since the targets are built without
+      # a $(top_builddir), it helps BSD Make to match them with
+      # dependencies.
+      $dir = "$config_libobj_dir/" if $config_libobj_dir ne '.';
+      $dir = "$topsrcdir/$dir" if $relative_dir ne '.';
+      define_variable ('LIBOBJDIR', INTERNAL, $dir);
+      $clean_files{"\$($var)"} = MOSTLY_CLEAN;
+      # If LTLIBOBJS is used, we must also clear LIBOBJS (which might
+      # be created by libtool as a side-effect of creating LTLIBOBJS).
+      $clean_files{"\$($var)"} = MOSTLY_CLEAN if $var =~ s/^LT//;
     }
 
   return $dir;
@@ -5099,50 +5079,34 @@ sub check_gnits_standards
 # Note that the calls to these functions are computed, so don't bother
 # searching for their precise names in the source.
 
-# This is just a convenience function that can be used to determine
-# when a subdir object should be used.
-sub lang_sub_obj
-{
-    return option 'subdir-objects' ? LANG_SUBDIR : LANG_PROCESS;
-}
-
 # Rewrite a single C source file.
 sub lang_c_rewrite
 {
   my ($directory, $base, $ext, $obj, $have_per_exec_flags, $var) = @_;
 
-  my $r = LANG_PROCESS;
-  if (option 'subdir-objects')
+  # libtool is always able to put the object at the proper place, so we
+  # do not have to require AM_PROG_CC_C_O when building '.lo' files.
+  if (! $seen_cc_c_o && $obj ne '.lo')
     {
-      $r = LANG_SUBDIR;
       if ($directory && $directory ne '.')
-       {
-         $base = $directory . '/' . $base;
-
-         # libtool is always able to put the object at the proper place,
-         # so we do not have to require AM_PROG_CC_C_O when building .lo files.
-         msg_var ('portability', $var,
-                  "compiling '$base.c' in subdir requires "
-                  . "'AM_PROG_CC_C_O' in '$configure_ac'",
-                  uniq_scope => US_GLOBAL,
-                  uniq_part => 'AM_PROG_CC_C_O subdir')
-           unless $seen_cc_c_o || $obj eq '.lo';
-       }
-    }
-
-  if (! $seen_cc_c_o
-      && $have_per_exec_flags
-      && ! option 'subdir-objects'
-      && $obj ne '.lo')
-    {
-      msg_var ('portability',
-              $var, "compiling '$base.c' with per-target flags requires "
-              . "'AM_PROG_CC_C_O' in '$configure_ac'",
-              uniq_scope => US_GLOBAL,
-              uniq_part => 'AM_PROG_CC_C_O per-target')
+        {
+          msg_var ('portability', $var,
+                   "compiling '$directory/$base.c' in subdir requires"
+                   . " 'AM_PROG_CC_C_O' in '$configure_ac'",
+                   uniq_scope => US_GLOBAL,
+                   uniq_part => 'AM_PROG_CC_C_O subdir');
+        }
+      elsif ($have_per_exec_flags)
+        {
+           msg_var ('portability', $var,
+                    "compiling '$base.c' with per-target flags requires"
+                    . " 'AM_PROG_CC_C_O' in '$configure_ac'",
+                    uniq_scope => US_GLOBAL,
+                    uniq_part => 'AM_PROG_CC_C_O per-target');
+       }
     }
 
-    return $r;
+  return LANG_SUBDIR;
 }
 
 # Rewrite a single header file.
@@ -5166,9 +5130,8 @@ sub lang_yacc_rewrite
 {
     my ($directory, $base, $ext) = @_;
 
-    my $r = &lang_sub_obj;
     (my $newext = $ext) =~ tr/y/c/;
-    return ($r, $newext);
+    return (LANG_SUBDIR, $newext);
 }
 sub lang_yaccxx_rewrite { lang_yacc_rewrite (@_); };
 
@@ -5177,9 +5140,8 @@ sub lang_lex_rewrite
 {
     my ($directory, $base, $ext) = @_;
 
-    my $r = &lang_sub_obj;
     (my $newext = $ext) =~ tr/l/c/;
-    return ($r, $newext);
+    return (LANG_SUBDIR, $newext);
 }
 sub lang_lexxx_rewrite { lang_lex_rewrite (@_); };
 
diff --git a/doc/automake-ng.texi b/doc/automake-ng.texi
index a01136c..563a569 100644
--- a/doc/automake-ng.texi
+++ b/doc/automake-ng.texi
@@ -4019,7 +4019,7 @@ choose the assembler for you (by default the C compiler) 
and set
 This is like @code{AC_PROG_CC_C_O}, but it generates its results in
 the manner required by Automake.  You must use this instead of
 @code{AC_PROG_CC_C_O} when you need this functionality, that is, when
-using per-target flags or subdir-objects with C sources.
+using per-target flags or subdir objects with C sources.
 
 @item AM_PROG_LEX
 @acindex AM_PROG_LEX
@@ -5563,18 +5563,13 @@ nodist_maude_SOURCES = nodist.c
 dist_maude_SOURCES = dist-me.c
 @end example
 
-By default the output file (on Unix systems, the @file{.o} file) will
-be put into the current build directory.  However, if the option
address@hidden is in effect in the current directory then the
address@hidden file will be put into the subdirectory named after the
-source file.  For instance, with @option{subdir-objects} enabled,
address@hidden/dir/file.c} will be compiled to @file{sub/dir/file.o}.  Some
-people prefer this mode of operation.  You can specify
address@hidden in @code{AUTOMAKE_OPTIONS} (@pxref{Options}).
+The output file (on Unix systems, the @file{.o} file) will be put into the
+subdirectory named after the source file.  For instance @file{file.c} will
+compiled to @file{file.o}, while @file{sub/dir/file.c} will be compiled to
address@hidden/dir/file.o}.
 @cindex Subdirectory, objects in
 @cindex Objects in subdirectory
 
-
 @item EXTRA_maude_SOURCES
 Automake needs to know the list of files you intend to compile
 @emph{statically}.  For one thing, this is the only way Automake has of
@@ -5970,19 +5965,15 @@ tool1_SOURCES = @dots{}
 tool2_SOURCES = @dots{}
 @end example
 
-When option @option{subdir-objects} is not used, as in the above
-example, the variables @samp{$(LIBOBJS)} or @samp{$(ALLOCA)} can only
-be used in the directory where their sources lie.  E.g., here it would
-be wrong to use @samp{$(LIBOBJS)} or @samp{$(ALLOCA)} in
address@hidden/Makefile.am}.  However if both @option{subdir-objects} and
address@hidden are used, it is OK to use these variables
+The variables @samp{$(LIBOBJS)} or @samp{$(ALLOCA)} are typically
+used in the directory where their sources lie.  However, if
address@hidden is used, it is OK to use these variables
 in other directories.  For instance @file{src/Makefile.am} could be
 changed as follows.
 
 @example
 # src/Makefile.am
 
-AUTOMAKE_OPTIONS = subdir-objects
 LDADD = $(LIBOBJS) $(ALLOCA)
 
 bin_PROGRAMS = tool1 tool2 @dots{}
@@ -10120,18 +10111,6 @@ bin_SCRIPTS = true.sh ...
 AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = false$(EXEEXT) true.sh
 @end example
 
address@hidden @option{subdir-objects}
address@hidden Options, @option{subdir-objects}
address@hidden subdir-objects
-If this option is specified, then objects are placed into the
-subdirectory of the build directory corresponding to the subdirectory of
-the source file.  For instance, if the source file is
address@hidden/file.cxx}, then the output file would be
address@hidden/file.o}.
-
-In order to use this option with C sources, you should add
address@hidden to @file{configure.ac}.
-
 @anchor{tar-formats}
 @item @option{tar-v7}
 @itemx @option{tar-ustar}
diff --git a/lib/am/depend2.am b/lib/am/depend2.am
index e68bba7..faf685a 100644
--- a/lib/am/depend2.am
+++ b/lib/am/depend2.am
@@ -33,8 +33,7 @@
 ## and easily inline the dependency tracking.
 
 if %?FIRST%
-?SUBDIROBJ?am__depdir = $(dir $@)/$(DEPDIR)
-?!SUBDIROBJ?am__depdir = $(DEPDIR)
+am__depdir = $(dir $@)/$(DEPDIR)
 ## FIXME: more precise in the removal of the suffix?
 am__depbase = $(am__depdir)/$(basename $(notdir $@))
 ## Avoid useless forks when possible.
diff --git a/lib/am/lex.am b/lib/am/lex.am
index b5e2bb2..038c125 100644
--- a/lib/am/lex.am
+++ b/lib/am/lex.am
@@ -23,7 +23,7 @@ endif %?MAINTAINER-MODE%
 
 ?GENERIC?%%DERIVED-EXT%: %%EXT%
 ?!GENERIC?%OBJ%: %SOURCE%
-?SUBDIROBJ?    %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
+       %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
 ?GENERIC?      %VERBOSE%$(am__skiplex) \
 ?!GENERIC??DIST_SOURCE?        %VERBOSE%$(am__skiplex) \
        $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c %OBJ% -- %COMPILE%
diff --git a/lib/am/yacc.am b/lib/am/yacc.am
index 4393ce9..3ead3a5 100644
--- a/lib/am/yacc.am
+++ b/lib/am/yacc.am
@@ -41,7 +41,7 @@ endif %?FIRST%
 
 ?GENERIC?%%DERIVED-EXT%: %%EXT%
 ?!GENERIC?%OBJ%: %SOURCE%
-?SUBDIROBJ?    %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
+       %SILENT%test -d $(dir $@) || $(MKDIR_P) $(dir $@)
        %VERBOSE% \
 ?GENERIC?      $(am__skipyacc) \
 ?!GENERIC??DIST_SOURCE?        $(am__skipyacc) \
diff --git a/t/ax/depcomp.sh b/t/ax/depcomp.sh
index a9180e9..7e38e20 100644
--- a/t/ax/depcomp.sh
+++ b/t/ax/depcomp.sh
@@ -200,12 +200,12 @@ ${normalized_target}_${LINKADD} = src/libbaz.$a
 grep-test:
 ## For debugging.
        cat \$(DEPDIR)/foo.$po || :
-       cat \$(DEPDIR)/subfoo.$po || :
+       cat sub/\$(DEPDIR)/subfoo.$po || :
        cat src/\$(DEPDIR)/baz.$po || :
        cat src/sub2/\$(DEPDIR)/sub2foo.$po || :
-## Checks done here.
+## Checks are done here.
        grep '^foo.$objext.*:' \$(DEPDIR)/foo.$po
-       grep '^subfoo\.$objext.*:' \$(DEPDIR)/subfoo.$po
+       grep '^sub/subfoo\.$objext.*:' sub/\$(DEPDIR)/subfoo.$po
        grep '^baz\.$objext.*:' src/\$(DEPDIR)/baz.$po
        grep '^sub2/sub2foo\.$objext.*:' src/sub2/\$(DEPDIR)/sub2foo.$po
 END
diff --git a/t/ccnoco2.sh b/t/ccnoco2.sh
index e6c9c64..b516291 100755
--- a/t/ccnoco2.sh
+++ b/t/ccnoco2.sh
@@ -20,36 +20,33 @@
 . ./defs || Exit 1
 
 cat >>configure.ac <<EOF
+AC_CONFIG_FILES([src/Makefile])
 AC_PROG_CC
 AC_OUTPUT
 EOF
 
+$ACLOCAL
+
 cat >Makefile.am <<EOF
+SUBDIRS = src
 bin_PROGRAMS = wish
 wish_SOURCES = a.c
 wish_CPPFLAGS = -DWHATEVER
 EOF
 
-touch a.c
-
-$ACLOCAL
-$AUTOCONF
-AUTOMAKE_fails --copy --add-missing
-grep '^Makefile\.am:2:.*per-target.*AM_PROG_CC_C_O' stderr
-
-
-cat >Makefile.am <<EOF
-bin_PROGRAMS = wish
-wish_SOURCES = sub/a.c
+mkdir src
+cat >src/Makefile.am <<EOF
+bin_PROGRAMS = wish2
+wish2_SOURCES = sub/a.c
 EOF
 
-mkdir sub
-mv a.c sub
-
-$AUTOMAKE --copy --add-missing
-
-echo 'AUTOMAKE_OPTIONS = subdir-objects' >> Makefile.am
 AUTOMAKE_fails --copy --add-missing
-grep '^Makefile\.am:2:.*subdir.*AM_PROG_CC_C_O' stderr
+grep "^Makefile\.am:3:.* 'a\.c' with per-target flags.* 'AM_PROG_CC_C_O'" 
stderr
+grep "^src/Makefile\.am:2:.* 'sub/a\.c' in subdir.* 'AM_PROG_CC_C_O'" stderr
+
+rm -rf autom4te*.cache
+echo AM_PROG_CC_C_O >> configure.ac
+$ACLOCAL
+$AUTOMAKE -a
 
 :
diff --git a/t/cscope.tap b/t/cscope.tap
index fb808cc..8362b9f 100755
--- a/t/cscope.tap
+++ b/t/cscope.tap
@@ -24,6 +24,8 @@ ocwd=`pwd` || fatal_ "getting top-level directory"
 
 cat >> configure.ac << 'END'
 AC_CONFIG_FILES([sub/Makefile])
+m4_define([AM_PROG_CC_C_O], [:])
+AM_PROG_CC_C_O
 AC_SUBST([CC],  [who-cares])
 AC_SUBST([CXX], [who-cares])
 AC_SUBST([FC],  [who-cares])
diff --git a/t/depcomp8a.sh b/t/depcomp8a.sh
index 01a2403..7467f1c 100755
--- a/t/depcomp8a.sh
+++ b/t/depcomp8a.sh
@@ -24,7 +24,7 @@ required=cc
 
 cat >> configure.ac << 'END'
 AC_PROG_CC
-#x AM_PROG_CC_C_O
+AM_PROG_CC_C_O
 AC_OUTPUT
 END
 
@@ -49,26 +49,6 @@ $ACLOCAL
 $AUTOMAKE -a
 grep include Makefile.in # For debugging.
 grep 'include.*\./\$(DEPDIR)/foo\.P' Makefile.in
-grep 'include.*\./\$(DEPDIR)/bar\.P' Makefile.in
-grep 'include.*/\./\$(DEPDIR)' Makefile.in && Exit 1
-
-$AUTOCONF
-# Don't reject slower dependency extractors, for better coverage.
-./configure --enable-dependency-tracking
-$MAKE
-cross_compiling || ./zardoz
-DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
-
-# Try again with subdir-objects option.
-
-sed 's/#x //' configure.ac >configure.int
-mv -f configure.int configure.ac
-echo AUTOMAKE_OPTIONS = subdir-objects >> Makefile.am
-
-$ACLOCAL
-$AUTOMAKE -a
-grep include Makefile.in # For debugging.
-grep 'include.*\./\$(DEPDIR)/foo\.P' Makefile.in
 grep 'include.*[^a-zA-Z0-9_/]sub/\$(DEPDIR)/bar\.P' Makefile.in
 $EGREP 'include.*/(\.|sub)/\$\(DEPDIR\)' Makefile.in && Exit 1
 
diff --git a/t/depcomp8b.sh b/t/depcomp8b.sh
index b5f7371..1ecbbfd 100755
--- a/t/depcomp8b.sh
+++ b/t/depcomp8b.sh
@@ -24,7 +24,7 @@ required='cc libtoolize'
 
 cat >> configure.ac << 'END'
 AC_PROG_CC
-#x AM_PROG_CC_C_O
+AM_PROG_CC_C_O
 AM_PROG_AR
 AC_PROG_LIBTOOL
 AC_OUTPUT
@@ -40,26 +40,6 @@ echo 'extern int foo = 0;' > foo.c
 echo 'extern int bar = 0;' > sub/bar.c
 
 libtoolize
-
-$ACLOCAL
-$AUTOMAKE -a
-grep include Makefile.in # For debugging.
-grep 'include.*\./\$(DEPDIR)/foo\.P' Makefile.in
-grep 'include.*\./\$(DEPDIR)/bar\.P' Makefile.in
-grep 'include.*/\./\$(DEPDIR)' Makefile.in && Exit 1
-
-$AUTOCONF
-# Don't reject slower dependency extractors, for better coverage.
-./configure --enable-dependency-tracking
-$MAKE
-DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
-
-# Try again with subdir-objects option.
-
-sed 's/#x //' configure.ac >configure.int
-mv -f configure.int configure.ac
-echo AUTOMAKE_OPTIONS = subdir-objects >> Makefile.am
-
 $ACLOCAL
 $AUTOMAKE -a
 grep include Makefile.in # For debugging.
diff --git a/t/fort4.sh b/t/fort4.sh
index a23c9bd..eb85bda 100755
--- a/t/fort4.sh
+++ b/t/fort4.sh
@@ -34,6 +34,7 @@ END
 cat >bye.f90 <<'END'
 program goodbye
   call baz
+  call zar
   stop
 end
 END
@@ -46,6 +47,7 @@ END
 
 sed s,foo,bar, foo.f90 > sub/bar.f90
 sed s,foo,baz, foo.f90 > sub/baz.f
+sed s,foo,zar, foo.f90 > sub/zardoz.f90
 
 cat >>configure.ac <<'END'
 AC_PROG_F77
@@ -59,9 +61,29 @@ END
 cat >Makefile.am <<'END'
 bin_PROGRAMS = hello goodbye
 hello_SOURCES = hello.f foo.f90 sub/bar.f90
-goodbye_SOURCES = bye.f90 sub/baz.f
+goodbye_SOURCES = bye.f90 sub/baz.f sub/zardoz.f90
 goodbye_FCFLAGS =
 LDADD = $(FCLIBS)
+
+.PHONY: test-obj
+test-obj:
+       ls -l . sub # For debugging.
+       test -f hello.$(OBJEXT)
+       test -f foo.$(OBJEXT)
+       test -f sub/bar.$(OBJEXT)
+       test ! -f bar.$(OBJEXT)
+       test -f goodbye-bye.$(OBJEXT)
+       test ! -f bye.$(OBJEXT)
+       test -f sub/goodbye-zardoz.$(OBJEXT)
+       test ! -f sub/zardoz.$(OBJEXT)
+       test ! -f goodbye-zardoz.$(OBJEXT)
+       test ! -f zardoz.$(OBJEXT)
+## The setting of FCFLAGS should only cause objects deriving from
+## Fortran 90, not Fortran 77, to be renamed.
+       test -f sub/baz.$(OBJEXT)
+       test ! -f sub/goodbye-baz.$(OBJEXT)
+       test ! -f goodbye-baz.$(OBJEXT)
+       test ! -f baz.$(OBJEXT)
 END
 
 $ACLOCAL
@@ -73,20 +95,9 @@ $AUTOCONF
 # ./configure may exit with status 77 if no compiler is found,
 # or if the compiler cannot compile Fortran 90 files).
 ./configure
-$MAKE
-subobjs=`echo sub/*.o sub/*.obj`
-test "$subobjs" = 'sub/*.o sub/*.obj'
-$MAKE distcheck
 
-$MAKE distclean
-echo 'AUTOMAKE_OPTIONS = subdir-objects' >> Makefile.am
-$AUTOMAKE
-./configure
 $MAKE
-test ! -f bar.o
-test ! -f bar.obj
-test ! -f baz.o
-test ! -f baz.obj
-test ! -f goodbye-baz.o
-test ! -f goodbye-baz.obj
+$MAKE test-obj
 $MAKE distcheck
+
+:
diff --git a/t/fort5.sh b/t/fort5.sh
index 4614b66..b9e5b80 100755
--- a/t/fort5.sh
+++ b/t/fort5.sh
@@ -88,18 +88,17 @@ grep " --tag=FC" Makefile.in
 # ./configure may exit with status 77 if no compiler is found,
 # or if the compiler cannot compile Fortran 90 files).
 ./configure
-$MAKE
-subobjs=`echo sub/*.lo`
-test "$subobjs" = 'sub/*.lo'
-$MAKE distcheck
 
-# The following will be fixed in a later patch:
-$MAKE distclean
-echo 'AUTOMAKE_OPTIONS = subdir-objects' >> Makefile.am
-$AUTOMAKE -a
-./configure
 $MAKE
+test -f sub/bar.lo
 test ! -f bar.lo
+## The setting of FCFLAGS should only cause objects deriving from
+## Fortran 90, not Fortran 77, to be renamed.
+test -f sub/baz.lo
 test ! -f baz.lo
+test ! -f sub/libgoodbye_la-baz.lo
 test ! -f libgoodbye_la-baz.lo
+
 $MAKE distcheck
+
+:
diff --git a/t/gcj.sh b/t/gcj.sh
index b510f1c..cad90b7 100755
--- a/t/gcj.sh
+++ b/t/gcj.sh
@@ -16,21 +16,50 @@
 
 # Test of compiled java.
 
+required='gcc gcj'
 . ./defs || Exit 1
 
 cat >> configure.ac << 'END'
-_AM_DEPENDENCIES([GCJ])
-AC_SUBST([GCJ])
+# FIXME: AM_PROG_GCJ should cause OBJEXT and EXEEXT to be set, but
+# FIXME: it currently does not.  See also xfailing test 'gcj6.sh'.
+AC_PROG_CC
+AM_PROG_GCJ
+AC_OUTPUT
 END
 
 cat > Makefile.am << 'END'
 bin_PROGRAMS = convert
-convert_SOURCES = x/y/convert.java
+convert_SOURCES = $(my-java-source)
+convert_LDFLAGS = --main=convert
+my-java-source = x/y/convert.java
+$(my-java-source):
+       rm -f address@hidden $@
+       test -d $(@D) || $(MKDIR_P) $(@D)
+       echo 'public class convert {'                      >> address@hidden
+       echo '  public static void main (String[] args) {' >> address@hidden
+       echo '    System.out.println("Hello, World!");'    >> address@hidden
+       echo '  }'                                         >> address@hidden
+       echo '}'                                           >> address@hidden
+       chmod a-w address@hidden && mv -f address@hidden $@
+.PHONY: test-obj
+check-local: test-obj
+test-obj:
+       test -f x/y/convert.$(OBJEXT)
 END
 
 $ACLOCAL
 $AUTOMAKE
+$FGREP 'x/y/convert.$(OBJEXT)' Makefile.in
 
-grep '^x/y/convert' Makefile.in
+$AUTOCONF
+./configure
+
+$MAKE
+$MAKE test-obj
+if ! cross_compiling; then
+  ./convert
+  test "$(./convert)" = 'Hello, World!'
+fi
+$MAKE distcheck
 
 :
diff --git a/t/lex-line.sh b/t/lex-line.sh
index 4a0aed5..3db979f 100755
--- a/t/lex-line.sh
+++ b/t/lex-line.sh
@@ -15,7 +15,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Check that automake lex support ensures that lex-generated C
-# files use correct "#line" directives.  Try also with the
+# files use correct "#line" directives.
 # 'subdir-object' option enabled.
 # See also sister test 'yacc-line.test'.
 
@@ -23,7 +23,6 @@ required='cc lex'
 . ./defs || Exit 1
 
 cat >> configure.ac << 'END'
-AC_CONFIG_FILES([sub/Makefile])
 AC_PROG_CC
 AM_PROG_CC_C_O
 AC_PROG_LEX
@@ -33,7 +32,6 @@ END
 mkdir dir sub sub/dir
 
 cat > Makefile.am << 'END'
-SUBDIRS = sub
 bin_PROGRAMS = foo bar
 LDADD = $(LEXLIB)
 bar_LFLAGS = -v
@@ -41,16 +39,6 @@ foo_SOURCES = zardoz.l
 bar_SOURCES = dir/quux.l
 END
 
-cat > sub/Makefile.am << 'END'
-AUTOMAKE_OPTIONS = subdir-objects
-noinst_PROGRAMS = foo bar
-## We already used $(LEXLIB) above, so try @LEXLIB@ now.
-LDADD = @LEXLIB@
-foo_LFLAGS = -v
-foo_SOURCES = zardoz.l
-bar_SOURCES = dir/quux.l
-END
-
 cat > zardoz.l << 'END'
 %{
 #define YY_NO_UNISTD_H 1
@@ -74,10 +62,8 @@ int yywrap (void)
 END
 
 cp zardoz.l dir/quux.l
-cp zardoz.l sub/zardoz.l
-cp zardoz.l sub/dir/quux.l
 
-c_outputs='zardoz.c bar-quux.c sub/foo-zardoz.c sub/dir/quux.c'
+c_outputs='zardoz.c dir/bar-quux.c'
 
 $ACLOCAL
 $AUTOCONF
@@ -97,7 +83,7 @@ for vpath in : false; do
   $MAKE
 
   # For debugging,
-  ls -l . sub sub/dir
+  ls -l . dir
   $EGREP 'line|\.l' $c_outputs
 
   grep '#.*line.*build.*\.l' $c_outputs && Exit 1
@@ -111,14 +97,10 @@ for vpath in : false; do
   grep "#.*\.l.*\.l" $c_outputs && Exit 1
   if $vpath; then
     grep '#.*line.*"\.\./zardoz\.l"' zardoz.c
-    grep '#.*line.*"\.\./dir/quux\.l"' bar-quux.c
-    grep '#.*line.*"\.\./\.\./sub/zardoz\.l"' sub/foo-zardoz.c
-    grep '#.*line.*"\.\./\.\./sub/dir/quux\.l"' sub/dir/quux.c
+    grep '#.*line.*"\.\./dir/quux\.l"' dir/bar-quux.c
   else
     grep '#.*line.*"zardoz\.l"' zardoz.c
-    grep '#.*line.*"dir/quux\.l"' bar-quux.c
-    grep '#.*line.*"zardoz\.l"' sub/foo-zardoz.c
-    grep '#.*line.*"dir/quux\.l"' sub/dir/quux.c
+    grep '#.*line.*"dir/quux\.l"' dir/bar-quux.c
   fi
 
   cd $srcdir
diff --git a/t/libobj20a.sh b/t/libobj20a.sh
deleted file mode 100755
index d56be31..0000000
--- a/t/libobj20a.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2010-2012 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# Test error reporting for AC_CONFIG_LIBOBJ_DIR.
-# See also sister tests 'libobj20b.test' and 'libobj20c.test' .
-
-. ./defs || Exit 1
-
-cat >> configure.ac << 'END'
-AC_CONFIG_LIBOBJ_DIR([libobj-dir])
-AC_PROG_CC
-AM_PROG_AR
-AC_PROG_RANLIB
-AC_LIBOBJ([foo])
-END
-
-cat > Makefile.am << 'END'
-noinst_LIBRARIES = libtu.a
-libtu_a_SOURCES =
-libtu_a_LIBADD = $(LIBOBJS)
-END
-
-mkdir libobj-dir
-: > libobj-dir/foo.c
-: > ar-lib
-
-$ACLOCAL
-AUTOMAKE_fails
-grep 'LIBOBJS.*used outside.*libobj-dir' stderr
-grep 'subdir-objects.*not set' stderr
-
-:
diff --git a/t/libobj20b.sh b/t/libobj20b.sh
index f8ca600..97807fe 100755
--- a/t/libobj20b.sh
+++ b/t/libobj20b.sh
@@ -15,7 +15,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Test error reporting for AC_CONFIG_LIBOBJ_DIR.
-# See also sister tests 'libobj20a.test' and 'libobj20c.test' .
+# See also sister test 'libobj20c.sh'.
 
 . ./defs || Exit 1
 
diff --git a/t/libobj20c.sh b/t/libobj20c.sh
index 7ae51bf..64b7030 100755
--- a/t/libobj20c.sh
+++ b/t/libobj20c.sh
@@ -15,7 +15,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Test error reporting for AC_CONFIG_LIBOBJ_DIR.
-# See also sister tests 'libobj20a.test' and 'libobj20b.test' .
+# See also sister test 'libobj20b.sh'.
 
 . ./defs || Exit 1
 
diff --git a/t/libtool3.sh b/t/libtool3.sh
index dbcd519..5ac3b16 100755
--- a/t/libtool3.sh
+++ b/t/libtool3.sh
@@ -23,6 +23,7 @@ required='cc libtoolize'
 cat >> configure.ac << 'END'
 AC_PROG_CC
 AM_PROG_AR
+AM_PROG_CC_C_O
 AM_PROG_LIBTOOL
 AC_OUTPUT
 END
@@ -75,12 +76,8 @@ $ACLOCAL
 $AUTOCONF
 $AUTOMAKE --add-missing --copy
 
-# We need explicit rules to build 1.o and a.lo.  Make sure
-# Automake did not output additional rules for 1.lo and and a.lo.
-$FGREP '1.o:' Makefile.in
-$FGREP '1.lo:' Makefile.in && Exit 1
-$FGREP 'a.o:' Makefile.in && Exit 1
-$FGREP 'a.lo:' Makefile.in
+# We shouldn't need explicit rules.
+$EGREP '[^%]\.(o|obj|lo) *:' Makefile.in && Exit 1
 
 ./configure
 
diff --git a/t/parallel-tests-suffix-prog.sh b/t/parallel-tests-suffix-prog.sh
index 28dd349..d7b4140 100755
--- a/t/parallel-tests-suffix-prog.sh
+++ b/t/parallel-tests-suffix-prog.sh
@@ -23,6 +23,7 @@ required='cc native'
 
 cat >> configure.ac << 'END'
 AC_PROG_CC
+AM_PROG_CC_C_O
 AC_OUTPUT
 END
 
diff --git a/t/pr401.sh b/t/pr401.sh
index 849ee5f..7e8c491 100755
--- a/t/pr401.sh
+++ b/t/pr401.sh
@@ -104,17 +104,6 @@ test ! -d lib/lib
 $MAKE distcheck
 
 ## -------------------------------------------- ##
-## Error message with usage in wrong directory. ##
-## -------------------------------------------- ##
-
-mv -f src/Makefile.am src/t
-sed 's/LDADD = .*/LDADD = @LIBOBJS@/' src/t > src/Makefile.am
-AUTOMAKE_fails
-grep 'cannot be used outside.*lib' stderr
-mv -f src/t src/Makefile.am
-
-
-## -------------------------------------------- ##
 ## Test using LIBOBJS from a sibling directory. ##
 ## -------------------------------------------- ##
 
diff --git a/t/pr401b.sh b/t/pr401b.sh
index 382d118..6f49b1f 100755
--- a/t/pr401b.sh
+++ b/t/pr401b.sh
@@ -104,15 +104,6 @@ $AUTOMAKE -a
 test ! -d lib/lib
 $MAKE distcheck
 
-## -------------------------------------------- ##
-## Error message with usage in wrong directory. ##
-## -------------------------------------------- ##
-
-mv -f src/Makefile.am src/t
-sed 's/LDADD = .*/LDADD = @LTLIBOBJS@/' src/t > src/Makefile.am
-AUTOMAKE_fails
-grep 'cannot be used outside.*lib' stderr
-mv -f src/t src/Makefile.am
 
 ## ---------------------------------------------- ##
 ## Test using LTLIBOBJS from a sibling directory. ##
diff --git a/t/pr401c.sh b/t/pr401c.sh
index 12afade..ea2f03d 100755
--- a/t/pr401c.sh
+++ b/t/pr401c.sh
@@ -105,16 +105,6 @@ $AUTOMAKE
 test ! -d lib/lib
 $MAKE distcheck
 
-## -------------------------------------------- ##
-## Error message with usage in wrong directory. ##
-## -------------------------------------------- ##
-
-mv -f src/Makefile.am src/t
-sed 's/LDADD = .*/LDADD = @ALLOCA@/' src/t > src/Makefile.am
-AUTOMAKE_fails
-grep 'cannot be used outside.*lib' stderr
-mv -f src/t src/Makefile.am
-
 
 ## ------------------------------------------- ##
 ## Test using ALLOCA from a sibling directory. ##
diff --git a/t/subdir3.sh b/t/subdir3.sh
deleted file mode 100755
index d9b160f..0000000
--- a/t/subdir3.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# Test to make sure subdir source file generates explicit dependency.
-
-. ./defs || Exit 1
-
-cat > Makefile.am << 'END'
-bin_PROGRAMS = zardoz widdershins
-zardoz_SOURCES = y.c x/z.c
-widdershins_SOURCES = x/z.c
-END
-
-cat >> configure.ac << 'END'
-AC_PROG_CC
-END
-
-$ACLOCAL
-$AUTOMAKE
-
-grep '^z\.o: x/z\.c$' Makefile.in
-
-:
diff --git a/t/subobj4.sh b/t/subobj4.sh
deleted file mode 100755
index 6a3d221..0000000
--- a/t/subobj4.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# Make sure '../foo/foo.cpp' generates a rule.
-# Report from Dave Brolley.
-
-. ./defs || Exit 1
-
-cat >> configure.ac << 'END'
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_PROG_CXX
-AC_CONFIG_FILES([d1/Makefile d2/Makefile])
-AC_OUTPUT
-END
-
-mkdir d1 d2
-
-cat > Makefile.am << 'END'
-SUBDIRS = d1 d2
-END
-
-cat > d1/Makefile.am << 'END'
-bin_PROGRAMS = z
-z_SOURCES = ../d2/z.c
-END
-
-cat > d2/Makefile.am << 'END'
-END
-
-: > compile
-: > d2/z.c
-
-$ACLOCAL
-$AUTOMAKE
-
-grep '^z\.o:.* \.\./d2/z\.c *$' d1/Makefile.in
-grep "@address@hidden'\"]../d2/z.c['\"] " d1/Makefile.in
-
-:
diff --git a/t/subpkg-yacc.sh b/t/subpkg-yacc.sh
index 9d7ad88..022e653 100755
--- a/t/subpkg-yacc.sh
+++ b/t/subpkg-yacc.sh
@@ -20,13 +20,17 @@
 required='cc yacc'
 . ./defs || Exit 1
 
-cat >>configure.ac <<'END'
+cat > configure.ac <<'END'
+AC_INIT([suya], [0.5a], address@hidden)
+AM_INIT_AUTOMAKE([foreign -Wall])
 AC_PROG_CC
+AC_CONFIG_FILES([GNUmakefile])
 AC_CONFIG_SUBDIRS([lib])
 AC_OUTPUT
 END
 
-cat >Makefile.am <<'EOF'
+cat >GNUmakefile.am <<'EOF'
+AUTOMAKE_OPTIONS = -Wno-override
 SUBDIRS = lib
 bin_PROGRAMS = MU
 MU_LDADD = lib/liblib.a
@@ -55,6 +59,7 @@ AC_PROG_RANLIB
 AC_PROG_YACC
 dnl This comes after YACC and RANLIB checks, deliberately.
 AC_PROG_CC
+AM_PROG_CC_C_O
 AM_PROG_AR
 AC_CONFIG_HEADERS([config.h:config.hin])
 AC_CONFIG_FILES([Makefile])
@@ -107,14 +112,16 @@ EOF
 
 $ACLOCAL
 $AUTOCONF
-$AUTOMAKE -Wno-override
+$AUTOMAKE
 
+test ! -f compile
 cd lib
 $ACLOCAL
 $AUTOCONF
 $AUTOHEADER
-$AUTOMAKE -Wno-override --add-missing
+$AUTOMAKE --add-missing
 cd ..
+test -f compile
 
 ./configure
 
diff --git a/t/subpkg.sh b/t/subpkg.sh
index 82bf338..18d3e20 100755
--- a/t/subpkg.sh
+++ b/t/subpkg.sh
@@ -23,7 +23,8 @@ mkdir m4
 
 cat >m4/foo.m4 <<'EOF'
 AC_DEFUN([FOO],[
-  AC_PROG_CC
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AM_PROG_CC_C_O])
   AC_OUTPUT
 ])
 EOF
@@ -92,6 +93,8 @@ int lib (void)
 }
 EOF
 
+cp "$am_scriptdir"/compile .
+
 $ACLOCAL -I m4
 $AUTOCONF
 $AUTOMAKE -Wno-override
@@ -104,7 +107,10 @@ $AUTOHEADER
 $AUTOMAKE -Wno-override --add-missing
 cd ..
 
-./configure
+./configure >stdout || { cat stdout; Exit 1; }
+cat stdout
+grep '^checking whether cc understands -c and -o together' stdout
+
 $MAKE
 $MAKE distcheck
 test ! -d subpack-1 # Make sure distcheck cleans up after itself.
diff --git a/t/xsource.sh b/t/xsource.sh
index 5f89dc9..677670f 100755
--- a/t/xsource.sh
+++ b/t/xsource.sh
@@ -21,18 +21,22 @@
 
 cat > Makefile.am << 'END'
 bin_PROGRAMS = zardoz
-zardoz_SOURCES = z.c x/z.c
+lib_LTLIBRARIES = libfoo.la
+zardoz_SOURCES = z.c
+libfoo_la_SOURCES = z.c
 END
 
+: > ltmain.sh
+: > config.guess
+: > config.sub
+
 cat >> configure.ac << 'END'
 AC_PROG_CC
+AC_SUBST([LIBTOOL], [unused])
 END
 
-mkdir x
-
-: > z.c
-: > x/z.c
-
 $ACLOCAL
 AUTOMAKE_fails
-$FGREP 'z.$(OBJEXT)' stderr
+$FGREP "object 'z.\$(OBJEXT)' created both with libtool and without" stderr
+
+:
diff --git a/t/yacc-line.sh b/t/yacc-line.sh
index 23b5a1b..1d536ee 100755
--- a/t/yacc-line.sh
+++ b/t/yacc-line.sh
@@ -15,38 +15,27 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Check that automake yacc support ensures that yacc-generated C
-# files use correct "#line" directives.  Try also with the
-# 'subdir-object' option enabled.
+# files use correct "#line" directives.
 # See also sister test 'lex-line.test'.
 
 required='cc yacc'
 . ./defs || Exit 1
 
 cat >> configure.ac << 'END'
-AC_CONFIG_FILES([sub/Makefile])
 AC_PROG_CC
 AM_PROG_CC_C_O
 AC_PROG_YACC
 AC_OUTPUT
 END
 
-mkdir dir sub sub/dir
+mkdir dir
 
 cat > Makefile.am << 'END'
-SUBDIRS = sub
-bin_PROGRAMS = foo bar
-AM_YFLAGS = -d
-bar_YFLAGS =
-foo_SOURCES = zardoz.y
-bar_SOURCES = dir/quux.y
-END
-
-cat > sub/Makefile.am << 'END'
-AUTOMAKE_OPTIONS = subdir-objects
-noinst_PROGRAMS = foo bar
-foo_YFLAGS = -d
+noinst_PROGRAMS = foo bar baz
+baz_YFLAGS = -d
 foo_SOURCES = zardoz.y
 bar_SOURCES = dir/quux.y
+baz_SOURCES = zardoz.y
 END
 
 cat > zardoz.y << 'END'
@@ -64,10 +53,8 @@ int main(void)
 END
 
 cp zardoz.y dir/quux.y
-cp zardoz.y sub/zardoz.y
-cp zardoz.y sub/dir/quux.y
 
-c_outputs='zardoz.c bar-quux.c sub/foo-zardoz.c sub/dir/quux.c'
+c_outputs='zardoz.c dir/quux.c baz-zardoz.c'
 
 $ACLOCAL
 $AUTOCONF
@@ -87,7 +74,7 @@ for vpath in : false; do
   $MAKE
 
   # For debugging,
-  ls -l . sub sub/dir
+  ls -l . dir
   $EGREP 'line|\.y' $c_outputs
 
   # Adjusted "#line" should not contain reference to the builddir.
@@ -102,14 +89,12 @@ for vpath in : false; do
   grep "#.*\.y.*\.y" $c_outputs && Exit 1
   if $vpath; then
     grep '#.*line.*"\.\./zardoz\.y"' zardoz.c
-    grep '#.*line.*"\.\./dir/quux\.y"' bar-quux.c
-    grep '#.*line.*"\.\./\.\./sub/zardoz\.y"' sub/foo-zardoz.c
-    grep '#.*line.*"\.\./\.\./sub/dir/quux\.y"' sub/dir/quux.c
+    grep '#.*line.*"\.\./zardoz\.y"' baz-zardoz.c
+    grep '#.*line.*"\.\./dir/quux\.y"' dir/quux.c
   else
     grep '#.*line.*"zardoz\.y"' zardoz.c
-    grep '#.*line.*"dir/quux\.y"' bar-quux.c
-    grep '#.*line.*"zardoz\.y"' sub/foo-zardoz.c
-    grep '#.*line.*"dir/quux\.y"' sub/dir/quux.c
+    grep '#.*line.*"zardoz\.y"' baz-zardoz.c
+    grep '#.*line.*"dir/quux\.y"' dir/quux.c
   fi
 
   cd $srcdir
diff --git a/t/yacc5.sh b/t/yacc5.sh
index ab24b56..b24dcd3 100755
--- a/t/yacc5.sh
+++ b/t/yacc5.sh
@@ -25,55 +25,31 @@ AM_PROG_CC_C_O
 AC_PROG_YACC
 END
 
-cat > Makefile.am << 'END'
-bin_PROGRAMS = maude
-maude_SOURCES = sub/maude.y
-END
-
-mkdir sub
-
-: > sub/maude.y
-
 $ACLOCAL
-$AUTOMAKE -a
-
-grep '^maude\.c:.*maude\.y' Makefile.in
-
-
-## Try again with subdir-objects.
 
 cat > Makefile.am << 'END'
-AUTOMAKE_OPTIONS = subdir-objects
 bin_PROGRAMS = maude
 maude_SOURCES = sub/maude.y
 END
-
-$ACLOCAL
 $AUTOMAKE -a
-
 # No rule needed, the default .y.c: inference rule is enough
 # (but there may be an additional dependency on a dirstamp file).
 grep '^sub/maude\.c:.*maude\.y' Makefile.in && Exit 1
 
-
 ## Try again with per-exe flags.
 
 cat > Makefile.am << 'END'
 bin_PROGRAMS = maude
 maude_SOURCES = sub/maude.y
-## A particularly trickey case.
+## A particularly tricky case.
 maude_YFLAGS = -d
 END
-
-$ACLOCAL
 $AUTOMAKE -a
-
+grep '^sub/maude-maude\.c:.*sub/maude\.y' Makefile.in
 # Rule should use maude_YFLAGS.
 grep 'AM_YFLAGS.*maude' Makefile.in && Exit 1
-
 # Silly regression.
 grep 'maudec' Makefile.in && Exit 1
-
 # Make sure the .o file is required.
 grep '^am_maude_OBJECTS.*maude' Makefile.in
 
-- 
1.7.9.5




reply via email to

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