# Copyright (c) 1993 by Sanjay Ghemawat
############################################################################

       srcdir = .


       prefix = /usr/local
  exec_prefix = ${prefix}

        SHELL = /bin/sh

 CONFIGURE    = ./configure 
 CONFIGURED   = Makefile startup.tcl calendar/Makefile time/Makefile
 CONFIGURE_IN =  ./Makefile.in ./startup.tcl.in ./calendar/Makefile.in ./time/Makefile.in
 CONFFILES    = $(srcdir)/configure.in

       BINDIR = $(exec_prefix)/bin
       LIBDIR = $(prefix)/lib
      ILIBDIR = $(LIBDIR)/ical/v2.2
       MANDIR = $(prefix)/man

           CC = cc
          CXX = g++
    CXXLINKER = $(CXX)
    CXXFLAGS  = -Wall

       RANLIB = ranlib
      INSTALL = /usr/bin/install -c
         LN_S = ln -s
 INSTALL_DATA = ${INSTALL} -m 644

           RM = rm
           AR = ar
        CHMOD = chmod
         ECHO = echo
        MKDIR = mkdir
       FILE2H = $(srcdir)/f2h

  TKSCRIPTS = /usr/local/lib/tk8.3/tk.tcl  /usr/local/lib/tk8.3/bgerror.tcl /usr/local/lib/tk8.3/button.tcl /usr/local/lib/tk8.3/choosedir.tcl /usr/local/lib/tk8.3/clrpick.tcl /usr/local/lib/tk8.3/comdlg.tcl /usr/local/lib/tk8.3/dialog.tcl /usr/local/lib/tk8.3/entry.tcl /usr/local/lib/tk8.3/focus.tcl /usr/local/lib/tk8.3/listbox.tcl /usr/local/lib/tk8.3/menu.tcl /usr/local/lib/tk8.3/msgbox.tcl /usr/local/lib/tk8.3/obsolete.tcl /usr/local/lib/tk8.3/optMenu.tcl /usr/local/lib/tk8.3/palette.tcl /usr/local/lib/tk8.3/safetk.tcl /usr/local/lib/tk8.3/scale.tcl /usr/local/lib/tk8.3/scrlbar.tcl /usr/local/lib/tk8.3/tearoff.tcl /usr/local/lib/tk8.3/text.tcl /usr/local/lib/tk8.3/tkfbox.tcl /usr/local/lib/tk8.3/xmfbox.tcl
 TCLSCRIPTS =  /usr/local/lib/tcl8.3/auto.tcl /usr/local/lib/tcl8.3/history.tcl /usr/local/lib/tcl8.3/init.tcl /usr/local/lib/tcl8.3/ldAout.tcl /usr/local/lib/tcl8.3/package.tcl /usr/local/lib/tcl8.3/parray.tcl /usr/local/lib/tcl8.3/safe.tcl /usr/local/lib/tcl8.3/word.tcl
  LIB_FILES =  ./tcllib/canvas.tcl ./tcllib/class.tcl ./tcllib/dg_bug.tcl ./tcllib/dg_error.tcl ./tcllib/dg_file.tcl ./tcllib/dg_num.tcl ./tcllib/dg_string.tcl ./tcllib/dg_yn.tcl ./tcllib/dg_ync.tcl ./tcllib/filesel.tcl ./tcllib/hooks.tcl ./tcllib/key.tcl ./tcllib/label.tcl ./tcllib/menus.tcl ./tcllib/ruler.tcl ./tcllib/support.tcl ./tcllib/textwin.tcl
 ICAL_FILES =  ./actions.tcl ./alarm.tcl ./apptlist.tcl ./canvsup.tcl ./dateeditor.tcl ./dayview.tcl ./dg_alarms.tcl ./dg_item.tcl ./dg_key.tcl ./dg_monthr.tcl ./dg_print.tcl ./dg_range.tcl ./dg_wdays.tcl ./help.tcl ./ical_text.tcl ./ical_x.tcl ./io.tcl ./itemlist.tcl ./itemwindow.tcl ./link.tcl ./listing.tcl ./notelist.tcl ./parse.tcl ./pref.tcl ./print.tcl ./startup.tcl ./support.tcl ./timerange.tcl ./trigger.tcl

   X_CFLAGS = -I/usr/X11R6/include
     X_LIBS = -L/usr/X11R6/lib -lX11   -lm
  EXTRALIBS = 

       LIB1 = calendar/libcalendar.a
       LIB2 = time/libtime.a
       LIB3 = types/libtypes.a
       LIB4 = -L/usr/local/lib -ltk83 -L/usr/local/lib -ltcl83${TCL_DBGX}
       LIBS = $(LIB1) $(LIB2) $(LIB3) $(LIB4) $(EXTRALIBS) $(X_LIBS)   -lm

    MAINOBJ = main.o

# XXX Make sure bundled executable uses static versions of tcl/tk libraries?
#      BLIBS = $(LIB1) $(LIB2) $(LIB3)\
#              @tklibdir@/libtk@tklibver@.a @tcllibdir@/libtcl@tcllibver@.a\
#              $(EXTRALIBS) $(X_LIBS)
      BLIBS = $(LIBS)

# Tiny bundled executable uses shared versions of tcl/tk libraries
 TINY_BLIBS = $(LIBS)

    CXXINCS = -I. -I$(srcdir) -I$(srcdir)/calendar \
              -I$(srcdir)/types -I$(srcdir)/time \
              $(X_CFLAGS) -I/usr/local/include -I/usr/local/include

     CFLAGS += -I. -I$(srcdir) $(X_CFLAGS)

OBJS = cal_tcl.o dateeditor.o dispatch.o ical.o ical_tcl.o \
       item_tcl.o object.o time_tcl.o 

# Building rules

all: $(CONFIGURED) ical

ical: $(LIB3) $(LIB2) $(LIB1) $(OBJS) $(MAINOBJ)
	$(CXXLINKER) -o $@ $(OBJS) $(MAINOBJ) $(LIBS)

ical-bundle: $(LIB3) $(LIB2) $(LIB1) $(OBJS) mbundle.o
	$(CXXLINKER) -o $@ $(OBJS) mbundle.o $(BLIBS)

ical-tiny: $(LIB3) $(LIB2) $(LIB1) $(OBJS) mbundle.o
	$(CXXLINKER) -o $@ $(OBJS) mbundle.o $(TINY_BLIBS)

$(LIB1): FRC
	@echo making in calendar
	@cd calendar; $(MAKE) libcalendar.a

$(LIB2): FRC
	@echo making in time
	@cd time; $(MAKE) libtime.a

$(LIB3): FRC
	@echo making in types
	@cd types; $(MAKE) libtypes.a

# Rules to generate C strings from various files

GEN1 = tcl_lib.gen tk_lib.gen tcllib.gen ical_lib.gen
GEN2 = ical_start.gen psheader.gen icaldoc.gen tcldoc.gen

tcl_lib.gen: Makefile $(TCLSCRIPTS)
	cat $(TCLSCRIPTS) | $(FILE2H) > $@

tk_lib.gen: Makefile $(TKSCRIPTS)
	cat $(TKSCRIPTS) | $(FILE2H) > $@

tcllib.gen: $(LIB_FILES)
	cat $(LIB_FILES) | $(FILE2H) > $@

ical_lib.gen: $(ICAL_FILES)
	cat $(ICAL_FILES) | $(FILE2H) > $@

ical_start.gen: startup.tcl
	cat startup.tcl | $(FILE2H) > $@

psheader.gen: $(srcdir)/header.ps
	cat $(srcdir)/header.ps | $(FILE2H) > $@

icaldoc.gen: $(srcdir)/doc/ical.doc
	cat $(srcdir)/doc/ical.doc | $(FILE2H) > $@

tcldoc.gen: $(srcdir)/doc/interface.doc
	cat $(srcdir)/doc/interface.doc | $(FILE2H) > $@

main.o: $(GEN2)
winMain.o: $(GEN2)

mbundle.o: $(GEN1) $(GEN2) $(srcdir)/main.cpp
	$(CXX) -DSTANDALONE $(CXXFLAGS) $(CXXINCS) -c $(srcdir)/main.cpp -o $@

FRC:

# Cleaning rules

distclean: clean
	$(RM) -f config.h config.status config.log config.cache startup.tcl
	$(RM) -f Makefile types/Makefile time/Makefile calendar/Makefile

clean::
	@echo cleaning in calendar
	@cd calendar; $(MAKE) clean
	@echo cleaning in time
	@cd time; $(MAKE) clean
	@echo cleaning in types
	@cd types; $(MAKE) clean
	$(RM) -f ical ical-bundle ical-tiny icaltest.cal* *.gen *.o *.a *.bak

# Installation rules

install: instbin instman instlib instcontrib
	@echo installation finished

instbin: ical
	-$(MKDIR) $(BINDIR)
	$(INSTALL) ical $(BINDIR)/ical-2.2
	$(RM) -f $(BINDIR)/ical
	$(LN_S) ical-2.2 $(BINDIR)/ical

instman:
	-$(MKDIR) $(MANDIR)
	-$(MKDIR) $(MANDIR)/man1
	-$(INSTALL_DATA) $(srcdir)/doc/ical.man $(MANDIR)/man1/ical.1

instlib:
	-$(MKDIR) $(LIBDIR)
	-$(MKDIR) $(LIBDIR)/ical
	-$(MKDIR) $(ILIBDIR)
	-$(MKDIR) $(ILIBDIR)/tcllib
	@for f in $(LIB_FILES) $(srcdir)/tcllib/tclIndex ; do\
		echo $(INSTALL_DATA) $$f $(ILIBDIR)/tcllib/`basename $$f`;\
		$(INSTALL_DATA) $$f $(ILIBDIR)/tcllib/`basename $$f`;\
	done
	@for f in $(ICAL_FILES) $(srcdir)/tclIndex ; do\
		echo $(INSTALL_DATA) $$f $(ILIBDIR)/`basename $$f`;\
		$(INSTALL_DATA) $$f $(ILIBDIR)/`basename $$f`;\
	done

instcontrib:
	-$(MKDIR) $(LIBDIR)
	-$(MKDIR) $(LIBDIR)/ical
	-$(MKDIR) $(ILIBDIR)
	-$(MKDIR) $(ILIBDIR)/contrib
	@for f in $(srcdir)/contrib/* ; do\
		if test -f $$f ; then\
		echo $(INSTALL_DATA) $$f $(ILIBDIR)/contrib/`basename $$f`;\
		$(INSTALL_DATA) $$f $(ILIBDIR)/contrib/`basename $$f`;\
		fi;\
	done

test:
	ICAL_LIBRARY=$(srcdir) ./ical -calendar icaltest.cal

check: check_text check_x

check_text:
	@ICAL_LIBRARY=$(srcdir) ./ical -nodisplay -f $(srcdir)/tests/no_x.tcl

check_x:
	@ICAL_LIBRARY=$(srcdir) ./ical -f $(srcdir)/tests/x.tcl

# Rules for shipping html documentation
DOCDEST = /udir/sanjay/pkg/srcweb/sanjay.bio/external-web/ical
shipdoc:
	cp $(srcdir)/doc/ical.html $(DOCDEST)/doc.html
	cp $(srcdir)/doc/interface.html $(DOCDEST)/interface.html
	cp $(srcdir)/CHANGES.html $(DOCDEST)/changes.html

.SUFFIXES: .cpp

.cpp.o:
	$(CXX) $(CXXFLAGS) $(CXXINCS) -c $<

# Support for automatic reconfiguration

config.status: $(srcdir)/configure
	$(CONFIGURE) --no-create

$(CONFIGURED): $(CONFIGURE_IN) config.status
	./config.status
	@echo Makefiles have been rebuilt.
	@echo Re-execute make.
	@false

# (Do not run autoconf automatically because it may not be present on
# client machine.)
#
#$(srcdir)/configure: $(CONFFILES)
#	cd $(srcdir); autoconf

# DO NOT DELETE THIS LINE -- make depend depends on it.

cal_tcl.o: $(srcdir)/cal_tcl.h
cal_tcl.o: $(srcdir)/object.h
cal_tcl.o: $(srcdir)/calendar/arrays.h
cal_tcl.o: $(srcdir)/types/Array.h
cal_tcl.o: $(srcdir)/types/basic.h
cal_tcl.o: $(srcdir)/collect.h
cal_tcl.o: $(srcdir)/time/Date.h
cal_tcl.o: $(srcdir)/dispatch.h
cal_tcl.o: $(srcdir)/ical.h
cal_tcl.o: $(srcdir)/item_tcl.h
cal_tcl.o: $(srcdir)/calendar/item.h
cal_tcl.o: $(srcdir)/calendar/dateset.h
cal_tcl.o: $(srcdir)/calendar/smallintset.h
cal_tcl.o: $(srcdir)/calendar/calendar.h
cal_tcl.o: $(srcdir)/calendar/calfile.h
cal_tcl.o: $(srcdir)/time/icTime.h
cal_tcl.o: $(srcdir)/calendar/uid.h
cal_tcl.o: $(srcdir)/types/hashfuncs.h
cal_tcl.o: $(srcdir)/types/ohashset.h
dateeditor.o: $(srcdir)/types/Array.h
dateeditor.o: $(srcdir)/types/basic.h
dateeditor.o: $(srcdir)/time/Date.h
dateeditor.o: $(srcdir)/time/Month.h
dateeditor.o: $(srcdir)/time/WeekDay.h
dateeditor.o: $(srcdir)/cal_tcl.h
dateeditor.o: $(srcdir)/object.h
dateeditor.o: $(srcdir)/calendar/arrays.h
dateeditor.o: $(srcdir)/calendar/calendar.h
dateeditor.o: $(srcdir)/calendar/calfile.h
dateeditor.o: $(srcdir)/time/icTime.h
dateeditor.o: $(srcdir)/collect.h
dateeditor.o: $(srcdir)/ical.h
dateeditor.o: $(srcdir)/item_tcl.h
dateeditor.o: $(srcdir)/calendar/item.h
dateeditor.o: $(srcdir)/calendar/dateset.h
dateeditor.o: $(srcdir)/calendar/smallintset.h
dispatch.o: $(srcdir)/dispatch.h
dispatch.o: $(srcdir)/ical.h
handle.o: $(srcdir)/types/basic.h
handle.o: $(srcdir)/handle.h
ical.o: $(srcdir)/collect.h
ical.o: $(srcdir)/types/Array.h
ical.o: $(srcdir)/types/basic.h
ical.o: $(srcdir)/time/Date.h
ical.o: $(srcdir)/ical.h
ical.o: $(srcdir)/cal_tcl.h
ical.o: $(srcdir)/object.h
ical.o: $(srcdir)/calendar/arrays.h
ical.o: $(srcdir)/item_tcl.h
ical.o: $(srcdir)/calendar/item.h
ical.o: $(srcdir)/calendar/dateset.h
ical.o: $(srcdir)/calendar/smallintset.h
ical.o: $(srcdir)/calendar/calfile.h
ical.o: $(srcdir)/time/icTime.h
ical.o: $(srcdir)/calendar/calendar.h
ical_tcl.o: $(srcdir)/types/basic.h
ical_tcl.o: $(srcdir)/cal_tcl.h
ical_tcl.o: $(srcdir)/object.h
ical_tcl.o: $(srcdir)/calendar/arrays.h
ical_tcl.o: $(srcdir)/types/Array.h
ical_tcl.o: $(srcdir)/ical.h
ical_tcl.o: $(srcdir)/item_tcl.h
ical_tcl.o: $(srcdir)/calendar/item.h
ical_tcl.o: $(srcdir)/time/Date.h
ical_tcl.o: $(srcdir)/calendar/dateset.h
ical_tcl.o: $(srcdir)/calendar/smallintset.h
item_tcl.o: $(srcdir)/time/WeekDay.h
item_tcl.o: $(srcdir)/types/basic.h
item_tcl.o: $(srcdir)/calendar/arrays.h
item_tcl.o: $(srcdir)/types/Array.h
item_tcl.o: $(srcdir)/cal_tcl.h
item_tcl.o: $(srcdir)/object.h
item_tcl.o: $(srcdir)/calendar/calfile.h
item_tcl.o: $(srcdir)/time/icTime.h
item_tcl.o: $(srcdir)/calendar/calendar.h
item_tcl.o: $(srcdir)/ical.h
item_tcl.o: $(srcdir)/item_tcl.h
item_tcl.o: $(srcdir)/calendar/item.h
item_tcl.o: $(srcdir)/time/Date.h
item_tcl.o: $(srcdir)/calendar/dateset.h
item_tcl.o: $(srcdir)/calendar/smallintset.h
item_tcl.o: $(srcdir)/dispatch.h
main.o: $(srcdir)/ical.h
main.o: $(srcdir)/bitmaps/left.xbm
main.o: $(srcdir)/bitmaps/right.xbm
main.o: $(srcdir)/bitmaps/todo.xbm
main.o: $(srcdir)/bitmaps/done.xbm
main.o: $(srcdir)/bitmaps/sleft.xbm
main.o: $(srcdir)/bitmaps/dleft.xbm
main.o: $(srcdir)/bitmaps/sright.xbm
main.o: $(srcdir)/bitmaps/dright.xbm
main.o: $(srcdir)/bitmaps/ical.xbm
object.o: $(srcdir)/types/basic.h
object.o: $(srcdir)/ical.h
object.o: $(srcdir)/object.h
time_tcl.o: $(srcdir)/time/Date.h
time_tcl.o: $(srcdir)/time/icTime.h
time_tcl.o: $(srcdir)/time/Month.h
time_tcl.o: $(srcdir)/time/WeekDay.h
time_tcl.o: $(srcdir)/time/Year.h
time_tcl.o: $(srcdir)/time/parse.h
time_tcl.o: $(srcdir)/ical.h
