# $Source: /usr/local/kcs/sys.DAVIS_800/conf_conv/RCS/makefile,v $
# $Revision $ $Author: runyan $
# $State: Exp $         $Locker:  $
# $Date: 96/06/11 11:56:33 $

# Non-chroot Build Environment to use.
# Davis IC12F - F is for Final

BEROOT=



# Macro definitions for executables
RM=rm
MAKE=make
TOUCH=touch
CAT=cat

MPP=../bld_tools/mpp

all: 700 800 scsi_log boot q4

######## Kernel Flavors

700 700.debug 700.dbg: betools
	${MAKE} kernel 	DEFS="defs.comm defs.700 defs.debug" \
			FILES="files files.700"	\
			SERIES="700"
800 800.debug 800.dbg: betools
	${MAKE} kernel 	DEFS="defs.comm defs.800 defs.debug" \
			FILES="files files.800"	\
			SERIES="800"
700.nodebug: betools
	${MAKE} kernel 	DEFS="defs.comm defs.700" \
			FILES="files files.700"	\
			SERIES="700"
800.nodebug: betools
	${MAKE} kernel 	DEFS="defs.comm defs.800" \
			FILES="files files.800"	\
			SERIES="800"
800.gprof: betools
	${MAKE} kernel  DEFS="defs.comm defs.gprof defs.800 defs.perf" \
			FILES="files files.800" \
			SERIES="800"
700.gprof: betools
	${MAKE} kernel  DEFS="defs.comm defs.gprof defs.700 defs.perf" \
			FILES="files files.700" \
			SERIES="700"
700.instr: betools
	${MAKE} kernel 	DEFS="defs.comm defs.700 defs.instr" \
			FILES="files files.700"	\
			SERIES="700"
800.instr: betools
	${MAKE} kernel 	DEFS="defs.comm defs.800 defs.instr" \
			FILES="files files.800"	\
			SERIES="800"
700.pbo: betools
	${MAKE} kernel 	DEFS="defs.comm defs.700 defs.pbo defs.perf" \
			FILES="files files.700"	\
			SERIES="700"
800.pbo: betools
	${MAKE} kernel 	DEFS="defs.comm defs.800 defs.pbo defs.perf" \
			FILES="files files.800"	\
			SERIES="800"

######## Tools

betools: ALWAYS
	cd ../bld_tools ; \
	   $(MAKE) $(@) BEROOT=$(BEROOT)

boot mongoose: betools
	cd ../mongoose ; \
	   $(MAKE) -f Makefile makefile 
	cd ../mongoose ; \
	   $(MAKE) -f makefile boot

scsi_log: scsi_log.700 scsi_log.800

scsi_log.700: betools
	cd ../scsi_log/objects ; \
	   $(MAKE) -f makefile 700

scsi_log.800: betools
	cd ../scsi_log/objects ; \
	   $(MAKE) -f makefile 800

q4: 
	cd ../q4 ; \
	   $(MAKE) -f makefile all

######## Lint Flavors

lint.700:
	${MAKE} lint	SERIES="700"

lint.800:
	${MAKE} lint	SERIES="800"


######### Internal Targets

OBJDIR=S$(SERIES)
FLAVOR=../$(OBJDIR)/flavor

# Default Flavor for Lint
DDEFS="defs.comm defs.$(SERIES) defs.perf"
DFILES="files files.$(SERIES)"


### "flavor" targets record build flavor
### flavor-mv Moves old build area aside if it doesn't match new flavor
### flavor-ck Checks existence of a build flavor (& corresponding makefile)

### Make sure we don't mix flavors (e.g., debug & perf) in same
### object directory
#
# If build flavor doesn't match previous build, move object directories aside
# If build flavor matches, exit peacefully -- just a re-build
# Finally create/update flavor file
flavor-mv: 
	 @if [ -f $(FLAVOR) ] ; then \
	   if [ "$(DEFS) $(FILES)" != "`cat $(FLAVOR)`" ] ; then \
	     echo "\nBuild Flavor Changed!" ; \
	     echo "Current Build Flavor = $(DEFS) $(FILES)" ; \
	     echo "Previous Build Flavor = `cat $(FLAVOR)`" ; \
	     echo "Moving $(OBJDIR) and lib.$(SERIES) directories aside\n" ; \
	     if [ -d ../$(OBJDIR).prev -o -d ../lib.$(SERIES).prev ] ; then \
	       echo "Previous directories (../*.prev) already exist" ; \
	       echo "Giving up..." ; \
	       exit 1 ; \
	     else \
	       [ -d ../$(OBJDIR) ] && \
			mv -f ../$(OBJDIR) ../$(OBJDIR).prev ; \
	       [ -d ../lib.$(SERIES) ] && \
			mv -f ../lib.$(SERIES) ../lib.$(SERIES).prev; \
	     fi ; \
	   else \
	     exit 0 ; \
	   fi ; \
	  fi ; \
	  ${RM} -f $(FLAVOR) ; \
	  mkdir -p ../${OBJDIR} ; \
	  echo "$(DEFS) $(FILES)" > $(FLAVOR) ; 

### Check for flavor definition
#
# Check existence of prerequisite kernel makefile (for cflags & lint makefile)
# If no flavor defined, use default to make it.  Make flavor-mv to record
# the flavor used.
flavor-ck:
	 @if [ ! -f $(FLAVOR) ] ; then \
	   echo "No Build Flavor defined!" ; \
	   echo "Using default flavor" ; \
	   $(MAKE) flavor-mv ../$(OBJDIR)/makefile DEFS=$(DDEFS) \
			FILES=$(DFILES) SERIES=$(SERIES) ; \
	  fi ; 

kernel: flavor-mv ../$(OBJDIR)/makefile 
	${RM} -f ../$(OBJDIR)/mk*.out 
	cd ../$(OBJDIR) ; ${MAKE} depend > mkdepend.out 2>&1 
	cd ../$(OBJDIR) ; ${MAKE} hp-ux > mkhp-ux.out 2>&1

lint: flavor-ck ../lint.$(SERIES)/makefile
	${RM} -f ../lint.$(SERIES)/mk*.out
	cd ../lint.$(SERIES) ; \
		${MAKE} lint > mklint.out 2>&1 

../lint.$(SERIES)/makefile: flavor-ck ../lint.$(SERIES)/cflags lint.template \
				${MPP}
	${RM} -f $@
	cat `cat $(FLAVOR)` | \
		${MPP} lint.template > $@ 

../lint.$(SERIES)/cflags:
	${RM} -f $@
	mkdir -p ${@D}
	cd ../$(OBJDIR) ; \
		${MAKE} flags > ../lint.$(SERIES)/cflags


../$(OBJDIR)/makefile:: ${DEFS}
	@[ -f $@ ] &&  { echo \
 "WARNING: $(?) file(s) changed.\n" \
 "  Any ../${OBJDIR}/*.o files may or may not need to be re-built.\n" \
 "  To be safe, interrupt and remove objects before re-building.\n" \
 "  To be fast, ignore this message.\n" \
 "  Continuing...\n" ; sleep 3 ; } || exit 0

../$(OBJDIR)/makefile:: ${MPP}
../$(OBJDIR)/makefile:: ../$(OBJDIR)/dependencies makefile.template \
				${DEFS} ${FILES}
	${RM} -f $@ 
	echo BEROOT=$(BEROOT) > $@
	cat ${DEFS} ${FILES} | \
		${MPP} makefile.template >> $@ 


../$(OBJDIR)/dependencies:
	${RM} -f $@ 
	mkdir -p ${@D}
	${TOUCH} $@


${MPP}:	ALWAYS
	cd $(@D) ; \
	$(MAKE) $(@F)

# Dummy target to force re-builds
ALWAYS:
	@true
