From 3dd1fa303d373970aeb833b4bd0266891f246d19 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Thu, 7 Jun 2012 02:26:17 +0200 Subject: [PATCH] [ng] depcomp: unify rules for '.o' and '.obj' objects This change just reduces code duplication and size of the generated Makefiles a little. No actual semantic change is intended. * automake.in (handle_languages): Drop the '%OBJOBJ%' transform. * lib/am/depend2.am (am__o_src): New, return the path of the source file corresponding to the target compiled object unchanged when the object has the '.o' suffix, and returns a proper invocation of '$(CYGPATH_W)' on that same source file when the object has the '.obj' suffix. Using the new $(am__o_src) function, unify rules for the creation of '.o' and '.obj' objects into a rule for the creation of '.$(OBJEXT)' objects. * t/ext.sh: Adjust grepping checks. * t/ext2.sh: Likewise. * t/libtool3.sh: Likewise. * t/objc-basic.sh: Likewise. * t/objcxx-basic.sh: Likewise. * t/silent-many-gcc.sh: Likewise. * t/silent-many-generic.sh: Likewise. * t/specflg6.sh: Likewise. * t/subdir3.sh: Likewise. * t/subobj4.sh: Likewise. * t/suffix.sh: Likewise. * t/suffix2.sh: Likewise. * t/empty2.sh: Enhance a little. * t/empty3.sh: Likewise. * t/specflg.sh: Likewise, and adjust comments. * t/specflg2.sh: Likewise. * t/pr87.sh: Remove an obsolete check (obsolete since our switch from suffix rules to pattern rules for C compilation recipes). Signed-off-by: Stefano Lattarini --- automake.in | 2 -- lib/am/depend2.am | 31 ++++++------------------------- t/empty2.sh | 5 +++-- t/empty3.sh | 4 +++- t/ext.sh | 4 ++-- t/ext2.sh | 2 +- t/libtool3.sh | 8 ++++---- t/objc-basic.sh | 2 +- t/objcxx-basic.sh | 2 +- t/pr87.sh | 13 ------------- t/silent-many-gcc.sh | 2 +- t/silent-many-generic.sh | 2 +- t/specflg.sh | 10 ++++++---- t/specflg2.sh | 15 +++++++++------ t/specflg6.sh | 4 ++-- t/subdir3.sh | 2 +- t/subobj4.sh | 2 +- t/suffix.sh | 14 +++++--------- t/suffix2.sh | 15 ++++++--------- 19 files changed, 53 insertions(+), 86 deletions(-) diff --git a/automake.in b/automake.in index 176e88294..e7034e00f 100644 --- a/automake.in +++ b/automake.in @@ -1395,7 +1395,6 @@ sub handle_languages SOURCE => '$<', SOURCEFLAG => $sourceflags{$ext} || '', OBJ => '$@', - OBJOBJ => '$@', LTOBJ => '$@', COMPILE => '$(' . $lang->compiler . ')', @@ -1461,7 +1460,6 @@ sub handle_languages # we are actually building a new source # file -- e.g. via yacc. OBJ => "$obj$myext", - OBJOBJ => "$obj.obj", LTOBJ => "$obj.lo", VERBOSE => $verbose, diff --git a/lib/am/depend2.am b/lib/am/depend2.am index b57f19aae..81d2c4c26 100644 --- a/lib/am/depend2.am +++ b/lib/am/depend2.am @@ -39,36 +39,17 @@ if %?FIRST% am__depbase = $(am__depdir)/$(basename $(notdir $@)) ## Avoid useless forks when possible. am__ensure_depdir = $(call am__ensure_dir_exists,$(am__depdir)) +am__o_src = $(if $(filter .obj,$(suffix $@)),`$(CYGPATH_W) $<`,$<) endif %?FIRST% if %?NONLIBTOOL% -?GENERIC?%.o: %%EXT% -?!GENERIC?%OBJ%: %SOURCE% +?GENERIC?%.$(OBJEXT): %%EXT% +?!GENERIC?%BASE%.$(OBJEXT): %SOURCE% if %FASTDEP% %SILENT%$(am__ensure_depdir) ## In fast-dep mode, we can always use -o. %VERBOSE%%COMPILE% -MT $@ -MD -MP -MF $(am__depbase).Tpo \ - %-c% -o $@ %SOURCEFLAG%$< - %SILENT%$(am__mv) $(am__depbase).Tpo $(am__depbase).Po -else !%FASTDEP% -if !%AMDEP% - %SILENT%$(am__ensure_target_dir_exists) -else %AMDEP% - %SILENT%$(am__ensure_depdir) - %VERBOSE%source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ - DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@ -endif %AMDEP% -?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% $@ %SOURCEFLAG%$< -?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%$< -endif !%FASTDEP% - -?GENERIC?%.obj: %%EXT% -?!GENERIC?%OBJOBJ%: %SOURCE% -if %FASTDEP% - %SILENT%$(am__ensure_depdir) -## In fast-dep mode, we can always use -o. - %VERBOSE%%COMPILE% -MT $@ -MD -MP -MF $(am__depbase).Tpo \ - %-c% -o $@ %SOURCEFLAG%`$(CYGPATH_W) $<` + %-c% -o $@ %SOURCEFLAG%$(am__o_src) %SILENT%$(am__mv) $(am__depbase).Tpo $(am__depbase).Po else !%FASTDEP% if !%AMDEP% @@ -78,8 +59,8 @@ else %AMDEP% %VERBOSE%source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@ endif %AMDEP% -?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% $@ %SOURCEFLAG%`$(CYGPATH_W) $<` -?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%`$(CYGPATH_W) $<` +?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% $@ %SOURCEFLAG%$(am__o_src) +?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%$(am__o_src) endif !%FASTDEP% endif %?NONLIBTOOL% diff --git a/t/empty2.sh b/t/empty2.sh index 7d1242301..224c26dc1 100755 --- a/t/empty2.sh +++ b/t/empty2.sh @@ -31,5 +31,6 @@ END $ACLOCAL $AUTOMAKE -grep 'pavel\.[co]' Makefile.in && Exit 1 -Exit 0 +grep 'pavel\.' Makefile.in && Exit 1 + +: diff --git a/t/empty3.sh b/t/empty3.sh index 6aabfbaa9..4721db562 100755 --- a/t/empty3.sh +++ b/t/empty3.sh @@ -29,4 +29,6 @@ END $ACLOCAL $AUTOMAKE -grep 'pavel\.[co]' Makefile.in +$FGREP ' pavel.c' Makefile.in + +: diff --git a/t/ext.sh b/t/ext.sh index 02ceab598..72ff211e8 100755 --- a/t/ext.sh +++ b/t/ext.sh @@ -34,11 +34,11 @@ END $ACLOCAL $AUTOMAKE -$FGREP '%.o' Makefile.in # For debugging. +$FGREP '%.$(OBJEXT)' Makefile.in # For debugging. for ext in f for f90 f95 F F90 F95 r m mm upc; do grep "%.*: %$ext" Makefile.in && Exit 1 - grep "^%\.o: %\.$ext$" Makefile.in + grep "^%\.\$(OBJEXT): %\.$ext$" Makefile.in done : diff --git a/t/ext2.sh b/t/ext2.sh index ac5b7772e..a1145807c 100755 --- a/t/ext2.sh +++ b/t/ext2.sh @@ -35,7 +35,7 @@ EOF $ACLOCAL $AUTOMAKE -grep '\.o:' Makefile.in > rules +grep '\.$(OBJEXT):' Makefile.in > rules cat rules # Here is an example of bogus output. The rules are output several diff --git a/t/libtool3.sh b/t/libtool3.sh index dbcd519d9..2f18b150d 100755 --- a/t/libtool3.sh +++ b/t/libtool3.sh @@ -75,11 +75,11 @@ $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 +# We need explicit rules to build 1.$(OBJEXT) and a.lo. Make sure +# Automake did not output additional rules for 1.lo and a.lo. +$FGREP '1.$(OBJEXT):' Makefile.in $FGREP '1.lo:' Makefile.in && Exit 1 -$FGREP 'a.o:' Makefile.in && Exit 1 +$FGREP 'a.$(OBJEXT):' Makefile.in && Exit 1 $FGREP 'a.lo:' Makefile.in ./configure diff --git a/t/objc-basic.sh b/t/objc-basic.sh index f3234d7cc..464887bc5 100755 --- a/t/objc-basic.sh +++ b/t/objc-basic.sh @@ -35,6 +35,6 @@ $ACLOCAL $AUTOMAKE $FGREP '$(OBJC)' Makefile.in $FGREP '$(OBJCLD)' Makefile.in -grep '^%\.o: %\.m$' Makefile.in +grep '^%\.$(OBJEXT): %\.m$' Makefile.in : diff --git a/t/objcxx-basic.sh b/t/objcxx-basic.sh index 29aa9829b..1c807dccd 100755 --- a/t/objcxx-basic.sh +++ b/t/objcxx-basic.sh @@ -37,6 +37,6 @@ $ACLOCAL $AUTOMAKE $FGREP '$(OBJCXX)' Makefile.in $FGREP '$(OBJCXXLD)' Makefile.in -grep '^%\.o: %\.mm$' Makefile.in +grep '^%\.$(OBJEXT): %\.mm$' Makefile.in : diff --git a/t/pr87.sh b/t/pr87.sh index 121328d63..c6cb90abc 100755 --- a/t/pr87.sh +++ b/t/pr87.sh @@ -55,19 +55,6 @@ $ACLOCAL $AUTOCONF $AUTOMAKE -a -# Regression test for bug where '.c.o:' is followed by blank line. -(while read line; do - if test "$line" = ".c.o:"; then - read next - if test -z "$next"; then - Exit 1 - else - : # For shells with broken 'set -e'. - fi - break - fi - done) < foo/Makefile.in || Exit 1 - cd build ../configure $MAKE distcheck diff --git a/t/silent-many-gcc.sh b/t/silent-many-gcc.sh index 8ad07205a..46d4e4571 100755 --- a/t/silent-many-gcc.sh +++ b/t/silent-many-gcc.sh @@ -196,7 +196,7 @@ $FGREP am_cv_CC_dependencies_compiler_type configure $FGREP am_cv_CXX_dependencies_compiler_type configure # Ensure per-target rules are used, to ensure their coverage below. # (We do not do an exhaustive check, that wouldn't be practical). -$FGREP 'bar-bar.o' Makefile.in +$FGREP 'bar-bar.$(OBJEXT)' Makefile.in $FGREP 'fo2-foo5.c' Makefile.in $FGREP 'fo2-foo6.c' Makefile.in diff --git a/t/silent-many-generic.sh b/t/silent-many-generic.sh index cd376721a..4e6c6f928 100755 --- a/t/silent-many-generic.sh +++ b/t/silent-many-generic.sh @@ -223,7 +223,7 @@ $AUTOCONF # Ensure per-target rules are used, to ensure their coverage below. # (We do not do an exhaustive check, that wouldn't be practical). -$FGREP 'bar-bar.o' Makefile.in +$FGREP 'bar-bar.$(OBJEXT)' Makefile.in $FGREP 'fo2-foo5.c' Makefile.in $FGREP 'fo2-foo6.c' Makefile.in diff --git a/t/specflg.sh b/t/specflg.sh index 9d5c73ca0..6cb6b363c 100755 --- a/t/specflg.sh +++ b/t/specflg.sh @@ -39,13 +39,15 @@ grep 'required.*compile' stderr $AUTOMAKE -# Look for $(COMPILE) -c in .c.o rule. +$FGREP 'foo-foo.$(OBJEXT)' Makefile.in + +# Watch against "$(COMPILE) -c" in "%.o: %.c" rule. grep 'COMPILE. [^-]' Makefile.in && Exit 1 -# Look for foo-foo.o. -grep '[^-]foo\.o' Makefile.in && Exit 1 +# Watch against "foo.$(OBJEXT)", "foo.o" and "foo.obj". +grep '[^-]foo\.[o$]' Makefile.in && Exit 1 # Regression test for missing space. $FGREP ')-c' Makefile.in && Exit 1 -Exit 0 +: diff --git a/t/specflg2.sh b/t/specflg2.sh index 9f9569c8d..aff03b8c8 100755 --- a/t/specflg2.sh +++ b/t/specflg2.sh @@ -45,15 +45,18 @@ grep 'required.*compile' stderr $AUTOMAKE -# Look for $(COMPILE) -c in .c.o rule. +$FGREP 'libfoo_a-foo.$(OBJEXT)' Makefile.in +$FGREP 'libfoo_a-bar.$(OBJEXT)' Makefile.in + +# Watch against "$(COMPILE) -c" in the "%.o: %c" rule. grep 'COMPILE. [^-]' Makefile.in && Exit 1 -# Look for libfoo_a-foo.o. +# Watch against "foo.$(OBJEXT)", "foo.o" and "foo.obj". grep foo Makefile.in -grep '[^-]foo\.o' Makefile.in && Exit 1 +grep '[^-]foo\.[o$]' Makefile.in && Exit 1 -# Look for libfoo_a-bar.o. +# Watch against "bar.$(OBJEXT)", "bar.o" and "bar.obj". grep bar Makefile.in -grep '[^-]bar\.o' Makefile.in && Exit 1 +grep '[^-]bar\.[o$]' Makefile.in && Exit 1 -Exit 0 +: diff --git a/t/specflg6.sh b/t/specflg6.sh index f420cdfd2..cc585e9dd 100755 --- a/t/specflg6.sh +++ b/t/specflg6.sh @@ -41,7 +41,7 @@ END $ACLOCAL $AUTOMAKE -uncondval=`$FGREP 'foo-foo.o: foo.c' Makefile.in` +uncondval=`$FGREP 'foo-foo.$(OBJEXT): foo.c' Makefile.in` cat >> Makefile.am << 'END' foo_SOURCES += $(BAR_SRCS) @@ -49,7 +49,7 @@ END $AUTOMAKE -condval=`$FGREP 'foo-foo.o: foo.c' Makefile.in` +condval=`$FGREP 'foo-foo.$(OBJEXT): foo.c' Makefile.in` test "x$uncondval" = "x$condval" diff --git a/t/subdir3.sh b/t/subdir3.sh index d9b160fa8..984fe43b6 100755 --- a/t/subdir3.sh +++ b/t/subdir3.sh @@ -31,6 +31,6 @@ END $ACLOCAL $AUTOMAKE -grep '^z\.o: x/z\.c$' Makefile.in +grep '^z\.\$(OBJEXT): x/z\.c$' Makefile.in : diff --git a/t/subobj4.sh b/t/subobj4.sh index 6aeb19df6..fda35ebeb 100755 --- a/t/subobj4.sh +++ b/t/subobj4.sh @@ -47,6 +47,6 @@ END $ACLOCAL $AUTOMAKE -grep '^z\.o:.* \.\./d2/z\.c *$' d1/Makefile.in +grep '^z\.$(OBJEXT):.* \.\./d2/z\.c *$' d1/Makefile.in : diff --git a/t/suffix.sh b/t/suffix.sh index 0d72782c7..c60f734f4 100755 --- a/t/suffix.sh +++ b/t/suffix.sh @@ -44,15 +44,11 @@ for use_arlib in false :; do $ACLOCAL - $AUTOMAKE $am_warns -i - grep '%\.[co]' Makefile.in # For debugging. - test `grep -c '^%\.o: %\.c$' Makefile.in` -eq 1 - test `grep -c '^%\.obj: %\.c$' Makefile.in` -eq 1 - - $AUTOMAKE $am_warns - grep '%\.[co]' Makefile.in # For debugging. - test `grep -c '^%\.o: %\.c$' Makefile.in` -eq 1 - test `grep -c '^%\.obj: %\.c$' Makefile.in` -eq 1 + for o in '' '-i'; do + $AUTOMAKE $am_warns $o + grep '%\.[co$]' Makefile.in # For debugging. + test $(grep -c '^%\.\$(OBJEXT): %\.c$' Makefile.in) -eq 1 + done done diff --git a/t/suffix2.sh b/t/suffix2.sh index fb17ee393..bca816988 100755 --- a/t/suffix2.sh +++ b/t/suffix2.sh @@ -40,14 +40,11 @@ END $ACLOCAL -$AUTOMAKE -a -grep '%\.[co]' Makefile.in # For debugging. -test `grep -c '^%\.o: %\.c$' Makefile.in` -eq 1 -test `grep -c '^%\.obj: %\.c$' Makefile.in` -eq 1 - -$AUTOMAKE -i -grep '%.[co]' Makefile.in # For debugging. -test `grep -c '^%\.o: %\.c$' Makefile.in` -eq 1 -test `grep -c '^%\.obj: %\.c$' Makefile.in` -eq 1 +for o in -a -i; do + $AUTOMAKE $o + grep '%\.[lco$]' Makefile.in # For debugging. + test `grep -c '^%\.$(OBJEXT): %\.c$' Makefile.in` -eq 1 + test `grep -c '^%\.lo: %\.c$' Makefile.in` -eq 1 +done : -- 2.47.2