#
# * Copyright (c) 1992 University College London
# * All rights reserved.
# *
# * Redistribution and use in source and binary forms are permitted
# * provided that the above copyright notice and this paragraph are
# * duplicated in all such forms and that any documentation,
# * advertising materials, and other materials related to such
# * distribution and use acknowledge that the software was developed
# * by the Department of Computer Science, University College London,
# * London, England. Neither the name of the University, nor its
# * registered trademark, UCL, may be used to endorse or promote
# * products derived from this software without specific prior
# * written permission.
# * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
# * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
###########################################################

OBJEXT	=	o
EXE	=	gdmo
CC	=	gcc
CFLAGS	=	-ansi -g -DYYDEBUG
PWD	=	$(HOME)/compilers/mocompiler/gdmo
YACC	=	../byacc/byacc
YFLAGS	=	-v
LXFLAGS	=	-v
#LEX	 =	 lex
LEX	=	../flex/flex
#LEXLIB	=	-ll
LEXLIB	=

###########################################################
#
#.SUFFIXES:	 .c .cc	.o
#
#.c.o:;		 $(CC) $(CFLAGS) -c $*.c
#.cc.o:;	 $(CCPLUS) $(CCFLAGS) -g -c $*.cc
#
###########################################################

LIBS	=	$(TOP)/util/util/libutil.a

PARSRC  =       GDMOYacc.cc GDMOLex.cc ExecYacc.cc ExecLex.cc \
		IIMCYacc.cc IIMCLex.cc 

GDMOOBJ =       GDMOPar.$(OBJEXT) IIMCPar.$(OBJEXT)

MAINOBJ =       GDMO.$(OBJEXT) GDMOClas.$(OBJEXT) GDMOPkg.$(OBJEXT) \
                GDMOAttr.$(OBJEXT) GDMOMain.$(OBJEXT)

INTOBJ  =       Symbol.$(OBJEXT) SymExec.$(OBJEXT) ExecPar.$(OBJEXT) \
                Node.$(OBJEXT)

SRC     =       GDMO.cc GDMOAttr.cc GDMOClas.cc GDMOMain.cc GDMOPar.cc \
                GDMOPkg.cc Node.cc Symbol.cc SymExec.cc ExecPar.cc \
                IIMCPar.cc ExecYacc.y ExecLex.l GDMOYacc.y GDMOLex.l \
		IIMCYacc.y IIMCLex.l

HSRC    =       GDMOGen.h GDMO.h GDMOAttr.h GDMOClas.h GDMOPkg.h \
                Node.h Symbol.h SymExec.h IIMC.h

SCRIPTS	=	run-gdmo gdmo-cmpl gdmoasn-cmpl


###########################################################

prog:		$(EXE)

$(EXE):		$(PARSRC) $(GDMOOBJ) $(MAINOBJ)	$(INTOBJ)
		$(PURIFYPLUS) $(CCPLUS) $(GDMOOBJ) $(MAINOBJ) $(INTOBJ) \
		$(LIBS)	$(LEXLIB) $(LDFLAGS) -o $@

GDMOPar.$(OBJEXT) :	GDMOYacc.cc GDMOLex.cc GDMOYacc.y GDMOLex.l

GDMOYacc.cc :	GDMOYacc.y GDMOAct.h GDMONot.h
		$(YACC)	$(YFLAGS) GDMOYacc.y GDMO::ParseGDMO
		@mv y.tab.c GDMOYacc.cc

GDMOLex.cc :	GDMOLex.l  GDMOYacc.y
		$(LEX) $(LXFLAGS) GDMOLex.l
		@mv lex.yy.c GDMOLex.cc
		@sed 's/^#include <osfcn.h>/#include <unistd.h>/' GDMOLex.cc \
			> GDMOLex.cc.tmp
		@mv GDMOLex.cc.tmp GDMOLex.cc

ExecPar.$(OBJEXT):	ExecYacc.cc ExecLex.cc ExecYacc.y ExecLex.l

ExecYacc.cc :	ExecYacc.y
		$(YACC)	$(YFLAGS) ExecYacc.y InterPreter::Parse
		@mv y.tab.c ExecYacc.cc

ExecLex.cc :	ExecLex.l ExecYacc.y
		$(LEX) $(LXFLAGS) ExecLex.l
		@mv lex.yy.c ExecLex.cc
		@sed 's/^#include <osfcn.h>/#include <unistd.h>/' ExecLex.cc \
			> ExecLex.cc.tmp
		@mv ExecLex.cc.tmp ExecLex.cc

IIMCPar.$(OBJEXT) :     IIMCYacc.cc IIMCLex.cc IIMCYacc.y IIMCLex.l

IIMCYacc.cc :   IIMCYacc.y
		$(YACC) $(YFLAGS) IIMCYacc.y IIMC::Parse
		@mv y.tab.c IIMCYacc.cc

IIMCLex.cc :    IIMCLex.l IIMCYacc.y
		$(LEX) $(LXFLAGS) IIMCLex.l
		@mv lex.yy.c IIMCLex.cc
		@sed 's/^#include <osfcn.h>/#include <unistd.h>/' IIMCLex.cc \
			> IIMCLex.cc.tmp
		@mv IIMCLex.cc.tmp IIMCLex.cc

install:	install-gdmo

install-gprog:	install-gdmo

install-gdmo:	$(EXE) cmplPathConv
		@echo "cp $(EXE) $(BIN)/$(EXE)"; \
		cp $(EXE) $(BIN)/$(EXE)
		cp gdmo-cmpl.tmp $(BIN)/run-gdmo
		mv gdmo-cmpl.tmp $(BIN)/gdmo-cmpl
		mv gdmoasn-cmpl.tmp $(BIN)/gdmoasn-cmpl

install-gman:;

install-man:;

clean:
		-rm -f *.$(OBJEXT) $(PARSRC) $(EXE) core y.output y.tab.h

print:
		pr -f $(HSRC) $(SRC) | lpr -Pa4lp


# the following is tricky: if the BIN path in CONFIG.make is absolute, it is
# it is simply inserted in the scripts, if not, the ../../../bin part
# is prefixed by what $(PWD) gives - rather hacky but it works

cmplPathConv:	gdmoCmplPathConv gdmoAsnCmplPathConv

gdmoCmplPathConv:
		@sed 's%gdmo.*=.*\".*gdmo%gdmo = \"$(BIN)/gdmo%; s%\.\./\.\./\.\./bin%$(PWD)/$(BIN)%' gdmo-cmpl > gdmo-cmpl.tmp; \
		chmod +x gdmo-cmpl.tmp

gdmoAsnCmplPathConv:
		@sed 's%asnComp.*=.*\".*asn-cmpl%asnComp = \"$(BIN)/asn-cmpl%; s%gdmo.*=.*\".*gdmo%gdmo =    \"$(BIN)/gdmo%; s%\.\./\.\./\.\./bin%$(PWD)/$(BIN)%' gdmoasn-cmpl > gdmoasn-cmpl.tmp; \
		chmod +x gdmoasn-cmpl.tmp

GDMO.$(OBJEXT):		GDMOAttr.h GDMOClas.h GDMO.h Symbol.h GDMOAct.h GDMONot.h

GDMOAttr.$(OBJEXT):	GDMOAttr.h Symbol.h

GDMOClas.$(OBJEXT):	GDMOAttr.h GDMOPkg.h GDMOClas.h	Symbol.h GDMOAct.h GDMONot.h

GDMOMain.$(OBJEXT):	GDMOAttr.h GDMOPkg.h GDMOClas.h	GDMO.h Symbol.h GDMOAct.h GDMONot.h

GDMOPkg.$(OBJEXT):	GDMOAttr.h GDMOPkg.h Symbol.h GDMOAct.h GDMONot.h

Symbol.$(OBJEXT):	Symbol.h

###########################################################



