default: build_all;@

ALWAYS=_ALWAYS_

DEF_CFLAGS=${DEF_CFLAGS?${DEF_CFLAGS}:-O}
DEF_FILES_HERE_FLAGS=${DEF_FILES_HERE_FLAGS?${DEF_FILES_HERE_FLAGS}:-s ${MACHINE}}
DEF_RMFLAGS=${DEF_RMFLAGS?${DEF_RMFLAGS}:-ef}
DEF_ARFLAGS=${DEF_ARFLAGS?${DEF_ARFLAGS}:cr}

IOWNER=${IOWNER?${IOWNER}:cs}
IGROUP=${IGROUP?${IGROUP}:cs}
IMODE=${IMODE?${IMODE}:755}

USR_MACH=${RELEASE_BASE}/usr/mach

AR=ar
AS=as
CC=${CC?${CC}:cc}
CHMOD=chmod
CP=cp
ECHO=echo
FILES_HERE=files_here
LD=ld
LINT=lint
MAKEPATH=makepath
MV=mv
NROFF=nroff
PC=pc
RANLIB=ranlib
RELEASE=release
RM=rm
SED=sed
SORT=sort
TAGS=ctags
TR=tr
XSTR=xstr
YACC=yacc

NOTSITE=_NOTSITE_

-include .${MAKEDIR}/Makefile-machdep

-include .${MAKEDIR}/Makefile-${SITE}

_CCFLAGS_NO_IV_=${$@_CFLAGS?${$@_CFLAGS}:${CFLAGS}} ${$@_CENV?${$@_CENV}:${CENV}} ${$@_CARGS?${$@_CARGS}:${CARGS}} ${$@_DEF_CFLAGS?${$@_DEF_CFLAGS}:${DEF_CFLAGS}}
_CCFLAGS_=${_CCFLAGS_NO_IV_} ${$@_INCVERS?-DKERNEL_FEATURES:${INCVERS?-DKERNEL_FEATURES:}}
_PCFLAGS_=${$@_PFLAGS?${$@_PFLAGS}:${PFLAGS}} ${$@_PENV?${$@_PENV}:${PENV}} ${$@_PARGS?${$@_PARGS}:${PARGS}}
_YFLAGS_=${$@_YFLAGS?${$@_YFLAGS}:${YFLAGS}} ${$@_YENV?${$@_YENV}:${YENV}} ${$@_YARGS?${$@_YARGS}:${YARGS}}
_LDFLAGS_=${$@_LDFLAGS?${$@_LDFLAGS}:${LDFLAGS}} ${$@_LDENV?${$@_LDENV}:${LDENV}} ${$@_LDARGS?${$@_LDARGS}:${LDARGS}}
_LINTFLAGS_=${$@_LINTFLAGS?${$@_LINTFLAGS}:${LINTFLAGS}} ${$@_LINTENV?${$@_LINTENV}:${LINTENV}} ${$@_LINTARGS?${$@_LINTARGS}:${LINTARGS}}
_TAGSFLAGS_=${$@_TAGSFLAGS?${$@_TAGSFLAGS}:${TAGSFLAGS}} ${$@_TAGSENV?${$@_TAGSENV}:${TAGSENV}} ${$@_TAGSARGS?${$@_TAGSARGS}:${TAGSARGS}}
_LIBS_=${$@_LIBS?${$@_LIBS}:${LIBS}}

_CC_=${$@_CC?${$@_CC}:${CC}}

_FILES_HERE_=${FILES_HERE_PREFIX}${FILES_HERE} -p $$MAKEPSD ${DEF_FILES_HERE_FLAGS} ${FILES_HERE_FLAGS?${FILES_HERE_FLAGS}:-F '! -name [Mm]akefile*'}

_RELEASE_=${RELEASE_PREFIX}${RELEASE} ${RELEASE_OPTIONS}

_FILES_HERE_DIRPAT_=${FILES_HERE_DIRPAT?${FILES_HERE_DIRPAT}:-d 's;^.*$$;__&_$%__;p'}
_FILES_HERE_FILPAT_=${FILES_HERE_FILPAT?${FILES_HERE_FILPAT}:-e c -e csh -e sh -e y -e uu -f 's;^.*$$;_$%_prefix_&;p'}
_FILES_HERE_DEPS_=`@${_FILES_HERE_} -D '! -name VAX ! -name SUN ! -name IBMRT ! -name PMAX ! -name SUN4 ! -name SUN3 ! -name MMAX' ${_FILES_HERE_DIRPAT_} ${_FILES_HERE_FILPAT_}`

_SET_BINARY_TARGETS_=${PROGRAMS?_BINARY_TARGETS_:${LIBRARIES?_BINARY_TARGETS_:${LIBRARIES_NO_P?_BINARY_TARGETS_:}}}
${_SET_BINARY_TARGETS_}=${PROGRAMS} ${LIBRARIES?${LIBRARIES}:${LIBRARIES_NO_P}}
_ALL_TARGETS_=${_BINARY_TARGETS_} ${OBJECTS} ${SCRIPTS} ${DATAFILES} ${OTHERS}

_ALL_BUILD_TARGETS_=${_BINARY_TARGETS_} ${LIBRARIES:.a=_p.a} ${OBJECTS} ${SCRIPTS} ${DATAFILES} ${OTHERS}

_BUILD_IV_=${$%_INCVERS?$%.iv:${INCVERS?$%.iv:}}
_BUILD_TARGET_=${$%_INCVERS?$%_BUILD_IV:${INCVERS?$%_BUILD_IV:$%}}

_PROGRAMS_=${PROGRAMS?${PROGRAMS}:_PROGRAMS_}
_LIBRARIES_=${LIBRARIES_NO_P?${LIBRARIES_NO_P}:${LIBRARIES?${LIBRARIES}:_LIBRARIES_}}
_LIBRARIES_P_=${LIBRARIES?${LIBRARIES:.a=_p.a}:_LIBRARIES_P_}

_LIB_OFILES_=${LIBRARIES?${_OFILES_}:${LIBRARIES_NO_P?${OFILES}:}}
_LIB_P_OFILES_=${LIBRARIES?${_OFILES_:.o=_p.o}:}

_PROG_OFILES_=${PROGRAMS/*/${&_OFILES?${&_OFILES}:&.o}}
_ALL_OFILES_=${OFILES?${OFILES}:${_PROG_OFILES_:u}}

_OFILES_=${OFILES?${OFILES}:${$@_OFILES?${$@_OFILES}:${_BINARY_TARGETS_?$@.o:}}}

_ALL_CLEAN_TARGETS_=${_ALL_TARGETS_}

_OFILES_CLEAN_=${OFILES?${OFILES}:${$%_OFILES?${$%_OFILES}:${_BINARY_TARGETS_?$%.o:}}}
_OFILES_P_CLEAN_=${LIBRARIES?${LIBRARIES:.a=_p.a} ${_OFILES_CLEAN_:.o=_p.o}:}
_CLEAN_SOME_=$% ${_OFILES_CLEAN_} ${$%_INCVERS?$%.iv*:${INCVERS?$%.iv*:}}
_CLEAN_MORE_=$%.out ${_OFILES_P_CLEAN_}
_CLEANSOMEFILES_=${CLEANFILES?${CLEANFILES}:${$%_CLEANFILES?${$%_CLEANFILES}:${_CLEAN_SOME_} ${$%_GARBAGE?${$%_GARBAGE}:${GARBAGE}}}}
_CLEANMOREFILES_=${$%_CLEANFILES?core:${CLEANFILES?core:${_CLEAN_MORE_}}}

_ALL_LINT_TARGETS_=${PROGRAMS}

_LINT_OFILES_=${OFILES?${OFILES}:${$%_OFILES?${$%_OFILES}:${PROGRAMS?$%.o:${BUILD_HERE?$%.o:}}}}
_LINTFILES_=${LINTFILES?${LINTFILES}:${$%_LINTFILES?${$%_LINTFILES}:${_LINT_OFILES_:.o=.c}}}

_ALL_TAGS_TARGETS_=${PROGRAMS}

_TAGS_OFILES_=${OFILES?${OFILES}:${$%_OFILES?${$%_OFILES}:${PROGRAMS?$%.o:${BUILD_HERE?$%.o:}}}}
_TAGSFILES_=${TAGSFILES?${TAGSFILES}:${$%_TAGSFILES?${$%_TAGSFILES}:${_TAGS_OFILES_:.o=.c}}}

_ALL_INSTALL_TARGETS_=${_ALL_BUILD_TARGETS_}

_ITARGET_=${TOSTAGE?_TOSTAGE_:_NO_TOSTAGE_}

_INSTALL_TARGET_=${$%_INCVERS?$%_INSTALL_IV:${INCVERS?$%_INSTALL_IV:${_ITARGET_}$%}}
_INSTALL_BUILD_=${$%_INCVERS?_need_iv_prefix_$%:${INCVERS?_need_iv_prefix_$%:}}

_STAGEFILES_=${TOSTAGE?${FROMSTAGE?:_TOSTAGE_%}:}
_STAGEBASES_=${TOSTAGE?${FROMSTAGE?_TOSTAGE_%:}:}
_STAGEFILES_IV_=${TOSTAGE?${FROMSTAGE?:_TOSTAGE_%.iv%2}:}
_STAGEBASES_IV_=${TOSTAGE?${FROMSTAGE?_TOSTAGE_%.iv%2:}:}

_INOBJECTDIR_OPTIONS_=${INOBJECTDIR_OPTIONS?${INOBJECTDIR_OPTIONS}:-e ''}
_INOBJECTDIR_FLAGS_=${INOBJECTDIR_FLAGS?${INOBJECTDIR_FLAGS}:-d d -r c -r csh -r sh -r y -r uu}
_INOBJECTDIR_=${INOBJECTDIR?${INOBJECTDIR}:${BUILD_HERE?`@${_FILES_HERE_} ${_INOBJECTDIR_FLAGS_}`:${DATAFILES}}}

_PROGRAM_C_O_=${PROGRAMS?.c.o:_PROGRAM_C_O_}
_LIBRARY_C_O_=${LIBRARIES?.c.o:${LIBRARIES_NO_P?.c.o:_LIBRARY_C_O_}}

_MMAX_NO_C_WITH_O_=USE_DEFICIENT_P_C_O_RULE

_NORMAL_LIBRARY_P_C_O_=${LIBRARIES?${_${MACHINE}_NO_C_WITH_O_?_NORMAL_LIBRARY_P_C_O_:%_p.o}:_NORMAL_LIBRARY_P_C_O_}
_DEFICIENT_LIBRARY_P_C_O_=${LIBRARIES?${_${MACHINE}_NO_C_WITH_O_?%_p.o:_DEFICIENT_LIBRARY_P_C_O_}:_DEFICIENT_LIBRARY_P_C_O_}

_XSTR_C_O_=${XSTR_OFILES?%_x.o:_XSTR_C_O_}

_NOT_A_SOURCE_FILE_=THIS IS NOT A SOURCE FILE - DO NOT EDIT
_SED_SOURCEWARNING_=-e 's;^#\(.*\)\@SOURCEWARNING\@;\1${_NOT_A_SOURCE_FILE_};p'
_SED_STRIP_=-e '1s;^#!;&;p'
_SED_CSH_STRIP_=-e '/^[ 	]*\#/d'
_SED_SH_STRIP_=-e '/^[ 	]*[\#:]/d'
_SED_CHMOD_=+x

.SUFFIXES:
.SUFFIXES: .o .s .c .y .l .p .sh .csh .txt .uu

.c:
	${_CC_} ${_LDFLAGS_} ${_CCFLAGS_} -o $*.out $*.c ${_LIBS_}
	${MV} $*.out $@

.p:
	${PC} ${_PCFLAGS_} -o $*.out $*.p ${_LIBS_}
	${MV} $*.out $@

.csh:
	@echo "csh-compile $< >$*.out"
	@${SED}\
	 ${_SED_STRIP_}\
	 ${_SED_SOURCEWARNING_}\
	 ${$@_SED_OPTIONS?${$@_SED_OPTIONS}:${SED_OPTIONS}}\
	 ${_SED_CSH_STRIP_} $< >$*.out
	${CHMOD} ${_SED_CHMOD_} $*.out
	${MV} -f $*.out $*

.sh:
	@echo "sh-compile $< >$*.out"
	@${SED}\
	 ${_SED_STRIP_}\
	 ${_SED_SOURCEWARNING_}\
	 ${$@_SED_OPTIONS?${$@_SED_OPTIONS}:${SED_OPTIONS}}\
	 ${_SED_SH_STRIP_} $< >$*.out
	${CHMOD} ${_SED_CHMOD_} $*.out
	${MV} -f $*.out $*

.txt:
	@echo "txt-compile $< >$*.out"
	@${SED}\
	 ${_SED_SOURCEWARNING_}\
	 ${$@_SED_OPTIONS?${$@_SED_OPTIONS}:${SED_OPTIONS}}\
	 $< >$*.out
	${MV} -f $*.out $*

.y:
	${YACC} ${_YFLAGS_} $*.y
	${_CC_} ${_LDFLAGS_} ${_CCFLAGS_} -o $*.out y.tab.c
	${MV} -f $*.out $@
	${RM} -f y.tab.c

.uu:
	uudecode $*.uu

${_PROGRAM_C_O_}:
	${_CC_} -c ${_CCFLAGS_} $*.c

${_LIBRARY_C_O_}:
	${_CC_} -c ${_CCFLAGS_} $*.c
	${LD} ${_LDFLAGS_} -x -r $*.o
	${MV} -f a.out $*.o

${_NORMAL_LIBRARY_P_C_O_}: %.c
	${_CC_} -c ${_CCFLAGS_} -o %_p.o -p %.c
	${LD} ${_LDFLAGS_} -x -r %_p.o
	${MV} -f a.out %_p.o

${_DEFICIENT_LIBRARY_P_C_O_}: %.c
	-${RM} -f %_p.c
	ln -s %.c %_p.c
	${_CC_} -c ${_CCFLAGS_} -p %_p.c
	-${RM} -f %_p.c
	${LD} ${_LDFLAGS_} -x -r %_p.o
	${MV} -f a.out %_p.o

${_XSTR_C_O_}: %.c
	${_CC_} -E ${_CCFLAGS_} %.c | ${XSTR} -c -
	${_CC_} -c ${_CCFLAGS_} x.c
	${MV} -f x.o %_x.o
	${RM} -f x.c

.p.o:
	${PC} -c ${_PCFLAGS_} $*.p


${ALWAYS}:;@

.INOBJECTDIR: ${_INOBJECTDIR_}
	@echo "copy-here <$@ >$@.out"
	@${SED} ${$@_SED_OPTIONS?${$@_SED_OPTIONS}:${SED_OPTIONS}} ${_INOBJECTDIR_OPTIONS_} <$@ >./$@.out
	${MV} -f ./$@.out ./$@

__%1_%2__: `@-${MAKEPATH} %1/%2; echo ${ALWAYS}`
	@cd %1 &&\
	 echo "cd %1 && ${MAKE} %2_all" &&\
	 echo "[ ${IDIR}%1 ]" &&\
	 exec ${MAKE} %2_all

%.iv%2: %
	${CP} -p $> $@

PERCENTD=%d

%_iv.c:
	@echo '#include <sys/version.h>' >%_iv.c
	@echo '#include <stdio.h>' >>%_iv.c
	@echo 'main() {' >>%_iv.c
	@echo '  fprintf(stderr,"INCLUDE VERSION: ${PERCENTD}\n",INCLUDE_VERSION);' >>%_iv.c
	@echo '  printf("${PERCENTD}\n", INCLUDE_VERSION);' >>%_iv.c
	@echo '}' >>%_iv.c

%.iv:	%_iv.c
	${_CC_} ${_LDFLAGS_} -DKERNEL_FEATURES ${_CCFLAGS_NO_IV_} -o %.iv.out %_iv.c
	./%.iv.out >%.iv
	@${RM} -f ./%.iv.out %_iv.c

%.iv%2.iv: %.iv
	echo %2 | cmp -s - %.iv

_%_files_here_: $${_FILES_HERE_DEPS_};@

build_all: ${BUILD_HERE?_build_files_here_:${SUBDIRS/*/__&_build__/} ${_ALL_BUILD_TARGETS_/^/_build_prefix_}};@

all:	${ALWAYS}
	@echo "$@ is no longer an acceptable target for build..."; exit 1

_build_prefix_%: $${_BUILD_IV_} $${_BUILD_TARGET_};@

_build_prefix_%.iv%2: %.iv%2.iv %.iv%2;@

_build_prefix_${NOTSITE}%:
	@echo % is not used at ${SITE}

${_PROGRAMS_}: $${_OFILES_}
	${_CC_} ${_LDFLAGS_} -o $@.out ${_OFILES_} ${_LIBS_}
	${MV} $@.out $@

${_LIBRARIES_}: ${_LIBRARIES_}($${_LIB_OFILES_})
	${AR} ${DEF_ARFLAGS} $@ $?
	${RANLIB} $@
	${RM} -f $?

${_LIBRARIES_P_}: ${_LIBRARIES_P_}($${_LIB_P_OFILES_})
	${AR} ${DEF_ARFLAGS} $@ $?
	${RANLIB} $@
	${RM} -f $?

${_ALL_OFILES_}: ${HFILES}

%_BUILD_IV: `@echo -n %.iv | cat - %.iv`;@

clean_all: ${BUILD_HERE?_clean_files_here_:${SUBDIRS/*/__&_clean__/} ${_ALL_CLEAN_TARGETS_/^/_clean_prefix_}}
	@${RM} ${DEF_RMFLAGS} core

clean:	${ALWAYS}
	@echo "$@ is no longer an acceptable target for build..."; exit 1

_clean_prefix_%:
	@${RM} ${DEF_RMFLAGS} ${_CLEANSOMEFILES_}
	@${RM} ${DEF_RMFLAGS} ${_CLEANMOREFILES_}

_clean_prefix_${NOTSITE}%:;@

lint_all: ${BUILD_HERE?_lint_files_here_:${SUBDIRS/*/__&_lint__/} ${_ALL_LINT_TARGETS_/^/_lint_prefix_}};@

_lint_prefix_%: $${_LINTFILES_}
	${LINT} ${_LINTFLAGS_} $>

_lint_prefix_${NOTSITE}%:;@

tags_all: ${BUILD_HERE?_tags_files_here_:${SUBDIRS/*/__&_tags__/} ${_ALL_TAGS_TARGETS_/^/_tags_prefix_}};@

_tags_prefix_%: $${_TAGSFILES_}
	${TAGS} ${_TAGSFLAGS_} $>

install_all: ${BUILD_HERE?_install_files_here_:${SUBDIRS/*/__&_install__/} ${_ALL_INSTALL_TARGETS_/^/_install_prefix_}};@

_install_prefix_%: $${_INSTALL_TARGET_};@

_install_prefix_%.iv%2: $${_ITARGET_}%.iv%2;@

_install_prefix_${NOTSITE}%:;@

_need_iv_prefix_%: ${ALWAYS}
	@echo "To release %, you must use %.iv#"; exit 1

%_INSTALL_IV: `@echo -n $${_ITARGET_}%.iv | cat - %.iv`;@

${_STAGEFILES_}: $${_INSTALL_BUILD_} ${ALWAYS}
	${_RELEASE_} -o ${%_IOWNER?${%_IOWNER}:${IOWNER}}\
		-g ${%_IGROUP?${%_IGROUP}:${IGROUP}}\
		-m ${%_IMODE?${%_IMODE}:${IMODE}}\
		-tostage ${TOSTAGE}\
		-fromfile %\
		${%_IDIR?${%_IDIR}:${IDIR}}%\
		${%_ILINKS?${%_ILINKS}:${ILINKS}}

${_STAGEBASES_}: $${_INSTALL_BUILD_} ${ALWAYS}
	${_RELEASE_} -o ${%_IOWNER?${%_IOWNER}:${IOWNER}}\
		-g ${%_IGROUP?${%_IGROUP}:${IGROUP}}\
		-m ${%_IMODE?${%_IMODE}:${IMODE}}\
		-tostage ${TOSTAGE}\
		-fromstage ${FROMSTAGE}\
		${%_IDIR?${%_IDIR}:${IDIR}}%\
		${%_ILINKS?${%_ILINKS}:${ILINKS}}

${_STAGEFILES_IV_}: ${ALWAYS}
	${_RELEASE_} -o ${%_IOWNER?${%_IOWNER}:${IOWNER}}\
		-g ${%_IGROUP?${%_IGROUP}:${IGROUP}}\
		-m ${%_IMODE?${%_IMODE}:${IMODE}}\
		-tostage ${TOSTAGE}\
		-fromfile %.iv%2\
		${%_IDIR?${%_IDIR}:${IDIR}}%.iv%2\
		${%_ILINKS?${%_ILINKS}:${ILINKS}}

${_STAGEBASES_IV_}: ${ALWAYS}
	${_RELEASE_} -o ${%_IOWNER?${%_IOWNER}:${IOWNER}}\
		-g ${%_IGROUP?${%_IGROUP}:${IGROUP}}\
		-m ${%_IMODE?${%_IMODE}:${IMODE}}\
		-tostage ${TOSTAGE}\
		-fromstage ${FROMSTAGE}\
		${%_IDIR?${%_IDIR}:${IDIR}}%.iv%2\
		${%_ILINKS?${%_ILINKS}:${ILINKS}}
