archie/prospero/Makefile.boilerplate
2024-05-27 22:27:32 +02:00

454 lines
16 KiB
Makefile
Executable File

#/*
# * Copyright (c) 1991-1994 by the University of Southern California
# *
# * For copying and distribution information, please see the file
# * <usc-license.h>.
# */
#
# This is the boilerplate Makefile for the Prospero Directory Service.
# It contains generic targets so that they do not have to be repeated
# for each inferior makefile.
#
## ENVIRONMENT ASSUMPTIONS
# Every Makefile in Prospero has (possibly unset) variables in it
# named PROGS, SPECIAL_PROGS, DATA_FILE_TARGETS, OTHERPROGS,
# CFILES, OBJECTS, SUBDIRS, PROSPERO_ROOT
# PROGS:
# These are the programs which follow the default rule for making and
# which are installed by default. They will be deleted during cleanup.
# SPECIAL_PROGS:
# These are also installed by default, but it have their own special rules
# for making. They will be deleted during cleanup.
# DATA_FILE_TARGETS:
# Targets made that are installed in the bin (with mode 644 or 664) but
# are not executables. They will be deleted
# during cleanup.
# General-purpose libraries are DATA_FILE_TARGETS
# OTHERTARGETS:
# These programs and other targets also follow the default making rules,
# but are not installed by default. They will be deleted during cleanup.
# SPECIAL_OTHERTARGETS:
# These programs and other targets are not installed by default.
# They have their own special rule sets for making. They will be deleted
# during cleanup.
# Special-purpose libraries are DATA_FILE_TARGETS
# SUBDIRS:
# Subdirectories that this Makefile will recursively execute in.
# PROSPERO_ROOT:
# A relative path up to the top-level Makefile.
# Every Prospero Makefile:
#
# Every Prospero Makefile must have a line labelled '# Dependencies',
# after which the 'setdependencies' development utility is free to write.
# It must have a first target named 'all' and another target named 'install'
# The 'install' target does not currently install libraries. Perhaps later.
# Unclear what the users want here.
## ADDITIONAL CONVENTIONS
# The targets ending in _LIB are real file names of single libraries that
# Prospero is compiled with.
# Targets ending in _LIBS are linker command lines.
# They refer to libraries in the Prospero distribution (_LIB libraries)
# and to system libraries ("-lm", especially).
# They also may contain "-u" linker flags.
# Each target ending in _LIBS has a matching _LIBS_DEPENDENCIES
# That refers to files in this distribution (i.e., everything that may
# change during the development process.) They contain no -l or -u.
##############################################################################
##############################################################################
##############################################################################
#
# This top-level dependency is important so that we will always run
# 'all' as our top dependency, and so that Makefile.boilerplate can
# be included into a regular Makefile, irrespective of order.
boilerplate_all: all
###
### VARIABLES used by all Makefiles.
###
# Do not change this line.
# CFLAGS set up above. This adds stuff to it.
CFLAGS = $(CCFLAGS) $(INCS) $(MACHDEF)
#### SED-SCRIPT
# We pipe compilation jobs passed on to subdirectories
# through this sed script in order to precede CC and GCC error
# messages with the full pathname name of the file at fault.
# This lets EMACS's (next-error) function visit compilation errors that
# occur in subdirectories.
SED_SCRIPT = sed -e '/^[a-z0123456789_\/\.]*\.[ch]:/s,^,'$$i'\/,'
##### Prospero Include Files
P_INC = -I$(PROSPERO_ROOT)/include
# Used by all subsidiary makefiles on an as-needed basis.
INCS = $(P_INC) $(K_INC)
### All of these are passed through to the children/descendants.
### These are all the items which might be set differently in
### Makefile.config, and therefore have to be passed on to
### descendants when they change.
## PASTHRU is officially dead now, because it is incompatible with never
## having to specify the old PROSPERO_ROOT. --swa, 5/8/94
##
#PASTHRU = \
# AR="$(AR)" \
# AR_FLAGS="$(AR_FLAGS)" \
# CC="$(CC)" \
# CFLAGS="$(CFLAGS)" \
# COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE="$(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)" \
# GENERATION="$(GENERATION)" \
# GENERATIONSUFFIX="$(GENERATIONSUFFIX)" \
# GROUP=$(GROUP) \
# INSTALL="$(INSTALL)" \
# KRB_LIBS="$(KRB_LIBS)" \
# LIBS="$(LIBS)" \
# MACHDEF="$(MACHDEF)" MAKE=$(MAKE) \
# MORE_USER_PROGS="$(MORE_USER_PROGS)" \
# MORE_SERVER_PROGS="$(MORE_SERVER_PROGS)" \
# OWNER=$(OWNER) \
# P_BINARIES="$(P_BINARIES)" \
# RANLIB="$(RANLIB)" \
# RM="$(RM)"
# VCACHE_LIBS="$(VCACHE_LIBS)" \
# VCACHE_LIBS_DEPENDENCIES="$(VCACHE_LIBS_DEPENDENCIES)" \
# WCFLAGS="$(WCFLAGS)"
# The targets ending in _LIB are real file names of single libraries that
# Prospero is compiled with.
PFS_LIB = $(PROSPERO_ROOT)/lib/pfs/libpfs.a
FIL_LIB = $(PROSPERO_ROOT)/lib/filters/libfilter.a
CMP_LIB = $(PROSPERO_ROOT)/lib/pcompat/libpcompat.a
RDP_LIB = $(PROSPERO_ROOT)/lib/ardp/libardp.a
SRV_LIB = $(PROSPERO_ROOT)/lib/psrv/libpsrv.a
VCACHE_LIB = $(PROSPERO_ROOT)/user/vcache/libpvcache.a
GOPHER_GW_LIB = $(PROSPERO_ROOT)/lib/psrv/gopher_gw/libpgoph_gw.a
WAIS_GW_LIB = $(PROSPERO_ROOT)/lib/psrv/wais_gw/libpwais_gw.a
# For ARCHIE servers, version 3. To use this, you will need to get the ARCHIE
# distribution from Bunyip Information Systems.
#ARCHIE2_LIB = $(PROSPERO_ROOT)/lib/psrv/archie2/libpsarchie.a
# For ARCHIE servers, version 3. To use this, you will need to get the ARCHIE
# distribution from Bunyip Information Systems.
ARCHIE3_PSARCHIE_LIB = $(ARCHIE_ROOT)/lib/libpsarchie/$(SYSTYPE)/libpsarchie.a
ARCHIE3_PARCHIE_LIB = $(ARCHIE_ROOT)/lib/libparchie/$(SYSTYPE)/libparchie.a
#### LIBRARIES USED FOR ACTUALLY LINKING AND DEPENDENCIES
## PFS_VCACHE_LIBS
# Libraries to use if you link with LIBPFS and you use the VCACHE library.
# This is usually referred to indirectly, through USE_PFS_VCACHE_LIBS,
# which is defined in Makefile.config
# PFS_VCACHE_LIBS is a list of all the libraries one needs in order to access
# the PFS library if it is linked with the VCACHE library.
# The libpvcache library (Special purpose hack) has the vcache2a() function
# as its only entry point.
# Documentation on the content of this entry:
# "-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)vcache2a" is
# because of cross-dependencies between $(VCACHE_LIB) and $(PFS_LIB)
# "-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)waisRetrieveFileByHsoname"
# is not strictly necessary. It serves as a reminder of why we're
# including $(WAIS_GW_LIB).
# We need to integrate the WAIS library (at least
# waisRetrieveFileByHsoname) in with libpvcache.
# -lm is needed for $(WAIS_GW_LIB)
# It is unclear to me why we need to GOPHER_GW_LIB
PFS_VCACHE_LIBS = \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)vcache2a \
$(VCACHE_LIB) \
$(GOPHER_GW_LIB) \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)waisRetrieveFileByHsoname \
$(WAIS_GW_LIB) -lm \
$(PFS_LIBS)
# VCACHE_LIBS_DEPENDENCIES
# Bits of Prospero that, if they change, mean that vcache-lib-using
# programs should be recompiled too. This is used by the Makefile
# dependencies.
PFS_VCACHE_LIBS_DEPENDENCIES = \
$(VCACHE_LIB) \
$(GOPHER_GW_LIB) \
$(WAIS_GW_LIB) \
$(PFS_LIBS_DEPENDENCIES)
### PFS_LIBS
### This library is used by any programs that want to link with the normal
### Prospero PFS library.
### This refers to USE_VCACHE_LIBS and USE_VCACHE_LIBS_DEPENDENCIES, in
### "Makefile.config"
### This does NOT include anything having to do with the VCACHE library.
### Makefile.config sets USE_VCACHE_LIBS to either PFS_LIBS or to
### PFS_VCACHE_LIBS
# Documentation on the content of this entry:
# "-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)stequal" is here
# because the ARDP DNS caching uses "stequal" to make its
# comparisons.
# "-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)plog" is because
# of cross-dependencies between SRV_LIB and PFS_LIB. There is a
# call to plog() from ardp_accept(). Will be fixed in next full
# release.
# "-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)pafree" is because
# the $(RDP_LIB) depends upon the 'pafree' function in PFS_LIB.
# $(LIBS) is here because of SCOUNIX, which needs "-lsocket"
PFS_LIBS = \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)plog \
$(SRV_LIB) \
-u ${COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE}stequal \
-u ${COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE}pafree \
-u ${COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE}sindex \
$(PFS_LIB) \
$(FIL_LIB) \
$(RDP_LIB) \
$(KRB_LIBS) \
$(LIBS)
PFS_LIBS_DEPENDENCIES = \
$(SRV_LIB) \
$(PFS_LIB) \
$(FIL_LIB) \
$(RDP_LIB) \
$(KRB_LIBS_DEPENDENCIES) \
$(LIBS_DEPENDENCIES)
### SRV_LIBS
### This library is used by any server program that needs PFS and PSRV
### libraries. (i.e., by DIRSRV). DIRSRV does not do file retrieval, so
### we won't need VCACHE_LIBS here.
### This is used only by programs in the 'server' directory of the Prospero
### distribution.
###
# After RDP_LIB's use of plog() is fixed, change to this one:
#SRV_LIBS = \
# $(SERVER_DB_LIBS) \
# $(PFS_LIBS) \
# $(SRV_LIB)
#For now:
# Note that SERVER_DB_LIBS precedes PFS_LIBS so that server DB library
# functions can easily refer to PFS library functions.
#SRV_LIBS = $(SERVER_DB_LIBS) $(PFS_LIBS)
SRV_LIBS = $(SERVER_DB_LIBS)\
$(ARCHIE_ROOT)/lib/libpsarchie/$(SYSTYPE)/libpsarchie.a\
$(ARCHIE_ROOT)/lib/libparchie/$(SYSTYPE)/libparchie.a\
$(ARCHIE_ROOT)/lib/startdb/$(SYSTYPE)/libstartdb.a\
$(ARCHIE_ROOT)/lib/archsearch/$(SYSTYPE)/libarchsearch.a\
$(ARCHIE_ROOT)/lib/libarchie/$(SYSTYPE)/libarchie.a\
$(ARCHIE_ROOT)/lib/archstridx/$(SYSTYPE)/libarchstridx.a\
$(ARCHIE_ROOT)/lib/patrie/$(SYSTYPE)/libpatrie.a\
$(ARCHIE_ROOT)/webindex/lib/$(SYSTYPE)/libwebindex.a\
$(BERKDB_ROOT)/PORT/$(SYSTYPE)/libdb.a \
$(PFS_LIBS) -lm
# -u ${COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE}verify_acl_list
# -u ${COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE}acl_message
# $(LIBPARCHIE_MODULE)/$(SYSTYPE)/libparchie.a\
# ../../wais/libpwais.a \
# ../../freeWAIS/bin/client.a \
# ../../freeWAIS/bin/inv.a \
# ../../freeWAIS/bin/wais.a \
# ../../freeWAIS/bin/libftw.a \
# After RDP_LIB's use of plog() is fixed, change to this one:
#SRV_LIBS_DEPENDENCIES = \
# $(SERVER_DB_LIBS_DEPENDENCIES) \
# $(PFS_LIBS_DEPENDENCIES) \
# $(SRV_LIB)
#For now:
SRV_LIBS_DEPENDENCIES = \
$(SERVER_DB_LIBS_DEPENDENCIES) \
$(PFS_LIBS_DEPENDENCIES)
### CMP_LIBS
### These libraries are used by programs that link with the compatibility
### library. Such programs do not need anything else magic.
### The distribution only invokes this in app/Makefile.
# The -u refers to system calls that are redefined by the compatibility
# library.
CMP_LIBS = \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)open \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)stat \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)lstat \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)creat \
-u $(COMPILER_PREPENDS_C_SYMBOLS_WITH_UNDERSCORE)execve \
$(CMP_LIB) \
$(USE_PFS_VCACHE_LIBS)
CMP_LIBS_DEPENDENCIES = $(CMP_LIB) $(USE_PFS_VCACHE_LIBS_DEPENDENCIES)
#### Directories used by "installdirs" dependency.
#### note that installdirs assumes 'mkdir -p' exists.
####
DIR755 = $(DESTDIR)/$(PSRV_SHADOW) $(DESTDIR)/$(PSRV_STORAGE) $(DESTDIR)/$(PSRV_SECURITY) $(P_BINARIES)
VCACHE_DIR1755 = $(DESTDIR)/$(P_CACHE)/p $(DESTDIR)/$(P_CACHE)/vc $(DESTDIR)/$(P_CACHE)/tmp
DIR1777 = $(VCACHE_DIR1755)
###
### RULES used by all Makefiles
###
##
## This rule is always used to make OBJECTS from the matching "c" files.
##
## Not needed any more, because with our new conventional use of CFLAGS,
## this is now an implicit rule.
# ${OBJECTS}:
# ${CC} ${CFLAGS} $*.c
## if Makefile.config changes, recompile everything.
## For this rule to have any effect, Makefile.boilerplate must be included
## after $(OBJECTS) is set.
##$(OBJECTS): $(PROSPERO_ROOT)/Makefile.config
# This is a generic go-through-all-subdirs function. It replaces a number
# of special cases.
SUBDIRS_MAKE_START = for i in $(SUBDIRS) $$unset_dummy_sh_variable; do (cd $$i; echo making in `pwd` ; $(MAKE)
SUBDIRS_MAKE_END = ); done
## These are now generic Makefile boilerplate.
## These are all the files that might be generated during the compilation
## process.
## GENERATED_FILES is not referred to outside of this Makefile; it is a
## macro because it is used by the 'clean:' and 'hide:' targets that follow.
## XXX These might also need to be added: *.o makedep
GENERATED_FILES=tags TAGS *~ a.out core $(OBJECTS) $(PROGS) $(SPECIAL_PROGS) $(DATA_FILE_TARGETS) $(OTHERTARGETS) $(SPECIAL_OTHERTARGETS) *.old *.new *.backup *.syms
clean:
rm -f $(GENERATED_FILES)
$(SUBDIRS_MAKE_START) clean $(SUBDIRS_MAKE_END)
# for i in $(SUBDIRS) $$unset_dummy_sh_variable; do (cd $$i; $(MAKE) clean); done
# Piping this through SED hides the many error messages from files not found.
# mv -f isn't the same as RM -f; no way to make MV not complain about unfound
# files, so we'd have to write our own.
hide:
-mkdir .hide
-(mv -f $(GENERATED_FILES) .hide ; \
$(SUBDIRS_MAKE_START) hide $(SUBDIRS_MAKE_END)) 2>&1 | \
sed -e '/^mv:.*: Cannot access: No such file or directory$$/d' \
-e '/^\*\*\* Error code 1 (ignored)$$/d' \
-e '/^mkdir: .hide: File exists$$/d'
# for i in $(SUBDIRS) $$unset_dummy_sh_variable; \
# do (cd $$i; $(MAKE) hide); done 2>&1 | \
# sed -e '/^mv:.*: Cannot access: No such file or directory$$/d' \
# -e '/^\*\*\* Error code 1 (ignored)$$/d' \
# -e '/^mkdir: .hide: File exists$$/d'
unhide:
-mv .hide/* .hide/.??* .
-rmdir .hide
$(SUBDIRS_MAKE_START) unhide 2>&1 | $(SED_SCRIPT) $(SUBDIRS_MAKE_END)
## Making all subdirs.
all_subdirs:
$(SUBDIRS_MAKE_START) ${PASTHRU} all 2>&1 | $(SED_SCRIPT) $(SUBDIRS_MAKE_END)
##
## I do not use these for development; I use emacs TAGS exclusively.
## EMACS tags are not part of the general boilerplate.
## that's because they're all stuck in the top-level directory.
## Send fixes to these if you want them to be generally useful for VI-oriented
## developers.
newtags:
-rm -f tags
touch tags
find `pwd` -name "*\.[ch]" -exec ctags -a {} \;
# Target has problems: depends on itself (recursively)
tags: *.c *.h
[ -f tags ] && \
find `pwd` -name "*\.[ch]" -newer tags -exec ctags -u {} \; || \
$(MAKE) newtags
## A nice generic EMACS TAGS rule that I might follow later.
##TAGS:
## etags `find . -name "*\.[ch]" -print`
# A different tags file in each subdirectory.
etags: TAGS
$(SUBDIRS_MAKE_START) etags $(SUBDIRS_MAKE_END)
TAGS: $(CFILES)
etags $(CFILES) $(PROSPERO_ROOT)/misc/empty.c
###
### Rules and macros for checking out code with RCS
### This is in practice never used by me, but I throw it in here in case
### one day someone misses it. Presumably BCN had a good reason for having
### it here. --swa (hey, bcn, take a look and see if you will ever use
### this again, ok? --swa) XXX
CODE = $(CFILES) Makefile
src: $(CODE)
$(CODE):
co -q $@
###
### Things still to be done XXXX
### none of these urgent.
### Fix archie2 and archie3/makefile after rest are consistent.
### handle INSTALL Dependency appropriately, with or without libraries.
### currently, 'install' is in sad shape.
### rm to $(RM)
### ar to $(AR)
### fix WAIS copyright
### Have BCN look at CODE and src: dependency
## intriguing comment in WAIS makefile. Would like to take a look at this
## (re: configuration)
# at WAIS Inc, this is done automatically by the shared .cshrc script
# see /usr/local/shared/shared.cshrc
# figure out why mitra stuck in the gopher_gw_lib. Fix that dependency