robert@vax1.computing-maths.cardiff.ac.uk (Robert Evans) (07/29/88)
The Makefiles in ./dom and ./chn in the UK Sendmail-1.5 distribution
fall over in certain circumstances under make on Ultrix.
Rules of the form:
-@if [ some test ]; then statement; fi
emit error code 1 (which is ignored by make) if sometest is false.
Without the "-", the error causes make to fail.
The second test in the Makefiles (for host.{chn,dom} being non-empty)
didn't have the "-" and so stopped the make. A solution is to put a "-"
at the front of the command:
-@if [ ! -s $@ ] ; \
Another improvement is to put a dummy "else" part into these if commands.
This stops the "Error code 1 (ignored)" message if `some test' is false.
I don't know if this applies to version of UN*X other than Ultrix. I've
met this problem before when building software written for UNIX System V
on Ultrix. Two replacement Makefiles follow:
--------- ./dom/Makefile ---- cut here
#########################################################################
# UK-1.5(glasgow) Sendmail Configuration Package #
# Author: Jem Taylor <taylor@uk.ac.glasgow.cs> #
# File: ./dom/Makefile #
# Role: generate dom/$site.dom from dom/$site.tab/*.dom files #
#########################################################################
.SUFFIXES: .dom .tab
.PRECIOUS: *.dom
.tab.dom: $<.tab/*.dom Makefile
-@if [ -s $@ ]; then rm -f $@.BCK && mv $@ $@.BCK; else :; fi
./MAKE $* $</*.dom
-@if [ ! -s $@ ] ; \
then echo "$@ null - Abort" ;\
if [ -s $@.BCK ] ; then mv $@.BCK $@ ; fi;\
exit 99 ; else :; fi
-@if cmp $@.BCK $@ > /dev/null 2>&1 ;\
then rm -f $@.BCK ; \
echo "$@ not changed since last made." ; \
else echo "Saving old ../dom/$@ as ../dom/$@.OLD ..." ; \
rm -f $@.OLD && mv $@.BCK $@.OLD ; fi
--------- ---- cut here
--------- ./chn/Makefile ---- cut here
#!/bin/make -f
#########################################################################
# UK-1.5(glasgow) Sendmail Configuration Package #
# Author: Jem Taylor <taylor@uk.ac.glasgow.cs> #
# File: ./chn/Makefile #
# Role: generate chn/$host.chn from chn/$host.tab/*.chn files #
#########################################################################
.SUFFIXES: .chn .tab
.PRECIOUS: *.chn
.tab.chn: $</*.chn Makefile
-@if [ -s $@ ]; then rm -f $@.BCK && mv $@ $@.BCK; else :; fi
./MAKE $* $</*.chn
-@if [ ! -s $@ ] ; \
then echo "$@ null - Abort" ;\
if [ -s $@.BCK ] ; then mv $@.BCK $@ ; fi;\
exit 99 ; else :; fi
-@if cmp $@.BCK $@ > /dev/null 2>&1 ;\
then rm -f $@.BCK ; \
echo "$@ not changed since last made." ; \
else echo "Saving old ../chn/$@ as ../chn/$@.OLD ..." ; \
rm -f $@.OLD && mv $@.BCK $@.OLD ; fi
--------- ---- cut here
--
--
Robert Evans, Dept of Computing Maths, University College Cardiff,
PO Box 916, Cardiff, Wales, UK, CF2 4YN. Tel: +44 (0)222 874000 x 5518
E-mail: R.Evans@computing-maths.cardiff.ac.uk UUCP: R.Evans@cf-cm.UUCPtaylor@cs.glasgow.ac.uk (Jem Taylor) (07/30/88)
The Makefiles in ./dom and ./chn in the UK Sendmail-1.5 distribution
fall over in certain circumstances under make on Ultrix.
Rules of the form:
-@if [ some test ]; then statement; fi
emit error code 1 (which is ignored by make) if sometest is false.
Without the "-", the error causes make to fail.
The second test in the Makefiles (for host.{chn,dom} being non-empty)
didn't have the "-" and so stopped the make. A solution is to put a "-"
at the front of the command:
-@if [ ! -s $@ ] ; \
But the intention *is* to stop the make if the generated file is null ...
are you saying the make stops when the file is non-null ? That is, when
the test fails ? This is really nasty !
To abort when the file is null, we need to invert the test.
Another improvement is to put a dummy "else" part into these if commands.
This stops the "Error code 1 (ignored)" message if `some test' is false.
Good idea.
I suggest the following fragment.
@if [ -s $@ ] ; \
then :; \
else echo "$@ null - Abort" ;\
if [ -s $@.BCK ] ; then mv $@.BCK $@ ; fi;\
exit 99 ; firobert@vax1.computing-maths.cardiff.ac.uk (Robert Evans) (07/30/88)
| -@if [ ! -s $@ ] ; \ | But the intention *is* to stop the make if the generated file is null ... | are you saying the make stops when the file is non-null ? That is, when | the test fails ? This is really nasty ! | To abort when the file is null, we need to invert the test. Yes. | I suggest the following fragment. | | @if [ -s $@ ] ; \ | then :; \ | else echo "$@ null - Abort" ;\ | if [ -s $@.BCK ] ; then mv $@.BCK $@ ; fi;\ | exit 99 ; fi That would have the desired effect but the make aborts as a side effect of the test "[ -s $@ ]" being false rather than because of the exit! (Hard to believe but I just tried it to see). Robert