#!/bin/sh
# $Id: Makefile,v 2.2 1997/09/20 17:43:34 nestor Exp $
# $Locker:  $
# $Log: Makefile,v $
# Revision 2.2  1997/09/20 17:43:34  nestor
# First introduction of the tool, replaces update.
#
# Makefile for the syntactical source converter Pascal MacOS -> Ada 95
# Extended by Laurent Gasser, 17 September 1997 (lga@sma.ch)
# Original p2ada by Martin C. Carlisle

TOOL        = p2ada
REGULAR_EXP = Pascal.l
GRAMMAR     = Pascal.y

# assign "MUTE = @" to hide commands, or "MUTE = " to let them appear
# don't comment the definition! ("MUTE = # @" fails)
MUTE     = 
ECHO     = @ echo

AFLEX    = $(MUTE) /home/gasser/bin/aflex
AYACC    = $(MUTE) /home/gasser/bin/ayacc
GNATCHOP = $(MUTE) /usr/bin/gnatchop
GNATMAKE = $(MUTE) /usr/bin/gnatmake
MV       = $(MUTE) /bin/mv
RM       = $(MUTE) /bin/rm
AWK      = $(MUTE) /usr/bin/awk
SED      = $(MUTE) /usr/bin/sed

.SUFFIXES:

help:
	$(ECHO) 
	$(ECHO) " The following targets are available: "
	$(ECHO) "     all       : create" $(TOOL) "starting anew from" $(REGULAR_EXP) "and" $(GRAMMAR)
	$(ECHO) "     clean     : remove all compilation files, preserve all sources"
	$(ECHO) "     help      : this message"
	$(ECHO) 
	$(ECHO) "     essential : remove all compilation files, and all automatically"
	$(ECHO) "                 generated source files"
	$(ECHO) "     parser    : create sources from the grammar" $(GRAMMAR)
	$(ECHO) "     tokenizer : create sources from the regular expressions" $(REGULAR_EXP)
	$(ECHO) 

tokenizer: $(REGULAR_EXP) $(MAKEFILE)
	$(ECHO) 
	$(ECHO) " GENERATE RAW SOURCES for the" $@
	$(ECHO)
	$(AFLEX) -i -i < $(REGULAR_EXP)
	$(ECHO)
	$(ECHO) " PREPARE SOURCES FOR GNAT"
	$(ECHO) 
	$(RM) -f pascal_dfa.ads pascal_dfa.adb
	$(SED) "s/aflex_yy_dfa/pascal_dfa/g" aflex_yy_dfa.a > pascal_dfa.a
	$(GNATCHOP) pascal_dfa.a
	$(RM) aflex_yy_dfa.a pascal_dfa.a
	$(ECHO)
	$(RM) -f pascal_io.ads pascal_io.adb
	$(SED) "s/aflex_yy_dfa/pascal_dfa/g" aflex_yy_io.a > a.oi_yy_xelfa
	$(SED) "s/aflex_yy_io/pascal_io/g" a.oi_yy_xelfa  > pascal_io.a 
	$(GNATCHOP) pascal_io.a
	$(RM) aflex_yy_io.a a.oi_yy_xelfa pascal_io.a
	$(ECHO)
	$(RM) -f pascalyylex.ads pascalyylex.adb
	$(SED) "s/YYLex/pascalYYLex/g" aflex_yy.a > a.yy_xelfa_1 
	$(SED) "s/aflex_yy_dfa/pascal_dfa/g" a.yy_xelfa_1 > a.yy_xelfa_2
	$(SED) "s/aflex_yy_io/pascal_io/g" a.yy_xelfa_2  > a.yy_xelfa_3
	$(SED) "s/47,   33,   48,    1,   49,    1,    1/47,   33,   48,    1,   49,    1,    1, others => 1/g" a.yy_xelfa_3 > pascalyylex.adb
	$(AWK) 'BEGIN{\
	print "WITH pascal_Tokens;"; \
	print "USE  pascal_Tokens;"; \
	print "function pascalYYLex return Token;";} \
	{} END{}' pascalyylex.ads > pascalyylex.ads 
	$(RM) aflex_yy.a a.yy_xelfa_1 a.yy_xelfa_2 a.yy_xelfa_3

parser: $(GRAMMAR) $(MAKEFILE)
	$(ECHO)
	$(ECHO) " GENERATE RAW SOURCES for the" $@
	$(ECHO)
	$(AYACC) $(GRAMMAR)
	$(ECHO)
	$(ECHO) " PREPARE SOURCES FOR GNAT"
	$(ECHO)
	$(MV) Pascal.a yyparse.adb
	$(RM) -f yyparse.ads
	$(AWK) 'BEGIN{print "procedure yyparse;"} {} END{}' yyparse.ads > yyparse.ads
	$(MV) Pascal_goto.a pascal_goto.ads
	$(MV) Pascal_shift_reduce.a pascal_shift_reduce.ads
	$(MV) Pascal_tokens.a pascal_tokens.ads

all: tokenizer parser $(MAKEFILE)
	$(ECHO)
	$(ECHO) " GENERATE THE TOOL" $(TOOL)
	$(ECHO)
	$(GNATMAKE) $(TOOL)

clean:
	$(ECHO)
	$(ECHO) " REMOVE ALL COMPILATION FILES"
	$(ECHO)
	$(RM) -f *.ali *.o

essential: clean
	$(ECHO)
	$(ECHO) " REMOVE ALL AUTOMATICALLY GENERATED FILES"
	$(ECHO)
	$(RM) -f pascal_dfa.adb pascal_dfa.ads pascal_goto.ads
	$(RM) -f pascal_io.adb pascal_io.ads pascal_shift_reduce.ads
	$(RM) -f pascal_tokens.ads pascalyylex.adb pascalyylex.ads
	$(RM) -f yyparse.adb yyparse.ads