# =============================================================================
# FuncCalc Package - Makefile
#
# ----------------------------------------------------------------------------
# Copyright (C) 1995-2000 by Karim Kaschani
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# to rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
# ----------------------------------------------------------------------------
#
# NOTE: In order to plot the calculated functions on the screen by means of a
#       plotting program please specify -DPLOTTOOL accordingly.
#
#	Linux systems may need -DLINUX to be specified during compilation.
#
#       In case of troubles with your system's curses package you might be
#       better-off installing the ncurses package from GNU.
#
#	In case of troubles compiling 'y.tab.h', '*.tab.c' and '*.yy.c' you
#	may safely remove these files provided your system has yacc and lex.
# =============================================================================

BINDIR    = /usr/local/bin
MANDIR    = /usr/local/man/man1

PLOTTOOL  = '"xgraph -geometry 500x350 1>/dev/null 2>&1"'

# ------------------------------------------------------------- Solaris 2.4 x86

#CC      = gcc
#CFLAGS  = -c -g -O
#LDFLAGS = -lm -lc
#LDEXTRA = -lcurses -lsocket -ly -ll
#LEX     = lex
#LFLAGS  =
#YACC    = yacc
#YFLAGS  = -d
#INSTALL = /usr/ucb/install

# ----------------------------------------------------------------------- Linux

CC      = gcc
CFLAGS  = -c -g -O -Wall -DLINUX
LDFLAGS = -lm -lc
LDEXTRA = -lncurses
LEX     = lex
LFLAGS  =
YACC    = yacc
YFLAGS  = -d
INSTALL = /usr/bin/install

# ----------------------------------------------------------------------- SunOS

#CC      = gcc
#CFLAGS  = -c -O -I/opt/gcc_2.0/include
#LDFLAGS = -lm -lc
#LDEXTRA = -lncurses -ly -ll
#LEX     = lex
#LFLAGS  =
#YACC    = yacc
#YFLAGS  = -d
#INSTALL = /bin/install

# ------------------------------------------------------------------------ HPUX

#CC      = cc
#CFLAGS  = -c -O -Aa -D_HPUX_SOURCE \
#          -I/usr/local/include
#LDFLAGS = -lm -lc
#LDEXTRA = -L/usr/local/lib -lncurses -ly -ll
#LEX     = lex
#LFLAGS  =
#YACC    = yacc
#YFLAGS  = -d
#INSTALL = /usr/local/bin/install

# --------------------------------------------------------------- general stuff
# There should be no need to change anything below this line
# -----------------------------------------------------------------------------

FCOBJ = fc.tab.o fc.yy.o fc.o curs_utils.o misc_utils.o math.o
RCOBJ = rc.tab.o rc.yy.o rc.o curs_utils.o misc_utils.o math.o
CVOBJ = fc.tab.o fc.yy.o cc.o curs_utils.o misc_utils.o math.o
ZZOBJ = str_utils.o

all: funccalc recalc convcalc extract

funccalc: $(FCOBJ) $(ZZOBJ)
	$(CC) -o $@ $(FCOBJ) $(ZZOBJ) $(LDEXTRA) $(LDFLAGS)

recalc: $(RCOBJ) $(ZZOBJ)
	$(CC) -o $@ $(RCOBJ) $(ZZOBJ) $(LDEXTRA) $(LDFLAGS)

convcalc: $(CVOBJ) $(ZZOBJ)
	$(CC) -o $@ $(CVOBJ) $(ZZOBJ) $(LDEXTRA) $(LDFLAGS)

extract: extract.o $(ZZOBJ)
	$(CC) -o $@ extract.o $(ZZOBJ) $(LDFLAGS)

fc.tab.c y.tab.h: fc_parse.y
	$(YACC) $(YFLAGS) fc_parse.y
	mv y.tab.c fc.tab.c

rc.tab.c: rc_parse.y
	$(YACC) $(YFLAGS) rc_parse.y
	mv y.tab.c rc.tab.c

fc.yy.c: fc_parse.l
	$(LEX) $(LFLAGS) fc_parse.l
	mv lex.yy.c fc.yy.c

rc.yy.c: rc_parse.l
	$(LEX) $(LFLAGS) rc_parse.l
	mv lex.yy.c rc.yy.c

.c.o:
	$(CC) $(CFLAGS) -DPLOTTOOL=$(PLOTTOOL) $*.c

extract.o    : globals.h str_utils.h license.h
curs_utils.o : globals.h curs_utils.h misc_utils.h
misc_utils.o : globals.h
fc.o         : globals.h curs_utils.h misc_utils.h str_utils.h math.h fc_version.h license.h symtab.h
rc.o         : globals.h curs_utils.h misc_utils.h str_utils.h math.h rc_version.h license.h symtab.h
cc.o         : globals.h curs_utils.h misc_utils.h str_utils.h math.h cc_version.h license.h symtab.h
math.o       : globals.h 
fc.yy.o      : fc.yy.c y.tab.h
rc.yy.o      : rc.yy.c y.tab.h
fc.tab.c     : symtab.h
rc.tab.c     : symtab.h
fc.yy.c      : symtab.h
rc.yy.c      : symtab.h

test: all
	(cd examples; ./dotest)

clean:
	rm -f $(FCOBJ) $(RCOBJ) $(CVOBJ) $(ZZOBJ) extract.o funccalc recalc convcalc extract

install: funccalc recalc extract
	$(INSTALL) -s -m 755 funccalc $(BINDIR)
	$(INSTALL) -s -m 755 recalc $(BINDIR)
	$(INSTALL) -s -m 755 convcalc $(BINDIR)
	$(INSTALL) -s -m 755 extract $(BINDIR)
	$(INSTALL)    -m 644 funccalc.1 $(MANDIR)
	$(INSTALL)    -m 644 recalc.1 $(MANDIR)
	$(INSTALL)    -m 644 convcalc.1 $(MANDIR)
	$(INSTALL)    -m 644 extract.1 $(MANDIR)

uninstall:
	rm -f $(BINDIR)/funccalc
	rm -f $(BINDIR)/recalc
	rm -f $(BINDIR)/convcalc
	rm -f $(BINDIR)/extract
	rm -f $(MANDIR)/funccalc.1
	rm -f $(MANDIR)/recalc.1
	rm -f $(MANDIR)/convcalc.1
	rm -f $(MANDIR)/extract.1
