CPP=g++
CC=gcc
AR=ar
RANLIB=ranlib
CFLAGS=-O2 -Wall -Iintl -I. -Igrin -Itgws -Ilisp -Iinterpretor \
       -include global.h

OBJ_GRIN=grin/addressbook.o grin/composition.o grin/message.o \
         grin/message_descriptor.o grin/mime.o grin/newsgroup.o \
         grin/tempfile.o grin/localboxlist.o grin/localmailbox.o \
         grin/imap4item.o grin/imap4boxlist.o grin/imap4mailbox.o \
         grin/groupsearch.o

OBJ_TGWS=tgws/clist.o tgws/ctree.o tgws/edit.o tgws/entry.o tgws/init.o \
         tgws/input.o tgws/keyblock.o tgws/keylabel.o tgws/label.o \
         tgws/menu.o tgws/menubar.o tgws/pager.o tgws/pilot.o \
         tgws/screen.o tgws/style.o tgws/title.o tgws/widget.o \
         tgws/modal.o tgws/messageedit.o tgws/messagepager.o \
         tgws/pinemenu.o tgws/password.o

OBJ_LISP=lisp/variable.o lisp/atom.o lisp/cons.o lisp/domain.o \
         lisp/object.o lisp/real_function.o lisp/system_function.o \
         lisp/integer.o lisp/real.o lisp/array.o lisp/str.o \
         lisp/structure.o lisp/library.o lisp/hash_table.o \
         lisp/std_library1.o lisp/std_library2.o lisp/character.o \
         lisp/number.o lisp/gc.o lisp/function.o

OBJ_UNIX=unix/mailbox.o unix/main.o unix/message.o unix/newsgroup.o \
         unix/composition.o unix/config.o unix/menu.o unix/mail.o \
         unix/news.o unix/addresses.o unix/imap4.o

OBJ_INTL=intl/bindtextdom.o intl/dcgettext.o intl/dcigettext.o \
         intl/dcngettext.o intl/dgettext.o intl/dngettext.o \
         intl/explodename.o intl/finddomain.o intl/gettext.o \
         intl/intl-compat.o intl/l10nflist.o intl/loadmsgcat.o \
         intl/localcharset.o intl/localealias.o intl/localename.o \
         intl/ngettext.o intl/osdep.o intl/plural-exp.o \
         intl/plural.o intl/textdomain.o

OBJ_TTYGRIN=$(OBJ_GRIN) $(OBJ_TGWS) $(OBJ_UNIX) \
            interpretor/grinlisp.o libgrinlisp.a libintl.a

OBJ_GRINLISP=interpretor/grinlisp.o interpretor/interpretor.o \
             libgrinlisp.a libintl.a

.SUFFIXES: .cpp .o .c

.cpp.o: $*.cpp
	$(CPP) $(CFLAGS) -o $*.o -c $*.cpp

.c.o: $*.c
	$(CC) $(CFLAGS) -o $*.o -c $*.c

all: ttygrin

grinlisp: $(OBJ_GRINLISP)
	$(CPP) -o $@ $(OBJ_GRINLISP)

ttygrin: $(OBJ_TTYGRIN)
	$(CPP) -o $@ $(OBJ_TTYGRIN) -lcurses

libintl.a: $(OBJ_INTL)
	$(AR) cru $@ $(OBJ_INTL)
	$(RANLIB) $@

libgrinlisp.a: $(OBJ_LISP)
	$(AR) cru $@ $(OBJ_LISP)
	$(RANLIB) $@

clean:
	/bin/rm -f */*.o ttygrin ttygrin.core grinlisp grinlisp.core core *.a

install:
	strip ttygrin
	install -o 0 -g 0 -m 0755 ttygrin /usr/local/bin/ttygrin
	install -o 0 -g 0 -m 0644 ttygrin.1 /usr/local/man/man1/ttygrin.1

uninstall:
	/bin/rm -f /usr/local/bin/ttygrin /usr/local/man/man1/ttygrin.1
