[Top][All Lists]
[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