include make.include
include make.pkgs

.NOTPARALLEL :

#--------------------------defines

export root := $(shell pwd)

USER	= joye
DEST	= bokhara

#--------------------------dirs

SRCDIR	= src
DOCDIR	= doc
DS9DIR	= ds9
DIRS = bin lib include man share dist

#--------------------------dist

DS9APP=SAOImage\ DS9\ $(DS9VERSION)
XPAAPP=XPA\ $(XPAVERSION)

#--------------------------blt stuff

BLTINCL	= blt.h bltVector.h

BLTWITHOUT = \
	--without-jpegincdir --without-jpeglibdir \
	--without-pngincdir --without-pnglibdir \
	--without-tiffincdir --without-tifflibdir \
	--without-xpmincdir --without-xpmlibdir \
	--without-xrandrincdir --without-xrandrlibdir \
	--without-expatincdir --without-expatlibdir \
	--without-mysqlincdir --without-mysqllibdir

#--------------------------flags

ifeq ($(OS),unix)
  PORT=unix

  TCLINSTALL=install
  TCLDIRDIR= $(TCLDIR)/unix
  TKDIRDIR= $(TKDIR)/unix

  XFLAGS = --x-includes=$(X11INCLUDE) --x-libraries=$(X11LIB)

  TCLFLAGS = $(XFLAGS) $(EXTTCLFLAGS) --prefix $(root) --enable-64bit --disable-shared --disable-threads

  TKTABLEFLAGS = $(XFLAGS) --prefix $(root) --disable-shared
  BLTFLAGS = $(XFLAGS) $(BLTWITHOUT)
  TKIMGFLAGS = $(XFLAGS)
  XPAFLAGS = $(XFLAGS)

  ZLIB=
  SIGNAL= signal
endif

ifeq ($(OS),windows)
  PORT= win

  TCLINSTALL=install
  TCLDIRDIR= $(TCLDIR)/win
  TKDIRDIR= $(TKDIR)/win

  TCLFLAGS = --prefix $(root) --disable-shared --disable-threads

  TKTABLEFLAGS = --prefix $(root) --disable-shared
  BLTFLAGS = --without-x $(BLTWITHOUT) \
	--without-xftincdir --without-xftlibdir
  TKIMGFLAGS =
  XPAFLAGS = --without-x
  PRETKHTMLFLAGS = config_BUILD_TCLSH=tclsh86sg \
	config_TARGET_TCL_SCRIPT_DIR=$(root)/lib/tcl8.6

  ZLIB=zlib
  SIGNAL=
endif

ifeq ($(OS),macosx)
  PORT= macosx

  TCLINSTALL=
  TCLDIRDIR= $(TCLDIR)/macosx
  TKDIRDIR= $(TKDIR)/macosx

  TKTABLEFLAGS = --prefix $(root)

  BLTFLAGS = $(BLTWITHOUT)
  TKIMGFLAGS =

# xpa configure will not accept --without-x
  XPAFLAGS = --with-x=disabled --enable-posix_spawn
  PRETKHTMLFLAGS = config_TARGET_LIBS="-framework CoreFoundation -framework Carbon" \
	config_TARGET_X_INC="-I$(root)/$(TKDIR)/xlib" \
	config_TARGET_X_LIBS=" "

  FUNTOOLSFLAGS = --enable-posix_spawn

  ZLIB=
  SIGNAL= signal
endif

CVSFILES = admin \
	checkdns \
	tkmpeg \
	COPYING \
	copyright \
	iis \
	make.cygwin \
	make.darwin64x86mountainlion \
	make.darwinx86mountainlion \
	make.darwinmountainlion \
	make.darwin64x86lion \
	make.darwinx86lion \
	make.darwinlion \
	make.darwin64x86snowleopard \
	make.darwinx86snowleopard \
	make.darwinsnowleopard \
	make.linux \
	make.linux64 \
	make.macosxx86mountainlion \
	make.source \
	make.pkgs \
	Makefile \
	notes.txt \
	mods \
	README \
	saotk \
	unix \
	win \
	macosx \
	tests \
	doc \
	cmaps \
	template \
	src \
	msgs \
	ds9 \
	util \
	compilers \
	$(ZVFSDIR)/Makefile \
	$(WCSSUBSDIR)/Makefile \
	$(RICEDIR)/Makefile \
	$(HCOMPRESSDIR)/Makefile \
	$(PLIODIR)/Makefile

#--------------------------build

all: 	dirs \
	tcl tk \
	tktable tkcon xmlrpc blt \
	$(ZLIB) tclxml tkimg tkmpeg tkhtml \
	xpa iis checkdns $(SIGNAL) funtools \
	ast wcssubs \
	rice hcompress plio \
	$(PORT) \
	saotk zvfs ds9

doc	: FORCE
	@echo "Making Documentation..."
	cd $(DOCDIR); $(MAKE)

#--------------------------language

language: FORCE
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl da iso8859-1
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl de iso8859-1
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl es iso8859-1
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl fr iso8859-1
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl pt iso8859-1
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl cs iso8859-2
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl ja euc-jp
	grep 'msgcat::mc' src/*.tcl | tclsh8.6 util/mergedict.tcl zh big5

#--------------------------items

dirs	: FORCE
	@echo "Installing Directories..."
	@for d in $(DIRS); do if [ ! -d $$d ]; then mkdir $$d; fi done

tcl	: FORCE
	@echo "Installing Tcl..."
	cd $(TCLDIRDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure $(TCLFLAGS)
	$(MAKE) -C $(TCLDIRDIR) -j $(JOBS) $(TCLINSTALL)

tk	: FORCE
	@echo "Installing Tk..."
	cd $(TKDIRDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure $(TCLFLAGS)
	$(MAKE) -C $(TKDIRDIR) -j $(JOBS) $(TCLINSTALL)

tktable	: FORCE
	@echo "Installing TkTable..."
	cd $(TKTABLEDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure $(TKTABLEFLAGS)
	$(MAKE) -C $(TKTABLEDIR) -j $(JOBS)
	$(MAKE) -C $(TKTABLEDIR) -j $(JOBS) install

tkcon	: FORCE
	@echo "Installing TkCon..."
	$(RM) -r lib/$(TKCONVER)
	mkdir lib/$(TKCONVER)
	cp $(TKCONDIR)/*.tcl lib/$(TKCONVER)

xmlrpc	: FORCE
	@echo "Installing XMLRPC..."
	$(RM) -r lib/$(XMLRPCVER)
	mkdir lib/$(XMLRPCVER)
	cp $(XMLRPCDIR)/xmlrpc.tcl lib/$(XMLRPCVER)

blt	: FORCE
	@echo "Installing BLT..."
	cd $(BLTDIR); CC='$(CC)' CFLAGS='$(OPTS) -DUSE_INTERP_RESULT' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --with-tcl=$(root)/$(TCLDIRDIR) --with-tk=$(root)/$(TKDIRDIR) $(BLTFLAGS) --disable-shared
	cd $(BLTDIR)/src; $(MAKE) -j $(JOBS) build_static
	cp $(BLTDIR)/src/*.a lib/.
	cd $(BLTDIR)/src; cp $(BLTINCL) ../../include/.

zlib  : FORCE
	@echo "Installing zlib..."
	cd $(ZLIBDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --static
	$(MAKE) -C $(ZLIBDIR) -j $(JOBS) install

tclxml	: FORCE
	@echo "Installing TCLXML..."
	cd $(TCLXMLDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --disable-shared --disable-threads --with-xml-static=1 $(TCLXMLFLAGS)
	$(MAKE) -C $(TCLXMLDIR) -j $(JOBS)
	$(MAKE) -C $(TCLXMLDIR) -j $(JOBS) install

tkimg	: libtiff
	@echo "Installing TKIMG..."
	cd $(TKIMGDIR); CC='$(CC)' CFLAGS='$(OPTS) -DPNG_NO_WRITE_gAMA' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --with-tcl=$(root)/$(TCLDIRDIR) --with-tk=$(root)/$(TKDIRDIR) $(TKIMGFLAGS) --disable-shared --disable-threads
	$(MAKE) -C $(TKIMGDIR) -j $(JOBS) install

libtiff	: FORCE
	@echo "Installing LIBTIFF..."
	cd $(TKIMGDIR)/compat/libtiff; CC='$(CC)' CFLAGS='$(OPTS)' CXX='$(CC)' CXXFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --disable-shared
	$(MAKE) -C $(TKIMGDIR)/compat/libtiff -j $(JOBS) install

tkmpeg	: FORCE
	@echo "Installing TKMPEG..."
	$(MAKE) -C $(TKMPEGDIR) -j $(JOBS) install

tkhtml	: $(HTMLDIR)
	@echo "Installing TKHTML..."
	cd $(HTMLDIR); CC='$(CC)' CFLAGS='$(OPTS) -DUSE_INTERP_RESULT' LDFLAGS='$(LIBS)' $(PRETKHTMLFLAGS) $(root)/htmlwidget/configure --prefix $(root) --with-tcl=$(root)/$(TCLDIR) --with-tk=$(root)/$(TKDIR) $(XFLAGS) --enable-shared=no
	$(MAKE) -C $(HTMLDIR) headers libtkhtml.a
	cp $(HTMLDIR)/libtkhtml.a lib/.

$(HTMLDIR) : FORCE
	mkdir $(HTMLDIR)

xpa	: FORCE
	@echo "Installing XPA..."
	cd $(XPADIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --with-tcl=$(root)/$(TCLDIRDIR) $(XPAFLAGS) --disable-shared
	$(MAKE) -C $(XPADIR) -j $(JOBS) install
	cd bin; strip xpa*

iis	: FORCE
	@echo "Installing IIS..."
	$(MAKE) -C $(IISDIR) -j $(JOBS) install

checkdns: FORCE
	@echo "Installing CheckDNS..."
	$(MAKE) -C $(CHECKDNSDIR) -j $(JOBS) install

signal: FORCE
	@echo "Installing Signal..."
	$(MAKE) -C $(SIGNALDIR) -j $(JOBS) install

funtools: FORCE
	@echo "Installing Funtools..."
#	cd $(FUNTOOLSDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --with-zlib=../../lib/libz.a --with-wcslib=../lib/libwcs.a --enable-mainlib $(FUNTOOLSFLAGS)
	cd $(FUNTOOLSDIR); CC='$(CC)' CFLAGS='$(OPTS)' LDFLAGS='$(LIBS)' ./configure --prefix $(root) --with-wcslib=../lib/libwcs.a --enable-mainlib $(FUNTOOLSFLAGS)
	$(MAKE) -C $(FUNTOOLSDIR) lib
	cp $(FUNTOOLSDIR)/libfuntools.a lib/.

ast	: FORCE
	@echo "Installing AST..."
	cd $(ASTDIR); \
	touch aclocal.m4; sleep 1; \
	touch Makefile.in; sleep 1; \
	touch configure; \
	./configure --enable-shared=no --prefix=$(root) $(ASTFLAGS) CC='$(CC)' CFLAGS='$(OPTS) -I.'; \
	$(MAKE) -j $(JOBS) ast.h install-libLTLIBRARIES install-nodist_includeHEADERS install-includeHEADERS

wcssubs	: FORCE
	@echo "Installing WCSSUBS..."
	$(MAKE) -C $(WCSSUBSDIR) -j $(JOBS) install

rice	: FORCE
	@echo "Installing RICE..."
	$(MAKE) -C $(RICEDIR) -j $(JOBS) install

hcompress: FORCE
	@echo "Installing HCOMPRESS..."
	$(MAKE) -C $(HCOMPRESSDIR) -j $(JOBS) install

plio: FORCE
	@echo "Installing PLIO..."
	$(MAKE) -C $(PLIODIR) -j $(JOBS) install

$(PORT) : FORCE
	@echo "Installing $(PORT)..."
	$(MAKE) -C $(PORT) -j $(JOBS) install

saotk	: FORCE
	@echo "Installing SAOTK..."
	$(MAKE) -C $(SAOTKDIR) -j $(JOBS) install

zvfs	: FORCE
	@echo "Installing ZVFS..."
	$(MAKE) -C $(ZVFSDIR) install

ds9	: scrub
	@echo "Making DS9..."
	$(MAKE) -C $(DS9DIR)

debug	: FORCE
	@echo "Making DS9..."
	$(MAKE) -C $(DS9DIR) debug

#--------------------------clean

scrub : FORCE
	find . -name "*[~#]" -exec rm {} \;
ifeq ($(OS),windows)
	find . -name "*stackdump*" -exec rm {} \;
endif

distclean : tclclean tkclean \
	tktableclean bltclean \
	$(ZLIB)clean tclxmlclean tkimgclean tkmpegclean tkhtmlclean \
	xpaclean iisclean checkdnsclean $(SIGNAL)clean funtoolsclean \
	astclean wcssubsclean \
	riceclean hcompressclean plioclean \
	$(PORT)clean \
	saotkclean zvfsclean ds9clean srcclean \
	filesclean dirsclean

clean: FORCE

filesclean: FORCE
	$(RM) core *~ *#

dirsclean: FORCE
	@for d in $(DIRS); do rm -rf $$d; done

tclclean : FORCE
	$(MAKE) -C $(TCLDIRDIR) distclean

tkclean : FORCE
	$(MAKE) -C $(TKDIRDIR) distclean

tktableclean: FORCE
	$(MAKE) -C $(TKTABLEDIR) distclean

bltclean: FORCE
	$(MAKE) -C $(BLTDIR) distclean

zlibclean: FORCE
	$(MAKE) -C $(ZLIBDIR) distclean

tclxmlclean: FORCE
	$(MAKE) -C $(TCLXMLDIR) distclean

tkimgclean: libtiffclean
	rm -fr $(TKIMGDIR)/Img/*
	rm -fr $(LIB)/Img1.*
	$(MAKE) -C $(TKIMGDIR) distclean

libtiffclean: FORCE
	$(MAKE) -C $(TKIMGDIR)/compat/libtiff distclean

tkmpegclean: FORCE
	$(MAKE) -C $(TKMPEGDIR) distclean

tkhtmlclean: FORCE
#	cd $(HTMLDIR); $(MAKE) distclean
	rm -rf $(HTMLDIR)

xpaclean : FORCE
	$(MAKE) -C $(XPADIR) distclean

iisclean : FORCE
	$(MAKE) -C $(IISDIR) distclean

checkdnsclean : FORCE
	$(MAKE) -C $(CHECKDNSDIR) distclean

signalclean : FORCE
	$(MAKE) -C $(SIGNALDIR) distclean

funtoolsclean: FORCE
	$(MAKE) -C $(FUNTOOLSDIR) distclean

astclean: FORCE
	$(MAKE) -C $(ASTDIR) distclean

wcssubsclean: FORCE
	$(MAKE) -C $(WCSSUBSDIR) distclean

riceclean: FORCE
	$(MAKE) -C $(RICEDIR) distclean

hcompressclean: FORCE
	$(MAKE) -C $(HCOMPRESSDIR) distclean

plioclean: FORCE
	$(MAKE) -C $(PLIODIR) distclean

unixclean : FORCE
	$(MAKE) -C unix distclean

winclean : FORCE
	$(MAKE) -C win distclean

macosxclean : FORCE
	$(MAKE) -C macosx distclean

saotkclean : FORCE
	$(MAKE) -C $(SAOTKDIR) distclean

zvfsclean: FORCE
	$(MAKE) -C $(ZVFSDIR) distclean

ds9clean : FORCE
	$(MAKE) -C $(DS9DIR) distclean

srcclean : FORCE
	$(MAKE) -C $(SRCDIR) distclean

#--------------------------cvs

commit : FORCE
	cvs commit -m "" $(CVSFILES)

update : FORCE
	cvs update $(CVSFILES)

#--------------------------app

ifeq ($(OS),windows)
ds9app	: ds9
	$(MAKE) -C $(DS9DIR) ds9app

ds9winzip : FORCE
	$(RM) -f dist/$(DS9APP)\ Install.*
	/cygdrive/c/Program\ Files\ \(x86\)/WinZip/wzzip -p -r dist/$(DS9APP)\ Install.zip bin/ds9app
#	/cygdrive/c/Program\ Files\ \(x86\)/WinZip\ Self-Extractor/WINZIPSE.EXE  dist/$(DS9APP)\ Install.zip -setup -i ds9/win/ds9.ico -le -runasuser -t ds9/win/message.txt -a ds9/win/about.txt -c cscript install.vbs 
	/cygdrive/c/Program\ Files\ \(x86\)/WinZip\ Self-Extractor/WINZIPSE.EXE  dist/$(DS9APP)\ Install.zip -d C:\\ds9 -i ds9/win/ds9.ico -le -overwrite -runasuser -c cscript install.vbs

xpawinzip : FORCE
	$(RM) -f dist/$(XPAAPP)\ Install.*
	/cygdrive/c/Program\ Files\ \(x86\)/WinZip/wzzip dist/$(XPAAPP)\ Install.zip bin/xpa* bin/cygwin1.dll
	/cygdrive/c/Program\ Files\ \(x86\)/WinZip\ Self-Extractor/WINZIPSE.EXE  dist/$(XPAAPP)\ Install.zip -d C:\\ds9 -le -overwrite -runasuser
endif

ifeq ($(OS),macosx)
ds9app	: ds9
	$(MAKE) -C $(DS9DIR) ds9app

ds9dmg	: FORCE
	rm -rf dist/$(DS9APP)
	rm -rf dist/$(DS9APP).dmg
	mkdir dist/$(DS9APP)
	ln -s /Applications dist/$(DS9APP)/.
	cp -r ds9/macosx/README dist/$(DS9APP)/.
	cp -rp bin/SAOImage\ DS9.app dist/$(DS9APP)/.
	hdiutil create -srcfolder dist/$(DS9APP) dist/$(DS9APP) 

endif

#--------------------------distribution

dist	: distds9 distxpa

distall	: distds9 distxpa distdoc distsource

ifeq ($(OS),windows)
distapp	: distds9app distxpaapp
endif

ifeq ($(OS),macosx)
distapp	: distds9app
endif

ifdef CVS_SERVER

#--------------------------remote

distds9 : FORCE
	@echo "Creating SAODS9 Distribution"
	cd bin; tar cvf - ds9$(EXE) $(ZIPFILE) | gzip > ../dist/ds9.$(ARCH).$(DS9VERSION).tar.gz
	scp dist/ds9.$(ARCH).$(DS9VERSION).tar.gz $(USER)@$(DEST):build/$(ARCH)/.
	ssh $(USER)@$(DEST) 'cd build/$(ARCH); zcat ds9.$(ARCH).$(DS9VERSION).tar.gz | tar -xvf -'

ifeq ($(OS),windows)
distds9app : ds9winzip
	scp dist/$(DS9APP)\ Install.exe $(USER)@$(DEST):build/$(ARCH)/.
endif

ifeq ($(OS),macosx)
distds9app : ds9dmg
	scp -r dist/$(DS9APP)/SAOImage\ DS9.app $(USER)@$(DEST):build/$(ARCH)/.
	scp dist/$(DS9APP).dmg $(USER)@$(DEST):build/$(ARCH)/.
endif

distxpa : FORCE
	@echo "Creating XPA Distribution"
	cd bin; tar cvf - xpa*$(EXE) |gzip > ../dist/xpa.$(ARCH).$(XPAVERSION).tar.gz
	scp dist/xpa.$(ARCH).$(XPAVERSION).tar.gz $(USER)@$(DEST):build/$(ARCH)/.
	ssh $(USER)@$(DEST) 'cd build/$(ARCH); zcat xpa.$(ARCH).$(XPAVERSION).tar.gz | tar -xvf -'

ifeq ($(OS),windows)
distxpaapp : xpawinzip
	@echo "Creating XPA Distribution"
	scp dist/$(XPAAPP)\ Install.exe $(USER)@$(DEST):build/$(ARCH)/.
endif

distdoc	: doc
	@echo "Creating Documentation Distribution"
	scp -r doc $(USER)@$(DEST):build/.

distsource : FORCE
	@echo "Creating Source Distribution"
	rm -rf dist/saods9
	cd dist; cvs export -Dtoday saods9
	cd dist/saods9; rm -rf notes mods admin
	cd dist; tar cvf - saods9 | gzip > ds9.$(DS9VERSION).tar.gz
	rm -rf dist/saods9
	scp dist/ds9.$(DS9VERSION).tar.gz $(USER)@$(DEST):build/source/.

#--------------------------remote

else

#--------------------------local

distds9 : FORCE
	@echo "Creating SAODS9 Distribution"
	cd bin; tar cvf - ds9$(EXE) $(ZIPFILE) | gzip > ../dist/ds9.$(ARCH).$(DS9VERSION).tar.gz
	cp dist/ds9.$(ARCH).$(DS9VERSION).tar.gz $(HOME)/build/$(ARCH)/.
	cd $(HOME)/build/$(ARCH); $(ZCAT) ds9.$(ARCH).$(DS9VERSION).tar.gz | tar -xvf -
ifeq ($(OS),windows)
distds9app : ds9winzip
	cp dist/ds9.$(ARCH).$(DS9VERSION).exe $(HOME)/build/$(ARCH)/.
endif

ifeq ($(OS),macosx)
distds9app : ds9dmg
	cp -r dist/$(DS9APP)/SAOImage\ DS9.app $(HOME)/build/$(ARCH)/.
	cp dist/$(DS9APP).dmg $(HOME)/build/$(ARCH)/.
endif

distxpa : FORCE
	@echo "Creating XPA Distribution"
	cd bin; tar cvf - xpa*$(EXE) |gzip > ../dist/xpa.$(ARCH).$(XPAVERSION).tar.gz
	cp dist/xpa.$(ARCH).$(XPAVERSION).tar.gz $(HOME)/build/$(ARCH)/.
	cd $(HOME)/build/$(ARCH); $(ZCAT) xpa.$(ARCH).$(XPAVERSION).tar.gz | tar -xvf -
ifeq ($(OS),windows)
distxpaapp : xpawinzip
	cp dist/xpa.$(ARCH).$(XPAVERSION).exe $(HOME)/build/$(ARCH)/.
endif

distdoc	: doc
	@echo "Creating Documentation Distribution"
	cp -r doc $(HOME)/build/.

distsource : FORCE
	@echo "Creating Source Distribution"
	rm -rf dist/saods9
	cd dist; cvs export -Dtoday saods9
	cd dist/saods9; rm -rf notes mods admin
	cd dist; tar cvf - saods9 | gzip > ds9.$(DS9VERSION).tar.gz
	rm -rf dist/saods9
	cp dist/ds9.$(DS9VERSION).tar.gz $(HOME)/build/source/.

#--------------------------local

endif

FORCE	:
