#----------------------------------------------------------------------
#  Makefile
# 
#   Makefile for msVerify Directory
# 
# (c) Copyright 1995  Hewlett-Packard Company.
# The contents of this software are proprietary and confidential to
# the Hewlett- Packard Company, and are limited in distribution to
# those with a direct need to know.  Individuals having access to
# this software are responsible for maintaining the confidentiality
# of the content and for keeping the software secure when not in use.
# Transfer to any party is strictly forbidden other than as expressly
# permitted in writing by Hewlett-Packard Company.  Unauthorized
# transfer to or possession by any unauthorized party may be a
# criminal offense.
# 
#		     RESTRICTED RIGHTS LEGEND
# 
#      Use,  duplication,  or disclosure by the Government  is
#      subject to restrictions as set forth in subdivision (b)
#      (3)  (ii)  of the Rights in Technical Data and Computer
#      Software clause at 52.227-7013.
# 
#			 HEWLETT-PACKARD COMPANY
#			 3000 Hanover St.
#			 Palo Alto, CA  94304
# 
# LINK ERRORS:
# 
# TARGETS:
#
#  all:		Builds udftocmr, udfval, cmrFormt, cmr.a (implicit)
#  clean:       Removes all executables, .o files, intermediate lex
#		and yacc files.
#  udftocmr:	App to write cmr from a udf archive.
#  Pudftocmr:	Purify version of udftocmr.
#  udfval:	udf to cmr comparison with logging output.
#  Pudfval:	Purify version of udfval.
#  cmrFormt:	Small app which reads and rewrites CMR, with the 
#		option to change long/short words & tab size.  This
#		app was written mainly to test & illustrate the 
#		reader & writer classes.
#  PcmrFormt:	Purify version of cmrFormt.
#
# COMPILER WARNINGS:
#
#  See tail of file for explanation
#
# ----------------------------------------------------------------------
# $Source: /projects/HMS/nsr/udfAncil/msVerify/Makefile,v $
# $Revision: 1.17 $	$Author: hmgr $
# $State: Exp $   	$Locker:  $
# $Date: 96/04/30 09:45:08 $

# -- NSR directories --

NSRDIR=../..
COREDIR=$(NSRDIR)/udfCore
ANCILDIR=$(NSRDIR)/udfAncil
CONFIGDIR=	$(COREDIR)/config
MSDIR=		$(COREDIR)/ms
SYSDIR=		$(COREDIR)/sys
DEVDIR=		$(COREDIR)/devs
DEVSTESTDIR=	$(ANCILDIR)/devsTest
ALLDEVDIR=	$(ANCILDIR) $(DEVSTESTDIR)
DESCRDIR=	$(COREDIR)/descr
MSTESTDIR=	$(ANCILDIR)/msTest

# -- Tools --

ASM=	gas
CC=	gcc
CFLAGS= -g -I../devsTest -I../devs
CXX=	g++
LEX=	flex
YACC=	bison
LOADER=	/usr/local/lib/gcc-lib/hppa1.1-hp-hpux9.01/2.6.3/ld

# -- Flags --

OFLAGS=		-DPROTO_CODE -D_THIRD_PARTY_ERROR_CODES_ 
DEBUG_FLAGS=	-g -DRWDEBUG -DVERIFY
NSR_INCDIR=	-I$(NSRDIR) -I$(DEVDIR) -I$(DEVSTESTDIR) -I$(DEVSTESTDIR) \
		-I$(COREDIR) -I$(CONFIGDIR)
#NSR_DEFINE=	-D_INCLUDE__STDC__ -DNSR_VERIFY -DMSTEST -D_NO_ALIASES_
NSR_DEFINE=	-D_INCLUDE__STDC__ -DNSR_VERIFY -DMSTEST -D_HP_ALIASES_
CXXFLAGS=	$(DEBUG_FLAGS) $(NSR_INCDIR) $(NSR_DEFINE) $(OFLAGS)

# -- Libraries --

TOOL_LIB=	-ly -lfl -lrwtool
DEV_LIB=	acptlib.o
MSTEST_LIB=	hash.o dlist.o arcImEx.o $(DEV_LIB)
PARSER_LIB=	cmrYacc.o cmrLex.o
NSR_LIB=	msLib.o
CMR_LIB=	cmr.a

# -- Special --

# For when debugging makefile changes, etc., and you know you don't want
# to rebuild from scratch every time.
#MAKEFILE_DEPEND=	Makefile
MAKEFILE_DEPEND=

# -- Product --

PROGRAMS=	udftocmr udfval cmrFormt

# -- Sources --

NSR_INCLUDE= \
	$(CONFIGDIR)/nsrCfg.h \
	$(CONFIGDIR)/nsrAlias.h \
	$(CONFIGDIR)/nsrTypdf.h \
	$(COREDIR)/nsrLib.h \
	$(SYSDIR)/nsrError.h \
	$(SYSDIR)/nsrAux.h \
	$(SYSDIR)/nsrDebug.h \
	$(SYSDIR)/nsrTrace.h \
	$(DESCRDIR)/nsrTypes.h \
	$(DESCRDIR)/nsrRecog.h \
	$(DESCRDIR)/nsrVol.h \
	$(DESCRDIR)/nsrEA.h \
	$(DESCRDIR)/nsrAttr.h \
	$(DESCRDIR)/nsrFile.h \
	$(MSDIR)/nsrImp.h \
	$(MSDIR)/nsrInt.h \
	$(DEVDIR)/nsrscsi.h \
	$(DEVDIR)/RealSSdv.h \
	$(DEVDIR)/RealMSdv.h \
	$(DEVDIR)/nsrASSdv.h \
	$(DEVDIR)/nsrAMSdv.h \
	$(DEVDIR)/nsrRSSdv.h \
	$(DEVDIR)/nsrRMSdv.h \
	$(MSDIR)/nsrArc.h \
	$(MSTESTDIR)/arcImEx.h \
	$(MSDIR)/nsrImp.h \
	$(MSDIR)/nsrInt.h

NSR_SOURCE= \
	$(SYSDIR)/nsrError.cpp \
	$(SYSDIR)/nsrAux.cpp \
	$(SYSDIR)/nsrDebug.cpp \
	$(SYSDIR)/nsrTrace.cpp \
	$(DEVDIR)/nsrRSSdv.cpp \
	$(DEVDIR)/nsrRMSdv.cpp \
	$(DESCRDIR)/nsrTypes.cpp \
	$(DESCRDIR)/nsrVol.cpp \
	$(DESCRDIR)/nsrEA.cpp \
	$(DESCRDIR)/nsrAttr.cpp \
	$(DESCRDIR)/nsrFile.cpp \
	$(MSDIR)/nsrImp.cpp \
	$(MSDIR)/nsrInt.cpp \
	$(MSDIR)/nsrArc.cpp

MSTESTSOURCES= \
	$(MSTESTDIR)/msLib.cpp \
	$(MSTESTDIR)/Makefile \
	$(MSTESTDIR)/hash.c \
	$(MSTESTDIR)/hash.h \
	$(DEVSTESTDIR)/dlist.c \
	$(DEVSTESTDIR)/dlist.h \
	$(MSTESTDIR)/acptlib.c \
	$(MSTESTDIR)/arcTree.h \
	$(MSTESTDIR)/arcTree.cpp \
	$(MSTESTDIR)/arcImEx.h \
	$(MSTESTDIR)/arcImEx.cpp \
	$(MSTESTDIR)/arcTree.cpp \
	$(MSTESTDIR)/arcTree.h

PARSE_TEMP=	cmrLex.cpp cmrLex.h cmrYacc.cpp cmrYacc.h
PARSE_SOURCE=	cmrLex.l cmrYacc.y

# -- Composite Targets --

all:	$(PROGRAMS)

clean_all:
	rm -f udftocmr.o udfval.o cmrFormt.o
	rm -f cmrDiff.o cmrRead.o cmrWrite.o cmrTools.o
	rm -f $(PARSER_LIB) $(PARSE_TEMP)
	rm -f $(MSTEST_LIB)
	rm -f $(NSR_LIB)
	rm -f $(CMR_LIB)
	rm -f $(PROGRAMS)

clean_arcTest:
	rm -f scriptL.cpp scriptL.o scriptY.cpp scriptY.h scriptY.o
	rm -f acScript.o arcTest.o

clean_temp_libs:
	rm -f udftocmr.o udfval.o cmrFormt.o
	rm -f cmrDiff.o cmrRead.o cmrWrite.o cmrTools.o
	rm -f $(PARSER_LIB) $(PARSE_TEMP)
	rm -f $(MSTEST_LIB)
	rm -f $(NSR_LIB)

clean_archive_lib:
	rm -f $(CMR_LIB)

clean_programs:
	rm -f $(PROGRAMS)

# -- Program Targets --
#		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(MSTEST_LIB)
#		$(CMR_LIB) $(NSR_LIB) $(MSTEST_LIB) $(TOOL_LIB)

udftocmr:	udftocmr.o $(MAKEFILE_DEPEND) cmr.h \
		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(MSTEST_LIB)
	$(CXX) $(CXXFLAGS) -o $@ udftocmr.o \
		$(CMR_LIB) $(NSR_LIB) $(MSTEST_LIB) $(TOOL_LIB)

udfval:		udfval.o $(MAKEFILE_DEPEND) cmr.h \
		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(MSTEST_LIB)
	$(CXX) $(CXXFLAGS) -o $@ udfval.o \
		$(CMR_LIB) $(NSR_LIB) $(MSTEST_LIB) $(TOOL_LIB)

cmrFormt:	cmrFormt.o $(MAKEFILE_DEPEND) cmr.h \
		$(NSR_INCLUDE) $(CMR_LIB) $(NSR_LIB) $(DEV_LIB)
	${CXX} $(CXXFLAGS) -o $@ cmrFormt.o \
		$(CMR_LIB) \
		$(NSR_LIB) $(DEV_LIB) $(TOOL_LIB)

# -- Purify Program Targets --

Pudftocmr:	udftocmr.o $(MAKEFILE_DEPEND) cmr.h \
		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(MSTEST_LIB)
	purify -collector=$(LOADER) \
#	purecov -collector=$(LOADER) \
	$(CXX) $(CXXFLAGS) -o $@ udftocmr.o \
		$(CMR_LIB) $(NSR_LIB) $(MSTEST_LIB) $(TOOL_LIB)

Pudfval:	udfval.o $(MAKEFILE_DEPEND) cmr.h \
		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(MSTEST_LIB)
	purify -collector=$(LOADER) \
	$(CXX) $(CXXFLAGS) -o $@ udfval.o \
		$(CMR_LIB) $(NSR_LIB) $(MSTEST_LIB) $(TOOL_LIB)

PcmrFormt:	cmrFormt.o $(MAKEFILE_DEPEND) cmr.h \
		$(NSR_INCLUDE) $(CMR_LIB) $(NSR_LIB) $(DEV_LIB)
	purify -collector=$(LOADER) \
#	purecov -collector=$(LOADER) \
	${CXX} $(CXXFLAGS) -o $@ cmrFormt.o \
		$(CMR_LIB) \
		$(NSR_LIB) $(DEV_LIB) $(TOOL_LIB)

# -- Program Object Targets --

udftocmr.o:	udftocmr.cpp $(MAKEFILE_DEPEND) cmr.h $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c udftocmr.cpp

udfval.o:	udfval.cpp $(MAKEFILE_DEPEND) cmr.h $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c udfval.cpp

cmrFormt.o:	cmrFormt.cpp $(MAKEFILE_DEPEND) cmr.h $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c cmrFormt.cpp

# -- arcTest --
ParcTest:	arcTest.o acScript.o scriptY.o scriptL.o $(MAKEFILE_DEPEND) cmr.h \
		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(DEV_LIB)
	purify -collector=$(LOADER) \
	${CXX} $(CXXFLAGS) -o $@ arcTest.o acScript.o scriptL.o scriptY.o \
		$(CMR_LIB) $(NSR_LIB) $(DEV_LIB) $(TOOL_LIB)

arcTest:	arcTest.o acScript.o scriptY.o scriptL.o $(MAKEFILE_DEPEND) cmr.h \
		$(CMR_LIB) $(NSR_INCLUDE) $(NSR_LIB) $(DEV_LIB)
	${CXX} $(CXXFLAGS) -o $@ arcTest.o acScript.o scriptL.o scriptY.o \
		$(CMR_LIB) $(NSR_LIB) $(DEV_LIB) $(TOOL_LIB)

arcTest.o:	arcTest.cpp acScript.h $(MAKEFILE_DEPEND) cmr.h $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c arcTest.cpp

acScript.o:	acScript.cpp acScript.h  $(MAKEFILE_DEPEND) cmr.h $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c acScript.cpp

scriptL.o:	scriptY.h scriptL.l
	$(CXX) $(CXXFLAGS) -c scriptL.cpp

scriptL.cpp:	scriptL.l $(MAKEFILE_DEPEND)
	${LEX} -Pscript scriptL.l
	mv lex.script.c scriptL.cpp

scriptY.o:	scriptY.cpp scriptY.h  acScript.h $(MAKEFILE_DEPEND)
	$(CXX) $(CXXFLAGS) -c scriptY.cpp

scriptY.cpp \
scriptY.h:	scriptY.y acScript.h $(MAKEFILE_DEPEND)
	${YACC} -d -v -p script scriptY.y
	sed "s/yyparse(YYPARSE_PARAM)/Script::yyparse(YYPARSE_PARAM)/g" \
		scriptY.tab.c > scriptY.cpp
	rm scriptY.tab.c
	mv scriptY.tab.h scriptY.h

# -- Cmr library Targets --

cmr.a:	cmrRead.o cmrWrite.o cmrTools.o cmrDiff.o \
	$(PARSER_LIB) $(NSR_INCLUDE) 
	ar r cmr.a \
	cmrRead.o cmrWrite.o cmrTools.o cmrDiff.o \
	$(PARSER_LIB) \
#	ranlib cmr.a

cmrDiff.o:	cmrDiff.cpp cmr.h $(MAKEFILE_DEPEND) $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c cmrDiff.cpp

cmrTools.o:	cmrTools.cpp cmr.h $(MAKEFILE_DEPEND) $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c cmrTools.cpp

cmrRead.o:	cmrRead.cpp cmr.h $(MAKEFILE_DEPEND) $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c cmrRead.cpp

cmrWrite.o:	cmrWrite.cpp cmr.h $(MAKEFILE_DEPEND) $(NSR_INCLUDE)
	$(CXX) $(CXXFLAGS) -c cmrWrite.cpp

cmrLex.o: cmrLex.cpp cmrYacc.h
	$(CXX) $(CXXFLAGS) -c cmrLex.cpp

cmrLex.cpp:	cmrLex.l $(MAKEFILE_DEPEND)
	${LEX} -Pcmr cmrLex.l
	mv lex.cmr.c cmrLex.cpp

cmrYacc.o: cmrYacc.cpp cmrYacc.h  $(MAKEFILE_DEPEND)
	$(CXX) $(CXXFLAGS) -c cmrYacc.cpp

cmrYacc.cpp \
cmrYacc.h:	cmrYacc.y $(MAKEFILE_DEPEND)
	${YACC} -d -v -p cmr cmrYacc.y
	sed "s/yyparse(YYPARSE_PARAM)/CmrReader::yyparse(YYPARSE_PARAM)/g" \
		cmrYacc.tab.c > cmrYacc.cpp
	rm cmrYacc.tab.c
	mv cmrYacc.tab.h cmrYacc.h

# -- msTest library Targets --

arcImEx.o:	$(MSTESTDIR)/arcImEx.cpp $(MAKEFILE_DEPEND) $(NSR_INCLUDE) \
		$(MSTESTDIR)/hash.h $(MSTESTDIR)/dqueue.h \
		$(MSTESTDIR)/arcImEx.h
	$(CXX) $(CXXFLAGS) -c $(MSTESTDIR)/arcImEx.cpp

hash.o:		$(MSTESTDIR)/hash.c $(MAKEFILE_DEPEND) $(NSR_INCLUDE)
	$(CC) $(CFLAGS) -c $(MSTESTDIR)/hash.c

dlist.o:	$(DEVSTESTDIR)/dlist.c $(DEVSTESTDIR)/dlist.h \
		$(MAKEFILE_DEPEND)
	$(CC) $(CFLAGS) -c $(DEVSTESTDIR)/dlist.c

# -- Archive library --

msLib.o:	$(MSTESTDIR)/msLib.cpp $(NSR_INCLUDE) $(NSR_SOURCE) \
		 $(MAKEFILE_DEPEND)
	$(CXX) $(CXXFLAGS) -DNEWCODE -c $(MSTESTDIR)/msLib.cpp 

# -- Device library Target --

acptlib.o:	$(DEVDIR)/acptlib.c $(DEVDIR)/acptlib.h $(MAKEFILE_DEPEND)
	$(CC) $(CFLAGS) -c $(DEVDIR)/acptlib.c

