# Makefile for Przemek Borys's mailreader
# This program is distributet under the terms of GNU Public License

MRVERSION=mr 0.9.1
BINDIR=/usr/local/bin
MANDIR=/usr/local/man/man1
HELPDIR=/usr/local/lib/mr/help
ETCDIR=/usr/local/etc
CHARSETPATH=/usr/local/lib/mr/charset
CC=gcc

# uncomment the DEBUG content if you want to debug this program
DEBUG=#-g -lefence

INCLUDEPATH=-I/usr/include/ncurses
GCCOPTS= -pedantic $(DEBUG) $(INCLUDEPATH) -DMRVERSION="\"$(MRVERSION)\"" -DDHELPDIR="\"$(HELPDIR)\"" -DCHARSETPATH="\"$(CHARSETPATH)\"" -DETCDIR="\"$(ETCDIR)\""
GCCFINALOPTS=$(GCCOPTS) -lncurses 
OBJECTS=TAddressBook.o TAttachList.o TBASE64.o TButton.o TCharset.o TDelAddList.o TEdit.o TFileAttach.o TFileAttachList.o TFileBox.o TFileList.o TFileView.o TFolderList.o TFolderListEngine.o TFolderView.o TForwardFolderList.o THeaderMIME.o THeaderModify.o TInputField.o TList.o TMailEdit.o TMarkingDialog.o TMenu.o TMenuBar.o TMime.o TMsgList.o TMultipartList.o TQuotedPrintable.o TSendMultipart.o TThreadList.o TTplEdit.o TUserMenuBar.o TView.o TViewTextMsg.o TWindow.o TemplateUtility.o colors.o extensions.o misc.o mr.o mr.rc.variables.o sendmsg.o 
OBJECTNUMBER=42

all :
	$(MAKE) mr
	$(MAKE) manual
	@echo 'Now type "make install" to install the program'
  
manual: mr.man
	@echo -n 'Creating manual page (mr.1)...'
	@groff -man -Tascii mr.man >mr.1
	@echo done

mr: $(OBJECTS)
	@echo -n Linking objects to an executable...
	@$(CC) $(OBJECTS) $(GCCFINALOPTS) -omr
	@echo done

TAddressBook.o:TAddressBook.h TAddressBook.cc TDelAddList.h TButton.h TInputField.h
	@echo Stage 01/$(OBJECTNUMBER): Compiling TAddressBook.cc
	@$(CC) -c $(GCCOPTS) TAddressBook.cc
TAttachList.o: TAttachList.cc TAttachList.h TDelAddList.h TWindow.h misc.h
	@echo Stage 02/$(OBJECTNUMBER): Compiling TAttachList.cc
	@$(CC) -c $(GCCOPTS) TAttachList.cc

TBASE64.o: TBASE64.cc TBASE64.h misc.h
	@echo Stage 03/$(OBJECTNUMBER): Compiling TBASE64.cc
	@$(CC) -c $(GCCOPTS) TBASE64.cc

TButton.o: TButton.cc TButton.h TWindow.h
	@echo Stage 04/$(OBJECTNUMBER): Compiling TButton.cc
	@$(CC) -c $(GCCOPTS) TButton.cc

TCharset.o: TCharset.cc TCharset.h misc.h
	@echo Stage 05/$(OBJECTNUMBER): Compiling TCharset.cc
	@$(CC) -c $(GCCOPTS) TCharset.cc

TDelAddList.o: TDelAddList.cc TDelAddList.h TList.h
	@echo Stage 06/$(OBJECTNUMBER): Compiling TDelAddList.cc
	@$(CC) -c $(GCCOPTS) TDelAddList.cc

TEdit.o: TEdit.cc TEdit.h TInputField.h colors.h keyboard.h misc.h
	@echo Stage 07/$(OBJECTNUMBER): Compiling TEdit.cc
	@$(CC) -c $(GCCOPTS) TEdit.cc

TFileAttach.o: TFileAttach.cc TFileAttach.h TWindow.h TBASE64.h TInputField.h
	@echo Stage 08/$(OBJECTNUMBER): Compiling TFileAttach.cc
	@$(CC) -c $(GCCOPTS) TFileAttach.cc

TFileAttachList.o: TFileAttachList.cc TFileAttachList.h TList.h
	@echo Stage 09/$(OBJECTNUMBER): Compiling TFileAttachList.cc
	@$(CC) -c $(GCCOPTS) TFileAttachList.cc

TFileBox.o: TFileBox.cc TFileBox.h TFileList.h TAttachList.h TButton.h
	@echo Stage 10/$(OBJECTNUMBER): Compiling TFileBox.cc
	@$(CC) -c $(GCCOPTS) TFileBox.cc

TFileList.o: TFileList.cc TFileList.h misc.h TFileAttachList.h
	@echo Stage 11/$(OBJECTNUMBER): Compiling TFileList.cc
	@$(CC) -c $(GCCOPTS) TFileList.cc

TFileView.o: TFileView.cc
	@echo Stage 12/$(OBJECTNUMBER): Compiling TFileView.cc
	@$(CC) -c $(GCCOPTS) TFileView.cc

TFolderList.o: TFolderList.cc TFolderList.h TViewTextMsg.h TFolderView.h TWindow.h TFolderListEngine.h TInputField.h mr.rc.variables.h misc.h colors.h keyboard.h
	@echo Stage 13/$(OBJECTNUMBER): Compiling TFolderList.cc
	@$(CC) -c $(GCCOPTS) TFolderList.cc

TFolderListEngine.o: TFolderListEngine.cc TFolderListEngine.h TList.h
	@echo Stage 14/$(OBJECTNUMBER): Compiling TFolderListEngine.cc
	@$(CC) -c $(GCCOPTS) TFolderListEngine.cc

TFolderView.o: TFolderView.cc TFolderView.h TViewTextMsg.h TView.h TMsgList.h TMailEdit.h THeaderModify.h colors.h keyboard.h misc.h TMime.h TForwardFolderList.h THeaderMIME.h TThreadList.h TMarkingDialog.h
	@echo Stage 15/$(OBJECTNUMBER): Compiling TFolderView.cc
	@$(CC) -c $(GCCOPTS) TFolderView.cc

TForwardFolderList.o: TForwardFolderList.cc TForwardFolderList.h mr.rc.variables.h extensions.h misc.h
	@echo Stage 16/$(OBJECTNUMBER): Compiling TForwardFolderList.cc
	@$(CC) -c $(GCCOPTS) TForwardFolderList.cc

THeaderMIME.o: THeaderMIME.cc THeaderMIME.h TQuotedPrintable.h TBASE64.h
	@echo Stage 17/$(OBJECTNUMBER): Compiling THeaderMIME.cc
	@$(CC) -c $(GCCOPTS) THeaderMIME.cc

THeaderModify.o: THeaderModify.cc THeaderModify.h TWindow.h TInputField.h colors.h keyboard.h misc.h TemplateUtility.h TFileBox.h TAddressBook.h
	@echo Stage 18/$(OBJECTNUMBER): Compiling THeaderModify.cc
	@$(CC) -c $(GCCOPTS) THeaderModify.cc

TInputField.o: TInputField.cc TInputField.h TWindow.h keyboard.h misc.h colors.h
	@echo Stage 19/$(OBJECTNUMBER): Compiling TInputField.cc
	@$(CC) -c $(GCCOPTS) TInputField.cc

TList.o: TList.cc TList.h TWindow.h colors.h keyboard.h misc.h
	@echo Stage 20/$(OBJECTNUMBER): Compiling TList.cc
	@$(CC) -c $(GCCOPTS) TList.cc

TMailEdit.o: TMailEdit.cc TMailEdit.h TEdit.h colors.h misc.h TQuotedPrintable.h mr.rc.variables.h
	@echo Stage 21/$(OBJECTNUMBER): Compiling TMailEdit.cc
	@$(CC) -c $(GCCOPTS) TMailEdit.cc

TMarkingDialog.o: TMarkingDialog.cc TMarkingDialog.h TMenu.h TInputField.h
	@echo Stage 22/$(OBJECTNUMBER): Compiling TMarkingDialog.cc
	@$(CC) -c $(GCCOPTS) TMarkingDialog.cc

TMenu.o: TMenu.cc TMenu.h TList.h misc.h keyboard.h colors.h
	@echo Stage 23/$(OBJECTNUMBER): Compiling TMenu.cc
	@$(CC) -c $(GCCOPTS) TMenu.cc

TMenuBar.o: TMenuBar.cc TMenuBar.h TMenu.h colors.h keyboard.h misc.h
	@echo Stage 24/$(OBJECTNUMBER): Compiling TMenuBar.cc
	@$(CC) -c $(GCCOPTS) TMenuBar.cc

TMime.o: TMime.cc TMime.h TView.h TFileAttach.h TMsgList.h TMailEdit.h THeaderModify.h colors.h keyboard.h misc.h TViewTextMsg.h TQuotedPrintable.h TCharset.h TMultipartList.h TBASE64.h TWindow.h THeaderMIME.h
	@echo Stage 25/$(OBJECTNUMBER): Compiling TMime.cc
	@$(CC) -c $(GCCOPTS) TMime.cc

TMsgList.o: TMsgList.cc TMsgList.h TList.h
	@echo Stage 26/$(OBJECTNUMBER): Compiling TMsgList.cc
	@$(CC) -c $(GCCOPTS) TMsgList.cc

TMultipartList.o: TMultipartList.cc TMultipartList.h TList.h
	@echo Stage 27/$(OBJECTNUMBER): Compiling TMultipartList.cc
	@$(CC) -c $(GCCOPTS) TMultipartList.cc

TQuotedPrintable.o: TQuotedPrintable.cc TQuotedPrintable.h misc.h
	@echo Stage 28/$(OBJECTNUMBER): Compiling TQuotedPrintable.cc
	@$(CC) -c $(GCCOPTS) TQuotedPrintable.cc

TSendMultipart.o: TSendMultipart.cc TSendMultipart.h extensions.h TBASE64.h mr.rc.variables.h
	@echo Stage 29/$(OBJECTNUMBER): Compiling TSendMultipart.cc
	@$(CC) -c $(GCCOPTS) TSendMultipart.cc

TTplEdit.o: TTplEdit.cc TTplEdit.h TEdit.h
	@echo Stage 30/$(OBJECTNUMBER): Compiling TTplEdit.cc
	@$(CC) -c $(GCCOPTS) TTplEdit.cc

TThreadList.o: TThreadList.cc TThreadList.h TList.h
	@echo Stage 31/$(OBJECTNUMBER): Compiling TThreadList.cc
	@$(CC) -c $(GCCOPTS) TThreadList.cc

TUserMenuBar.o: TUserMenuBar.cc TUserMenuBar.h keyboard.h TList.h TMenuBar.h TFileView.h TInputField.h TTplEdit.h TAddressBook.h
	@echo Stage 32/$(OBJECTNUMBER): Compiling TUserMenuBar.cc
	@$(CC) -c $(GCCOPTS) TUserMenuBar.cc

TView.o: TView.cc TView.h TWindow.h colors.h keyboard.h misc.h
	@echo Stage 33/$(OBJECTNUMBER): Compiling TView.cc
	@$(CC) -c $(GCCOPTS) TView.cc

TViewTextMsg.o: TViewTextMsg.cc TViewTextMsg.h TMsgList.h TMailEdit.h THeaderModify.h colors.h keyboard.h misc.h sendmsg.h TemplateUtility.h TBASE64.h TForwardFolderList.h
	@echo Stage 34/$(OBJECTNUMBER): Compiling TViewTextMsg.cc
	@$(CC) -c $(GCCOPTS) TViewTextMsg.cc

TWindow.o: TWindow.cc TWindow.h colors.h keyboard.h misc.h
	@echo Stage 35/$(OBJECTNUMBER): Compiling TWindow.cc
	@$(CC) -c $(GCCOPTS) TWindow.cc

TemplateUtility.o: TemplateUtility.cc TemplateUtility.h
	@echo Stage 36/$(OBJECTNUMBER): Compiling TemplateUtility.cc
	@$(CC) -c $(GCCOPTS) TemplateUtility.cc

colors.o: colors.cc colors.h
	@echo Stage 37/$(OBJECTNUMBER): Compiling colors.cc
	@$(CC) -c $(GCCOPTS) colors.cc

extensions.o: extensions.cc extensions.h
	@echo Stage 38/$(OBJECTNUMBER): Compiling extensions.cc
	@$(CC) -c $(GCCOPTS) extensions.cc

misc.o: misc.cc misc.h
	@echo Stage 39/$(OBJECTNUMBER): Compiling misc.cc
	@$(CC) -c $(GCCOPTS) misc.cc

mr.o: mr.cc mr.h TFolderList.h TUserMenuBar.h
	@echo Stage 40/$(OBJECTNUMBER): Compiling mr.cc
	@$(CC) -c $(GCCOPTS) mr.cc

mr.rc.variables.o: mr.rc.variables.cc mr.rc.variables.h
	@echo Stage 41/$(OBJECTNUMBER): Compiling mr.rc.variables.cc
	@$(CC) -c $(GCCOPTS) mr.rc.variables.cc

sendmsg.o: sendmsg.cc sendmsg.h misc.h TBASE64.h TSendMultipart.h
	@echo Stage 42/$(OBJECTNUMBER): Compiling sendmsg.cc
	@$(CC) -c $(GCCOPTS) sendmsg.cc

install:
	@echo -n Setting owners and groups for executables...
	@chgrp mail mr
	@chown mail mr
	@chgrp mail updatemrrc
	@chown mail updatemrrc
	@echo done
	@echo -n Installing mr...	
	@if test -d $(BINDIR); then true; else install -d $(BINDIR); fi
	@cp mr $(BINDIR)
	@echo done
	@echo -n Installing updatemrrc utility...
	@cp updatemrrc $(BINDIR)
	@echo done
	@echo -n Installing help files...
	@if test -d $(HELPDIR); then true; else install -d $(HELPDIR); fi
	@cp about.mr $(HELPDIR)
	@cp *hlp $(HELPDIR)
	@echo done
	@echo -n Installing man page...
	@if test -d $(MANDIR); then true; else install -d $(MANDIR); fi
	@cp mr.1 $(MANDIR)
	@echo done
	@echo -n Installing charset translation tables...
	@if test -d $(CHARSETPATH); then true; else install -d $(CHARSETPATH); fi
	@cp ./charset/* $(CHARSETPATH)
	@echo done
	@echo
	@echo
	@echo 'Your installation is completed'
	@echo 'You can uninstall this program by typing "make uninstall"'
	@echo

clean:
	@echo Removing unnecesery files...
	@rm *.o mr.1 mr core
	@echo done

uninstall:
	@echo Uninstalling mr...
	@echo -n Removing mr executable, and its directory if empty...
	-@rm $(BINDIR)/mr
	-@rmdir $(BINDIR)
	@echo done
	@echo -n Removing mr man page, and its directory if empty...
	-@rm $(MANDIR)/mr.1
	-@rmdir $(MANDIR)
	@echo done
	@echo -n Removing mr help files, and its directory if empty...
	-@rm $(HELPDIR)/*hlp
	-@rm $(HELPDIR)/about.mr
	-@rmdir $(HELPDIR)
	@echo done
	@echo -n Removing mr charset tables, and its directory if empty...
	-@rm $(CHARSETPATH)/*
	-@rmdir $(CHARSETPATH)
	@echo done
      
