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 <stefano.lattar...@gmail.com> --- 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 -@option{subdir-objects} is in effect in the current directory then the -@file{.o} file will be put into the subdirectory named after the -source file. For instance, with @option{subdir-objects} enabled, -@file{sub/dir/file.c} will be compiled to @file{sub/dir/file.o}. Some -people prefer this mode of operation. You can specify -@option{subdir-objects} 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 +@file{sub/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 -@file{src/Makefile.am}. However if both @option{subdir-objects} and -@code{AC_CONFIG_LIBOBJ_DIR} 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 +@code{AC_CONFIG_LIBOBJ_DIR} 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 -@item @option{subdir-objects} -@cindex Options, @option{subdir-objects} -@opindex 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 -@file{subdir/file.cxx}, then the output file would be -@file{subdir/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 $@-t $@ + test -d $(@D) || $(MKDIR_P) $(@D) + echo 'public class convert {' >> $@-t + echo ' public static void main (String[] args) {' >> $@-t + echo ' System.out.println("Hello, World!");' >> $@-t + echo ' }' >> $@-t + echo '}' >> $@-t + chmod a-w $@-t && mv -f $@-t $@ +.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 @@ zardoz.@OBJEXT@: zardoz.c bar-quux.@OBJEXT@: 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. -foo-zardoz.@OBJEXT@: foo-zardoz.c -dir/quux.@OBJEXT@: 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], [automake-...@gnu.org]) +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. -zardoz.@OBJEXT@: zardoz.c -bar-quux.@OBJEXT@: 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. -foo-zardoz.@OBJEXT@: foo-zardoz.c -dir/quux.@OBJEXT@: 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