Commit 269a7343 by Kaveh R. Ghazi Committed by Kaveh Ghazi

Makefile.in (gnucompare*): Merge into ...

	* Makefile.in (gnucompare*): Merge into ...
	(slowcompare*): ... here.
	(fastcompare*): New targets.
	* aclocal.m4 (gcc_AC_PROG_CMP_IGNORE_INITIAL): Add checks for
	other "fast" cmp programs.
	* configure: Regenerate.

From-SVN: r71703
parent d84a4ef1
2003-09-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (gnucompare*): Merge into ...
(slowcompare*): ... here.
(fastcompare*): New targets.
* aclocal.m4 (gcc_AC_PROG_CMP_IGNORE_INITIAL): Add checks for
other "fast" cmp programs.
* configure: Regenerate.
2003-09-23 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> 2003-09-23 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* targhooks.c: Include output.h. * targhooks.c: Include output.h.
......
...@@ -3529,62 +3529,62 @@ restrap: ...@@ -3529,62 +3529,62 @@ restrap:
$(MAKE) unstrap $(MAKE) unstrap
$(MAKE) $(REMAKEFLAGS) bootstrap $(MAKE) $(REMAKEFLAGS) bootstrap
# Compare the object files in the current directory with those in the # These targets compare the object files in the current directory with
# stage2 directory. # those in a stage directory. We need to skip the first N bytes of
# ./ avoids bug in some versions of tail. # each object file. The "slow" mechanism assumes nothing special
slowcompare slowcompare3 slowcompare4 slowcompare-lean slowcompare3-lean slowcompare4-lean: force # about cmp and uses the tail command to skip. ./ avoids a bug in
# some versions of tail. The "gnu" targets use gnu cmp (diffutils
# v2.4 or later), to avoid running tail and the overhead of twice
# copying each object file. Likewise, the "fast" targets use the skip
# parameter of cmp available on some systems to accomplish the same
# thing. An exit status of 1 is precisely the result we're looking
# for (other values mean other problems).
slowcompare slowcompare3 slowcompare4 slowcompare-lean slowcompare3-lean slowcompare4-lean \
fastcompare fastcompare3 fastcompare4 fastcompare-lean fastcompare3-lean fastcompare4-lean \
gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4-lean: force
-rm -f .bad_compare -rm -f .bad_compare
case "$@" in slowcompare | slowcompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^slowcompare\([0-9][0-9]*\).*,\1,'` ;; esac; \ case "$@" in *compare | *compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^[a-z]*compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
for file in *$(objext); do \ for file in *$(objext); do \
tail +16c ./$$file > tmp-foo1; \ case "$@" in \
tail +16c stage$$stage/$$file > tmp-foo2 \ slowcompare* ) \
&& (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
done
case "$@" in slowcompare | slowcompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^slowcompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
for dir in tmp-foo $(SUBDIRS); do \
if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
for file in $$dir/*$(objext); do \
tail +16c ./$$file > tmp-foo1; \ tail +16c ./$$file > tmp-foo1; \
tail +16c stage$$stage/$$file > tmp-foo2 \ tail +16c stage$$stage/$$file > tmp-foo2 \
&& (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \ && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
done; \ ;; \
else true; fi; \ fastcompare* ) \
done cmp $$file stage$$stage/$$file 16 16 > /dev/null 2>&1; \
-rm -f tmp-foo* test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
case "$@" in slowcompare | slowcompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^slowcompare\([0-9][0-9]*\).*,\1,'` ;; esac; \ ;; \
if [ -f .bad_compare ]; then \ gnucompare* ) \
echo "Bootstrap comparison failure!"; \ cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \
cat .bad_compare; \ test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
exit 1; \ ;; \
else \ esac ; \
case "$@" in \
*-lean ) rm -rf stage$$stage ;; \
*) ;; \
esac; true; \
fi
# Compare the object files in the current directory with those in the
# stage2 directory. Use gnu cmp (diffutils v2.4 or later) to avoid
# running tail and the overhead of twice copying each object file.
# An exit status of 1 is precisely the result we're looking for (other
# values mean other problems).
gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4-lean: force
-rm -f .bad_compare
case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
for file in *$(objext); do \
cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \
test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
done done
case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \ case "$@" in *compare | *compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^[a-z]*compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
for dir in tmp-foo $(SUBDIRS); do \ for dir in tmp-foo $(SUBDIRS); do \
if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \ if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
for file in $$dir/*$(objext); do \ for file in $$dir/*$(objext); do \
cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \ case "$@" in \
test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \ slowcompare* ) \
tail +16c ./$$file > tmp-foo1; \
tail +16c stage$$stage/$$file > tmp-foo2 \
&& (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
;; \
fastcompare* ) \
cmp $$file stage$$stage/$$file 16 16 > /dev/null 2>&1; \
test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
;; \
gnucompare* ) \
cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \
test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
;; \
esac ; \
done; \ done; \
else true; fi; \ else true; fi; \
done done
case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \ -rm -f tmp-foo*
case "$@" in *compare | *compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^[a-z]*compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
if [ -f .bad_compare ]; then \ if [ -f .bad_compare ]; then \
echo "Bootstrap comparison failure!"; \ echo "Bootstrap comparison failure!"; \
cat .bad_compare; \ cat .bad_compare; \
...@@ -3592,6 +3592,7 @@ gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4- ...@@ -3592,6 +3592,7 @@ gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4-
else \ else \
case "$@" in \ case "$@" in \
*-lean ) rm -rf stage$$stage ;; \ *-lean ) rm -rf stage$$stage ;; \
*) ;; \
esac; true; \ esac; true; \
fi fi
......
...@@ -104,19 +104,29 @@ fi ...@@ -104,19 +104,29 @@ fi
dnl 'make compare' can be significantly faster, if cmp itself can dnl 'make compare' can be significantly faster, if cmp itself can
dnl skip bytes instead of using tail. The test being performed is dnl skip bytes instead of using tail. The test being performed is
dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2" dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
dnl but we need to sink errors and handle broken shells. dnl but we need to sink errors and handle broken shells. We also test
dnl for the parameter format "cmp file1 file2 skip1 skip2" which is
dnl accepted by cmp on some systems.
AC_DEFUN(gcc_AC_PROG_CMP_IGNORE_INITIAL, AC_DEFUN(gcc_AC_PROG_CMP_IGNORE_INITIAL,
[AC_CACHE_CHECK([for cmp's capabilities], gcc_cv_prog_cmp_skip, [AC_CACHE_CHECK([for cmp's capabilities], gcc_cv_prog_cmp_skip,
[ echo abfoo >t1 [ echo abfoo >t1
echo cdfoo >t2 echo cdfoo >t2
gcc_cv_prog_cmp_skip=slowcompare
if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
gcc_cv_prog_cmp_skip=slowcompare :
else else
gcc_cv_prog_cmp_skip=gnucompare gcc_cv_prog_cmp_skip=gnucompare
fi fi
else fi
gcc_cv_prog_cmp_skip=slowcompare if test $gcc_cv_prog_cmp_skip = slowcompare ; then
if cmp t1 t2 2 2 > /dev/null 2>&1; then
if cmp t1 t2 1 1 > /dev/null 2>&1; then
:
else
gcc_cv_prog_cmp_skip=fastcompare
fi
fi
fi fi
rm t1 t2 rm t1 t2
]) ])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment