# ===========================================================================
#
#                          Makefile for TkDesk 1.0a2
#
# ===========================================================================

# IMPORTANT:
# This file will only be used if you are using GNU make. Otherwise edit
# the file Makefile.

# --------------------------------
# TkDesk Installation:
# --------------------------------

# Where the executables will be installed:
BINDIR = /usr/bin
#BINDIR = /usr/local/bin
#BINDIR = $(HOME)/bin

# TkDesk's library will live here:
LIBDIR = /usr/lib/TkDesk
#LIBDIR = /usr/local/lib/TkDesk
#LIBDIR = $(HOME)/lib/TkDesk

# 
DEBIAN=
DEBBIN=$(DEBIAN)/$(BINDIR)
DEBLIB=$(DEBIAN)/$(LIBDIR)


# --------------------------------
# Tcl/Tk Paths and Libraries:
# You need either Tcl 7.4/Tk 4.0 or Tcl 7.5/Tk 4.1!
# --------------------------------

# Location of the Tcl include files:
TCLINCDIR = /usr/include/tcl       # Linux with Slackware 3.0
#TCLINCDIR = /usr/local/include
#TCLINCDIR = /usr/local/include/tcl7.5
#TCLINCDIR = $(HOME)/include

# Location of the Tcl library:
TCLLIBDIR = /usr/lib
#TCLLIBDIR = /usr/local/lib
#TCLLIBDIR = $(HOME)/lib

# Flag for linking the Tcl library to TkDesk:
#TCLLIB = -ltcl
TCLLIB = -ltcl7.4
#TCLLIB = -ltcl7.5
#TCLLIB = -ltcl7_4

# Location of the Tk include files:
TKINCDIR = /usr/include/tcl        # Linux with Slackware 3.0
#TKINCDIR = /usr/local/include
#TKINCDIR = /usr/local/include/tcl7.5
#TKINCDIR = $(HOME)/include

# Location of the Tk library:
TKLIBDIR = /usr/lib
#TKLIBDIR = /usr/local/lib
#TKLIBDIR = $(HOME)/lib

# Flag for linking the Tk library to TkDesk:
#TKLIB = -ltk
TKLIB = -ltk4.0
#TKLIB = -ltk4.1
#TKLIB = -ltk4_0

# --------------------------------
# X11 Paths:
# --------------------------------

# Location of X11 include files:
XINCDIR = /usr/X11R6/include
#XINCDIR = /usr/local/X11R5/include

# Location of libX11.*:
XLIBDIR = /usr/X11R6/lib
#XLIBDIR = /usr/local/X11R5/lib

# --------------------------------
# System Settings:
# --------------------------------

# Flags for system-specific other libs, if required:
OTHERLIBS = -lieee           # e.g. Linux
#OTHERLIBS = -ldl -lieee      # e.g. Linux with Tcl 7.5 and dynamic loading
#OTHERLIBS = -lnsl -lsocket   # e.g. for Solaris
#OTHERLIBS =

# Choose the STATFS definition for your system:
# (If your system is not listed, you can try to find out if your system
# has statfs resp. statvfs by trying to get their resp. manual pages.)
# Linux and SunOS 4.1.3 (Solaris 1):
STATFS = -DHAVE_STATFS
# Solaris 2.5 (and other versions?)
#STATFS = -DHAVE_STATVFS
# NetBSD and FreeBSD (no promises)
#STATFS =  -DHAVE_STATFS -DNETBSD
# If it can't be found:
#STATFS =

# --------------------------------
# Compiler Settings:
# --------------------------------

# Choose your compiler on the following line:
CC = gcc

# Your favorite CFLAGS:
CFLAGS = -pipe -O2 $(STATFS)
#CFLAGS = -Wall -pipe -g $(STATFS)


# ---------------------------------------------------------------------------
# --------------------  End of Configuration Section ------------------------
# ---------------------------------------------------------------------------


PKGNAME = tkdesk
VERSION = 1.0a2
FVERSION = 1a2
PKGDIR = $(PKGNAME)-$(VERSION)

# keep gcc from linking with static libc etc.:
ifeq ($(TCLLIBDIR),/usr/lib)
TCLLIBDIRFLAG =
else
TCLLIBDIRFLAG = -L$(TCLLIBDIR)
endif

ifeq ($(TKLIBDIR),/usr/lib)
TKLIBDIRFLAG =
else
TKLIBDIRFLAG = -L$(TKLIBDIR)
endif

ifeq ($(XLIBDIR),/usr/lib)
XLIBDIRFLAG =
else
XLIBDIRFLAG = -L$(XLIBDIR)
endif

MAKELIB = make CC="$(CC)" CFLAGS="$(CFLAGS) -I$(TCLINCDIR) -I$(TKINCDIR) -I$(XINCDIR)"

all: shell tkdesk

shell: makelibs tkAppInit.o
	$(CC) $(LDFLAGS) tkAppInit.o -o tkdesksh libdesk/libdesk.a \
		blt/src/libBLT.a $(TKLIBDIRFLAG) $(TKLIB) \
		$(XLIBDIRFLAG) -lX11 itcl/src/libitcl.a \
		$(TCLLIBDIRFLAG) $(TCLLIB) $(OTHERLIBS) -lm


tkAppInit.o:
	$(CC) $(CFLAGS) -I$(TCLINCDIR) -I$(TKINCDIR) -I$(XINCDIR) -c tkAppInit.c

config:
	@echo "========= Configuring in blt..."
	@rm -f blt/config.cache blt/config.BLT
	@(cd blt; env \
	TCLINCDIR=$(TCLINCDIR) \
	TCLLIBDIR=$(TCLLIBDIR) \
	TKINCDIR=$(TKINCDIR) \
	TKLIBDIR=$(TKLIBDIR) \
	XINCDIR=$(XINCDIR) \
	XLIBDIR=$(XLIBDIR) \
	./configure --with-cc="$(CC)" --with-cflags="$(CFLAGS)")
	@echo ""; echo "========= Configuring in itcl..."
	@(cd itcl; env \
	CC="$(CC)" \
	CFLAGS="$(CFLAGS)" \
	TCLINCDIR=$(TCLINCDIR) \
	TCLLIBDIR=$(TCLLIBDIR) \
	TKINCDIR=$(TKINCDIR) \
	TKLIBDIR=$(TKLIBDIR) \
	XINCDIR=$(XINCDIR) \
	XLIBDIR=$(XLIBDIR) \
	./configure)

makelibs:
	cd blt; make lib-static
	cd itcl; make libitcl.a
	cd libdesk; $(MAKELIB) libdesk.a

#
# The following target is intentionally called tkdesk, so I don't overwrite
# my working version of the tkdesk file.
#
tkdesk: thetools
	@echo '#!/bin/sh' >tkdesk
	@echo '#-*- tcl -*- \' >>tkdesk
	@echo -n "exec $(BINDIR)/tkdesksh " >>tkdesk
	@echo '"$$0" "$$@"' >>tkdesk
	@echo "" >>tkdesk
	@echo "set tkdesk(library) \"$(LIBDIR)\"" >>tkdesk
	@echo "set tkdesk(in_development) 0" >>tkdesk
	@echo "set tkdesk(debug) 0" >>tkdesk
	@cat tkdesk.main >>tkdesk
	@chmod 755 tkdesk

thetools:
	@(cd tools ;\
	for f in ed-tkdesk cd-tkdesk od-tkdesk; do \
	echo '#!/bin/sh' >$$f ;\
	echo '#-*- tcl -*- \' >>$$f ;\
	echo -n "exec $(BINDIR)/tkdesksh " >>$$f ;\
	echo '"$$0" "$$@"' >>$$f ;\
	echo "" >>$$f ;\
	cat $$f.main >>$$f ;\
	chmod 755 $$f ;\
	done)

install: tkdesk
	@echo "=== Installing TkDesk's library..."
	-mkdir $(DEBLIB)
	-mkdir $(DEBLIB)/configs
	-mkdir $(DEBLIB)/configs/.trash
	cp -r tcldesk/* $(DEBLIB)
	cp -r tcldesk/configs/* $(DEBLIB)/configs
	rm -f $(DEBLIB)/configs/_*
	find $(DEBLIB) -type f -exec chmod a+r {} \;
	find $(DEBLIB) -type d -exec chmod a+rx {} \;
	@echo "=== Installing the executables..."
	@rm -f $(DEBBIN)/tkdesksh $(DEBBIN)/tkdesk $(DEBBIN)/pauseme $(DEBBIN)/ed-tkdesk $(DEBBIN)/cd-tkdesk $(DEBBIN)/od-tkdesk
	install -s -m 755 tkdesksh $(DEBBIN)
	install -m 755 tkdesk tools/pauseme tools/ed-tkdesk tools/cd-tkdesk tools/od-tkdesk $(DEBBIN)
	@echo "=== Done! Type tkdesk to start."

uninstall:
	@echo "=== Uninstalling TkDesk's library..."
	-rm -r $(LIBDIR)
	@echo "=== Uninstalling TkDesk's executables..."
	-rm $(BINDIR)/tkdesksh $(BINDIR)/tkdesk $(BINDIR)/pauseme $(BINDIR)/ed-tkdesk $(BINDIR)/cd-tkdesk $(BINDIR)/od-tkdesk
	@echo "=== Done."

install.old: tkdesk
	@echo "Installing the library..."
	@-mkdir $(LIBDIR)
	@cp -r tcldesk/* $(LIBDIR)
	@find $(LIBDIR) -type f -exec chmod a+r {} \;
	@echo "Installing the executables..."
	@cp tkdesk tkdesksh tools/pauseme tools/ed-tkdesk tools/cd-tkdesk tools/od-tkdesk \
		$(BINDIR)
	@chmod 755 $(BINDIR)/tkdesk* $(BINDIR)/d?d $(BINDIR)/pauseme
	@echo "Copying configuration files to ~/.tkdesk ..."
	@echo "(an existing .tkdesk directory will be renamed to .tkdesk.old)"
	@-mv $(HOME)/.tkdesk $(HOME)/.tkdesk.old
	@mkdir $(HOME)/.tkdesk
	@-cp tcldesk/.tkdesk/* $(HOME)/.tkdesk
	@mkdir $(HOME)/.tkdesk/.trash
	@-mkdir $(LIBDIR)/.tkdesk
	@-mkdir $(LIBDIR)/.tkdesk/.trash
	@-cp tcldesk/.tkdesk/* $(LIBDIR)/.tkdesk
	@echo "Done! Type tkdesk to start."

clean:
	cd blt; make clean
	cd itcl; make clean
	cd libdesk ; $(MAKELIB) clean
	cd tcldesk ; rm -f #*#
	rm -f *.o tkdesksh

tags:
	cd libdesk ; etags *.c
	cd tcldesk ; etags *.tcl

export:
	@echo "Making distribution for $(PKGDIR) ..."
	@echo "Did you think about updating tkdesk.main and CFLAGS?"
	@(cd .. ;\
	mkdir $(PKGDIR) ;\
	mkdir $(PKGDIR)/blt ;\
	mkdir $(PKGDIR)/blt/cf ;\
	mkdir $(PKGDIR)/blt/src ;\
	mkdir $(PKGDIR)/doc ;\
	mkdir $(PKGDIR)/itcl ;\
	mkdir $(PKGDIR)/itcl/src ;\
	mkdir $(PKGDIR)/libdesk ;\
	mkdir $(PKGDIR)/tcldesk ;\
	mkdir $(PKGDIR)/tcldesk/about ;\
	mkdir $(PKGDIR)/tcldesk/cb_tools ;\
	mkdir $(PKGDIR)/tcldesk/cb_tools/bitmaps ;\
	mkdir $(PKGDIR)/tcldesk/doc ;\
	mkdir $(PKGDIR)/tcldesk/images ;\
	mkdir $(PKGDIR)/tcldesk/images/ficons16 ;\
	mkdir $(PKGDIR)/tcldesk/configs ;\
	mkdir $(PKGDIR)/tcldesk/configs/.trash ;\
	mkdir $(PKGDIR)/tools ;\
	cp TkDesk/{COPYING,INSTALL,Makefile,TODO,license.terms,README} \
		TkDesk/{*.c,tkdesk.main} $(PKGDIR) ;\
	cp TkDesk/blt/{MANIFEST,Makefile.in,README,README.BLT,*.h} \
		TkDesk/blt/{config.BLT,configure,configure.in} \
		$(PKGDIR)/blt ;\
	cp TkDesk/blt/cf/* $(PKGDIR)/blt/cf ;\
	cp TkDesk/blt/src/{*.in,*.c,bltInt.h,bltList.h} $(PKGDIR)/blt/src ;\
	cp TkDesk/doc/{guide.sgml,guide.txt,guide.ps} $(PKGDIR)/doc ;\
	cp TkDesk/itcl/{Makefile.in,README,configure,configure.in} \
		$(PKGDIR)/itcl ;\
	cp TkDesk/itcl/src/{*.in,*.c,*.h} $(PKGDIR)/itcl/src ;\
	cp TkDesk/libdesk/{Makefile,*.c,*.h} $(PKGDIR)/libdesk ;\
	cp TkDesk/tcldesk/*.tcl $(PKGDIR)/tcldesk ;\
	cp TkDesk/tcldesk/about/*.xbm.gz $(PKGDIR)/tcldesk/about ;\
	cp TkDesk/tcldesk/cb_tools/{*.tcl,tclIndex} \
		$(PKGDIR)/tcldesk/cb_tools ;\
	cp TkDesk/tcldesk/cb_tools/bitmaps/*.xbm \
		$(PKGDIR)/tcldesk/cb_tools/bitmaps ;\
	cp TkDesk/tcldesk/doc/{License,Guide} $(PKGDIR)/tcldesk/doc ;\
	cp TkDesk/CHANGES $(PKGDIR)/tcldesk/doc ;\
	cp TkDesk/tcldesk/images/{*.xbm,*.xpm} $(PKGDIR)/tcldesk/images ;\
	cp TkDesk/tcldesk/images/ficons16/*.xpm \
		$(PKGDIR)/tcldesk/images/ficons16 ;\
	cp TkDesk/tcldesk/configs/{AppBar,ButtonBar,Commands,Directories} \
		TkDesk/tcldesk/configs/{FileTags,Popups,Preferences} \
		TkDesk/tcldesk/configs/{Sounds,System} \
		$(PKGDIR)/tcldesk/configs ;\
	cp TkDesk/tools/{*.main,mkindex,pauseme} $(PKGDIR)/tools ;\
	gtar czvpf $(PKGDIR).tar.gz $(PKGDIR) ;\
	mv $(PKGDIR).tar.gz TkDesk ;\
	rm -rf $(PKGDIR) )


floppy:
	mcopy $(PKGNAME)-$(VERSION).tar.gz a:tkdsk$(FVERSION).tgz
	mdir a:


