This is mkdefs.sh in view mode; [Download] [Up]
#!/bin/sh # @(#)conf/lib/mkdefs.sh 1.7 02 Dec 1990 09:15:38 # Copyright (C) 1987, 1988 Ronald S. Karr and Landon Curt Noll # # See the file COPYING, distributed with smail, for restriction # and warranty information. # Setup shell variables for use in makefiles and some shell scripts used # in building smail. The file EDITME is used to gather information # specified by the site administrator. Files under conf/os and conf/arch # are used to learn about a particular operating system and architecture. # All of the information learned is summarized in a dump to the files # conf/defs.sh (a .-able shellscript), conf/defs.h, (an #include-able # C header file) and conf/defs.sed (a sed script). # The variable ROOT should be defined as a path to the root of the # smail source directory. This should be put in the environment before # calling this shell script. # simple variables that can be set in the EDITME, OS or ARCH files. # If these variables are set in the EDITME file, then the version # from the EDITME file should override. VARS="\ NOBODY\ CC\ STRIP\ USE_SYMLINKS\ SMAIL_BIN_DIR\ SMAIL_NAME\ OTHER_SMAIL_NAMES\ NEWALIASES\ LIB_DIR\ UNSHAR_MAP_DIR\ ALIASES_FILE\ ALIASES_TYPE\ PATH_ALIASES_FILE\ PATH_ALIASES_TYPE\ UUCP_SYSTEM_FILE\ SPOOL_DIRS\ LOG_DIR\ SECOND_CONFIG_FILE\ UTIL_BIN_DIR\ TMP_DIR\ SECURE_PATH\ MAN1\ MAN5\ MAN8\ MAN1_EXT\ MAN5_EXT\ MAN8_EXT\ COMPRESS\ COMP_FLAG\ UNCOMPRESS\ ZCAT\ DOT_Z\ UTIL_PATH\ LMAIL\ HOSTNAMES\ MORE_HOSTNAMES\ POSTMASTER\ VISIBLE_DOMAINS\ UUCP_NAME\ VISIBLE_NAME\ DRIVER_CONFIGURATION\ MAILBOX_DIR\ LOCAL_MAIL_FILE\ LOCKING_PROTOCOL\ LOCK_BY_NAME\ FLOCK_MAILBOX\ SMALL_MEMORY\ POINTER_TYPE\ BIT_PER_CHAR\ BYTES_PER_ALIGN\ USE_ASCII\ RANLIB\ " # list OS/ARCH vars, for these variables, the EDITME versions are appended LISTS="\ HAVE\ NO_HAVE\ MISC_DEFINES\ MISC_UNDEFINES\ INCLUDES\ LDFLAGS\ CFLAGS\ OSNAMES\ LIBS\ OSLIBS\ " # lists to append together with newlines NLISTS="\ MISC_SH_DEFINES\ MISC_C_DEFINES\ MISC_DEFS_DEPEND\ " # separators for list variables sep=":$IFS" # clear all EDITME/OS/ARCH variables for v in $VARS $LISTS $NLISTS; do eval "case \"$v\" in ?*) $v=;; esac" done TEST_BASE="<not defined>" # clearing TEST_BASE in EDITME has meaning # determine how to echo without a newline case "`echo -n`" in -n) nonls=; nonle='\c';; *) nonls=-n; nonle=;; esac # Establish the root of the smail source directory RELATIVE_ROOT="$ROOT" ROOT="`(cd "$ROOT"; pwd)`" FROM_ROOT="`pwd | sed -e 's,^'$ROOT'/,,' -e 's,^'$ROOT'$,,'`" # Read in the EDITME file, creating it if necessary # smail EDITME file specified in environment variable case "$SMAIL_EDITME" in /* ) EDITME="$SMAIL_EDITME" RELATIVE_EDITME="$EDITME" ;; ?* ) EDITME="$ROOT/$SMAIL_EDITME" RELATIVE_EDITME="\${ROOT}/$SMAIL_EDITME" ;; "" ) EDITME="$ROOT/conf/EDITME" RELATIVE_EDITME='${ROOT}/conf/EDITME' ;; esac case "$EDITME" in */./* | */../* ) # build a regular pathname from / dn="`echo "$EDITME" | sed 's|/[^/]*$||'`" EDITME="`cd $dn; pwd`/`basename "$EDITME"`" esac # If the EDITME file does not exist, create it from the distributed version if [ ! -f "$EDITME" ]; then echo "Copy $ROOT/conf/EDITME-dist to $EDITME ..." if cat < "$ROOT/conf/EDITME-dist" > "$EDITME"; then : else exit 1 fi fi echo $nonls "Read $RELATIVE_EDITME ... $nonle" 1>&2 if [ ! -r $EDITME ]; then echo "Cannot open $EDITME" 1>&2 exit 1 fi . $EDITME case "$TEST_BASE" in "" ) SMAIL_BIN_DIR="$ROOT/src" SMAIL_NAME="$ROOT/src/smail" OTHER_SMAIL_NAMES= LIB_DIR="$ROOT/lib" SPOOL_DIRS="$ROOT/spool" LOG_DIR="$ROOT/log" SECOND_CONFIG_FILE= UTIL_BIN_DIR="$ROOT/util" UTIL_PATH="$ROOT/pd/getopt:$ROOT/pd/pathalias:$ROOT/pd/uuwho" UTIL_PATH="$UTIL_PATH:$ROOT/util:$SMAIL_BIN_DIR" TMP_DIR=/tmp TEST_BASE="$ROOT" NEWALIASES= DONT_INSTALL=yes echo "Testing: \$ROOT/$FROM_ROOT/Makefile install rule is now disabled" ;; /* ) SMAIL_BIN_DIR="$TEST_BASE/bin" SMAIL_NAME= OTHER_SMAIL_NAMES= LIB_DIR="$TEST_BASE/lib" SPOOL_DIRS="$TEST_BASE/spool" LOG_DIR="$TEST_BASE/log" SECOND_CONFIG_FILE= UTIL_BIN_DIR="$TEST_BASE/lib" UTIL_PATH="$UTIL_BIN_DIR:$SMAIL_BIN_DIR" TMP_DIR=/tmp NEWALIASES= DONT_INSTALL= echo "Testing: \$ROOT/$FROM_ROOT/Makefile install will use $TEST_BASE" ;; "<not defined>" ) UTIL_PATH="$LIB_DIR:$SMAIL_BIN_DIR" TEST_BASE= DONT_INSTALL= ;; * ) SMAIL_BIN_DIR="$ROOT/$TEST_BASE/bin" SMAIL_NAME= OTHER_SMAIL_NAMES= LIB_DIR="$ROOT/$TEST_BASE/lib" SPOOL_DIRS="$ROOT/$TEST_BASE/spool" LOG_DIR="$ROOT/$TEST_BASE/log" SECOND_CONFIG_FILE= UTIL_BIN_DIR="$ROOT/$TEST_BASE/lib" UTIL_PATH="$UTIL_BIN_DIR:$SMAIL_BIN_DIR" TMP_DIR=/tmp TEST_BASE="$ROOT/$TEST_BASE" NEWALIASES= DONT_INSTALL= echo "Testing: \$ROOT/$FROM_ROOT/Makefile install will use $TEST_BASE" ;; esac case "$SPOOL_DIRS" in *:* ) MAIN_SPOOL_DIR="`sed 's/:.*//' <<-EOF $SPOOL_DIRS EOF `" ;; * ) MAIN_SPOOL_DIR="$SPOOL_DIRS" ;; esac case "$LOG_DIR" in "") LOG_DIR=$MAIN_SPOOL_DIR/log;; esac LOGFILE="$LOG_DIR/logfile" PANICLOG="$LOG_DIR/paniclog" OLD_LOGDIR="$LOG_DIR/OLD" # Append .sort to $ALIASES_FILE for sorted files. case "$ALIASES_TYPE" in bsearch ) ALIASES_FILE="$ALIASES_FILE.sort";; esac case "$ALIASES_TYPE" in yp | aliasyp) PATH_ALIASES_FILE="$ALIASES_FILE" ;; * ) case "$ALIASES_FILE" in /* ) PATH_ALIASES_FILE="$ALIASES_FILE" ;; * ) PATH_ALIASES_FILE="$LIB_DIR/$ALIASES_FILE" ;; esac ;; esac case "$PATHS_TYPE" in yp | aliasyp) PATH_PATHS_FILE="$PATHS_FILE" ;; *) case "$PATHS_FILE" in /* ) PATH_PATHS_FILE="$PATHS_FILE" ;; * ) PATH_PATHS_FILE="$LIB_DIR/$PATHS_FILE" ;; esac ;; esac # Convert OTHER_SMAIL_NAMES from a colon-separated list to # a white-space separated list case "$OTHER_SMAIL_NAMES" in *:*) OTHER_SMAIL_NAMES="`echo "$OTHER_SMAIL_NAMES" | sed -e 's/:/ /g' -e 's/[ ]+/ /'`" ;; esac # If a SMAIL_NAME is specified, add it to the OTHER_SMAIL_NAMES. # Otherwise, create one that points to the main smail binary. case "$SMAIL_NAME" in ?*) OTHER_SMAIL_NAMES="$OTHER_SMAIL_NAMES $SMAIL_NAME";; *) SMAIL_NAME="$SMAIL_BIN_DIR/smail";; esac # save EDITME versions of variables for v in $VARS $LISTS $NLISTS; do eval " case \"\$$v\" in ?*) EDITME_$v=\"\$$v\"; $v=;; esac " done # Fill in defaults. OS/ARCH files can override these. EDITME file # can override the defaults or the OS/ARCH files. CC=cc TMP_DIR=/tmp SECURE_PATH=/bin:/usr/bin POSTMASTER=root RANLIB=: if [ -z "$EDITME_COMPRESS" ]; then COMPRESS=: COMP_FLAG="" UNCOMPRESS=true ZCAT=cat DOT_Z="" fi # Read the OS-specific information echo $nonls "conf/os/$OS_TYPE ... $nonle" 1>&2 if [ ! -r "$ROOT/conf/os/$OS_TYPE" ]; then echo "Cannot open $ROOT/conf/os/$OS_TYPE" 1>&2 exit 1 fi . "$ROOT/conf/os/$OS_TYPE" # Read the architecture-specific information echo $nonls "conf/arch/$ARCH_TYPE ... $nonle" 1>&2 if [ ! -r $ROOT/conf/arch/$ARCH_TYPE ]; then echo "Cannot open $ROOT/conf/arch/$ARCH_TYPE" 1>&2 exit 1 fi . "$ROOT/conf/arch/$ARCH_TYPE" # for simple variables, make EDITME versions override os and arch versions for v in $VARS; do eval " case \"\$EDITME_$v\" in ?*) $v=\"\$EDITME_$v\";; esac " done # Special case: some variables related to compression may be empty, so # if COMPRESS was specified in the EDITME file, set them all from the # EDITME file variables. if [ ! -z "$EDITME_COMPRESS" ]; then COMPRESS="$EDITME_COMPRESS" COMP_FLAG="$EDITME_COMP_FLAG" UNCOMPRESS="$EDITME_UNCOMPRESS" ZCAT="$EDITME_ZCAT" DOT_Z="$EDITME_DOT_Z" fi # for list variables, append the EDITME version for v in $LISTS; do eval " case \"\$$v\" in \"\") $v=\"\$EDITME_$v\";; *) $v=\"\$$v \$EDITME_$v\";; esac " done for v in $NLISTS; do eval " case \"\$$v\" in \"\") $v=\"\$EDITME_$v\";; *) $v=\"\$$v \$EDITME_$v\";; esac " done echo "done" 1>&2 # if DRIVER_CONFIGURATION does not begin with /, put it under the # conf/driver directory. case "$DRIVER_CONFIGURATION" in /* ) : ;; * ) DRIVER_CONFIGURATION=$RELATIVE_ROOT/conf/driver/$DRIVER_CONFIGURATION;; esac # append OSLIBS onto the end of LIBS, so that makefiles only need refer # to LIBS. The reason for having two is that OSLIBS is intended to # be libraries that are linked after other libraries. By specifically # ordering them here, writers of OS and EDITME files don't need to # be so careful. LIBS="$LIBS $OSLIBS" # If no LOCAL_MAIL_FILE is specified, derive it from MAILBOX_DIR case "$LOCAL_MAIL_FILE" in "") LOCAL_MAIL_FILE="$MAILBOX_DIR/\${lc:user}";; esac # Build the shell include file echo $nonls "Build \$ROOT/$FROM_ROOT/defs.sh ... $nonle" 1>&2 exec > "defs.sh" case $? in 0) :;; *) exit 1;; esac cat <<EOF # DO NOT EDIT THIS FILE DIRECTLY, IT IS CREATED AUTOMATICALLY # FROM THE SCRIPT $ROOT/conf/lib/mkdefs.sh. IF YOU MAKE # CHANGES TO THIS FILE THEY ARE LIKELY TO GO AWAY. SEE THE FILE # $EDITME FOR INFORMATION ON HOW TO CONTROL # THE CONTENTS OF THIS FILE. FROM_ROOT='$FROM_ROOT' DEFS_DEPEND=\ 'defs.sh defs.h defs.sed: $RELATIVE_EDITME defs.sh defs.h defs.sed: \${ROOT}/conf/lib/arch.h defs.sh defs.h defs.sed: \${ROOT}/conf/lib/mkdefs.sh defs.sh defs.h defs.sed: \${ROOT}/conf/os/$OS_TYPE defs.sh defs.h defs.sed: \${ROOT}/conf/arch/$ARCH_TYPE version.sh version.h version.sed: \${ROOT}/conf/lib/mkversion.sh version.sh version.h version.sed: \${ROOT}/level version.sh version.h version.sed: \${ROOT}/patchnum $MISC_DEFS_DEPEND' EOF # Write out the simple variables eval "cat <<EOF `for v in $VARS $LISTS $NLISTS; do echo \"\$v='\\\$\$v'\"; done` EOF " # write out the positive boolean list variables (IFS="$sep"; for i in $HAVE; do echo HAVE_$i=yes; done) (IFS="$sep"; for i in $OSNAMES; do echo $i=yes; done) # clear the negative boolean list variables (IFS="$sep"; for i in $NO_HAVE; do echo HAVE_$i=; done) # write the extensible set of variables that may have values (IFS="$sep" for i in $MISC_DEFINES; do echo "$i" done | sed -n -e 's/^\(.[^=]*\)$/\1=yes/p' \ -e 's/^\(.[^=]*\)=\(.*\)/\1='\2'/p' ) cat <<EOF $MISC_SH_DEFINES EOF # Build the C include file echo $nonls "defs.h ... $nonle" 1>&2 exec > "defs.h" case $? in 0) :;; *) exit 1;; esac # Write out the file header and first set of #define's cat <<EOF /* * DO NOT EDIT THIS FILE DIRECTLY, IT IS CREATED AUTOMATICALLY * FROM THE SCRIPT $ROOT/conf/mkdefs.sh. IF YOU MAKE * CHANGES TO THIS FILE THEY ARE LIKELY TO GO AWAY. SEE THE FILE * $EDITME FOR INFORMATION ON HOW TO CONTROL * THE CONTENTS OF THIS FILE. */ #define MAILBOX_DIR "$MAILBOX_DIR" #define LOCAL_MAIL_FILE "$MAILBOX_DIR/\${lc:user}" #define CONSOLE "$CONSOLE" $LOCKING_PROTOCOL $DECLARE_STRINGS EOF # Handle string variables which should be turned off with a NO_ prefix cat <<EOF | sed -n \ -e 's/\([A-Z0-9_]*\)=\(..*\)/#define \1 "\2"/p' \ -e 's/\([A-Z0-9_]*\)=$/#define NO_\1/p' ALIASES_FILE=$ALIASES_FILE PATH_ALIASES_FILE=$PATH_ALIASES_FILE ALIASES_PROTO=$ALIASES_TYPE PATHS_FILE=$PATHS_FILE PATH_PATHS_FILE=$PATH_PATHS_FILE PATHS_PROTO=$PATHS_TYPE EOF # Handle variables which should revert to defaults if undefined cat <<EOF | sed -n \ -e 's/\([A-Z0-9_]*\)=\(..*\)/#define \1 "\2"/p' \ -e 's/\([A-Z0-9_]*\)=$/#undef \1/p' NOBODY=$NOBODY SMAIL_LIB_DIR=$LIB_DIR UUCP_SYSTEM_FILE=$UUCP_SYSTEM_FILE SPOOL_DIRS=$SPOOL_DIRS UNSHAR_MAP_DIR=$UNSHAR_MAP_DIR LOGFILE=$LOGFILE OLD_LOGDIR=$OLD_LOGDIR PANIC_LOG=$PANICLOG SMAIL=$SMAIL_NAME POSTMASTER_ADDRESS=$POSTMASTER EOF # Handle NULL or string variables cat <<EOF | sed -n \ -e 's/\([A-Z0-9_]*\)=\(..*\)/#define \1 "\2"/p' \ -e 's/\([A-Z0-9_]*\)=$/#define \1 NULL/p' EDITME=$EDITME RELATIVE_EDITME=$RELATIVE_EDITME MAIN_SPOOL_DIR=$MAIN_SPOOL_DIR HOSTNAMES=$HOSTNAMES MORE_HOSTNAMES=$GATEWAY_NAMES VISIBLE_DOMAINS=$DOMAINS UUCP_NAME=$UUCP_NAME VISIBLE_NAME=$VISIBLE_NAME SECOND_CONFIG_FILE=$SECOND_CONFIG_FILE SECURE_PATH=$SECURE_PATH SMAIL_TMP_DIR=$TMP_DIR LMAIL=$LMAIL EOF # Handle empty or string variables cat <<EOF | sed -n \ -e 's/\([A-Z0-9_]*\)=\(.*\)/#define \1 "\2"/p' FROM_ROOT=$FROM_ROOT EOF # Handle TRUE or FALSE variables cat <<EOF | sed -n \ -e 's/\([A-Z0-9_]*\)=..*/#define \1 TRUE/p' \ -e 's/\([A-Z0-9_]*\)=$/#define \1 FALSE/p' LOCK_BY_NAME=$LOCK_BY_NAME FLOCK_MAILBOX=$FLOCK_MAILBOX EOF # Handle on or off variables cat <<EOF | sed -n \ -e 's/\([A-Z0-9_]*\)=..*/#define \1/p' \ -e 's/\([A-Z0-9_]*\)=$/#undef \1/p' SMALL_MEMORY=$SMALL_MEMORY USE_ASCII=$USE_ASCII EOF # write out the positibe boolean list variables (IFS="$sep"; for i in $HAVE; do echo "#define HAVE_$i"; done) (IFS="$sep"; for i in $OSNAMES; do echo "#define $i"; done) # clear the negative boolean list variables (IFS="$sep"; for i in $NO_HAVE; do echo "#undef HAVE_$i"; done) # write the extensible set of variables that may have values (IFS="$sep" for i in $MISC_DEFINES; do echo "$i" done | sed -n -e 's/^\(.[^=]*\)$/#define \1/p' \ -e 's/^\(.[^=]*\)=\(.*\)/#define \1 \2/p' ) cat <<EOF #define POINTER_TYPE $POINTER_TYPE #define BITS_PER_CHAR $BITS_PER_CHAR #define BYTES_PER_ALIGN $BYTES_PER_ALIGN #include "$RELATIVE_ROOT/conf/lib/arch.h" $MISC_C_DEFINES EOF # Build the sed change script echo $nonls "defs.sed ... $nonle" 1>&2 exec > "defs.sed" case $? in 0) :;; *) exit 1;; esac case "$MISC_SED_DEFINES" in ?*) cat <<-EOF $MISC_SED_DEFINES EOF ;; esac # write out the simple variables. Ignore variables with newlines or | chars nl=' ' for v in $VARS; do eval " case \"\$$v\" in *\$nl*|*'|'*) :;; *) echo \"s|X_${v}_X|\$$v|g\";; esac " done # clear the negative boolean list variables (IFS="$sep"; for i in $NO_HAVE; do echo "s|X_HAVE_${i}_X||g"; done) # write out the positive boolean list variables (IFS="$sep"; for i in $HAVE; do echo "s|X_HAVE_${i}_X|yes|g"; done) (IFS="$sep"; for i in $OSNAMES; do echo "s|X_${i}_X|yes|g"; done) # If this OS cannot correctly use #!/bin/sh at the beginning of bourne # shell scripts, then convert them not to do this. (IFS="$sep"; sed_hash_bang=true for i in $HAVE; do case "$i" in HAVE_HASH_BANG) sed_hash_bang=false;; esac done if $sed_hash_bang; then echo '1s|^#! */bin/sh|: /bin/sh|' fi ) echo "done." 1>&2 exit 0
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.