This is mkdrivtab.sh in view mode; [Download] [Up]
# @(#)src/mkdrivtab.sh 1.3 02 Dec 1990 06:22:09 # Script to create drivertab.c and the driver makefile directories # from a driver configuration file. This script makes heavy use of # the awk script mkdriv.awk to actually process the contents of the # configuration file. The awk script produces output tokens which # tell this script how to operate. # # The format of a driver file is a collection of one line records # describing the drivers which are to be linked to the smail binary. # Additional source and header files can be specified for use in a # particular library file using the special driver name "library". # # Drivers come in four types: director, router, transport and lookup # drivers. A line describing a driver is of the following form: # # type name [modifiers ...] # # where type is one of "director", "router", "transport" or "lookup", # and where name is the symbolic name for the driver, for reference # from run-time configuration files. # # There can be modifiers applied to an entry. These modifiers can be # one of the following: # # source=name.c This modifier declares that the source for the # driver is in the file "name.c" in the source # directory for the specific driver type. The # default source file name is the symbolic name # of the driver with a suffix of ".c". # # header=name This modifier declares that the header file # associated with the driver is in the file # "name" in the source directory for the # specified driver type. By default lookup # drivers do not have header files, while # director, router and transport drivers have # header files with the basename of the source # file and a suffix of ".h". # # nocache This modifier declares that the driver does # not have a "cache" entry point. This does not # apply to lookup drivers. # # nofinish This modifier declares that the driver does # not have a "finish" entry point. This does # not apply to lookup drivers. # # nobuilder This modifier declares that the driver does # not have a "builder" entry point. This does # not apply to lookup drivers. # # Additional source and header files for a particular driver library # can be specified using a line of the form: # # type library [name.c | name.h] ... # # where type specifies the driver library, library is the keyword # "library", and where name.c specifies a source file in the driver # source directory, and where name.h specifies a header file in the # driver source directory. # # Blanks lines are okay, and comments can be started with a '#' # character and continue until the end of the line. # # The following is a simple example of a driver file: # # # director drivers # director aliasfile # director forwardfile nocache nofinish source=fwdfile.c # director user nocache nofinish # director library dtlib.c dtlib.h # # # router drivers # router pathalias # router uuname # the command output may be cached # router smarthost nocache nofinish # router library rtlib.c rtlib.h # # # transport drivers # transport pipe nocache nofinish # transport appendfile nocache nofinish # transport library tplib.c tplib.h # transport library bsmtp.c bsmtp.h if [ $# -gt 0 ]; then driver_file=$1 exec < $driver_file else driver_file="<standard-input>" fi sed -e 's/#.*//' -e '/^[ ]*$/d' | if [ -f mkdriv.perl ]; then perl mkdriv.perl else awk -f mkdriv.awk fi | sed -e '/%.*%NULL/d' \ -e 's/%CC%/extern void /' \ -e 's/%DD%/extern struct addr */' \ -e 's/%RD%/extern void /' \ -e 's/%TD%/extern void /' \ -e 's/%VV%/extern void /' \ -e 's/%FF%/extern void /' \ -e 's/%BB%/extern char */' \ -e 's/%LO%/extern int /' \ -e 's/%LC%/extern void /' \ -e 's/%LL%/extern int /' | ( if [ -f drivertab.c ]; then echo "Build drivertab.c, backup in .drivertab.c" 1>&2 mv drivertab.c .drivertab.c else echo "Build drivertab.c ..." 1>&2 fi outfile=drivertab.c cat <<EOF > $outfile /* * drivertab.c: * define the available director, router, transport and lookup * drivers for use by smail. * * THIS FILE IS GENERATED AUTOMATICALLY BY THE SCRIPT $0 FROM * THE DRIVER CONFIGURATION FILE $driver_file * MAKE CHANGES TO THE DRIVER CONF FILE AND REBUILD RATHER THAN EDITING * THIS FILE DIRECTLY. */ #include <stdio.h> #include "defs.h" #include "smail.h" #include "addr.h" #include "direct.h" #include "route.h" #include "transport.h" EOF while read a b; do case "$a" in %makefile_start) outfile=$b/Makefile if [ -f $outfile ]; then echo "Build $outfile, backup in .Makefile" 1>&2 mv $outfile $b/.Makefile else echo "Build $outfile ..." 1>&2 fi cat <<EOF > $outfile # Makefile for the $b driver library in smail # THIS FILE IS GENERATED AUTOMATICALLY BY THE SCRIPT $0 FROM # THE DRIVER CONFIGURATION FILE $driver_file # MAKE CHANGES TO THE DRIVER CONF FILE AND REBUILD RATHER THAN EDITING SHELL=/bin/sh MAKE=make GET=sccs get AR=ar LINT=lint CC=cc CLEAN=sccs clean MK=\${MAKE} -\${MAKEFLAGS} SRC_PREFIX= ROOT=../.. MKDEPEND=\${ROOT}/conf/lib/mkdepend.sh MKDEFS=\${ROOT}/conf/lib/mkdefs.sh CHECKDEFS=\${ROOT}/conf/lib/checkdefs.sh DEFS_SH=defs.sh DEFS_H=defs.h DEFS_SED=defs.sed EOF ;; %makefile_end) cat <<\EOF >> $outfile SRC=${CSRC} ${HSRC} .c.o: . ./${DEFS_SH}; $$CC $$CFLAGS $$INCLUDES -c $*.c all: ${TARGET} lint: ${CSRC} ${DEFS_SH} . ./${DEFS_SH}; ${LINT} ${LINTFLAGS} ${CSRC} ${TARGET}: ${OBJ} Makefile ${DEFS_SH} rm -f ${TARGET} ${AR} cr ${TARGET} ${OBJ} . ./${DEFS_SH}; $$RANLIB ${TARGET} csrc:; @echo ${CSRC} hsrc:; @echo ${HSRC} sources: ${SRC} ${SRC}: ${GET} $@ ${DEFS_H} ${DEFS_SH} ${DEFS_SED}: ROOT=${ROOT} ${SHELL} ${MKDEFS} ${OBJ}: ${DEFS_SH} names: @for i in ${SRC}; do echo ${SRC_PREFIX}$$i; done depend: ${SRC} check_defs . ./${DEFS_SH}; ${SHELL} ${MKDEPEND} $$INCLUDES Makefile ${CSRC} . ./${DEFS_SH}; echo "$$DEFS_DEPEND" >> Makefile; \ chmod -w Makefile check_defs: ROOT=${ROOT} ${SHELL} ${CHECKDEFS} clean: rm -f ${DEFS_SH} ${DEFS_H} ${DEFS_SED} rm -f a.out core ${OBJ} clobber: clean rm -f ${TARGET} rm -f .${DEFS_SH} .${DEFS_H} .${DEFS_SED} .Makefile rm -f Makefile nuke: clobber -${CLEAN} # DO NOT REMOVE THIS LINE OR "make depend" WILL NOT WORK EOF ;; %drop) echo " $b" >> $outfile;; *) echo "$a $b" >> $outfile;; esac done )
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.