include make.include

#--------------------------optional packages
# uncomment the following to include in the build

#BUILD_TCLX = yes
ifdef BUILD_TCLX
	TCLX	= tclx
	TCLXSH	= tclxsh
endif

#--------------------------versions

vTCL	= 8.4.6
vTCLX	= 8.3.5

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

DIRS	= bin lib include man html

# dirs
ifeq ($(ARCH),windows)
  # windows
  TCLDIR= tcl$(vTCL)/win
  TKDIR	= tk$(vTCL)/win
  EXE	= .exe
  WISH	= wish84.exe
  TCLXDIR = tclx$(vTCLX)/win
else
  # unix
  TCLDIR= tcl$(vTCL)/unix
  TKDIR	= tk$(vTCL)/unix
  EXE	=
  WISH	= wish8.4
  TCLXDIR = tclx$(vTCLX)/unix
endif

DS9DIR	= ds9
TCLLIBDIR = tcllib
BLTDIR	= blt2.4z
SAOTKDIR= saotk
MKTCLAPPDIR= mktclapp
HTMLDIR	= html
TKIMGDIR = tkimg1.3rc2
TKMPEGDIR = tkmpeg
ZLIBDIR	= zlib
XPADIR	= xpa
IISDIR	= iis
ASTDIR	= ast
CHECKDNSDIR = checkdns
WINDIR= win
FITSYDIR= saotk/fitsy
FILTERDIR= saotk/filter

SAOINDEX= lib/pkgIndex.tcl
DS9INDEX= ds9/pkgIndex.tcl

# configure flags
root := $(shell pwd)

ifeq ($(ARCH),windows)
  # windows
  TCLFLAGS = --enable-gcc --prefix $(root)
  TCLLIBFLAGS = --prefix ..
  BLTFLAGS = --with-cc=$(CC) --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL) --with-tk=$(root)/tk$(vTCL) \
	--with-cflags="-O -DSTATIC_BUILD"
  TKIMGFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL)/win --with-tk=$(root)/tk$(vTCL)/win
  PREHTMLFLAGS = config_BUILD_TCLSH=tclsh84s config_TARGET_TCL_SCRIPT_DIR=$(root)/lib/tcl8.4
  HTMLFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL) --with-tk=$(root)/tk$(vTCL)
  XPAFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL)/win

  TCLXFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL) --with-tk=$(root)/tk$(vTCL)
else
  # unix
  TCLFLAGS = --enable-gcc --prefix $(root) \
	--x-includes=$(X11INCLUDE) --x-libraries=$(X11LIB)
  TCLLIBFLAGS = --prefix $(root)
  BLTFLAGS = --with-cc=$(CC) --with-cflags=$(64BIT) --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL) --with-tk=$(root)/tk$(vTCL) \
	--x-includes=$(X11INCLUDE) --x-libraries=$(X11LIB)
  TKIMGFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL)/unix  --with-tk=$(root)/tk$(vTCL)/unix \
	--x-includes=$(X11INCLUDE) --x-libraries=$(X11LIB)
  HTMLFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL) --with-tk=$(root)/tk$(vTCL) \
	--x-includes=$(X11INCLUDE) --x-libraries="$(X11LIB) $(HTMLEXTLIB)"
  XPAFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL)/unix \
	--x-includes=$(X11INCLUDE) --x-libraries=$(X11LIB)

  TCLXFLAGS = --enable-gcc --prefix $(root) \
	--with-tcl=$(root)/tcl$(vTCL)/unix  --with-tk=$(root)/tk$(vTCL)/unix \
	--x-includes=$(X11INCLUDE) --x-libraries=$(X11LIB)
endif

ZLIBFLAGS = --prefix $(root)
FITSYFLAGS = --enable-gcc
FILTERFLAGS = --enable-gcc

WININCL	= tcl$(vTCL)/generic/tclInt.h \
	tcl$(vTCL)/generic/tclIntDecls.h \
	tk$(vTCL)/generic/tkInt.h \
	tk$(vTCL)/generic/tkPort.h \
	tk$(vTCL)/generic/tkIntDecls.h \
	tk$(vTCL)/generic/tkIntPlatDecls.h \
	tk$(vTCL)/win/tkWin.h \
	tk$(vTCL)/win/tkWinInt.h \
	tk$(vTCL)/win/tkWinPort.h

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

ifeq ($(ARCH),windows)
  # windows
  build : dirs tcl tk tclscripts tcllib blt mktclapp zlib \
	tkimg tkmpeg html xpa iis ast checkdns win fitsy filter saotk ds9
  index : $(DS9INDEX)

  finish : fixit2 xpa iis ast checkdns win fitsy filter saotk ds9

  fixit: FORCE
	cp admin/html/htmltokens.c html/.
	cd html; make; 
  fixit2: FORCE
	cd html; cp libtkhtml.a ../lib/.

else
  # unix
  ifdef BUILD_SHARED
    # shared
      build : dirs tcl tk tclsh tksh tclscripts tcllib blt mktclapp zlib \
	tkimgsh tkimg tkmpeg htmlsh xpash iis ast checkdns \
	fitsy filter saotk ds9 \
	$(DoTCLXSH)
      index : $(DS9INDEX) $(SAOINDEX)
  else
    # non-shared
      build : dirs tcl tk tclscripts tcllib tkindex blt mktclapp zlib \
	tkimg tkmpeg html xpa iis ast checkdns fitsy filter saotk ds9 \
	$(DoTCLX)
      index : $(DS9INDEX)
  endif
endif

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

ds9	: FORCE
	@echo "Making DS9..."
	cd $(DS9DIR); $(MAKE)

ds9val	: FORCE
	@echo "Making DS9 Valgrind..."
	cd $(DS9DIR); $(MAKE) ds9val

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

install	: FORCE
	@echo "Installing DS9..."
	cd $(DS9DIR); $(MAKE) install

$(SAOINDEX): lib/libBLT24.$(SHEXT) lib/libsaotk.$(SHEXT) \
	lib/libtkhtml.$(SHEXT) \
	lib/libtclxpa.$(SHEXT) lib/libiis.$(SHEXT) \
	lib/libast.$(SHEXT) lib/libcheckdns.$(SHEXT) \
	lib/libtkmpeg.$(SHEXT) FORCE
	echo "pkg_mkIndex -verbose lib libBLT24.$(SHEXT) libsaotk.$(SHEXT) libtkhtml.$(SHEXT) libtclxpa.$(SHEXT) libiis.$(SHEXT) libast.$(SHEXT) libcheckdns.$(SHEXT) libtkmpeg.$(SHEXT); exit" | bin/$(WISH)

$(DS9INDEX): ds9/ds9.tcl FORCE
	cd $(DS9DIR); $(MAKE) index

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

tclsh	: FORCE
	@echo "Installing Tcl shared..."
	cd $(TCLDIR); CC=$(CCc) ./configure $(TCLFLAGS) --enable-shared
	cd $(TCLDIR); $(MAKE) install

tcl	: FORCE
	@echo "Installing Tcl noshared..."
	cd $(TCLDIR); CC=$(CCc) ./configure $(TCLFLAGS) --disable-shared
	cd $(TCLDIR); $(MAKE) install

tksh	: FORCE
	@echo "Installing Tk shared..."
	cd $(TKDIR); CC=$(CCc) ./configure $(TCLFLAGS) --enable-shared
	cd $(TKDIR); $(MAKE) install

tk	: FORCE
	@echo "Installing Tk noshared..."
	cd $(TKDIR); CC=$(CCc) ./configure $(TCLFLAGS) --disable-shared
	cd $(TKDIR); $(MAKE) install

tclscripts : FORCE
	mv -f lib/tk8.4/tkfbox.tcl lib/tk8.4/tkfbox.tcl.sav
	ln -s ../../ds9/tkfbox.tcl lib/tk8.4/tkfbox.tcl
	mv -f lib/tk8.4/xmfbox.tcl lib/tk8.4/xmfbox.tcl.sav
	ln -s ../../ds9/xmfbox.tcl lib/tk8.4/xmfbox.tcl

tcllib	: FORCE
	@echo "Installing TCLLIB..."
	cd $(TCLLIBDIR); ./configure $(TCLLIBFLAGS)
	cd $(TCLLIBDIR); $(MAKE) install

tkindex : FORCE
	@echo "Installing Tk mkIndex..."
	cd lib/tk8.4; echo "pkg_mkIndex . *.tcl" | ../../bin/tclsh8.4	

blt	: FORCE
	@echo "Installing BLT..."
	cd $(BLTDIR); ./configure $(BLTFLAGS)
	cd $(BLTDIR); $(MAKE); $(MAKE) install

mktclapp: FORCE
	@echo "Installing MKTCLAPP..."
	cd $(MKTCLAPPDIR); CC=$(CCc) $(MAKE) mktclapp -e
	cp $(MKTCLAPPDIR)/mktclapp$(EXE) bin/.

zlib	: FORCE
	@echo "Configure zlib..."
	cd $(ZLIBDIR); CC=$(CCc) ./configure $(ZLIBFLAGS) 
	cd $(ZLIBDIR); $(MAKE) install

tkimg	: FORCE
	@echo "Installing TKIMG noshared..."
	cd $(TKIMGDIR); CC=$(CCc) ./configure $(TKIMGFLAGS) --disable-shared
	cd $(TKIMGDIR); $(MAKE) install

tkimgsh	: FORCE
	@echo "Installing TKIMG shared..."
	cd $(TKIMGDIR); CC=$(CCc) ./configure $(TKIMGFLAGS)
	cd $(TKIMGDIR); $(MAKE) install

tkmpeg	: FORCE
	@echo "Installing TKMPEG..."
	cd $(TKMPEGDIR); $(MAKE)
	cd $(TKMPEGDIR); $(MAKE) install

html	: FORCE
	@echo "Installing HTMLWIDGET noshared..."
	cd $(HTMLDIR); CC=$(CCc) $(PREHTMLFLAGS) $(root)/htmlwidget/configure $(HTMLFLAGS) --enable-shared=no
	cd $(HTMLDIR); $(MAKE)
	cp $(HTMLDIR)/libtkhtml.a lib/.

htmlsh	: FORCE
	@echo "Installing HTMLWIDGET shared..."
	cd $(HTMLDIR); CC=$(CCc) $(PREHTMLFLAGS) $(root)/htmlwidget/configure $(HTMLFLAGS) --enable-shared=yes
	cd $(HTMLDIR); $(MAKE)
	cp $(HTMLDIR)/libtkhtml.a lib/.
	cp $(HTMLDIR)/tkhtml.$(SHEXT) lib/libtkhtml.$(SHEXT)

xpash	: FORCE
	@echo "Installing XPA shared..."
	cd $(XPADIR); CC=$(CCc) ./configure $(XPAFLAGS) --enable-tclshlib
	cd $(XPADIR); $(MAKE); $(MAKE) install
	mv -f lib/libxpa.a lib/libtclxpa.a

xpa	: FORCE
	@echo "Installing XPA..."
	cd $(XPADIR); CC=$(CCc) ./configure $(XPAFLAGS) 
	cd $(XPADIR); $(MAKE); $(MAKE) install
	mv -f lib/libxpa.a lib/libtclxpa.a

iis	: FORCE
	@echo "Installing IIS..."
	cd $(IISDIR); $(MAKE) install

ast	: FORCE
	@echo "Installing AST..."
	cd $(ASTDIR); $(MAKE) install

checkdns: FORCE
	@echo "Installing CheckDNS..."
	cd $(CHECKDNSDIR); $(MAKE) install

fitsy	: FORCE
	@echo "Configure Fitsy..."
	cd $(FITSYDIR); CC=$(CC) CFLAGS='${CCOPT}' ./configure $(FITSYFLAGS)

filter	: FORCE
	@echo "Configure Filter..."
	cd $(FILTERDIR); CC=$(CC) CFLAGS='${CCOPT}' ./configure $(FILTERFLAGS)

saotk	: FORCE
	@echo "Installing SAOTK..."
	cd $(SAOTKDIR); $(MAKE) install

win	: FORCE
	@echo "Installing WIN..."
	cp $(WININCL) include/.
	cd $(WINDIR); $(MAKE) install

#--------------------------optional packages

tclxsh  : FORCE
	@echo "Installing TCLX shared..."
	cd $(TCLXDIR); CC=$(CCc) ./configure $(TCLXFLAGS) --enable-shared
	cd $(TCLXDIR); $(MAKE) install

tclx  : FORCE
	@echo "Installing TCLX noshared..."
	cd $(TCLXDIR); CC=$(CCc) ./configure $(TCLXFLAGS) --disable-shared
	cd $(TCLXDIR); $(MAKE) install


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

clean : FORCE
	$(RM) core *~ *#
	cd $(IISDIR); $(MAKE) clean
	cd $(ASTDIR); $(MAKE) clean
	cd $(CHECKDNSDIR); $(MAKE) clean
	cd $(SAOTKDIR); $(MAKE) clean
	cd $(DS9DIR); $(MAKE) clean
ifeq ($(ARCH),windows)
	cd $(WINDIR); make clean
endif

distclean : FORCE
	$(RM) core *~ *#
	cd $(TCLDIR); make distclean
	cd $(TKDIR); make distclean
	cd $(TCLLIBDIR); make distclean
	cd $(BLTDIR); make distclean
	cd $(TKIMGDIR); make distclean
	cd $(TKMPEGDIR); make distclean
	cd $(HTMLDIR); make distclean
	cd $(MKTCLAPPDIR); rm mktclapp$(EXE)
	cd $(ZLIBDIR); $(MAKE) distclean
	cd $(XPADIR); make distclean
	cd $(IISDIR); make distclean
	cd $(ASTDIR); make distclean
	cd $(CHECKDNSDIR); make distclean
	cd $(SAOTKDIR); $(MAKE) distclean
	cd $(DS9DIR); $(MAKE) distclean
	$(RM) -r $(DIRS)
ifeq ($(ARCH),windows)
	cd $(WINDIR); make distclean
endif

tclclean : FORCE
	cd $(TCLDIR); make distclean

tkclean : FORCE
	cd $(TKDIR); make distclean

tcllibclean: FORCE
	cd $(TCLLIBDIR); make distclean

bltclean: FORCE
	cd $(BLTDIR); make distclean

zlibclean: FORCE
	cd $(ZLIBDIR); make distclean

tkimgclean: FORCE
	rm -fr $(TKIMGDIR)/Img/*
	rm -fr $(LIB)/Img1.3
	cd $(TKIMGDIR); make distclean

tkmpegclean: FORCE
	cd $(TKMPEGDIR); make distclean

htmlclean: FORCE
	cd $(HTMLDIR); make distclean

mktclappclean: FORCE
	cd $(MKTCLAPPDIR); rm mktclapp$(EXE)

xpaclean : FORCE
	cd $(XPADIR); make distclean

astclean : FORCE
	cd $(ASTDIR); make distclean

iisclean : FORCE
	cd $(IISDIR); make distclean

checkdnsclean : FORCE
	cd $(CHECKDNSDIR); make distclean

saotkclean : FORCE
	cd $(SAOTKDIR); $(MAKE) distclean

ds9clean : FORCE
	cd $(DS9DIR); $(MAKE) distclean

winclean : FORCE
	cd $(WINDIR); make distclean

fitsyclean: FORCE
	cd $(FITSYDIR); make distclean

filterclean: FORCE
	cd $(FILTERDIR); make distclean

tclxclean: FORCE
	cd $(TCLXDIR); make distclean

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

commit : FORCE
	cvs commit -m "" acknowledgement admin ast checkdns tkmpeg COPYING copyright ds9 iis make.alpha make.darwin make.hpux make.linux make.linux64 make.linuxppc make.sgi make.solaris make.solaris64 make.windows Makefile notes mods README saotk win

update : FORCE
	cvs update acknowledgement admin ast checkdns tkmpeg COPYING copyright ds9 iis make.alpha make.darwin make.hpux make.linux make.linux64 make.linuxppc make.sgi make.solaris make.solaris64 make.windows Makefile notes mods README saotk win

FORCE	:
