#
# Toplevel Makefile for STk
#
# 
# Copyright © 1993-1999 Erick Gallesio - I3S-CNRS/ESSI <eg@unice.fr>
# 
# Permission to use, copy, modify, distribute,and license this
# software and its documentation for any purpose is hereby granted,
# provided that existing copyright notices are retained in all
# copies and that this notice is included verbatim in any
# distributions.  No written agreement, license, or royalty fee is
# required for any of the authorized uses.
# This software is provided ``AS IS'' without express or implied
# warranty.
#
#           Author: Erick Gallesio [eg@unice.fr]
#    Creation date: ??-Sep-1993 ??:??
# Last file update:  3-Sep-1999 20:03 (eg)
#

SHELL		= /bin/sh
CP		= /bin/cp
STRIP		= strip
RANLIB 		= @RANLIB@
MACHTYPE	= @MACHINE@
MP		= @MP@.a
FLAVOR		= @FLAVOR@
prefix 		= @prefix@

include VERSION
include paths


all: $(FLAVOR)

unix:  start tcl-dir mp-dir stack-dir tk-dir snow-dir src-dir stklos-dir ext-dir stop 
win:   start tcl-dir mp-dir stack-dir tk-dir snow-dir src-dir stklos-dir ext-dir stop 

start:
	@date > .start-date
	@/bin/rm -f config.make
	@echo "# Common startup for all Makefiles"		>  config.make
	@echo "# This file is automatically generated"		>> config.make
	@echo "VERSION		= $(VERSION)"			>> config.make
	@echo "FLAVOR		= $(FLAVOR)"			>> config.make
	@echo "SHELL		= $(SHELL)"			>> config.make
	@echo "MACHTYPE		= $(MACHTYPE)"			>> config.make
	@echo "prefix		= $(prefix)"			>> config.make
	@cat ./paths 						>> config.make
	@echo "MACHINE		= -DMACHINE=\\\"$(MACHTYPE)\\\"" >> config.make
	@echo "CC		= @CC@"				>> config.make
	@echo "STKCFLAGS	= @STKCFLAGS@"			>> config.make
	@echo "STKLDFLAGS	= @STKLDFLAGS@"			>> config.make
	@echo "CP		= $(CP)"			>> config.make
	@echo "RANLIB		= @RANLIB@"			>> config.make
	@echo "STRIP		= @STRIP@"			>> config.make
	@echo "XINCLUDES	= @XINCLUDES@"			>> config.make
	@echo "XLIBSW		= @XLIBSW@"			>> config.make
	@echo "MP		= @MP@"				>> config.make
	@echo "DFLGS		= @DFLGS@"			>> config.make
	@echo "EOBJ		= @EOBJ@"			>> config.make
	@echo "ETKOBJ		= @ETKOBJ@"			>> config.make
	@echo "EXTRA_OBJ	= @EXTRA_OBJ@"			>> config.make
	@echo "DYNLOAD		= @DYNLOAD@"			>> config.make
	@echo "SH_CCFLAGS	= @SH_CCFLAGS@"			>> config.make
	@echo "SH_LDFLAGS	= @SH_LDFLAGS@"			>> config.make
	@echo "SH_LOADER	= @SH_LOADER@"			>> config.make
	@echo "SH_SUFFIX	= @SH_SUFFIX@"			>> config.make
	@echo "LIB_MALLOC	= @LIB_MALLOC@"			>> config.make
	@echo "LIB_DLD		= @LIB_DLD@"			>> config.make
	@echo "STK_LIBRARY	= $(libdir)"			>> config.make


stop:
	@echo "Make started at `cat .start-date`"
	@/bin/rm .start-date
	@echo "Make completed at `date`"

tcl-dir:
	@(echo "make Tcl"; cd Tcl; $(MAKE) $(FLAVOR))
tk-dir:
	@(echo "make Tk"; cd Tk; $(MAKE) libtk.a)
mp-dir:
	@(echo "make Mp"; cd Mp; $(MAKE) $(MP))
stack-dir:
	@(echo "make Stack"; cd Stack; $(MAKE))
src-dir:
	@(echo "make Src"; cd Src; $(MAKE) stk TK="-DUSE_TK")
snow-dir:
	@(echo "make Snow"; cd Snow; $(MAKE) snow TK="-DNO_TK")
stklos-dir:
	@(echo "make STklos"; cd STklos; $(MAKE) stklos)	
ext-dir:
	@(echo "Make Extensions"; cd Extensions; $(MAKE) all)
doc:
	@(echo "Make Documentation"; cd Doc; $(MAKE) all)
dvi:
	@(echo "Make Documentation(dvi)"; cd Doc; $(MAKE) dvi)

demos:
	/bin/sh -c "(cd Demos; ../Src/test-stk -f S-scape README.html)"

install: install-no-strip
	@echo "Stripping executables ..."
	$(STRIP) $(root)$(execdir)/stk
	$(STRIP) $(root)$(execdir)/snow
	@echo ""
	@echo "Installation completed."

install-no-strip: clean-before
	(cd Tcl;     	$(MAKE) install prefix=$(root)$(prefix))
	(cd Tk;      	$(MAKE) install INSTALL_ROOT=$(root))
	(cd Mp;		$(MAKE) install prefix=$(root)$(prefix))
	(cd Src;     	$(MAKE) install.stk root=$(root))
	(cd Snow;     	$(MAKE) install.snow root=$(root))
	(cd Lib;     	$(MAKE) install root=$(root))
	(cd STklos;  	$(MAKE) install prefix=$(root)$(prefix))
	(cd Extensions; $(MAKE) install prefix=$(root)$(prefix))
	(cd Demos;   	$(MAKE) install root=$(root))
	(cd Help;	$(MAKE) install prefix=$(root)$(prefix))
	(cd Doc;	$(MAKE) install prefix=$(root)$(prefix))
	(cd Stack;	$(MAKE) install prefix=$(root)$(prefix))

install.libs:
	-if [ ! -d $(root)$(confdir) ] ; then mkdir -p $(root)$(confdir); fi
	$(CP) config.make $(root)$(confdir)
	-if [ ! -d $(root)$(incdir) ] ; then mkdir -p $(root)$(incdir); fi
	/bin/rm -f $(root)$(stkdir)/include
	(cd $(root)$(stkdir) ; ln -s $(VERSION)/include ./include)
	(cd Tcl;     	$(MAKE) install.libs prefix=$(root)$(prefix))
	(cd Tk;      	$(MAKE) install.libs prefix=$(root)$(prefix))
	(cd Mp;		$(MAKE) install.libs prefix=$(root)$(prefix))
	(cd Src;     	$(MAKE) install.stk.libs root=$(root))
	(cd Snow;     	$(MAKE) install.snow.libs root=$(root))
	(cd Stack;	$(MAKE) install.libs root=$(root))
	chmod 0755 $(root)$(confdir) $(root)$(ardir) $(root)$(confdir)/* $(root)$(ardir)/*
	@echo ""
	@echo "Full installation completed."

binary-release: install install.man
	(cd $(prefix)/lib; \
	 tar cvfz /tmp//STk-$(VERSION)-$(MACHINE).tar.gz stk/$(VERSION)/$(MACHINE))
	@echo "The release is in the file  /tmp/STk-$(VERSION)-$(MACHINE).tar.gz"
	@echo "Don't forget to create the file STk-$(VERSION)-$(MACHINE).README"
	@echo "to describe the content of your archive (a template is given in"
	@echo "the file BINARY-DISTRIB"

common-release: 
	(cd $(prefix)/lib; \
	 tar cvfz /tmp/STk-$(VERSION)-common.tar.gz stk/$(VERSION)/Help   \
						    stk/$(VERSION)/STk    \
						    stk/$(VERSION)/demos  \
						    stk/$(VERSION)/images \
						    stk/$(VERSION)/images \
						    stk/$(VERSION)/man    \
						    stk/man)
	@echo "Terminé. Le fichier est dans /tmp/STk-$(VERSION)-common.tar.gz"

clean-before:
	@if [ -d $(root)$(prefix)/lib/stk ]; \
	then \
	  echo "*** WARNING:"; \
	  echo "*** A previous version of STk has already been installed in"; \
	  echo "*** directory '$(stkdir)'. It is not a problem since"; \
	  echo "*** several versions can coexist now in this directory"; \
	  echo "*** However, if you are short in place, or if you don't use "; \
	  echo "*** a multi architecture file system, cleaning may be a good"; \
	  echo "*** thing to do."; \
	  echo "*** (Waiting 10s) " ; \
	  sleep 10;\
	fi
	@if [ -d $(root)$(prefix)/lib/stk/$(VERSION) ]; \
	then \
	  echo "*** WARNING:"; \
	  echo "*** This STk version ($(VERSION)) has already been installed "; \
	  echo "*** on this machine. Should I clean this directory before "; \
	  echo "*** starting installation of STk-$(VERSION)? [no] " ; \
	  read a; \
	  case $$a in \
	    y*|Y*) echo "Deleting previous installation"; \
                   /bin/rm -rf $(stkdir)/$(VERSION);; \
	    *) echo "No cleaning!";; \
	  esac; \
	fi

install.man:
	(cd Doc;	$(MAKE) install.man)

clean:
	(cd Tcl;    	$(MAKE) clean)
	(cd Tk;     	$(MAKE) clean)
	(cd Mp;     	$(MAKE) clean)
	(cd Stack;     	$(MAKE) clean)
	(cd Src;    	$(MAKE) clean)
	(cd Snow;    	$(MAKE) clean)
	(cd STklos; 	$(MAKE) clean)
	(cd Extensions; $(MAKE) clean)
	(cd Help;	$(MAKE) clean)
	(cd Doc;	$(MAKE) clean)
	/bin/rm -f core *~ Makefile config.* Src/Makefile

cin:
	@(cat VERSION; prcs checkin -n)

ci:
	@(cat VERSION; prcs checkin)

