|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 6313 (0x18a9)
Types: TextFile
Names: »mkdrivtab.sh«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦2fafebccf⟧ »EurOpenD3/mail/smail3.1.19.tar.Z«
└─⟦bcd2bc73f⟧
└─⟦this⟧ »src/mkdrivtab.sh«
# @(#)mkdrivtab.sh 3.34 3/12/89 12:44:22
# 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
exec > drivertab.c
cat <<EOF
/*
* 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)
if [ -f $b/Makefile ]; then
echo "Build $b/Makefile, backup in .Makefile" 1>&2
mv $b/Makefile $b/.Makefile
else
echo "Build $b/Makefile ..." 1>&2
fi
exec > $b/Makefile
cat <<EOF
# 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
EOF
cat <<\EOF
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
CFLAGS=$$CFLAGS
EOF
;;
%makefile_end)
cat <<\EOF
SRC=${CSRC} ${HSRC}
.c.o:
. ./${DEFS_SH}; ${CC} ${CFLAGS} -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} 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";;
*) echo "$a $b";;
esac
done
)