YACC = yacc
LEX = lex
SED = sed
LIBS =  $(XGILIB) $(XGDLIB) $(GISLIB) $(XMLIBPATH) $(XMLIB) $(XTLIBPATH) \
	$(XTLIB) $(XLIBPATH) $(XLIB) $(XEXTRALIBS) $(MATHLIB) -ll
EXTRA_CFLAGS = $(XCFLAGS) -I../include \
	$(XINCPATH) $(XMINCPATH)

all::	clean \
	$(UNIX_BIN)/xgrass$(VERSION_NUMBER) \
	$(ETC)/xgrass$(VERSION_NUMBER).exe \
	$(BIN)/xclip$(VERSION_NUMBER) \
	$(ETC)/xclip$(VERSION_NUMBER).exe \
	xgrassmenu \
        $(UNIX_BIN)/xgdatabases \
        $(ETC)/XGIS.sh

OBJS = \
	main.o \
	callbacks.o \
	client.o \
	create.o \
	error.o \
	exec.o \
	exit.o \
	history.o \
	link.o \
	xgdbset.o \
	parse.o \
	grammar.o \
	lex.o \
	strdup.o

XCOBJS = \
	xc.main.o \
	xc.grammar.o \
	xc.lex.o \
	xc.error.o \
	xc.parse.o \
	xc.client.o \
	xc.modify.o \
	xc.verify.o \
	xc.name.o \
	xc.assign.o \
	xc.exit.o \
	xc.comstr.o \
	xc.require.o \
	xc.create.o

XCOBJS2 = \
	xc.topmain.o \
	xc.main.o \
	xc.grammar.o \
	xc.lex.o \
	xc.error.o \
	xc.parse.o \
	xc.client.o \
	xc.modify.o \
	xc.verify.o \
	xc.name.o \
	xc.assign.o \
	xc.exit.o \
	xc.comstr.o \
	xc.require.o \
	xc.create.o

$(ETC)/XGIS.sh: gis.head gis.shell
	sh ./version.sed "$(VERSION_NUMBER)" "$(VERSION_DATE)" gis.head > $@
	sh ./version.sed "$(VERSION_NUMBER)" "$(VERSION_DATE)" gis.shell >> $@
	chmod +x $@

$(UNIX_BIN)/xgdatabases: xgdb.sh
	rm -f $(UNIX_BIN)/xgdatabases
	cp xgdb.sh $@
	chmod +x $@

$(UNIX_BIN)/xgrass$(VERSION_NUMBER): Gmakefile
	@echo "#!/bin/sh" > $@
	@echo "GISBASE=$(GISBASE)" >> $@
	@echo "export GISBASE" >> $@
	@echo 'PATH=$$GISBASE/bin:$$GISBASE/scripts:$$GISBASE/garden/bin:$$PATH' >> $@
	@echo "export PATH" >> $@
	@echo 'if test "$$XAPPLRESDIR" = ""; then' >> $@
	@echo 'XAPPLRESDIR=$$GISBASE/etc/app-defaults' >> $@
	@echo "export XAPPLRESDIR" >> $@
	@echo "fi" >> $@
	@echo 'XGRASSLIBDIR=$$GISBASE/etc' >> $@
	@echo "export XGRASSLIBDIR" >> $@
	@echo 'XGRASSHELPDIR=$$GISBASE/etc/xhelp' >> $@
	@echo "export XGRASSHELPDIR" >> $@
	@echo 'exec $$GISBASE/etc/xgrass$(VERSION_NUMBER).exe $$*' >> $@
	@echo 'GIS_LOCK=$$$$' >> $@
	@echo "export GIS_LOCK" >> $@
	@-chmod +x $@

xgrassmenu::
	-rm -f $(GISBASE)/etc/xgrass-menu
	-cp xgrass-menu $(GISBASE)/etc

$(BIN)/xclip$(VERSION_NUMBER): Gmakefile
	@echo "#!/bin/sh" > $@
	@echo "GISBASE=$(GISBASE)" >> $@
	@echo "export GISBASE" >> $@
	@echo 'PATH=$$GISBASE/bin:$$GISBASE/scripts:$$GISBASE/garden/bin:$$PATH' >> $@
	@echo "export PATH" >> $@
	@echo 'if test "$$XAPPLRESDIR" = ""; then' >> $@
	@echo 'XAPPLRESDIR=$$GISBASE/etc/app-defaults' >> $@
	@echo "export XAPPLRESDIR" >> $@
	@echo "fi" >> $@
	@echo 'XGRASSLIBDIR=$$GISBASE/etc' >> $@
	@echo "export XGRASSLIBDIR" >> $@
	@echo 'XGRASSHELPDIR=$$GISBASE/etc/xhelp' >> $@
	@echo "export XGRASSHELPDIR" >> $@
	@echo 'exec $$GISBASE/etc/xclip$(VERSION_NUMBER).exe $$*' >> $@
	@-chmod +x $@

$(ETC)/xclip$(VERSION_NUMBER).exe: $(XCOBJS2) $(XGILIB)
	$(CC) -o $@ $(LDFLAGS) $(XLDFLAGS) $(EXTRA_LDFLAGS) $(XCOBJS2) $(LIBS)
	rm -f xc.lex.c xc.grammar.c xc.y.tab.h

$(ETC)/xgrass$(VERSION_NUMBER).exe: $(OBJS) $(XCOBJS) $(XGILIB)
	$(CC) -o $@ $(LDFLAGS) $(XLDFLAGS) $(EXTRA_LDFLAGS) $(OBJS) $(XCOBJS) $(LIBS)
	rm -f lex.c grammar.c y.tab.h

grammar.c: grammar.y
	rm -f y.tab.h y.tab.c grammar.c
	$(YACC) -d grammar.y
	mv y.tab.c grammar.c

lex.c: lex.l grammar.c y.tab.h
	rm -f lex.c
	lex -t lex.l > lex.c

y.tab.h: grammar.c

xc.grammar.c: xc.grammar.y 
	rm -f y.tab.h
	$(YACC) -d xc.grammar.y
	rm -f xc.grammar.c
	$(SED) -e "s/yy/zz/g" y.tab.c | $(SED) -e "s/YY/ZZ/g" > xc.grammar.c

xc.y.tab.h: xc.grammar.c
	rm -f xc.y.tab.h
	$(SED) -e "s/yy/zz/g" y.tab.h | $(SED) -e "s/YY/ZZ/g" > xc.y.tab.h

xc.lex.c: xc.lex.l xc.y.tab.h
	rm -f xc.$(LEX).c
	$(LEX) -t xc.lex.l | $(SED) -e "s/yy/zz/g" | $(SED) -e "s/YY/ZZ/g" | $(SED) -e "s/zzwrap/yywrap/g" > xc.lex.c

clean:
	rm -f y.tab.h y.tab.c xc.y.tab.h grammar.c xc.grammar.c lex.c xc.lex.c

$(LIBS): #
