home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- #
- # shell script to process a UK-sendmail configuration file and
- # generate a directory containing the relevent m4 files together
- # with a .mc file and Makefile which are used to build a sendmail.cf
- #
- if [ $# -ne 1 ]
- then
- echo usage: $0 file
- exit 1
- elif [ ! -f $1 ]
- then
- echo $1: file not found
- exit 1
- fi
-
- config=`echo $1 | sed 's/^config.//'`
- configfile=$1
- domfiles=
- dombldargs=
- chnfiles=
- chnbldargs=
-
- homedir=`pwd`
- configdir=$config
- tabledir=$config
-
- #
- # transform the configuration file, then read in the resulting file
- #
- (cat $1; echo) | sed -n '
- /#/s/#.*//
- /^$/d
- : repeat
- N
- t next
- : next
- s/\n[ ][ ]*//
- t repeat
- P
- D
- ' > /tmp/config.$$
-
- exec < /tmp/config.$$
-
- #
- # process the configuration file
- #
- while read cmd arg1 arg2
- do
- case $cmd in
- configdir=*|tabledir=*|install=*)
- val=`expr $cmd : '.*/'`
- if [ $val -gt 0 ]
- then
- echo $cmd: must be a subdirectory of this directory
- else
- eval $cmd
- fi
- ;;
- config=*|domain=*|postmaster=*)
- eval $cmd
- var=`expr $cmd : '\(.*\)=.*' | tr '[a-z]' '[A-Z]'`
- eval val=$`expr $cmd : '\(.*\)=.*'`
- echo "define(\`$var',\`$val')dnl" >> /tmp/config.$$.mc
- ;;
- options=*)
- eval $cmd
- opts=`echo $options | tr '[a-z]' '[A-Z]'`
- oldifs=$IFS ; IFS="," ; set $opts ; IFS=$oldifs
-
- for i in $*
- do
- echo "define(\`$i')dnl" >> /tmp/config.$$.mc
- done
- ;;
- domain)
- if [ "$arg1" != "std" ]
- then
- dombldargs="$dombldargs-$arg1"
- fi
-
- eval $arg2
- domfiles="$domfiles $file "
- dombldargs="$dombldargs $file "
- ;;
- channel)
- chn=`echo $arg1 | tr '[a-z]' '[A-Z]'`
- file=
- ldomain='$J'
- ida=
-
- oldifs=$IFS ; IFS="," ; set $arg2 ; IFS=$oldifs
-
- for i in $*
- do
- case $i in
- file=*|ldomain=*)
- eval $i
- ;;
- ida) ida="-ida "
- ;;
- sysname=*|pgm=*)
- eval $i
- var=${chn}`expr $i : '\(.*\)=.*' | tr '[a-z]' '[A-Z]'`
- eval val=$`expr $i : '\(.*\)=.*'`
- echo "define(\`$var',\`$val')dnl" >> /tmp/config.$$.mc
- ;;
- *) opt=${chn}`echo $i | tr '[a-z]' '[A-Z]'`
- echo "define(\`$opt')dnl" >> /tmp/config.$$.mc
- ;;
- esac
- done
-
- chnfiles="$chnfiles $file "
- chnbldargs="$chnbldargs$ida-$arg1 $file "
-
- if [ $arg1 != "top" ]
- then
- echo "define(\`${chn}NAME',\`$ldomain')dnl" >> /tmp/config.$$.mc
- fi
- ;;
- esac
-
- done
-
- rm /tmp/config.$$
-
- #
- # add a makefile for compiling tables in the tables directory
- #
- if [ ! -d $tabledir ]
- then
- echo -n "
- Making directory $tabledir ... "
- mkdir $tabledir
- if [ $? -ne 0 ]
- then echo mkdir failed, aborted
- exit 1
- fi
- fi
-
- cd $tabledir
- echo -n "
- creating $tabledir/$config.mk ... "
-
- cat > $config.mk <<EOF
- ############################################################
- #
- # Makefile to compile sendmail tables for $config
- #
- ############################################################
-
- DOMFILES=$domfiles
- DOMBLDARGS=$dombldargs
-
- CHNFILES=$chnfiles
- CHNBLDARGS=$chnbldargs
-
- $config: $config-dom.m4 $config-chn.m4
-
- $config-dom.m4: $(DOMFILES) $config.mk
- ../Dombuild -o $config-dom.m4 $(DOMBLDARGS)
-
- $config-chn.m4: $(CHNFILES) $config.mk
- ../Chnbuild -o $config-chn.m4 $(CHNBLDARGS)
-
- edit:
- \$\${VISUAL-vi} $(CHNFILES)
- \$\${VISUAL-vi} $(DOMFILES)
-
- tidy:
- -rm -f [0-9]*.*
-
- check: $(CHNFILES) $(DOMFILES)
- ../Chncheck $(CHNFILES)
- ../Domcheck $(DOMFILES)
- EOF
-
- cd $homedir
-
- #
- # create the sendmail configuration directory
- #
- if [ ! -d $configdir ]
- then
- echo -n "
- Making directory $configdir ... "
- mkdir $configdir
- if [ $? -ne 0 ]
- then echo mkdir failed, aborted
- exit 1
- fi
- fi
-
- cd $configdir
- echo -n "
- creating configuration files in $configdir ... "
-
- #
- # copy the relevent m4 files into the directory
- #
- ar x ../Rules.a
-
- if [ -f localise.sh ]
- then echo -n "
- running localise.sh in $configdir ... "
- ./localise.sh
- fi
-
- #
- # create the Makefile
- #
- cat >Makefile <<EOF
- ########################################################################
- #
- # Makefile for Sendmail configuration files
- #
- # @(#)Makefile UK-2.1 sendmail configuartion 18/11/88
- #
- ########################################################################
- RULES=base.m4 rules.m4 mailers.m4 version.m4
-
- TBLDIR=../$tabledir
- DOM_M4FILE=$config-dom.m4
- CHN_M4FILE=$config-chn.m4
-
- .SUFFIXES: .mc .cf
-
- .mc.cf:
- -@mv \$*.cf \$*.cf.old
- m4 \$*.mc > \$*.cf
-
- $config: $(TBLDIR)/$config.mk
- cd $(TBLDIR); make -f $config.mk $config
- make $config.cf
-
- $(TBLDIR)/$config.mk: ../$configfile
- ( cd ..; Config $configfile )
-
- $config.cf: $(RULES) $(DOM_M4FILE) $(CHN_M4FILE) $(TBLDIR)/$config.mk
-
- $(DOM_M4FILE): $(TBLDIR)/$(DOM_M4FILE)
- cp $(TBLDIR)/$(DOM_M4FILE) .
-
- $(CHN_M4FILE): $(TBLDIR)/$(CHN_M4FILE)
- cp $(TBLDIR)/$(CHN_M4FILE) .
-
- install:
- sh ../Install.sh $install $config
-
- test:
- /usr/lib/sendmail -bt -C$config.cf
-
- edit check tidy: $(TBLDIR)/$config.mk
- cd $(TBLDIR); make -f $config.mk \$@
-
- diff: $config.cf $config.cf.old
- wc $config.cf.old $config.cf
- diff $config.cf.old $config.cf
- EOF
-
- #
- # create the config.mc file
- #
- mv /tmp/config.$$.mc $config.mc
- cat >> $config.mc <<EOF
- include(base.m4)
- include(rules.m4)
- include($config-dom.m4)
- include($config-chn.m4)
- include(mailers.m4)
- EOF
-
- echo
- exit
-