1
0
Files
irix-657m-src/irix/cmd/netman/Commonrules.sun
2022-09-29 17:59:04 +03:00

318 lines
9.9 KiB
Plaintext

# Copyright 1990 Silicon Graphics, Inc. All rights reserved.
#
#ident "$Revision: 1.1 $"
#
# Common makefile rules.
# Notes:
# - After including ${ROOT}/usr/include/make/commondefs, a makefile may
# say ``include ${COMMONRULES}'' to get this file.
# - It is up to the including makefile to define a default rule before
# including ${COMMONRULES}.
# - This file defines the following lists: SOURCES, enumerating all
# source files; OBJECTS, the .o files derived from compilable source;
# and DIRT, which lists intermediates and temporary files to be
# removed by clean.
# - The including (parent) makefile may define source file lists for each
# standard suffix: CFILES for .c, ASFILES for .s (named after ASFLAGS),
# YFILES for .y, etc. This file combines all such lists into SOURCES.
# - The parent makefile must define TARGETS in order for clobber to work.
# - If the parent makefile must overload the common targets with special
# rules (e.g. to perform recursive or subdirectory makes), then set
# COMMONPREF to some unique prefix before including ${COMMONRULES},
# and make sure that each common target depends on its prefixed name.
# For example, a makefile which passes common targets and install on
# to makes in subdirectories listed in DIRS might say
#
# COMMONPREF= xxx
# include ${COMMONRULES}
#
# ${COMMONTARGS} install: ${COMMONPREF}$$@
# @for d in ${DIRS}; do \
# ${ECHO} "\tcd $$d; ${MAKE} $@"; \
# cd $$d; ${MAKE} $@; cd ..; \
# done
#
# Thus, all of the common rules plus install are passed to sub-makes
# *and* executed in the current makefile (as xxxclean, xxxclobber,
# xxxinstall, etc).
#
SOURCES= ${HFILES} ${ASFILES} ${C++FILES} ${CFILES} ${EFILES} ${FFILES} \
${LFILES} ${PFILES} ${RFILES} ${SHFILES} ${YFILES}
OBJECTS= ${ASFILES:.s=.o} ${C++FILES:.c++=.o} ${CFILES:.c=.o} ${EFILES:.e=.o} \
${FFILES:.f=.o} ${LFILES:.l=.o} ${PFILES:.p=.o} ${RFILES:.r=.o} \
${YFILES:.y=.o}
#
# C++ inference rules. Certain of these may show up in make someday.
#
.SUFFIXES: .c++ .yuk
.c++:
${C++} ${C++FLAGS} $< ${LDFLAGS} -o $@
.c++.o:
${C++} ${C++FLAGS} -c $<
.c++.s:
${C++} ${C++FLAGS} -S $<
.c++.i:
${C++} ${C++FLAGS} -E $< > $*.i
.c++.yuk:
${C++} ${C++FLAGS} -Fc -.yuk $<
#
# Rather than removing ${OBJECTS}, clean removes ${CLEANOBJECTS} which we
# set to *.[ou] by default, to remove obsolete objects and -O3 ucode files
# after source has been reorganized. If files ending in .[ou] should not
# be removed by clean, this definition can be overridden after the include
# of commonrules to define CLEANOBJECTS=${OBJECTS}.
#
CLEANOBJECTS= *.[ou]
#
# What gets cleaned, apart from objects.
#
DIRT= ${GDIRT} ${VDIRT} ${LDIRT}
GDIRT= a.out core lex.yy.[co] y.tab.[cho] ${_FORCE}
#
# An always-unsatisfied target. The name is unlikely to occur in a file tree,
# but if _force existed in a make's current directory, this target would be
# always-satisfied and targets that depended on it would not be made.
#
_FORCE= ${COMMONPREF}_force
${_FORCE}:
#
# File removal rules: there are three.
# - clean removes intermediates and dirt
# - clobber removes targets as well as intermediates and dirt
# - rmtargets removes targets only
# One might 'make clean' in a large tree to reclaim disk space after targets
# are built, but before they are archived into distribution images on disk.
# One might 'make rmtargets' to remove badly-linked executables, and then
# run a 'make' to re-link the good objects.
#
# If you use incdepend (see below), then 'make clobber' will remove the
# .*dependtime marker files used by incdepend to find modified ${DEPFILES}.
# Multi-product incremental depend uses the .*${PRODUCT}incdepend markers.
# To clobber everything but the marker files, use 'make clean rmtargets'.
#
.PRECIOUS: .sdependtime .c++dependtime .cdependtime \
.s${PRODUCT}incdepend .c++${PRODUCT}incdepend .c${PRODUCT}incdepend
${COMMONPREF}clobber: ${COMMONPREF}clean ${COMMONPREF}rmtargets ${_FORCE}
rm -rf ${MKDEPFILE} .*dependtime .*incdepend
${COMMONPREF}clean: ${_FORCE}
rm -rf ${CLEANOBJECTS} ${DIRT}
${COMMONPREF}rmtargets: ${_FORCE}
rm -rf ${TARGETS}
#
# Automated header dependency inference. Most makefiles need only set the
# CFILES, ASFILES, etc. lists and include commonrules. Those makefiles that
# build product-dependent source (with product-dependent includes) should set
# MKDEPRULE to ${EVERYPRODUCT_MKDEPRULE} *after* including commonrules, and
# should set EVERYPRODUCT to the list of products that they build.
#
MKDEPRULE= NP
EVERYPRODUCT_MKDEPRULE= EP
${COMMONPREF}depend: ${_FORCE}
@slist="${ASDEPFILES}" Clist="${C++DEPFILES}" clist="${CDEPFILES}"; \
case ${MKDEPRULE} in \
NP) case "$$slist" in \
*.*) \
${ECHO} "${MKDEPENDAS} ${MKDEPFILE} $$slist"; \
${MKDEPENDAS} ${MKDEPFILE} $$slist; \
touch .sdependtime; \
esac; \
case "$$Clist" in \
*.*) \
${ECHO} "${MKDEPENDC++} ${MKDEPFILE} $$Clist"; \
${MKDEPENDC++} ${MKDEPFILE} $$Clist; \
touch .c++dependtime; \
esac; \
case "$$clist" in \
*.*) \
${ECHO} "\t${MKDEPENDC} ${MKDEPFILE} $$clist"; \
${MKDEPENDC} ${MKDEPFILE} $$clist; \
touch .cdependtime; \
esac;; \
EP) nprod=`echo ${EVERYPRODUCT} | wc -w`; \
case "$$slist" in \
*.*) \
for p in ${EVERYPRODUCT}""; do \
${ECHO} 1>&2 "Making .s depend for PRODUCT $$p."; \
${MAKE} -sf ${MAKEFILE} PRODUCT=$$p _s$${p}depend; \
done | \
${MKDEPEND} ${MKDEPASFLAGS} -p $$nprod ${MKDEPFILE}; \
esac; \
case "$$Clist" in \
*.*) \
for p in ${EVERYPRODUCT}""; do \
${ECHO} 1>&2 "Making .c++ depend for PRODUCT $$p."; \
${MAKE} -sf ${MAKEFILE} PRODUCT=$$p _c++$${p}depend; \
done | \
${MKDEPEND} ${MKDEPC++FLAGS} -p $$nprod ${MKDEPFILE}; \
esac; \
case "$$clist" in \
*.*) \
for p in ${EVERYPRODUCT}""; do \
${ECHO} 1>&2 "Making .c depend for PRODUCT $$p."; \
${MAKE} -sf ${MAKEFILE} PRODUCT=$$p _c$${p}depend; \
done | \
${MKDEPEND} ${MKDEPCFLAGS} -p $$nprod ${MKDEPFILE}; \
esac; \
esac
_s${PRODUCT}depend: ${ASDEPFILES} ${_FORCE}
${ASF} -M ${ASDEPFILES} | ${PRODUCT_RAWDEPFILTER}; \
touch .s${PRODUCT}incdepend
_c++${PRODUCT}depend: ${C++DEPFILES} ${_FORCE}
${C++F} -M ${C++DEPFILES} | ${PRODUCT_RAWDEPFILTER}; \
touch .c++${PRODUCT}incdepend
_c${PRODUCT}depend: ${CDEPFILES} ${_FORCE}
${CCF} -M ${CDEPFILES} | ${PRODUCT_RAWDEPFILTER}; \
touch .c${PRODUCT}incdepend
#
# Incremental depend uses marker files to find ${DEPFILES} that are newer
# than their dependencies. Note that the non-incremental rules, above, also
# touch the marker files. Care is taken not to write a product-independent
# dependency on ${DEPFILES}, so that the list of dependent source can vary
# with each product.
#
# XXX can't run only one sub-make that depends on all .*dependtime, because
# XXX smake will parallelize and mkdepend doesn't interlock itself
#
${COMMONPREF}incdepend: ${_FORCE}
@slist="${ASDEPFILES}" Clist="${C++DEPFILES}" clist="${CDEPFILES}"; \
case ${MKDEPRULE} in \
NP) case "$$slist" in \
*.*) \
${MAKE} -f ${MAKEFILE} _quiet.sdependtime; \
esac; \
case "$$Clist" in \
*.*) \
${MAKE} -f ${MAKEFILE} _quiet.c++dependtime; \
esac; \
case "$$clist" in \
*.*) \
${MAKE} -f ${MAKEFILE} _quiet.cdependtime; \
esac;; \
EP) nprod=`echo ${EVERYPRODUCT} | wc -w`; \
case "$$slist" in \
*.*) \
for p in ${EVERYPRODUCT}""; do \
${ECHO} 1>&2 "Making .s incdepend for PRODUCT $$p."; \
${MAKE} -sf ${MAKEFILE} PRODUCT=$$p _s$${p}incdepend; \
done | \
${MKDEPEND} ${MKDEPASFLAGS} -ip $$nprod ${MKDEPFILE}; \
esac; \
case "$$Clist" in \
*.*) \
for p in ${EVERYPRODUCT}""; do \
${ECHO} 1>&2 "Making .c++ incdepend for PRODUCT $$p.";\
${MAKE} -sf ${MAKEFILE} PRODUCT=$$p _c++$${p}incdepend;\
done | \
${MKDEPEND} ${MKDEPC++FLAGS} -ip $$nprod ${MKDEPFILE}; \
esac; \
case "$$clist" in \
*.*) \
for p in ${EVERYPRODUCT}""; do \
${ECHO} 1>&2 "Making .c incdepend for PRODUCT $$p."; \
${MAKE} -sf ${MAKEFILE} PRODUCT=$$p _c$${p}incdepend; \
done | \
${MKDEPEND} ${MKDEPCFLAGS} -ip $$nprod ${MKDEPFILE}; \
esac; \
esac
# so that make doesn't announce "`.sdependtime' is up to date."
_quiet.sdependtime: .sdependtime
_quiet.c++dependtime: .c++dependtime
_quiet.cdependtime: .cdependtime
.sdependtime: ${ASDEPFILES}
@if test -n "$?"; then \
${ECHO} "\t${MKDEPENDAS} -i ${MKDEPFILE} $?"; \
${MKDEPENDAS} -i ${MKDEPFILE} $?; \
touch $@; \
fi
.c++dependtime: ${C++DEPFILES}
@if test -n "$?"; then \
${ECHO} "\t${MKDEPENDC++} -i ${MKDEPFILE} $?"; \
${MKDEPENDC++} -i ${MKDEPFILE} $?; \
touch $@; \
fi
.cdependtime: ${CDEPFILES}
@if test -n "$?"; then \
${ECHO} "\t${MKDEPENDC} -i ${MKDEPFILE} $?"; \
${MKDEPENDC} -i ${MKDEPFILE} $?; \
touch $@; \
fi
# you can't add dependencies to a target that begins with '.'
_s${PRODUCT}incdepend: .s${PRODUCT}incdepend
_c++${PRODUCT}incdepend: .c++${PRODUCT}incdepend
_c${PRODUCT}incdepend: .c${PRODUCT}incdepend
.s${PRODUCT}incdepend: ${ASDEPFILES}
@if test -n "$?"; then \
${ASF} -M $? | ${PRODUCT_RAWDEPFILTER}; \
touch $@; \
fi
.c++${PRODUCT}incdepend: ${C++DEPFILES}
@if test -n "$?"; then \
${C++F} -M $? | ${PRODUCT_RAWDEPFILTER}; \
touch $@; \
fi
.c${PRODUCT}incdepend: ${CDEPFILES}
@if test -n "$?"; then \
${CCF} -M $? | ${PRODUCT_RAWDEPFILTER}; \
touch $@; \
fi
#
# A sed filter that prepends ${VPATH} to object targets emitted by cc -M.
# ${VPATH} should name a directory that holds product-dependent objects.
#
PRODUCT_RAWDEPFILTER= sed -e 's:^:${VPATH}/:'
#
# Lint and C tags support.
#
${COMMONPREF}fluff: ${_FORCE}
${LINT} ${LINTFLAGS} ${CDEFS} ${CINCS} ${CFILES} ${LDLIBS}
CTAGS= ctags
${COMMONPREF}tags: ${_FORCE}
rm -f tags
find . \( -name '*.[cfhlpy]' -o -name '*.c++' \) \
! -name '.*' ! -name 'llib-*' ! -name '*,v' \
${CTAGFINDARGS} -print | \
sed 's:^\./::' | \
xargs ${CTAGS} -a ${CTAGOPTS}
if test -f tags; then \
sort -u +0 -1 -o tags tags; \
fi
#
# Include the make dependency file if it exists.
#
#sinclude ${MKDEPFILE}
#
# Local make rules
#
#sinclude ${LOCALRULES}