#
# Copyright 2001 Silicon Graphics, Inc. All rights reserved.
#
#
# Makefile for LIBSIAL
#

DEPTH = ..
include $(DEPTH)/Rules.make

EXTRA_CFLAGS = $(GFLAGS) -Wall -DARCH=$(ARCH) -I$(TOPDIR)/include 

LDIRT    = lex.sial.c lex.sialpp.c sial.tab.c sial.tab.h sialpp.tab.c \
	sialpp.tab.h y.output mkbaseop baseops.c y.tab.c y.tab.h \
	libsial.so*

TARGETS  = libsial.a

CFILES   = sial_util.c sial_node.c sial_var.c sial_func.c sial_str.c \
	sial_op.c sial_num.c sial_stat.c sial_builtin.c sial_type.c \
	sial_case.c sial_api.c sial_member.c sial_alloc.c sial_define.c \
	sial_input.c sial_print.c

OFILES   = $(CFILES:.c=.o) sialpp.tab.o sial.tab.o lex.sial.o lex.sialpp.o \
	baseops.o

HFILES   = sial.h sial_api.h

LSOURCES = sial-lsed sialpp-lsed sial.l sialpp.l sial.y sialpp.y mkbaseop.c

LCOPTS = $(GFLAGS)

all: default

exports install: headers all
	install $(TARGETS) $(ROOT)/usr/lib

headers:
	install -m 644 $(HFILES) $(ROOT)/usr/include

baseops.o: mkbaseop.c
	$(CC) $(CFLAGS) -o mkbaseop mkbaseop.c
	./mkbaseop > baseops.c
	$(CC) $(CFLAGS) -c baseops.c

mkbaseop.c sial_member.o sial_op.o sial_stat.o sial_type.o y.tab.o : sial.tab.h

lex.sial.o: lex.sial.c sial.tab.c sial.h
	$(CC) $(CFLAGS) -c lex.sial.c

lex.sial.c: sial.l
	flex -L -Psial -t sial.l > lex.sial.c

sial.tab.c: sial.tab.h

sialpp.tab.o: sialpp.tab.c
	$(CC) $(LCOPTS) -c sialpp.tab.c

sial.tab.o: sial.tab.c
	$(CC) $(LCOPTS) -c sial.tab.c

sial.tab.h : sial.y
	yacc -psial -v -t -d sial.y
	cat y.tab.c | sed -f sial-lsed > sial.tab.c
	cat y.tab.h | sed -f sial-lsed > sial.tab.h

lex.sialpp.o: lex.sialpp.c sialpp.tab.c sial.h
	$(CC) $(CFLAGS) -c lex.sialpp.c

lex.sialpp.c: sialpp.l
	flex -Psialpp -t sialpp.l  > lex.sialpp.c

sialpp.tab.c: sialpp.tab.h sial.tab.h

sialpp.tab.h : sialpp.y sial.tab.h
	yacc -psialpp -v -t -d sialpp.y
	cat y.tab.c | sed -f sialpp-lsed > sialpp.tab.c
	cat y.tab.h | sed -f sialpp-lsed > sialpp.tab.h

default: $(TARGETS)

$(TARGETS): $(OFILES)
	$(AR) ccurl $(TARGETS) $(OFILES)

clean: 
	-/bin/rm -f *.o $(TARGETS) $(LDIRT)

clobber: clean
