#!/bin/sh #----------------------------------------------------------------------------- # $Sendmail: update_chaos,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ # # Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. # # @configure_input@ # # Debian script to rationalize builds for Sendmail @sm_version@@sm_revision@(@sm_math@) # # Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated # file is customized to the version noted above. # #----------------------------------------------------------------------------- set -e; #------------------------------------------------------------------ # Exit, stage left, even... if not needed (private dir, or >= 8.10.0) #------------------------------------------------------------------ BUILD_TREE='@srcdir@/../../build-tree/sendmail-@sm_version@'; if [ ! -d ${BUILD_TREE} ]; then exit 0; fi; if [ -d ${BUILD_TREE}/devtools/bin ]; then exit 0; fi; echo "Rationalizing Sendmail-@sm_version@ setup..."; #------------------------------------------------------------------ # List of subdirectories to work on #------------------------------------------------------------------ SUBDIRS="editmap libmilter mail.local mailstats makemap praliases rmail sendmail smrsh vacation"; #------------------------------------------------------------------ # Match Sendmail's build directory conventions #------------------------------------------------------------------ os=`uname -s | sed -e 's/\//-/g' -e 's/ //g'`; rel=`uname -r | sed -e 's/(/-/g' -e 's/)//g'`; arch=`uname -m | sed -e 's/ //g'`; OBJ_DIR="obj.${os}.${rel}.${arch}"; #------------------------------------------------------------------ # Function to escape quotes (to survive subsequent sed) #------------------------------------------------------------------ esq () { result=$(echo "${1}" | sed -e 's?\"?\\\\\\\"?g'); }; #------------------------------------------------------------------ # Prior to 8.10.0, sendmail source was in the src directory # Prior to 8.10.0, devtools was called BuildTools # Create compatibility links (to look like 8.10.0+) #------------------------------------------------------------------ if [ ! -d ${BUILD_TREE}/sendmail ]; then echo "...Creating \${BUILD_TREE}/sendmail compatibility symlink"; ln -sf src ${BUILD_TREE}/sendmail; if [ ! -d ${BUILD_TREE}/devtools ]; then echo "...Creating \${BUILD_TREE}/devtools compatibility symlink"; ln -sf BuildTools ${BUILD_TREE}/devtools; fi; fi; #------------------------------------------------------------------ # Prior to 8.10.0, objects were in the source directories, not separate # Create compatibility links (to look like 8.10.0+) #------------------------------------------------------------------ echo "...Creating ${OBJ_DIR}/ directories"; mkdir -p ${BUILD_TREE}/${OBJ_DIR}; for subdir in $SUBDIRS; do if [ -d ${BUILD_TREE}/${subdir} ]; then ln -sf "../${subdir}/${OBJ_DIR}" \ ${BUILD_TREE}/${OBJ_DIR}/${subdir}; fi; done; #------------------------------------------------------------------ # If 8.9.0+, we're done, get the flock outa here... #------------------------------------------------------------------ if [ -e ${BUILD_TREE}/sendmail/Build ]; then echo '...Done.'; exit 0; fi; #------------------------------------------------------------------ # Prior to 8.9.0, READ_ME was seen in a few places # Create compatibility links #------------------------------------------------------------------ echo '...Creating READ_ME compatility symlinks'; for file in $(find ${BUILD_TREE} -name 'READ_ME'); do ln -sf READ_ME $(echo "${file}" | sed -e 's/READ_ME/README/'); done; #------------------------------------------------------------------ # Prior to 8.9.0, MAKE was used instead of Build # We'll install a small wrapper for the earlier releases # Prior to 8.9.0, Only src directory had an obj.* subdirectory # Create compatibility links (to look like 8.9.0+) #------------------------------------------------------------------ echo "...Creating /${OBJ_DIR}"; for subdir in $SUBDIRS; do if [ -d ${BUILD_TREE}/${subdir} ]; then if [ ! -d ${BUILD_TREE}/${subdir}/Makefiles ]; then mkdir -p ${BUILD_TREE}/${subdir}/${OBJ_DIR}; for file in `find ${BUILD_TREE}/${subdir} -type f`; do cp -a $file ${BUILD_TREE}/${subdir}/${OBJ_DIR}; done; fi; cp -a debian/build/Build ${BUILD_TREE}/${subdir}/; fi; done; # #------------------------------------------------------------------ # Kluge the Makefiles to comply with our file locations. #------------------------------------------------------------------ echo '...Kluging Makefiles'; for file in mailstats/Makefile.dist \ mail.local/Makefile.dist \ makemap/Makefile.dist \ praliases/Makefile.dist \ smrsh/Makefile.dist \ src/Makefiles/Makefile.Linux \ ; do cp -a ${BUILD_TREE}/${file} ${BUILD_TREE}/${file}.save; # # Set local variables to allow for quoting... esq "@sm_incdirs@"; sm_incdirs=$result; esq "@sm_mapdef@"; sm_mapdef=$result; esq "@sm_envdef@"; sm_envdef=$result; esq "@sm_libs@"; sm_libs=$result; # # global sed \ -e 's?-I/usr/sww/include??' \ -e 's?-I/usr/local/include??' \ -e 's?-L/usr/sww/lib??' \ -e 's?../src?../../src?g' \ -e "s?^INCDIRS=\(.*\)\$?INCDIRS=\1 $sm_incdirs?" \ -e "s?^DBMDEF=.*?DBMDEF=$sm_mapdef?" \ -e "s?^ENVDEF=\(.*\)\$?ENVDEF=\1 $sm_envdef?" \ -e "s?^LIBS=.*?LIBS=$sm_libs?" \ ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; # # compilation/link sed \ -e 's?^O=.*?O=@CFLAGS@?' \ -e 's?^LIBDIRS=.*?LIBDIRS=?' \ ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; # # paths, owners, and modes # Note: EBINDIR deserves a better home, suggestions? sed \ -e 's?^BINDIR=.*?BINDIR=${DESTDIR}@sbindir@?' \ -e 's?^BINMODE=.*?BINMODE=04755?' \ -e 's?^BINGRP=.*?BINGRP=mail?' \ -e 's?^BINOWN=.*?BINOWN=root?' \ -e 's?^HFDIR=.*?HFDIR=${DESTDIR}@sysconfdir@/mail?' \ -e 's?^STDIR=.*?STDIR=${DESTDIR}@localstatedir@/lib/sendmail?' \ ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; if [ "${file}" = 'mail.local/Makefile.dist' \ -o "${file}" = 'smrsh/Makefile.dist' \ ]; then sed \ -e 's?^BINDIR=.*?BINDIR=${DESTDIR}@libexecdir@?' \ -e 's?^BINMODE=.*?BINMODE=04755?' \ -e 's?^BINGRP=.*?BINGRP=mail?' \ -e 's?^BINOWN=.*?BINOWN=root?' \ ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; echo 'force-install: install' >> ${BUILD_TREE}/${file}.new; mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; elif [ "${file}" = 'mailstats/Makefile.dist' \ -o "${file}" = 'makemap/Makefile.dist' \ -o "${file}" = 'praliases/Makefile.dist' \ ]; then sed \ -e 's?^BINDIR=.*?BINDIR=${DESTDIR}@sbindir@?' \ -e 's?^BINMODE=.*?BINMODE=0755?' \ -e 's?^BINGRP=.*?BINGRP=mail?' \ -e 's?^BINOWN=.*?BINOWN=root?' \ ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; fi; # For most directories, replace Makefile with our updated Makefile.dist if [ "${file}" != 'src/Makefiles/Makefile.Linux' ]; then cp ${BUILD_TREE}/${file} \ $(dirname "${BUILD_TREE}/${file}")/${OBJ_DIR}/Makefile; fi; done; echo '...Done.';