#*****************************************************************
#**                                                             **
#**             (C) Copyright 1992 the Regents of the           **
#**        University of California.  All Rights Reserved.      **
#**                                                             **
#**        This work was produced under the sponsorship of      **
#**         the U.S. Department of Energy.  The Government      **
#**                retains certain rights therein.              **
#**                                                             **
#**                         Written by                          **
#**         Distributed Programming Environments Project        **
#**           Computer Software and Networking Division,        **
#**                   Livermore Computer Center,                **
#**            Lawrence Livermore National Laboratory           **
#**                                                             **
#*****************************************************************

#	sccsid:		"@(#)Makefile	1.23 11/13/92 12:14:46 LLNL "

#
#	Make ASN.1 utilities for encoding and decoding
#

# The following macros should be defined appropriately.
#
#   RO_DIR - directory path to the ELROS root directory
#   RO_RUNTIME_DIR - directory path to ELROS runtime
#   RO_PREPROCESSOR_DIR - directory path to ELROS preprocessor
#   RO_SWITCHES - C and C++ compilation options
#

include ../../Make.Defaults

#
# Suffix rules
#
.SUFFIXES:
.SUFFIXES: .C .C~ .c .o $(SUFFIXES)

#
# Paths and files
#
DISTFILES=	Makefile README \
		easn.gram easn.lex \
		asn1.h y.tab.h \
		asn1.C dasn.C easn.C \
		fdcd_len.c fdcd_tag.c \
		fenc_len.c fenc_tag.c fhex.c \
		lex.yy.C y.tab.C

INSTALLFILES=	easn dasn

LINKEDFILES=	c_varieties.h list.h list.C

#
# Local macros
#
CFLAGS=	$(RO_SWITCHES) -I$(RO_RUNTIME_DIR)/include

YACC=	yacc++	

LEX=	lex++

#
# Targets
#
all:	showenv asn
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) "Asn utilities are up to date"
	@$(ECHOTEXT) $(BORDER)

showenv:
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) "Making asn utilities"
	@$(ECHOTEXT)
	@$(ECHOTEXT) "RO_DIR=$(RO_DIR)"
	@$(ECHOTEXT) "RO_RUNTIME_DIR=$(RO_RUNTIME_DIR)"
	@$(ECHOTEXT) "RO_PREPROCESSOR_DIR=$(RO_PREPROCESSOR_DIR)"
	@$(ECHOTEXT) "RO_SWITCHES=$(RO_SWITCHES)"
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)

asn:	dasn easn

#
#	Make context-free ASN.1 decoder
#
dasn:	dasn.$(OSUFFIX) fdcd_tag.$(OSUFFIX) fdcd_len.$(OSUFFIX) fhex.$(OSUFFIX)
	$(CPLUSPLUSLD) -o dasn dasn.$(OSUFFIX) fdcd_tag.$(OSUFFIX) fdcd_len.$(OSUFFIX) fhex.$(OSUFFIX) $(CPLUSPLUSLIBS)

dasn.$(OSUFFIX):	c_varieties.h dasn.C
	$(CPLUSPLUS) $(COPTS) $(CFLAGS) dasn.C

fdcd_tag.$(OSUFFIX):	fdcd_tag.c
	$(CC) $(COPTS) $(CFLAGS) fdcd_tag.c

fdcd_len.$(OSUFFIX):	fdcd_len.c
	$(CC) $(COPTS) $(CFLAGS) fdcd_len.c

fhex.$(OSUFFIX):	fhex.c
	$(CC) $(COPTS) $(CFLAGS) fhex.c

#
#	Make context-free ASN.1 encoder
#
easn:	easn.$(OSUFFIX) fenc_tag.$(OSUFFIX) fenc_len.$(OSUFFIX) fhex.$(OSUFFIX) y.tab.$(OSUFFIX) lex.yy.$(OSUFFIX) asn1.$(OSUFFIX) list.$(OSUFFIX)
	$(CPLUSPLUSLD) -o easn easn.$(OSUFFIX) fenc_tag.$(OSUFFIX) fenc_len.$(OSUFFIX) fhex.$(OSUFFIX) y.tab.$(OSUFFIX) lex.yy.$(OSUFFIX) asn1.$(OSUFFIX) list.$(OSUFFIX) $(CPLUSPLUSLIBS)

easn.$(OSUFFIX):	easn.C
	$(CPLUSPLUS) $(COPTS) $(CFLAGS) easn.C


y.tab.$(OSUFFIX):	y.tab.C y.tab.h asn1.h list.h c_varieties.h
	$(CPLUSPLUS) $(COPTS) $(CFLAGS) y.tab.C


lex.yy.$(OSUFFIX):	lex.yy.C y.tab.h asn1.h list.h c_varieties.h
	$(CPLUSPLUS) $(COPTS) $(CFLAGS) lex.yy.C


lex.yy.C:	easn.lex
	$(LEX) easn.lex
	$(MV) -f lex.yy.c lex.yy.C

y.tab.C + y.tab.h:	easn.gram
	$(YACC) -dv easn.gram
	$(CAT) $(RO_DIR)/copyright y.tab.h > y.tab.H
	$(MV) -f y.tab.H y.tab.h
	$(MV) -f y.tab.c y.tab.C

asn1.$(OSUFFIX):	asn1.C asn1.h list.h c_varieties.h
	$(CPLUSPLUS) $(COPTS) $(CFLAGS) asn1.C


fenc_tag.$(OSUFFIX):	fenc_tag.c
	$(CC) $(COPTS) $(CFLAGS) fenc_tag.c


fenc_len.$(OSUFFIX):	fenc_len.c
	$(CC) $(COPTS) $(CFLAGS) fenc_len.c


list.$(OSUFFIX):	list.C list.h
	$(CPLUSPLUS) $(COPTS) $(CFLAGS) list.C


#
# Houskeeping targets
#
clean:
	$(RM) *.$(OSUFFIX) $(INSTALLFILES)

new:	clean
	$(RM) $(LINKEDFILES)
	$(FOR) i in $(LINKEDFILES); $(DO) ( \
		$(LN) -s $(RO_PREPROCESSOR_DIR)/$$i $$i; \
	); $(DONE)

#
# For the "package" target, the following macro must be defined as a
# command line argument.
#
#   RO_DIST_DIR - directory where distribution files are to be copied
#
package: $(DISTFILES)
	$(CP) -p $(DISTFILES) $(RO_DIST_DIR)

#
# For the "install" target, the following macro must be appropriately
# defined.
#
#   RO_INSTALL_DIR - directory where installed files should be copied
#
MY_INSTALL_DIR=	$(RO_INSTALL_DIR)/util/asn

install: $(DISTFILES) $(INSTALLFILES) $(MY_INSTALL_DIR)
	$(RM) $(MY_INSTALL_DIR)/*
	$(FOR) i in $(DISTFILES); $(DO) ( \
		$(CP) -p $$i $(MY_INSTALL_DIR); \
		$(CHMOD) 444 $(MY_INSTALL_DIR)/$$i; \
	); $(DONE)
	$(FOR) i in $(LINKEDFILES); $(DO) ( \
		$(CD) $(MY_INSTALL_DIR); \
		$(LN) -s $(RO_INSTALL_DIR)/preprocessor/$$i $$i; \
	); $(DONE)
	$(CP) $(INSTALLFILES) $(MY_INSTALL_DIR)

