automake-patches
[Top][All Lists]
Advanced

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

[PATCH 01/10] subdir-objects: enable unconditionally


From: Stefano Lattarini
Subject: [PATCH 01/10] subdir-objects: enable unconditionally
Date: Tue, 14 May 2013 10:04:24 +0200

See automake bug#13378.

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.

This change is basically an adjusted backport of Automake-NG commit
'v1.12.1-313-g14fe163' of 2012-06-07, "[ng] subdir-objects: enable
unconditionally".

* NEWS: Update.
* doc/automake.texi (Program and Library Variables): The output
object files are no longer 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 used outside of the directory where their sources lie.
(List of Automake options): No longer document 'subdir-objects'
option.
Other related minor adjustments.
* bin/automake.in (LANG_PROCESS): Remove, it's no longer needed.
(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_lex_rewrite): Adjust.  Don't test whether the option
'subdir-objects' is set (just assume it is).
(lang_yacc_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 uses accordingly.
* t/compile_f_c_cxx.sh: Adjust.
* t/cscope.tap: Likewise.
* t/depcomp8a.sh: Likewise.
* t/depcomp8b.sh: Likewise.
* t/libtool3.sh: Likewise.
* t/ltlibsrc.sh: Likewise.
* t/pr401.sh: Likewise.
* t/pr401b.sh: Likewise.
* t/pr401c.sh: Likewise.
* t/subobj.sh: Likewise.
* t/lex-line.sh: Likewise.
* t/yacc-line.sh: Likewise.
* t/yacc5.sh: Likewise.
* t/vala-libs.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/subobj4.sh: Remove as obsolete.
* t/sourcefile-in-subdir.sh: Likewise.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 NEWS                      | 10 +++++++
 bin/automake.in           | 74 ++++++++++++++---------------------------------
 doc/automake.texi         | 32 +++++---------------
 lib/am/depend2.am         | 24 ++++++---------
 t/compile_f_c_cxx.sh      | 14 +++++++--
 t/cscope.tap              |  6 ++--
 t/depcomp8a.sh            | 19 +-----------
 t/depcomp8b.sh            | 27 ++---------------
 t/fort4.sh                | 39 +++++++++++++++----------
 t/fort5.sh                | 15 ++++------
 t/gcj.sh                  | 37 +++++++++++++++++++++---
 t/lex-line.sh             | 32 ++++----------------
 t/libobj20a.sh            | 45 ----------------------------
 t/libobj20b.sh            |  2 +-
 t/libobj20c.sh            |  2 +-
 t/libtool3.sh             | 14 +++------
 t/list-of-tests.mk        |  3 --
 t/ltlibsrc.sh             |  2 +-
 t/pr401.sh                | 11 -------
 t/pr401b.sh               |  9 ------
 t/pr401c.sh               | 10 -------
 t/sourcefile-in-subdir.sh | 36 -----------------------
 t/subobj.sh               | 32 +-------------------
 t/subobj4.sh              | 50 --------------------------------
 t/subpkg-yacc.sh          | 14 +++++++--
 t/subpkg.sh               |  7 +++--
 t/xsource.sh              | 18 +++++++-----
 t/yacc-grepping2.sh       | 30 ++-----------------
 t/yacc-line.sh            | 45 ++++++++--------------------
 29 files changed, 182 insertions(+), 477 deletions(-)
 delete mode 100755 t/libobj20a.sh
 delete mode 100755 t/sourcefile-in-subdir.sh
 delete mode 100755 t/subobj4.sh

diff --git a/NEWS b/NEWS
index 1d035b6..fa2582f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,15 @@
 New in 2.0:
 
+* 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'.  Put in another way, Automake 1.14
+   and later will *unconditionally* behave as older Automake versions did
+   when the 'subdir-objects' option was given.
+
 * Aclocal search path:
 
   - Third-party m4 files located in the system-wide aclocal directory,
diff --git a/bin/automake.in b/bin/automake.in
index db1dfe4..d730dac 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -183,7 +183,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
@@ -1291,8 +1290,7 @@ sub handle_languages ()
                         'FASTDEP' => $FASTDEP,
                         '-c'      => $lang->compile_flag || '',
                         # These are not used, but they need to be defined
-                        # so transform() do not complain.
-                        SUBDIROBJ     => 0,
+                        # so transform() does not complain.
                         'DERIVED-EXT' => 'BUG',
                         DIST_SOURCE   => 1,
                         VERBOSE   => $verbose,
@@ -1308,9 +1306,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.
@@ -1335,8 +1331,7 @@ sub handle_languages ()
            # Plo, TPlo will be added later as appropriate).  It is
            # either hardcoded, or a shell variable ('$depbase') that
            # will be computed by the rule.
-           my $depbase =
-             option ('subdir-objects') ? '$$depbase' : '$(DEPDIR)/$*';
+           my $depbase = '$$depbase';
            $output_rules .=
              file_contents ($rule_file,
                             new Automake::Location,
@@ -1355,8 +1350,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
@@ -1593,10 +1587,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 ! /^(?:(.*)\/)?([^\/]*)($KNOWN_EXTENSIONS_PATTERN)$/;
        my $full = $_;
@@ -1648,7 +1638,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);
@@ -1739,11 +1729,7 @@ EOF
            # 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.
            #
            # The latter case deserves a historical note.  When the
@@ -1765,7 +1751,6 @@ EOF
            # with GNU make, Solaris make, Ultrix make, BSD make,
            # HP-UX make, and OSF1 make successfully.
            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'}))
@@ -1832,6 +1817,8 @@ EOF
            next;
        }
 
+        # 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);
@@ -2218,27 +2205,19 @@ 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 = backname ($relative_dir) . "/$dir"
-           if $relative_dir ne '.';
-         define_variable ('LIBOBJDIR', "$dir", INTERNAL);
-         $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 = backname ($relative_dir) . "/$dir"
+      if $relative_dir ne '.';
+      define_variable ('LIBOBJDIR', "$dir", INTERNAL);
+      $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;
@@ -5472,13 +5451,6 @@ 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 header file.
 sub lang_header_rewrite
 {
@@ -5500,9 +5472,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 (@_); };
 
@@ -5511,9 +5482,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.texi b/doc/automake.texi
index 4912d38..c9411ef 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -5633,18 +5633,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
@@ -6038,19 +6033,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{}
@@ -10225,15 +10216,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}.
-
 @anchor{tar-formats}
 @item @option{tar-v7}
 @itemx @option{tar-ustar}
diff --git a/lib/am/depend2.am b/lib/am/depend2.am
index 5c6439a..a13379a 100644
--- a/lib/am/depend2.am
+++ b/lib/am/depend2.am
@@ -40,11 +40,9 @@ if %FASTDEP%
 ## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
 ?!GENERIC?     %VERBOSE%%COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o 
%OBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
 ?!GENERIC?     %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
-?GENERIC??!SUBDIROBJ?  %VERBOSE%%COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo 
%-c% -o %OBJ% %SOURCEFLAG%%SOURCE%
-?GENERIC??!SUBDIROBJ?  %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
-?GENERIC??SUBDIROBJ?   %VERBOSE%depbase=`echo %OBJ% | sed 
's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-?GENERIC??SUBDIROBJ?   %COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o 
%OBJ% %SOURCEFLAG%%SOURCE% &&\
-?GENERIC??SUBDIROBJ?   $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+?GENERIC?      %VERBOSE%depbase=`echo %OBJ% | sed 
's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+?GENERIC?      %COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJ% 
%SOURCEFLAG%%SOURCE% &&\
+?GENERIC?      $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
 else !%FASTDEP%
 if %AMDEP%
        %VERBOSE%source='%SOURCE%' object='%OBJ%' libtool=no @AMDEPBACKSLASH@
@@ -67,11 +65,9 @@ if %FASTDEP%
 ## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
 ?!GENERIC?     %VERBOSE%%COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% 
-o %OBJOBJ% %SOURCEFLAG%`if test -f '%SOURCE%'; then $(CYGPATH_W) '%SOURCE%'; 
else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
 ?!GENERIC?     %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
-?GENERIC??!SUBDIROBJ?  %VERBOSE%%COMPILE% -MT %OBJOBJ% -MD -MP -MF 
%DEPBASE%.Tpo %-c% -o %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'`
-?GENERIC??!SUBDIROBJ?  %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
-?GENERIC??SUBDIROBJ?   %VERBOSE%depbase=`echo %OBJ% | sed 
's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-?GENERIC??SUBDIROBJ?   %COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% 
-o %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'` &&\
-?GENERIC??SUBDIROBJ?   $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+?GENERIC?      %VERBOSE%depbase=`echo %OBJ% | sed 
's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+?GENERIC?      %COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o 
%OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'` &&\
+?GENERIC?      $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
 else !%FASTDEP%
 if %AMDEP%
        %VERBOSE%source='%SOURCE%' object='%OBJOBJ%' libtool=no @AMDEPBACKSLASH@
@@ -96,11 +92,9 @@ if %FASTDEP%
 ## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
 ?!GENERIC?     %VERBOSE%%LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% 
-o %LTOBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
 ?!GENERIC?     %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
-?GENERIC??!SUBDIROBJ?  %VERBOSE%%LTCOMPILE% -MT %LTOBJ% -MD -MP -MF 
%DEPBASE%.Tpo %-c% -o %LTOBJ% %SOURCEFLAG%%SOURCE%
-?GENERIC??!SUBDIROBJ?  %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
-?GENERIC??SUBDIROBJ?   %VERBOSE%depbase=`echo %OBJ% | sed 
's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-?GENERIC??SUBDIROBJ?   %LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% 
-o %LTOBJ% %SOURCEFLAG%%SOURCE% &&\
-?GENERIC??SUBDIROBJ?   $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
+?GENERIC?      %VERBOSE%depbase=`echo %OBJ% | sed 
's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+?GENERIC?      %LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o 
%LTOBJ% %SOURCEFLAG%%SOURCE% &&\
+?GENERIC?      $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
 else !%FASTDEP%
 if %AMDEP%
        %VERBOSE%source='%SOURCE%' object='%LTOBJ%' libtool=yes @AMDEPBACKSLASH@
diff --git a/t/compile_f_c_cxx.sh b/t/compile_f_c_cxx.sh
index a0b0e21..2562d7d 100755
--- a/t/compile_f_c_cxx.sh
+++ b/t/compile_f_c_cxx.sh
@@ -38,9 +38,17 @@ END
 $ACLOCAL
 $AUTOMAKE
 
+$FGREP COMPILE Makefile.in # For debugging.
+
 # Look for the macros at the beginning of rules.
-$FGREP "$tab\$(AM_V_CC)\$(COMPILE)"     Makefile.in
-$FGREP "$tab\$(AM_V_CXX)\$(CXXCOMPILE)" Makefile.in
-$FGREP "$tab\$(AM_V_F77)\$(F77COMPILE)" Makefile.in
+sed < Makefile.in > mk \
+    -e 's|$(AM_V_CC)||g' \
+    -e 's|$(AM_V_CXX)||g' \
+    -e 's|$(AM_V_F77)||g'
+diff -u Makefile.in mk || : # For debugging.
+
+$FGREP "$tab\$(COMPILE)"    mk
+$FGREP "$tab\$(CXXCOMPILE)" mk
+$FGREP "$tab\$(F77COMPILE)" mk
 
 :
diff --git a/t/cscope.tap b/t/cscope.tap
index 9dbe01b..29feec2 100755
--- a/t/cscope.tap
+++ b/t/cscope.tap
@@ -22,10 +22,8 @@ plan_ 18
 
 ocwd=$(pwd) || fatal_ "getting top-level directory"
 
-cat > configure.ac << 'END'
-AC_INIT([cscope-test], [1.0])
-AM_INIT_AUTOMAKE([subdir-objects])
-AC_CONFIG_FILES([Makefile sub/Makefile])
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
 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 d6c73ed..4cb545b 100755
--- a/t/depcomp8a.sh
+++ b/t/depcomp8a.sh
@@ -53,24 +53,7 @@ $ACLOCAL
 $AUTOMAKE -a -Wno-unsupported
 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.
-
-echo AUTOMAKE_OPTIONS = subdir-objects >> Makefile.am
-
-$AUTOMAKE
-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
+LC_ALL=C grep 'include.*[^a-zA-Z0-9_/]sub/\$(DEPDIR)/bar\.P' Makefile.in
 $EGREP 'include.*/(\.|sub)/\$\(DEPDIR\)' Makefile.in && exit 1
 
 $AUTOCONF
diff --git a/t/depcomp8b.sh b/t/depcomp8b.sh
index 879ee1c..c06c3c1 100755
--- a/t/depcomp8b.sh
+++ b/t/depcomp8b.sh
@@ -24,16 +24,12 @@ required='cc libtoolize'
 
 cat >> configure.ac << 'END'
 AC_PROG_CC
-#x AM_PROG_CC_C_O
 AM_PROG_AR
 AC_PROG_LIBTOOL
 AC_OUTPUT
 END
 
 cat > Makefile.am << 'END'
-## FIXME: stop disabling the warnings in the 'unsupported' category
-## FIXME: once the 'subdir-objects' option has been mandatory.
-AUTOMAKE_OPTIONS = -Wno-unsupported
 lib_LTLIBRARIES = libzardoz.la
 libzardoz_la_SOURCES = foo.c sub/bar.c
 END
@@ -45,28 +41,9 @@ echo 'int bar (void) { return 0; }' > sub/bar.c
 libtoolize
 
 $ACLOCAL
-# FIXME: stop disabling the warnings in the 'unsupported' category
-# FIXME: once the 'subdir-objects' option has been mandatory.
-$AUTOMAKE -a -Wno-unsupported
+$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.
-
-echo AUTOMAKE_OPTIONS += subdir-objects >> Makefile.am
-
-$AUTOMAKE
-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
+LC_ALL=C grep 'include.*[^a-zA-Z0-9_/]sub/\$(DEPDIR)/bar\.P' Makefile.in
 $EGREP 'include.*/(\.|sub)/\$\(DEPDIR\)' Makefile.in && exit 1
 
 $AUTOCONF
diff --git a/t/fort4.sh b/t/fort4.sh
index 2ef27ab..2d01ee4 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,22 +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 ! -e bar.o
-test ! -e bar.obj
-test ! -e baz.o
-test ! -e baz.obj
-test ! -e goodbye-baz.o
-test ! -e goodbye-baz.obj
+$MAKE test-obj
 $MAKE distcheck
 
 :
diff --git a/t/fort5.sh b/t/fort5.sh
index 7b9991b..d090f6f 100755
--- a/t/fort5.sh
+++ b/t/fort5.sh
@@ -90,20 +90,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 ! -e 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 ! -e baz.lo
+test ! -e sub/libgoodbye_la-baz.lo
 test ! -e libgoodbye_la-baz.lo
+
 $MAKE distcheck
 
 :
diff --git a/t/gcj.sh b/t/gcj.sh
index 3de2953..3b058a5 100755
--- a/t/gcj.sh
+++ b/t/gcj.sh
@@ -16,21 +16,50 @@
 
 # Test of compiled java.
 
+required='gcc gcj'
 . test-init.sh
 
 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 258f6af..ec9fcd3 100755
--- a/t/lex-line.sh
+++ b/t/lex-line.sh
@@ -15,15 +15,13 @@
 # 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
-# 'subdir-object' option enabled.
+# files use correct "#line" directives.
 # See also sister test 'yacc-line.sh'.
 
 required='cc lex'
 . test-init.sh
 
 cat >> configure.ac << 'END'
-AC_CONFIG_FILES([sub/Makefile])
 AC_PROG_CC
 AC_PROG_LEX
 AC_OUTPUT
@@ -32,7 +30,6 @@ END
 mkdir dir sub sub/dir
 
 cat > Makefile.am << 'END'
-SUBDIRS = sub
 bin_PROGRAMS = foo bar
 LDADD = $(LEXLIB)
 bar_LFLAGS = -v
@@ -43,19 +40,6 @@ address@hidden@: zardoz.c
 address@hidden@: bar-quux.c
 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
-## Avoid spurious failures with Solaris make.
address@hidden@: foo-zardoz.c
-dir/address@hidden@: dir/quux.c
-END
-
 cat > zardoz.l << 'END'
 %{
 #define YY_NO_UNISTD_H 1
@@ -79,10 +63,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
@@ -104,7 +86,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
@@ -118,14 +100,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 635798c..0000000
--- a/t/libobj20a.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2010-2013 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.sh' and 'libobj20c.sh'.
-
-. test-init.sh
-
-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 f86a46c..70442dd 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.sh' and 'libobj20c.sh'.
+# See also sister test 'libobj20c.sh'.
 
 . test-init.sh
 
diff --git a/t/libobj20c.sh b/t/libobj20c.sh
index 7b91802..5f8eb68 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.sh' and 'libobj20b.sh'.
+# See also sister test 'libobj20b.sh'.
 
 . test-init.sh
 
diff --git a/t/libtool3.sh b/t/libtool3.sh
index 5653280..4f45a39 100755
--- a/t/libtool3.sh
+++ b/t/libtool3.sh
@@ -28,10 +28,6 @@ AC_OUTPUT
 END
 
 cat > Makefile.am << 'END'
-# FIXME: stop disabling the warnings in the 'unsupported' category
-# FIXME: once the 'subdir-objects' option has been mandatory.
-AUTOMAKE_OPTIONS = -Wno-unsupported
-
 lib_LTLIBRARIES = lib0.la liba/liba.la
 lib0_la_SOURCES = 0.c
 liba_liba_la_SOURCES = liba/a.c
@@ -79,12 +75,10 @@ $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.
+grep -v '^\.c' Makefile.in \
+  | $FGREP -v '$(am__dirstamp)' \
+  | $EGREP '\.(o|obj|lo).*:' && exit 1
 
 ./configure
 
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 0d6f5d1..18109ac 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -604,7 +604,6 @@ t/libobj16b.sh \
 t/libobj17.sh \
 t/libobj18.sh \
 t/libobj19.sh \
-t/libobj20a.sh \
 t/libobj20b.sh \
 t/libobj20c.sh \
 t/library.sh \
@@ -991,7 +990,6 @@ t/silent-configsite.sh \
 t/silent-nested-vars.sh \
 t/silent-custom.sh \
 t/src-acsubst.sh \
-t/sourcefile-in-subdir.sh \
 t/space.sh \
 t/specflg6.sh \
 t/specflg7.sh \
@@ -1028,7 +1026,6 @@ t/subdir-distclean.sh \
 t/subdir-keep-going-pr12554.sh \
 t/subobj.sh \
 t/subobj2.sh \
-t/subobj4.sh \
 t/subobj5.sh \
 t/subobj6.sh \
 t/subobj7.sh \
diff --git a/t/ltlibsrc.sh b/t/ltlibsrc.sh
index 8c8098b..04a029f 100755
--- a/t/ltlibsrc.sh
+++ b/t/ltlibsrc.sh
@@ -33,7 +33,7 @@ AM_LDFLAGS = -module
 pkglib_LTLIBRARIES = zoo.d/bar.la old.la
 noinst_LTLIBRARIES = foo.la zoo.d/old2.la
 
-$(srcdir)/zoo_d_old2_la.c: $(srcdir)/old_la.c
+zoo_d_old2_la.c: $(srcdir)/old_la.c
        cp $(srcdir)/old_la.c $@
 
 AUTOMAKE_OPTIONS = -Wno-unsupported
diff --git a/t/pr401.sh b/t/pr401.sh
index 89094de..090b2e9 100755
--- a/t/pr401.sh
+++ b/t/pr401.sh
@@ -103,17 +103,6 @@ test ! -e 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 cf7a698..f993108 100755
--- a/t/pr401b.sh
+++ b/t/pr401b.sh
@@ -103,15 +103,6 @@ $AUTOMAKE -a
 test ! -e 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 22e5876..eb2f4fb 100755
--- a/t/pr401c.sh
+++ b/t/pr401c.sh
@@ -104,16 +104,6 @@ $AUTOMAKE
 test ! -e 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/sourcefile-in-subdir.sh b/t/sourcefile-in-subdir.sh
deleted file mode 100755
index 1054f18..0000000
--- a/t/sourcefile-in-subdir.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /bin/sh
-# Copyright (C) 1999-2013 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.
-
-. test-init.sh
-
-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 -Wno-unsupported
-
-grep '^z\.o: x/z\.c$' Makefile.in
-
-:
diff --git a/t/subobj.sh b/t/subobj.sh
index f595e68..fa00368 100755
--- a/t/subobj.sh
+++ b/t/subobj.sh
@@ -14,7 +14,7 @@
 # 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 of subdir objects with C and C++.
+# Grepping checks on subdir objects with C and C++.
 
 . test-init.sh
 
@@ -42,36 +42,6 @@ dream_SOURCES = generic/b.c more/r.y
 bin_PROGRAMS = dream
 END
 
-AUTOMAKE_fails
-grep "^Makefile\.am:3:.*'generic/a\.c'.* in a subdirectory" stderr
-grep "^Makefile\.am:[34]:.*'another/z\.cxx'.* in a subdirectory" stderr
-grep "^sub/Makefile\.am:1:.*'generic/b\.c'.* in a subdirectory" stderr
-grep "option 'subdir-objects' is disabled" stderr
-# Verbose tips should be given, but not too many times.
-for msg in \
-  "possible forward-incompatibility" \
-  "advi[sc]e.* 'subdir-objects' option throughout" \
-  "unconditionally.* object file.* same subdirectory" \
-; do
-  test $(grep -c "$msg" stderr) -eq 1
-done
-
-# Guard against stupid typos.
-grep 'subdir-object([^s]|$)' stderr && exit 1
-
-$AUTOMAKE -Wno-unsupported
-
-echo AUTOMAKE_OPTIONS = subdir-objects >> Makefile.am
-AUTOMAKE_fails
-grep "^Makefile\.am" stderr && exit 1
-grep "^sub/Makefile\.am:.*'generic/b\.c'.* in a subdirectory" stderr
-grep "option 'subdir-objects' is disabled" stderr
-
-sed 's/^AM_INIT_AUTOMAKE/&([subdir-objects])/' configure.ac > configure.tmp
-mv -f configure.tmp configure.ac
-$ACLOCAL --force
-$AUTOMAKE
-
 rm -f compile
 $AUTOMAKE --add-missing 2>stderr || { cat stderr >&2; exit 1; }
 cat stderr >&2
diff --git a/t/subobj4.sh b/t/subobj4.sh
deleted file mode 100755
index dbbed30..0000000
--- a/t/subobj4.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2001-2013 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.
-
-. test-init.sh
-
-cat >> configure.ac << 'END'
-AC_PROG_CC
-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
-
-: > d2/z.c
-
-$ACLOCAL
-$AUTOMAKE -Wno-unsupported
-
-grep '\$(CC) .*\.\./d2/z\.c' d1/Makefile.in
-
-:
diff --git a/t/subpkg-yacc.sh b/t/subpkg-yacc.sh
index 9fc6761..1fe50a5 100755
--- a/t/subpkg-yacc.sh
+++ b/t/subpkg-yacc.sh
@@ -20,13 +20,17 @@
 required='cc yacc'
 . test-init.sh
 
-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([Makefile])
 AC_CONFIG_SUBDIRS([lib])
 AC_OUTPUT
 END
 
 cat >Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = -Wno-override
 SUBDIRS = lib
 bin_PROGRAMS = MU
 MU_LDADD = lib/liblib.a
@@ -106,14 +110,18 @@ EOF
 
 $ACLOCAL
 $AUTOCONF
-$AUTOMAKE -Wno-override
+$AUTOMAKE
 
+test ! -e ylwrap
+test ! -e ar-lib
 cd lib
 $ACLOCAL
 $AUTOCONF
 $AUTOHEADER
-$AUTOMAKE -Wno-override --add-missing
+$AUTOMAKE --add-missing
 cd ..
+test -f ylwrap
+test -f ar-lib
 
 ./configure
 
diff --git a/t/subpkg.sh b/t/subpkg.sh
index f9cdc74..f1e3f2b 100755
--- a/t/subpkg.sh
+++ b/t/subpkg.sh
@@ -23,7 +23,7 @@ mkdir m4
 
 cat >m4/foo.m4 <<'EOF'
 AC_DEFUN([FOO],[
-  AC_PROG_CC
+  AC_REQUIRE([AC_PROG_CC])
   AC_OUTPUT
 ])
 EOF
@@ -102,7 +102,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 ! -e subpack-1 # Make sure distcheck cleans up after itself.
diff --git a/t/xsource.sh b/t/xsource.sh
index a3fe6e5..70dfd4e 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-grepping2.sh b/t/yacc-grepping2.sh
index 3c5da22..eb4afed 100755
--- a/t/yacc-grepping2.sh
+++ b/t/yacc-grepping2.sh
@@ -24,57 +24,33 @@ AC_PROG_CC
 AC_PROG_YACC
 END
 
-cat > Makefile.am << 'END'
-bin_PROGRAMS = maude
-maude_SOURCES = sub/maude.y
-END
-
-mkdir sub
-
-: > sub/maude.y
-
 $ACLOCAL
-# FIXME: stop disabling the warnings in the 'unsupported' category
-# FIXME: once the 'subdir-objects' option has been mandatory.
-$AUTOMAKE -a -Wno-unsupported
-
-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
 
 $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
 
-# FIXME: stop disabling the warnings in the 'unsupported' category
-# FIXME: once the 'subdir-objects' option has been mandatory.
-$AUTOMAKE -a -Wno-unsupported
-
+$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
 
diff --git a/t/yacc-line.sh b/t/yacc-line.sh
index b034af3..d0c6300 100755
--- a/t/yacc-line.sh
+++ b/t/yacc-line.sh
@@ -15,43 +15,26 @@
 # 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.
-# See also sister test 'lex-line.sh'.
+# files use correct "#line" directives.
+# See also sister test 'lex-line.test'.
 
 required='cc yacc'
 . test-init.sh
 
 cat >> configure.ac << 'END'
-AC_CONFIG_FILES([sub/Makefile])
 AC_PROG_CC
 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 =
+noinst_PROGRAMS = foo bar baz
+baz_YFLAGS = -d
 foo_SOURCES = zardoz.y
 bar_SOURCES = dir/quux.y
-## Avoid spurious failures with Solaris make.
address@hidden@: zardoz.c
address@hidden@: bar-quux.c
-END
-
-cat > sub/Makefile.am << 'END'
-AUTOMAKE_OPTIONS = subdir-objects
-noinst_PROGRAMS = foo bar
-foo_YFLAGS = -d
-foo_SOURCES = zardoz.y
-bar_SOURCES = dir/quux.y
-## Avoid spurious failures with Solaris make.
address@hidden@: foo-zardoz.c
-dir/address@hidden@: dir/quux.c
+baz_SOURCES = zardoz.y
 END
 
 cat > zardoz.y << 'END'
@@ -69,10 +52,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
@@ -94,7 +75,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.
@@ -109,14 +90,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
-- 
1.8.3.rc0.19.g7e6a0cc




reply via email to

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