1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#! /bin/sh
# Shell script to build Makefile in a build directory. It must be called
# from inside the directory. It does its own checking of when to rebuild; it
# just got too horrendous to get it right in "make", because of the optionally
# existing configuration files.
# First off, get the OS type, and check that there is a make file for it.
ostype=`../scripts/os-type -generic` || exit 1
if [ ! -r ../OS/Makefile-$ostype ] ; then
echo ""
echo "*** Sorry - operating system $ostype is not supported"
echo "*** See OS/Makefile-* for supported systems" 1>&2
echo ""
exit 1
fi
# We also need the architecture type, in order to test for any architecture-
# specific configuration files.
archtype=`../scripts/arch-type` || exit 1
# Now test for either the non-existence of Makefile, or for any of its
# components being newer. Note that the "newer" script gives the right
# answer (for our purposes) when the first file is non-existent.
editme=../Local/Makefile
rebuild=yes
if [ -f Makefile ] ; then
rebuild=no
if ../scripts/newer $editme Makefile || \
../scripts/newer $editme-$ostype Makefile || \
../scripts/newer $editme-$archtype Makefile || \
../scripts/newer $editme-$ostype-$archtype Makefile || \
../scripts/newer ../scripts/Configure-Makefile Makefile || \
../scripts/newer ../OS/Makefile-Base Makefile || \
../scripts/newer ../OS/Makefile-Default Makefile
then
rebuild=yes
fi
fi
# If Makefile is up-to-date, no need to rebuild it.
if [ $rebuild = no ] ; then
echo "\`Makefile' is up to date."
echo " "
exit
fi
# Makefile needs to be rebuilt in the current directory by joining
# the generic default makefile, the OS base makefile, and then local
# generic, OS-specific, architecture-specific, and OS+architecture-specific
# makefiles, if they exist. These files all contain macro definitions, with
# later definitions overriding earlier ones. Make a temporary file first, in
# case things go wrong. A second temporary is needed for sorting out the
# default Perl stuff. Use short macro names to save typing.
mf=Makefile
mft=$mf-t
mftt=$mf-tt
# Ensure the temporary does not exist and start the new one by setting
# the OSTYPE and ARCHTYPE variables.
rm -f $mft $mftt
(echo "OSTYPE=$ostype"; echo "ARCHTYPE=$archtype"; echo "") > $mft || exit 1
# Now concatenate the files to the temporary file. Copy the files using sed to
# remove comments, blank lines, and trailing white space.
# BEWARE: a tab character is needed in the sed command below. It has had
# a nasty tendency to get lost in the past, causing a problem if a tab has
# actually been present in one of the files. Use a variable to hold a space
# and a tab to keep the tab in one place.
st=' '
for f in OS/Makefile-Default \
OS/Makefile-$ostype \
Local/Makefile \
Local/Makefile-$ostype \
Local/Makefile-$archtype \
Local/Makefile-$ostype-$archtype
do if test -r ../$f
then echo "# From $f"
sed "/^#/d;/^[$st]*\$/d;s/[$st]*\$//" ../$f || exit 1
echo "# End of $f"
echo ""
fi
done >> $mft || exit 1
# See if there is a definition of EXIM_PERL in what we have built so far.
# If so, put some Perl-specific default settings at the head of the file.
# Search what we have so far for the final setting of PERL_COMMAND. Then
# if Perl exists, run it to find the default values for PERL_CC, PERL_CCOPTS,
# and PERL_LIBS to be used if EXIM_PERL is set. These need to be put at the
# top of the Makefile, so we rename what we have so far and then copy
# afterwards.
EXIM_PERL=`grep EXIM_PERL $mft`
if [ "${EXIM_PERL}" != "" ] ; then
PERL_COMMAND=`grep '^PERL_COMMAND' $mft | tail -1 | sed "s/^[^=]*=[$st]*//"`
if [ -x "${PERL_COMMAND}" ] ; then
mv $mft $mftt
echo "PERL_CC=`${PERL_COMMAND} -MConfig -e 'print $Config{cc}'`" >>$mft
echo "PERL_CCOPTS=`${PERL_COMMAND} -MExtUtils::Embed -e ccopts`" >>$mft
echo "PERL_LIBS=`${PERL_COMMAND} -MExtUtils::Embed -e ldopts`" >>$mft
echo "" >>$mft
cat $mftt >> $mft
rm -f $mftt
fi
fi
# Finally, join on the generic base make file, which contains the actual
# rules and stuff.
cat ../OS/Makefile-Base >> $mft || exit 1
# If the new makefile is the same as the existing one, say so, and just
# update the timestamp. Otherwise remove the old and install the new.
if [ -s $mf ] && cmp -s $mft $mf
then echo ">>> rebuilt $mf unchanged"
echo " "
touch $mf || exit
rm -f $mft
elif rm -f $mf
mv $mft $mf
then echo ">>> New $mf installed"
echo '>>> Use "make makefile" if you need to force rebuilding of the makefile'
echo " "
else echo " "
echo "*** Failed to install $mf - see $mft"
echo " "
exit 1;
fi
# End of Configure-Makefile
|