#! /usr/bin/make -f
# -*- makefile -*-

# The "make help" command shows a short summary of available make targets.

# The targets marked as "NOT FOR END USER" can be built on my
# laptop only. For distribution this project is splitted into several
# archives containing
# - the software itself (source archive)
# - user documentation
# - developer documentation
# If you downloaded the source archive the directories containing
# user and developer documentation are stripped out.

# Package prefix
DESTDIR=

SOVERS=3.17.1

# Standard directory variables from autoconf
prefix=/usr/local
datarootdir=${prefix}/share
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
sbindir=${exec_prefix}/sbin
libexecdir=${exec_prefix}/libexec
datadir=${datarootdir}
sysconfdir=${prefix}/etc
scd=${sysconfdir}
libdir=${exec_prefix}/lib
sharedlibdir=${libdir}/shared
mandir=${datarootdir}/man
includedir=${prefix}/include
localstatedir=${prefix}/var
srcdir=.
top_srcdir=.

INSTALLSITEARCH=@INSTALLSITEARCH@
dktdatadir=$(datarootdir)/dkt-3
dkadatadir=$(datarootdir)/dk3app
dktetcdir=$(sysconfdir)/dkt-3
dkappetcdir=$(sysconfdir)/dk3app
# Programs and commands to build shared libraries
RANLIB=@echo No need to run ranlib
LIBEXT=so
MKLIB=$(COMPILEC) $(LIBRARIES) $(LDFLAGS) -shared -o $@.$(SOVERS) -Wl,-soname,$@.$(SOVERS)
CFPIC=-fPIC -D_REENTRANT
MKSOLINK=ln -sf $@.$(SOVERS) $@ ; chmod 644 $@ $@.$(SOVERS)
SOCHMOD=chmod 644 $@.$(SOVERS) $@
RMSOLINK=-[ ! -f $@.$(SOVERS) ] || rm -f $@.$(SOVERS)
RMSO=-[ -f $@ ] || rm -fr $@
DATE=date '+%Y-%m-%d %H:%M:%S'
FS64=-D_LARGEFILE64_SOURCE=1

# Compiler options and commands
DEFS=	-DHAVE_CONFIG_H $(DIRS)
WXCPPFLAGS=-I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__
WXCXXFLAGS=-I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread
WXLDFLAGS=-pthread   -lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8 -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8 

INCLUDES= -I. -I$(srcdir) -I$(includedir)
LIBRARIES= -L. -L$(srcdir) -L$(libdir)
COPTS= $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(FS64) $(CFPIC)
CCOPTS= $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(FS64) $(CFPIC) $(WXCPPFLAGS) $(WXCXXFLAGS)

MYSQLLDFLAGS=-L/usr/lib/mysql
CC=gcc
COMPILEC=  $(CC) $(COPTS)
COMPILEPP= $(CXX) $(CCOPTS)
LD=$(CC) 
LINK= $(CC) $(LIBRARIES) $(LDFLAGS) 
LDCPP=$(CXX) 
LDMYSQL=-L/usr/lib/mysql -L$(libdir)/mysql
ZLIB=-lz
BZLIB=-lbz2
COMPLIBS=       $(ZLIB) $(BZLIB)
CRYPTO=-lcrypto
IMGLIBS=-lpng -ljpeg -ltiff
SOCKLIB= -lnsl
DBLIB=-ldb
PTHREADLIB=-lpthread
NETSNMP_LIBS=-Wl,-z,relro -Wl,-z,now -L/usr/lib -lnetsnmp

.SUFFIXES:

.SUFFIXES:	.o	.cpp	.c

%-gui.cpp:	%.c
	-[ ! -f $@ ] || rm -f $@
	cat dk3usewx.c $< > $@

.c.o:
	@echo Compile $< '(C)'
	$(COMPILEC) -o $@ -c $<

.cpp.o:
	@echo Compile $< '(C++)'
	$(COMPILEPP) -o $@ -c $<

.c:
	@echo Compile and link '(C)'
	$(COMPILEC) -o $* $*.c
	chmod 755 $*

PRGRESCUE= \
	dkt \
	dknet \
	dknet4 \
	dkct \
	dkdbt

ifeq "netprog" "netprog"
PRGNET=	dknet dknet4 printqd printqdi printqda printqdc lprngcl
else
PRGNET=
endif

ifeq "mysqlprog" "mysqlprog"
PRGMYSQL=	itadmin
else
PRGMYSQL=
endif

ifeq "snmpprog" "snmpprog"
PRGSNMP=	pjsnmp
else
PRGSNMP=
endif

PRGCLI= \
	dkt \
	dkct \
	dkdbt \
	bmpp \
	fig2lat \
	htmlbook \
	addctrld \
	plpdftex \
	dkwxwiz \
	dk3info \
	$(PRGNET) $(PRGMYSQL) $(PRGSNMP)

PRGGUI=	wxdkct wxbmpp wxpqdic wximgsz wxdkclock wxdkhtb

build:			# Build the software (default make target)
build:			build-arch build-indep

help:			# Show targets for make
	-@egrep '^[^:;=.	]*::?[ 	]*' GNUmakefile|grep '#'|grep -v '^#'

binary:			# Build binaries
binary:			binary-arch binary-indep

install:		# Install the software
install:		install-arch install-indep

# String tables to delete on "make clean"
DELSTR=	dk3app.str dk3bifa.str dk3bmeps.str dk3fig.str dk3print.str \
	dk3wreg.str dkct3.str dkdbtool.str dknet4.str dknet.str \
	dkt3.str dkwt.str dkwxwiz.str fig2lat.str htmlbook.str \
	itadmin.str lprngcl.str pjsnmp.str plpdftex.str printqda.str \
	printqdc.str printqdi.str printqd.str wprclean.str test-dkct.str

# Text files to delete on "make clean"
DELTXT=	bmpp.txt dkct.txt dkdbtool.txt dknet.txt dkt3blks.txt dkt3cat.txt \
	dkt3chks.txt dkt3crp.txt dkt3ed.txt dkt3hex.txt dkt3html.txt \
	dkt3lat.txt dkt3ls.txt dkt3pwd.txt dkt3rand.txt dkt3sort.txt \
	dkt3tape.txt dkt3.txt  dkt3uid.txt dkwt-boot.txt dkwt-clp.txt \
	dkwt-env.txt dkwt-groups.txt dkwt-help.txt dkwt-keep.txt \
	dkwt-login.txt dkwt-logout.txt dkwt-printers.txt dkwt-print.txt \
	dkwt-shutdown.txt dkwt-unkeep.txt dkwt-users.txt dkwxwiz.txt \
	fig2lat.txt htmlbook.txt

clean:			# Clean up, remove build results
	-rm -f $(PRGRESCUE)
	-rm -f $(PRGCLI)
	-rm -f $(PRGGUI)
	-rm -f libdk3*.$(LIBEXT)
	-rm -f libdk3*.$(LIBEXT).*
	-rm *.o *.obj *.OBJ
	-[ ! -f dkconfig ] || rm -f dkconfig
	-rm -f $(DELSTR)
	-rm -f $(DELTXT)
	-[ ! -f core ] || rm -f core
	-[ ! -f wxcs ] || rm -f wxcs
	-rm dk3sockx.c

build-arch:		# Build architecture-specific files
build-arch:		binary-arch

build-indep:		# Build architecture-independent files
build-indep:		binary-indep

# ##### DEPENDING ON ALL PROGRAMS
ifeq "gui" "rescue"
binary-arch:		# Build architecture-specific binaries
binary-arch:		$(PRGRESCUE)
else
ifeq "gui" "gui"
binary-arch:		$(PRGCLI) $(PRGGUI) libraries
else
binary-arch:		$(PRGCLI) libraries
endif
endif

# String tables, help files and help texts are prepared
# while creating the distribution, so there is nothing to build here
binary-indep:		# Build architecture-independent binaries

# Install all the programs
install-arch:		# Install architecture-specific files
install-arch:		build-arch install-dir-structure
	-[ ! -f dkt ] || (cp dkt $(DESTDIR)$(bindir)/dkt ; chmod 755 $(DESTDIR)$(bindir)/dkt)
	-[ ! -f dkct ] || (cp dkct $(DESTDIR)$(bindir)/dkct ; chmod 755 $(DESTDIR)$(bindir)/dkct)
	-[ ! -f dkdbt ] || (cp dkdbt $(DESTDIR)$(bindir)/dkdbt ; chmod 755 $(DESTDIR)$(bindir)/dkdbt)
	-[ ! -f bmpp ] || (cp bmpp $(DESTDIR)$(bindir)/bmpp ; chmod 755 $(DESTDIR)$(bindir)/bmpp)
	-[ ! -f fig2lat ] || (cp fig2lat $(DESTDIR)$(bindir)/fig2lat ; chmod 755 $(DESTDIR)$(bindir)/fig2lat)
	-[ ! -f htmlbook ] || (cp htmlbook $(DESTDIR)$(bindir)/htmlbook ; chmod 755 $(DESTDIR)$(bindir)/htmlbook)
	-[ ! -f addctrld ] || (cp addctrld $(DESTDIR)$(bindir)/addctrld ; chmod 755 $(DESTDIR)$(bindir)/addctrld)
	-[ ! -f dkwxwiz ] || (cp dkwxwiz $(DESTDIR)$(bindir)/dkwxwiz ; chmod 755 $(DESTDIR)$(bindir)/dkwxwiz)
	-[ ! -f dk3info ] || (cp dk3info $(DESTDIR)$(bindir)/dk3info ; chmod 755 $(DESTDIR)$(bindir)/dk3info)
	-[ ! -f dknet ] || (cp dknet $(DESTDIR)$(bindir)/dknet ; chmod 755 $(DESTDIR)$(bindir)/dknet)
	-[ ! -f dknet4 ] || (cp dknet4 $(DESTDIR)$(bindir)/dknet4 ; chmod 755 $(DESTDIR)$(bindir)/dknet4)
	-[ ! -f printqd ] || (cp printqd $(DESTDIR)$(bindir)/printqd ; chmod 755 $(DESTDIR)$(bindir)/printqd)
	-[ ! -f printqdi ] || (cp printqdi $(DESTDIR)$(bindir)/printqdi ; chmod 755 $(DESTDIR)$(bindir)/printqdi)
	-[ ! -f printqda ] || (cp printqda $(DESTDIR)$(bindir)/printqda ; chmod 755 $(DESTDIR)$(bindir)/printqda)
	-[ ! -f printqdc ] || (cp printqdc $(DESTDIR)$(bindir)/printqdc ; chmod 755 $(DESTDIR)$(bindir)/printqdc)
	-[ ! -f lprngcl ] || (cp lprngcl $(DESTDIR)$(bindir)/lprngcl ; chmod 755 $(DESTDIR)$(bindir)/lprngcl)
	-[ ! -f pjsnmp ] || (cp pjsnmp $(DESTDIR)$(bindir)/pjsnmp ; chmod 755 $(DESTDIR)$(bindir)/pjsnmp)
	-[ ! -f itadmin ] || (cp itadmin $(DESTDIR)$(bindir)/itadmin ; chmod 755 $(DESTDIR)$(bindir)/itadmin)
	-[ ! -f plpdftex ] || (cp plpdftex $(DESTDIR)$(bindir)/plpdftex ; chmod 755 $(DESTDIR)$(bindir)/plpdftex)
	-[ ! -f wxdkct ] || (cp wxdkct $(DESTDIR)$(bindir)/wxdkct ; chmod 755 $(DESTDIR)$(bindir)/wxdkct)
	-[ ! -f wxbmpp ] || (cp wxbmpp $(DESTDIR)$(bindir)/wxbmpp ; chmod 755 $(DESTDIR)$(bindir)/wxbmpp)
	-[ ! -f wxpqdic ] || (cp wxpqdic $(DESTDIR)$(bindir)/wxpqdic ; chmod 755 $(DESTDIR)$(bindir)/wxpqdic)
	-[ ! -f wximgsz ] || (cp wximgsz $(DESTDIR)$(bindir)/wximgsz ; chmod 755 $(DESTDIR)$(bindir)/wximgsz)
	-[ ! -f wxdkclock ] || (cp wxdkclock $(DESTDIR)$(bindir)/wxdkclock ; chmod 755 $(DESTDIR)$(bindir)/wxdkclock)
	-[ ! -f wxdkhtb ] || (cp wxdkhtb $(DESTDIR)$(bindir)/wxdkhtb ; chmod 755 $(DESTDIR)$(bindir)/wxdkhtb)
	-./scripts/install-shared-library.sh libdk3c.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3of.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3csrnd.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3bif.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3dbi.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3fig.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3bmeps.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3net.so $(SOVERS) $(DESTDIR)$(libdir)
	-./scripts/install-shared-library.sh libdk3wx.so $(SOVERS) $(DESTDIR)$(libdir)




# Install help files, string table files and other resource files
install-indep:		# Install architecture-independent files
ifeq "gui" "rescue"
install-indep:		install-indep-rescue
else
ifeq "gui" "gui"
install-indep:		install-indep-gui
else
install-indep:		install-index-cli

libraries:		libdk3wx.$(LIBEXT)
endif
endif

install-indep-rescue:	# Install architecture-independent files for rescue
install-indep-rescue:	build-indep install-dir-structure
	cp dkt-3/de/dk3app.str $(DESTDIR)$(dktdatadir)/de/dk3app.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dk3app.str
	cp dkt-3/de/dk3wreg.str $(DESTDIR)$(dktdatadir)/de/dk3wreg.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dk3wreg.str
	cp dkt-3/de/dkct3.str $(DESTDIR)$(dktdatadir)/de/dkct3.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dkct3.str
	cp dkt-3/de/dkdbtool.str $(DESTDIR)$(dktdatadir)/de/dkdbtool.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dkdbtool.str
	cp dkt-3/de/dknet4.str $(DESTDIR)$(dktdatadir)/de/dknet4.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dknet4.str
	cp dkt-3/de/dknet.str $(DESTDIR)$(dktdatadir)/de/dknet.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dknet.str
	cp dkt-3/de/dkt3.str $(DESTDIR)$(dktdatadir)/de/dkt3.str
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dkt3.str
	cp dkt-3/de/dkct.txt $(DESTDIR)$(dktdatadir)/de/dkct.txt
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dkct.txt
	cp dkt-3/de/dkdbtool.txt $(DESTDIR)$(dktdatadir)/de/dkdbtool.txt
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dkdbtool.txt
	cp dkt-3/de/dknet4.txt $(DESTDIR)$(dktdatadir)/de/dknet4.txt
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dknet4.txt
	cp dkt-3/de/dknet.txt $(DESTDIR)$(dktdatadir)/de/dknet.txt
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dknet.txt
	cp dkt-3/de/dkt3*.txt $(DESTDIR)$(dktdatadir)/de
	chmod 644 $(DESTDIR)$(dktdatadir)/de/dkt3*.txt

install-indep-cli:	# Install architecture-independent files for CLI
install-indep-cli:	build-indep install-dir-structure
	-[ ! -d dkt-3-temp ] || rm -fr dkt-3-temp
	-[ -d dkt-3-temp ] || (mkdir dkt-3-temp ; chmod 755 dkt-3-temp)
	(cd dkt-3 ; tar cf - *) | (cd dkt-3-temp ; tar xf -)
	find dkt-3-temp -name 'wx*.str' -exec rm -f {} \;
	find dkt-3-temp -name 'dkwxpath.str' -exec rm -f {} \;
	find dkt-3-temp -name 'dkwx.str' -exec rm -f {} \;
	find dkt-3-temp -type d -exec chmod 755 {} \;
	find dkt-3-temp -type f -exec chmod ugo+r,u+w {} \;
	(cd dkt-3-temp ; tar cf - *) | (cd $(DESTDIR)$(dktdatadir) ; tar xf -)
	cp etc-dk3app/dk3paper.conf $(DESTDIR)$(dkappetcdir)/dk3paper.conf
	chmod 644 $(DESTDIR)$(dkappetcdir)/dk3paper.conf
	scripts/install-headers.sh $(DESTDIR)$(includedir)
	cp itaclean.sh $(DESTDIR)$(bindir)/itaclean.sh
	chmod 755 $(DESTDIR)$(bindir)/itaclean.sh

install-indep-gui:	# Install architecture-independent files for GUI
install-indep-gui:	build-indep install-dir-structure
	find dkt-3 -type d -exec chmod 755 {} \;
	find dkt-3 -type f -exec chmod ugo+r,u+w {} \;
	find help-html -name '*.chm' -exec chmod 644 {} \;
	(cd dkt-3 ; tar cf - *) | (cd $(DESTDIR)$(dktdatadir) ; tar xf -)
	(cd htb   ; tar cf - *) | (cd $(DESTDIR)$(dktdatadir) ; tar xf -)
	-[ ! -f wxbmpp ] || (cp wxbmpp.desktop $(DESTDIR)$(datadir)/applications/wxbmpp.destkop ; chmod 644 $(DESTDIR)$(datadir)/applications/wxbmpp.destkop)
	-[ ! -f wxdkclock ] || (cp wxdkclock.desktop $(DESTDIR)$(datadir)/applications/wxdkclock.destkop ; chmod 644 $(DESTDIR)$(datadir)/applications/wxdkclock.destkop)
	-[ ! -f wxdkct ] || (cp wxdkct.desktop $(DESTDIR)$(datadir)/applications/wxdkct.destkop ; chmod 644 $(DESTDIR)$(datadir)/applications/wxdkct.destkop)
	-[ ! -f wximgsz ] || (cp wximgsz.desktop $(DESTDIR)$(datadir)/applications/wximgsz.destkop ; chmod 644 $(DESTDIR)$(datadir)/applications/wximgsz.destkop)
	cp etc-dk3app/dk3paper.conf $(DESTDIR)$(dkappetcdir)/dk3paper.conf
	chmod 644 $(DESTDIR)$(dkappetcdir)/dk3paper.conf
	-scripts/install-headers.sh $(DESTDIR)$(includedir)
	cp itaclean.sh $(DESTDIR)$(bindir)/itaclean.sh
	chmod 755 $(DESTDIR)$(bindir)/itaclean.sh

uninstall:		# Remove software
uninstall:
	-[ ! -f $(DESTDIR)$(bindir)/dkt ] || rm-fr $(DESTDIR)$(bindir)/dkt
	-[ ! -f $(DESTDIR)$(bindir)/dkct ] || rm-fr $(DESTDIR)$(bindir)/dkct
	-[ ! -f $(DESTDIR)$(bindir)/dkdbt ] || rm-fr $(DESTDIR)$(bindir)/dkdbt
	-[ ! -f $(DESTDIR)$(bindir)/bmpp ] || rm-fr $(DESTDIR)$(bindir)/bmpp
	-[ ! -f $(DESTDIR)$(bindir)/fig2lat ] || rm-fr $(DESTDIR)$(bindir)/fig2lat
	-[ ! -f $(DESTDIR)$(bindir)/htmlbook ] || rm-fr $(DESTDIR)$(bindir)/htmlbook
	-[ ! -f $(DESTDIR)$(bindir)/addctrld ] || rm-fr $(DESTDIR)$(bindir)/addctrld
	-[ ! -f $(DESTDIR)$(bindir)/dkwxwiz ] || rm-fr $(DESTDIR)$(bindir)/dkwxwiz
	-[ ! -f $(DESTDIR)$(bindir)/dk3info ] || rm-fr $(DESTDIR)$(bindir)/dk3info
	-[ ! -f $(DESTDIR)$(bindir)/dknet ] || rm-fr $(DESTDIR)$(bindir)/dknet
	-[ ! -f $(DESTDIR)$(bindir)/dknet4 ] || rm-fr $(DESTDIR)$(bindir)/dknet4
	-[ ! -f $(DESTDIR)$(bindir)/printqd ] || rm-fr $(DESTDIR)$(bindir)/printqd
	-[ ! -f $(DESTDIR)$(bindir)/printqdi ] || rm-fr $(DESTDIR)$(bindir)/printqdi
	-[ ! -f $(DESTDIR)$(bindir)/printqda ] || rm-fr $(DESTDIR)$(bindir)/printqda
	-[ ! -f $(DESTDIR)$(bindir)/printqdc ] || rm-fr $(DESTDIR)$(bindir)/printqdc
	-[ ! -f $(DESTDIR)$(bindir)/lprngcl ] || rm-fr $(DESTDIR)$(bindir)/lprngcl
	-[ ! -f $(DESTDIR)$(bindir)/pjsnmp ] || rm-fr $(DESTDIR)$(bindir)/pjsnmp
	-[ ! -f $(DESTDIR)$(bindir)/itadmin ] || rm-fr $(DESTDIR)$(bindir)/itadmin
	-[ ! -f $(DESTDIR)$(bindir)/plpdftex ] || rm-fr $(DESTDIR)$(bindir)/plpdftex
	-[ ! -f $(DESTDIR)$(bindir)/wxdkct ] || rm-fr $(DESTDIR)$(bindir)/wxdkct
	-[ ! -f $(DESTDIR)$(bindir)/wxbmpp ] || rm-fr $(DESTDIR)$(bindir)/wxbmpp
	-[ ! -f $(DESTDIR)$(bindir)/wxpqdic ] || rm-fr $(DESTDIR)$(bindir)/wxpqdic
	-[ ! -f $(DESTDIR)$(bindir)/wximgsz ] || rm-fr $(DESTDIR)$(bindir)/wximgsz
	-[ ! -f $(DESTDIR)$(bindir)/wxdkclock ] || rm-fr $(DESTDIR)$(bindir)/wxdkclock
	-[ ! -f $(DESTDIR)$(bindir)/wxdkhtb ] || rm-fr $(DESTDIR)$(bindir)/wxdkhtb
	-rm -fr $(DESTDIR)$(libdir)/libdk3c.so $(DESTDIR)$(libdir)/libdk3c.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3of.so $(DESTDIR)$(libdir)/libdk3of.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3csrnd.so $(DESTDIR)$(libdir)/libdk3csrnd.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3bif.so $(DESTDIR)$(libdir)/libdk3bif.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3dbi.so $(DESTDIR)$(libdir)/libdk3dbi.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3fig.so $(DESTDIR)$(libdir)/libdk3fig.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3bmeps.so $(DESTDIR)$(libdir)/libdk3bmeps.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3net.so $(DESTDIR)$(libdir)/libdk3net.so.*
	-rm -fr $(DESTDIR)$(libdir)/libdk3wx.so $(DESTDIR)$(libdir)/libdk3wx.so.*
	-[ ! -d $(DESTDIR)$(dktdatadir) ] || rm -fr $(DESTDIR)$(dktdatadir)
	-[ ! -d $(DESTDIR)$(dkadatadir) ] || rm -fr $(DESTDIR)$(dkadatadir)
	-[ ! -d $(DESTDIR)$(dktetcdir) ] || rm -fr $(DESTDIR)$(dktetcdir)
	-[ ! -d $(DESTDIR)$(dkappetcdir) ] || rm -fr $(DESTDIR)$(dkappetcdir)
	-[ ! -f $(DESTDIR)$(datadir)/applications/wxbmpp.desktop ] || rm -fr $(DESTDIR)$(datadir)/applications/wxbmpp.desktop
	-[ ! -f $(DESTDIR)$(datadir)/applications/wxdkclock.desktop ] || rm -fr $(DESTDIR)$(datadir)/applications/wxdkclock.desktop
	-[ ! -f $(DESTDIR)$(datadir)/applications/wxdkct.desktop ] || rm -fr $(DESTDIR)$(datadir)/applications/wxdkct.desktop
	-[ ! -f $(DESTDIR)$(datadir)/applications/wximgsz.desktop ] || rm -fr $(DESTDIR)$(datadir)/applications/wximgsz.desktop
	-[ ! -f $(DESTDIR)$(bindir)/itaclean.sh ] || rm -fr $(DESTDIR)$(bindir)/itaclean.sh
	-scripts/uninstall-headers.sh $(DESTDIR)$(includedir)


# In addition to the "clean" target the "distclean" target also removes
# files created by the configure script.

distclean:		# Clean up, remove build results and configure results
distclean:		clean
	-[ ! -f confdefs.h ] || rm -fr confdefs.h
	-[ ! -f config.h ] || rm -fr config.h
	-[ ! -f config.log ] || rm -fr config.log
	-[ ! -f config.status ] || rm -fr config.status
	-[ ! -f conftest ] || rm -fr conftest
	-[ ! -f conftest.c ] || rm -fr conftest.c
	-[ ! -f conftest.er1 ] || rm -fr conftest.er1

# get-orig-source:	# Get original source

install-dir-structure:	# Create installation directory structure
	@echo '>>>' `$(DATE)` 'Create directory structure (start)'
	-[ -d $(DESTDIR)$(prefix) ] || ( mkdir -p $(DESTDIR)$(prefix) ; chmod 755 $(DESTDIR)$(prefix) )
	-[ -d $(DESTDIR)$(datarootdir) ] || (mkdir -p $(DESTDIR)$(datarootdir) ; chmod 755 $(DESTDIR)$(datarootdir) )
	-[ -d $(DESTDIR)$(datadir) ] || (mkdir -p $(DESTDIR)$(datadir) ; chmod 755 $(DESTDIR)$(datadir) )
	-[ -d $(DESTDIR)$(datadir)/applications ] || (mkdir -p $(DESTDIR)$(datadir)/applications ; chmod 755 $(DESTDIR)$(datadir)/applications )
	-[ -d $(DESTDIR)$(exec_prefix) ] || (mkdir -p $(DESTDIR)$(exec_prefix) ; chmod 755 $(DESTDIR)$(exec_prefix) )
	-[ -d $(DESTDIR)$(bindir) ] || (mkdir -p $(DESTDIR)$(bindir) ; chmod 755 $(DESTDIR)$(bindir) )
	-[ -d $(DESTDIR)$(sysconfdir) ] || (mkdir -p $(DESTDIR)$(sysconfdir) ; chmod 755 $(DESTDIR)$(sysconfdir) )
	-[ -d $(DESTDIR)$(libdir) ] || (mkdir -p $(DESTDIR)$(libdir) ; chmod 755 $(DESTDIR)$(libdir) )
	-[ -d $(DESTDIR)$(includedir) ] || (mkdir -p $(DESTDIR)$(includedir) ; chmod 755 $(DESTDIR)$(includedir) )
	-[ -d $(DESTDIR)$(localstatedir) ] || (mkdir -p $(DESTDIR)$(localstatedir) ; chmod 755 $(DESTDIR)$(localstatedir) )
	-[ -d $(DESTDIR)$(dktdatadir) ] || (mkdir -p $(DESTDIR)$(dktdatadir) ; chmod 755 $(DESTDIR)$(dktdatadir) )
	-[ -d $(DESTDIR)$(dktdatadir)/de ] || (mkdir -p $(DESTDIR)$(dktdatadir)/de ; chmod 755 $(DESTDIR)$(dktdatadir)/de )
	-[ -d $(DESTDIR)$(dktdatadir)/en ] || (mkdir -p $(DESTDIR)$(dktdatadir)/en ; chmod 755 $(DESTDIR)$(dktdatadir)/en )
	-[ -d $(DESTDIR)$(dktdatadir)/charmap ] || (mkdir -p $(DESTDIR)$(dktdatadir)/charmap ; chmod 755 $(DESTDIR)$(dktdatadir)/charmap )
	-[ -d $(DESTDIR)$(dktdatadir)/htmlbook ] || (mkdir -p $(DESTDIR)$(dktdatadir)/htmlbook ; chmod 755 $(DESTDIR)$(dktdatadir)/htmlbook )
	-[ -d $(DESTDIR)$(dkadatadir) ] || (mkdir -p $(DESTDIR)$(dkadatadir) ; chmod 755 $(DESTDIR)$(dkadatadir) )
	-[ -d $(DESTDIR)$(dktetcdir) ] || (mkdir -p $(DESTDIR)$(dktetcdir) ; chmod 755 $(DESTDIR)$(dktetcdir) )
	-[ -d $(DESTDIR)$(dkappetcdir) ] || (mkdir -p $(DESTDIR)$(dkappetcdir) ; chmod 755 $(DESTDIR)$(dkappetcdir) )
	@echo '>>>' `$(DATE)` 'Create directory structure (finished)'



# NOTE: The target below is not intended to be used by end users.
# I use it on my development machine when creating a new distribution.

backup:			# NOT FOR END USER - Create backup of current dir
backup:
	-[ ! -d ../dkt-3-backup ] || rm -fr ../dkt-3-backup
	-[ -d ../dkt-3-backup ] || (mkdir ../dkt-3-backup ; chmod 755 ../dkt-3-backup)
	(tar cf - * --exclude '.git') | (cd ../dkt-3-backup ; tar xf -)

cleanest:		# NOT FOR END USER - Clean up completely
cleanest:		distclean
	-[ ! -d ../dkt-3-backup ] || rm -fr ../dkt-3-backup
	-[ -d ../dkt-3-backup ] || (mkdir ../dkt-3-backup ; chmod 755 ../dkt-3-backup)
	(tar cf - * --exclude '.git') | (cd ../dkt-3-backup ; tar xf -)
	-[ ! -d autom4te.cache ] || rm -fr autom4te.cache
	-[ ! -d doc/autom4te.cache ] || rm -fr doc/autom4te.cache
	-[ ! -f configure ] || rm -fr configure
	-[ ! -f doc/configure ] || rm -fr doc/configure
	-[ ! -f config.log ] || rm -fr config.log
	-[ ! -f doc/config.log ] || rm -fr doc/config.log
	-[ ! -f config.status ] || rm -fr config.status
	-[ ! -f doc/config.status ] || rm -fr doc/config.status
	-[ ! -f create-desktop-files.sh ] || rm -fr create-desktop-files.sh
	-[ ! -f dk3conf.h ] || rm -fr dk3conf.h
	-[ ! -f dk3info1.c ] || rm -fr dk3info1.c
	-[ ! -f dk3inst.c ] || rm -fr dk3inst.c
	-[ ! -f dkconfig.c ] || rm -fr dkconfig.c
	-[ ! -f initd-printqd ] || rm -fr initd-printqd
	-[ ! -f wr-dk3inst.sh ] || rm -fr wr-dk3inst.sh
	-[ ! -d help-html ] || rm -fr help-html
	-[ -d help-html ] || (mkdir help-html ; chmod 755 help-html)
	-[ ! -d doc/html ] || rm -fr doc/html
	-[ -d doc/html ] || (mkdir doc/html ; chmod 755 doc/html)
	-[ ! -d doc/sf ] || rm -fr doc/sf
	-[ -d doc/sf ] || (mkdir doc/sf ; chmod 755 doc/sf)
	-find help-src -name '*.html' -exec rm -f {} \;
	-find help-src -name '*.hhc' -exec rm -f {} \;
	-find help-src -name '*.hhk' -exec rm -f {} \;
	-find help-src -name '*.hhp' -exec rm -f {} \;
	-find help-src -name '*.aux' -exec rm -f {} \;
	-find doc/src -name '*.html' -exec rm -f {} \;
	-find doc/src -name '*.hhc' -exec rm -f {} \;
	-find doc/src -name '*.hhk' -exec rm -f {} \;
	-find doc/src -name '*.hhp' -exec rm -f {} \;
	-find doc/src -name '*.aux' -exec rm -f {} \;
	-find dkt-3 -name '*.chm' -exec rm {} \;
	-find dkt-3 -name '*.htb' -exec rm {} \;
	-find . -name '*.ico' -exec rm -f {} \;
	-find . -name '*.xpm' -exec rm -f {} \;
	-[ ! -x ./scripts/clean.sh ] || ./scripts/clean.sh
	-[ ! -x ./scripts/clean-for-fig.sh ] || ./scripts/clean-for-fig.sh
	-[ ! -x ./scripts/clean-for-tex.sh ] || ./scripts/clean-for-tex.sh
	-[ ! -d chm ] || rm -fr chm
	-[ ! -d htb ] || rm -fr htb
	-[ -d chm ] || (mkdir chm ; chmod 755 chm)
	-[ -d chm/de ] || (mkdir chm/de ; chmod 755 chm/de)
	-[ -d chm/en ] || (mkdir chm/en ; chmod 755 chm/en)
	-[ -d htb ] || (mkdir htb ; chmod 755 htb)
	-[ -d htb/de ] || (mkdir htb/de ; chmod 755 htb/de)
	-[ -d htb/en ] || (mkdir htb/en ; chmod 755 htb/en)
	-rm -fr *.rc
	-rm -fr *-gui.cpp
	-[ ! -d devdoc/html ] || rm -fr devdoc/html
	-[ ! -f doc/version.txt ] || rm doc/version.txt
	-[ ! -f devdoc/version.txt ] || rm devdoc/version.txt
	-[ ! -f win32/user64.iss ] || rm win32/user64.iss
	-[ ! -f win32/user32.iss ] || rm win32/user32.iss

check-cleanest:		# NOT FOR END USER - Clean up and check for extra files
check-cleanest:		cleanest
	perl scripts/filechk.pl

# NOTE: The target below is not intended to be used by end users.
# I use it on my development machine when creating a new distribution.

distrenew:		# NOT FOR END USER - Buid new distribution
distrenew:		cleanest
	scripts/distrenew.sh
	@echo 'A new configure script was created.'
	@echo 'You should run ./configure to update your configuration.'

distribution:		# NOT FOR END USER - Create source archives
distribution:		distrenew
	scripts/create-distribution.sh

libraries:		# Build the libraries.
libraries:		libdk3c.$(LIBEXT)
libraries:		libdk3of.$(LIBEXT)
libraries:		libdk3csrnd.$(LIBEXT)
libraries:		libdk3bif.$(LIBEXT)
libraries:		libdk3dbi.$(LIBEXT)
libraries:		libdk3fig.$(LIBEXT)
libraries:		libdk3bmeps.$(LIBEXT)
libraries:		libdk3net.$(LIBEXT)

#
# The base modules for the library do not require other
# non-system libraries.
#
LIBDK3COBJ= \
	dk3opt.o \
	dk3bf.o \
	dk3uc2l.o \
	dk3se.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3cores.o \
	dk3sf.o \
	dk3echo.o \
	dk3signl.o \
	dk3ct.o \
	dk3mas.o \
	dk3maus.o \
	dk3mai.o \
	dk3maui.o \
	dk3mal.o \
	dk3maul.o \
	dk3mad.o \
	dk3madsc.o \
	dk3madic.o \
	dk3madlc.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3bb.o \
	dk3bezcu.o \
	dk3xsp.o \
	dk3kv.o \
	dk3trace.o

libdk3c.$(LIBEXT):	# The libdk3c library.
libdk3c.$(LIBEXT):	$(LIBDK3COBJ)
	-[ ! -f libdk3c.$(LIBEXT) ] || rm libdk3c.$(LIBEXT)
	-[ ! -f libdk3c.$(LIBEXT).$(SOVERS) ] || rm libdk3c.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3COBJ) 
	$(MKSOLINK)
	$(RANLIB) libdk3c.$(LIBEXT)
	$(SOCHMOD)

#
# Output filtering objects.
# These objects require the gzip and bzip2 libraries.
#
LIBDK3OFOBJ= \
	dk3of.o \
	dk3strmb.o \
	dk3strmg.o

libdk3of.$(LIBEXT):	# The libdk3of library for output filtering.
libdk3of.$(LIBEXT):	$(LIBDK3OFOBJ)
	-[ ! -f libdk3of.$(LIBEXT) ] || rm libdk3of.$(LIBEXT)
	-[ ! -f libdk3of.$(LIBEXT).$(SOVERS) ] || rm libdk3of.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3OFOBJ) 
	$(MKSOLINK)
	$(RANLIB) libdk3of.$(LIBEXT)
	$(SOCHMOD)

#
# Objects for the libdk3csrnd library.
# These objects require the OpenSSL library.
#
LIBDK3CSRNDOBJ=	\
	dk3chks.o \
	dk3appr.o

libdk3csrnd.$(LIBEXT):	# The libdk3csrnd library for checksumming and random.
libdk3csrnd.$(LIBEXT):	$(LIBDK3CSRNDOBJ)
	-[ ! -f libdk3csrnd.$(LIBEXT) ] || rm libdk3csrnd.$(LIBEXT)
	-[ ! -f libdk3csrnd.$(LIBEXT).$(SOVERS) ] || rm libdk3csrnd.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3CSRNDOBJ) 
	$(MKSOLINK)
	$(RANLIB) libdk3csrnd.$(LIBEXT)
	$(SOCHMOD)

#
# The dk3bif library objects.
# These objects use the libpng, libjpeg and libtiff libraries.
#
LIBDK3BIFOBJ= \
	dk3bifa.o \
	dk3bif.o \
	dk3pixre.o

libdk3bif.$(LIBEXT):	# The libdk3bif library to access image data.
libdk3bif.$(LIBEXT):	$(LIBDK3BIFOBJ)
	-[ ! -f libdk3bif.$(LIBEXT) ] || rm libdk3bif.$(LIBEXT)
	-[ ! -f libdk3bif.$(LIBEXT).$(SOVERS) ] || rm libdk3bif.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3BIFOBJ) 
	$(MKSOLINK)
	$(RANLIB) libdk3bif.$(LIBEXT)
	$(SOCHMOD)

#
# The libdk3dbi library objects.
# These objects use the Berkeley DB and NDBM API libraries.
#
LIBDK3DBIOBJ= \
	dk3dbi.o

libdk3dbi.$(LIBEXT):	# The libdk3dbi library to access databases.
libdk3dbi.$(LIBEXT):	$(LIBDK3DBIOBJ)
	-[ ! -f libdk3dbi.$(LIBEXT) ] || rm libdk3dbi.$(LIBEXT)
	-[ ! -f libdk3dbi.$(LIBEXT).$(SOVERS) ] || rm libdk3dbi.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3DBIOBJ)
	$(MKSOLINK)
	$(RANLIB) libdk3dbi.$(LIBEXT)
	$(SOCHMOD)

#
# The libdk3fig library objects.
# These objects use the libdk3bif library and thus the libpng,
# libjpeg and libtiff libraries.
#
LIBDK3FIGOBJ= \
	dk3figbb.o \
	dk3figpr.o \
	dk3figah.o \
	dk3figrd.o \
	dk3figto.o \
	dk3fig.o \
	dk3font.o \
	dk3ct.o

libdk3fig.$(LIBEXT):	# The libdk3fig library to process Fig files.
libdk3fig.$(LIBEXT):	$(LIBDK3FIGOBJ)
	-[ ! -f libdk3fig.$(LIBEXT) ] || rm libdk3fig.$(LIBEXT)
	-[ ! -f libdk3fig.$(LIBEXT).$(SOVERS) ] || rm libdk3fig.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3FIGOBJ)
	$(MKSOLINK)
	$(RANLIB) libdk3fig.$(LIBEXT)
	$(SOCHMOD)

#
# The libdk3bmeps library objects.
# These objects use the libdk3bif library and thus the libpng, libjpeg
# and libtiff libraries.
#
LIBDK3BMEPSOBJ= \
	dk3bm.o \
	dk3bmeo.o \
	dk3bmep.o \
	dk3bmeps.o \
	dk3bmj.o \
	dk3pdf.o \
	dk3paper.o

libdk3bmeps.$(LIBEXT):	# The libdk3bmeps library to convert images to PS/PDF.
libdk3bmeps.$(LIBEXT):	$(LIBDK3BMEPSOBJ)
	-[ ! -f libdk3bmeps.$(LIBEXT) ] || rm libdk3bmeps.$(LIBEXT)
	-[ ! -f libdk3bmeps.$(LIBEXT).$(SOVERS) ] || rm libdk3bmeps.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3BMEPSOBJ)
	$(MKSOLINK)
	$(RANLIB) libdk3bmeps.$(LIBEXT)
	$(SOCHMOD)

#
# The libdk3net library objects.
# These objects use the socket API libraries.
#
LIBDK3NETOBJ= \
	dk3sock.o

libdk3net.$(LIBEXT):	# The libdk3net library for TCP/IP access.
libdk3net.$(LIBEXT):	$(LIBDK3NETOBJ)
	-[ ! -f libdk3net.$(LIBEXT) ] || rm libdk3net.$(LIBEXT)
	-[ ! -f libdk3net.$(LIBEXT).$(SOVERS) ] || rm libdk3net.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3NETOBJ)
	$(MKSOLINK)
	$(RANLIB) libdk3net.$(LIBEXT)
	$(SOCHMOD)

DKTOBJ=	dkt.o dkt-html.o dkt-lat.o dkt-sort.o dkt-cat.o dkt-ls.o dkt-blks.o \
	dkt-chks.o dkt-tape.o dkt-cwd.o dkt-crp.o dkt-hex.o dkt-uid.o \
	dkt-ed.o dkt-rnd.o dkt-tool.o dkt-help.o \
	dk3appr.o \
	dk3chks.o \
	dk3opt.o \
	dk3uc2l.o \
	dk3bf.o \
	dk3app.o \
	dk3signl.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3ufi.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

dkt:			# General-purpose tool
dkt:	$(DKTOBJ)
	@echo Link dkt
	$(LD) $(CFLAGS) $(LDFLAGS) -o dkt $(DKTOBJ) $(CRYPTO) $(COMPLIBS) -lm
	chmod 755 dkt


DKCTOBJ=	dkct.o dkct-str.o dkct-tr.o dkct-au.o dkct-gui.o dkct-to.o \
	dk3opt.o \
	dk3bf.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

dkct:			# Preprocessor for C, C++, Objective-C and Java
dkct:	$(DKCTOBJ)
	@echo Link dkct
	$(LD) $(CFLAGS) $(LDFLAGS) -o dkct $(DKCTOBJ) $(COMPLIBS) -lm
	chmod 755 dkct

DKDBTOOLOBJ=	dkdbt.o \
	dk3dbi.o \
	dk3opt.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

dkdbt:			# Database conversions.
dkdbt:	$(DKDBTOOLOBJ)
	@echo	Link dkdbt
	$(LD) $(CFLAGS) $(LDFLAGS) -o dkdbt $(DKDBTOOLOBJ) $(DBLIB) $(COMPLIBS) -lm
	chmod 755 dkdbt

BMEPS3OBJ=	bmeps3.o \
	dk3bm.o \
	dk3bmeo.o \
	dk3bmeps.o \
	dk3bmj.o \
	dk3pdf.o \
	dk3paper.o \
	dk3bifa.o \
	dk3bif.o \
	dk3pixre.o \
	dk3of.o \
	dk3opt.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3mad.o \
	dk3maui.o \
	dk3mal.o \
	dk3maul.o \
	dk3madlc.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3trace.o

bmpp:			# Convert bitmap images to PS/PDF.
bmpp:	$(BMEPS3OBJ)
	echo	Link bmpp
	$(LD) $(CFLAGS) $(LDFLAGS) -o bmpp $(BMEPS3OBJ) $(COMPLIBS) $(IMGLIBS) -lm
	chmod 755 bmpp

FIG2LATOBJ= fig2lat.o f2lopt.o f2lud.o f2ludpat.o f2lpgf.o f2lpdf.o f2leps.o \
	f2lsvg.o f2lsvgst.o f2lto.o f2lpara.o \
	dk3ufi.o \
	dk3figpr.o \
	dk3figbb.o \
	dk3figrd.o \
	dk3fig.o \
	dk3figto.o \
	dk3bm.o \
	dk3bmeo.o \
	dk3bmeps.o \
	dk3bmj.o \
	dk3pdf.o \
	dk3paper.o \
	dk3bifa.o \
	dk3bif.o \
	dk3pixre.o \
	dk3bits.o \
	dk3of.o \
	dk3dir.o \
	dk3opt.o \
	dk3cores.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3bezcu.o \
	dk3bb.o \
	dk3xsp.o \
	dk3figah.o \
	dk3ct.o \
	dk3mastr.o \
	dk3maui.o \
	dk3mal.o \
	dk3maul.o \
	dk3mad.o \
	dk3madlc.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3font.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

fig2lat:		# Convert Fig files to vector graphics (use with LaTeX).
fig2lat:	$(FIG2LATOBJ)
	echo	Link fig2lat
	$(LD) $(CFLAGS) $(LDFLAGS) -o fig2lat $(FIG2LATOBJ) $(COMPLIBS) $(IMGLIBS) -lm
	chmod 755 fig2lat

HTMLBOOKOBJ=	htmlbook.o hbnode.o hbconf.o hbhtml.o hbtool.o hbindex.o \
	hbcont.o hbimgdim.o hbchm.o \
	dk3se.o \
	dk3bif.o \
	dk3pixre.o \
	dk3bits.o \
	dk3app.o \
	dk3kv.o \
	dk3opt.o \
	dk3sto.o \
	dk3srch.o \
	dk3strm.o \
	dk3dir.o \
	dk3sf.o \
	dk3enc.o \
	dk3str.o \
	dk3strkv.o \
	dk3maui.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

htmlbook:		# Publish HTML like a book
htmlbook:	$(HTMLBOOKOBJ)
	echo	Link htmlbook
	$(LD) $(CFLAGS) $(LDFLAGS) -o htmlbook $(HTMLBOOKOBJ) $(COMPLIBS) $(SOCKLIB) $(IMGLIBS) -lm
	chmod 755 htmlbook

addctrld:		# Ensure CTRL-d as final byte in data stream
addctrld:	addctrld.o
	echo	Link addctrld
	$(LD) $(CFLAGS) $(LDFLAGS) -o addctrld addctrld.o
	chmod 755 addctrld

DKWXWIZOBJ= dkwxwiz.o \
	dk3of.o \
	dk3dir.o \
	dk3opt.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

dkwxwiz:		# Wizard to set up a new wxWidgets+dkct based project.
dkwxwiz:	$(DKWXWIZOBJ)
	echo	Link dkwxwiz
	$(LD) $(CFLAGS) $(LDFLAGS) -o dkwxwiz $(DKWXWIZOBJ) $(COMPLIBS) -lm
	chmod 755 dkwxwiz

DK3INFOOBJ=	dk3info.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

dk3info:		# Show configuration
dk3info:	$(DK3INFOOBJ)
	echo	Link dk3info
	$(LD) $(CFLAGS) $(LDFLAGS) -o dk3info $(DK3INFOOBJ) -lm
	chmod 755 dk3info

DKNETOBJ=	dknet.o \
	dk3sock.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3signl.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

dknet:			# TCP data transfer to one or multiple recipients
dknet:	$(DKNETOBJ)
	echo	Link dknet
	$(LD) $(CFLAGS) $(LDFLAGS) -o dknet $(DKNETOBJ) $(COMPLIBS) $(SOCKLIB) -lm
	chmod 755 dknet

DKNET4OBJ=	dknet4.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3signl.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

dknet4:			# IPv4 only version of dknet
dknet4:	$(DKNET4OBJ)
	$(LD) $(CFLAGS) $(LDFLAGS) -o dknet4 $(DKNET4OBJ) $(COMPLIBS) $(SOCKLIB) -lm
	chmod 755 dknet4

PRINTQDOBJ=	printqd.o \
	pqdconf.o \
	pqdproto.o \
	pqdstr.o \
	pqdtool.o \
	dk3sock.o \
	dk3dbi.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

printqd:		# Print quota enforcement daemon
printqd:	$(PRINTQDOBJ)
	echo	Link printqd
	$(LD) $(CFLAGS) $(LDFLAGS) -o printqd $(PRINTQDOBJ) $(DBLIB) $(COMPLIBS) $(SOCKLIB) -lm
	chmod 755 printqd

PRINTQDIOBJ=	printqdi.o \
	pqdconf.o \
	dk3sock.o \
	dk3dbi.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

printqdi:		# Information daemon for printqd
printqdi:	$(PRINTQDIOBJ)
	echo	Link printqdi
	$(LD) $(CFLAGS) $(LDFLAGS) -o printqdi $(PRINTQDIOBJ) $(DBLIB) $(COMPLIBS) $(PTHREADLIB) $(SOCKLIB) -lm

PRINTQDAOBJ=	printqda.o \
	pqdconf.o \
	dk3dbi.o \
	dk3sock.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

printqda:		# Printqd administration program
printqda:	$(PRINTQDAOBJ)
	echo	Link printqda
	$(LD) $(CFLAGS) $(LDFLAGS) -o printqda $(PRINTQDAOBJ) $(DBLIB) $(COMPLIBS) $(SOCKLIB) -lm
	chmod 755 printqda

printqdc:		# Printqd helper program
printqdc:	printqda
	-[ ! -f printqdc ] || rm -fr printqdc
	ln printqda printqdc
	chmod 755 printqdc

LPRNGCLOBJ= lprngcl.o \
	dk3print.o \
	dk3prcfg.o \
	dk3prreq.o \
	dk3sock.o \
	dk3of.o \
	dk3dir.o \
	dk3opt.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

lprngcl:		# Program to clean LPRng print queues on user logout
lprngcl:	$(LPRNGCLOBJ)
	echo	Link lprngcl
	$(LD) $(CFLAGS) $(LDFLAGS) -o lprngcl $(LPRNGCLOBJ) $(COMPLIBS) $(SOCKLIB) -lm
	chmod 755 lprngcl

ITADMINOBJ=	itadmin.o \
	itaconf.o \
	itadata.o \
	itamysql.o \
	itareg.o \
	itamem.o \
	itacomp.o \
	itange.o \
	itahosts.o \
	itaether.o \
	itadhcp.o \
	itanetd.o \
	italic.o \
	itatool.o \
	dk3uc2l.o \
	dk3opt.o \
	dk3bf.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

itadmin:		# Program for IT management using a MySQL database
itadmin:	$(ITADMINOBJ)
	echo	Link itadmin
	$(LD) $(CFLAGS) $(LDFLAGS) $(MYSQLLDFLAGS) $(LDMYSQL) -o itadmin $(ITADMINOBJ) -lmysqlclient $(COMPLIBS) $(SOCKLIB) -lm
	chmod 755 itadmin

PJSNMPOBJ=	pjsnmp.o \
	dk3sock.o \
	dk3app.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

pjsnmp:			# Print job transfer filter for LPRng print system
pjsnmp:	$(PJSNMPOBJ)
	echo	Link pjsnmp
	$(LD) $(CFLAGS) $(LDFLAGS) -o pjsnmp $(PJSNMPOBJ) $(COMPLIBS) $(SOCKLIB) $(NETSNMP_LIBS) -lm
	chmod 755 pjsnmp

PLPDFTEXOBJ=	plpdftex.o plptcol.o \
	dk3app.o \
	dk3pdf.o \
	dk3of.o \
	dk3bif.o \
	dk3bifa.o \
	dk3pixre.o \
	dk3dir.o \
	dk3opt.o \
	dk3srch.o \
	dk3sto.o \
	dk3strm.o \
	dk3enc.o \
	dk3sf.o \
	dk3signl.o \
	dk3str.o \
	dk3maui.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madsi.o \
	dk3madso.o \
	dk3mem.o \
	dk3inst.o \
	dk3trace.o

plpdftex:		# Plot to PDF/TeX file pair.
plpdftex:	$(PLPDFTEXOBJ)
	$(LD) $(CFLAGS) $(LDFLAGS) -o plpdftex $(PLPDFTEXOBJ) $(COMPLIBS) $(IMGLIBS) -lm
	chmod 755 plpdftex

wxcs:			# Program to write dk3wxcs.h
wxcs:	wxcs.o
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wxcs wxcs.o $(WXLDFLAGS) -lm
	chmod 755 wxcs

dk3wxcs.h:		# Header file containing size of wxChar
dk3wxcs.h:	wxcs
	./wxcs > dk3wxcs.h

DKWXTRACEOBJ=	DkWxTraceApp.o \
	DkWxTraceFrame.o \
	DkWxProgressDialog.o \
	DkWxTraceThread.o \
	DkWxCommunicator.o \
	DkWxFrame.o \
	DkWxTraceOptionsDialog.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	dk3wxs.o \
	dkct-str-gui.o \
	dkct-tr-gui.o \
	dkct-au-gui.o \
	dkct-gui-gui.o \
	dkct-to-gui.o \
	dk3opt.o \
	dk3app.o \
	dk3bf.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3mem.o \
	dk3trace.o

wxdkct:			# GUI version of dkct
wxdkct:	$(DKWXTRACEOBJ)
	@echo Link wxdkct
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wxdkct $(DKWXTRACEOBJ) $(WXLDFLAGS) -lm
	chmod 755 wxdkct

WXBMEPSOBJ=	DkWxBmepsApp.o \
	DkWxBmepsFrame.o \
	DkWxBmepsThread.o \
	DkWxBmepsOptionsDialog.o \
	DkWxProgressDialog.o \
	DkWxCommunicator.o \
	DkWxFrame.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	DkWxColorView.o \
	dk3wxs.o \
	dk3bm-gui.o \
	dk3bmeo.o \
	dk3bmep.o \
	dk3bmeps.o \
	dk3bmj-gui.o \
	dk3pdf-gui.o \
	dk3paper.o \
	dk3bifa-gui.o \
	dk3bif-gui.o \
	dk3pixre.o \
	dk3opt.o \
	dk3app.o \
	dk3of.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maui.o \
	dk3mal.o \
	dk3maul.o \
	dk3mad.o \
	dk3madlc.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3trace.o

wxbmpp:			# GUI version of bmpp
wxbmpp:	$(WXBMEPSOBJ)
	@echo Link wxbmpp
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wxbmpp $(WXBMEPSOBJ) $(WXLDFLAGS) $(IMGLIBS) $(ZLIB) -lm
	chmod 755 wxbmpp

WXPQDICOBJ= DkWxPrintqdcApp.o \
	DkWxPrintqdcFrame.o \
	DkWxPrintqdcThread.o \
	DkWxFrame.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	dk3sock.o \
	dk3wxs.o \
	dk3opt.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3trace.o

wxpqdic:		# Program to query printqdi daemon
wxpqdic:	$(WXPQDICOBJ)
	@echo Link wxpqdic
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wxpqdic $(WXPQDICOBJ) $(WXLDFLAGS) $(IMGLIBS) $(ZLIB) -lm
	chmod 755 wxpqdic

WXIMGSZOBJ= DkWxImgszApp.o \
	DkWxImgszFrame.o \
	DkWxImgszOptionsDialog.o \
	DkWxFrame.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	dk3sock.o \
	dk3wxs.o \
	dk3opt.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3trace.o

wximgsz:		# Program to suggest new sizes for bitmap images
wximgsz:	$(WXIMGSZOBJ)
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wximgsz $(WXIMGSZOBJ) $(WXLDFLAGS) $(IMGLIBS) $(ZLIB) -lm
	chmod 755 wximgsz

WXDKCLOCKOBJ= \
	DkClockApp.o \
	DkClockFrame.o \
	DkClockOptionsDialog.o \
	DkClockView.o \
	DkClockData.o \
	DkClockTaskbarIcon.o \
	DkWxBufferedControl.o \
	DkWxFrame.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	DkWxProcessingIdleController.o \
	DkWxProcessingController.o \
	dk3sock.o \
	dk3wxs.o \
	dk3opt.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3trace.o

wxdkclock:		# Program to show a clock on the desktop
wxdkclock:	$(WXDKCLOCKOBJ)
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wxdkclock $(WXDKCLOCKOBJ) $(WXLDFLAGS) $(IMGLIBS) $(ZLIB) -lm
	chmod 755 wxdkclock

WXDKHTBOBJ= \
	DkWxHtbApp.o \
	DkWxHtbFrame.o \
	DkWxFrame.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	DkWxProcessingIdleController.o \
	DkWxProcessingController.o \
	dk3sock.o \
	dk3wxs.o \
	dk3opt.o \
	dk3app.o \
	dk3strm.o \
	dk3sto.o \
	dk3dir.o \
	dk3enc.o \
	dk3str.o \
	dk3sf.o \
	dk3maul.o \
	dk3mastr.o \
	dk3madfo.o \
	dk3madso.o \
	dk3madsi.o \
	dk3inst.o \
	dk3srch.o \
	dk3bits.o \
	dk3mem.o \
	dk3trace.o

wxdkhtb:		# Viewer program for *.htb files
wxdkhtb:	$(WXDKHTBOBJ)
	$(LDCPP) $(CFLAGS) $(LDFLAGS) -o wxdkhtb $(WXDKHTBOBJ) $(WXLDFLAGS) $(IMGLIBS) $(ZLIB) -lm
	chmod 755 wxdkhtb

LIBDK3WXOBJ= \
	DkWxColorView.o \
	DkWxFrame.o \
	DkWxDialog.o \
	DkWxProgressDialog.o \
	DkWxBufferedControl.o \
	DkWxCommunicator.o \
	DkWxHelpController.o \
	DkWxAppHelper.o \
	DkWxProcessingIdleController.o \
	DkWxProcessingController.o \
	dk3wxs.o

libdk3wx.$(LIBEXT):	# Library containing modules for wxWidgets GUI
libdk3wx.$(LIBEXT):	$(LIBDK3WXOBJ)
	-[ ! -f libdk3wx.$(LIBEXT) ] || rm libdk3wx.$(LIBEXT)
	-[ ! -f libdk3wx.$(LIBEXT).$(SOVERS) ] || rm libdk3wx.$(LIBEXT).$(SOVERS)
	$(MKLIB) $(LIBDK3WXOBJ)
	$(MKSOLINK)
	$(RANLIB) libdk3wx.$(LIBEXT)
	$(SOCHMOD)

dk3wxs.o:		# Module containing wxChar string functions
dk3wxs.o:	dk3wxs.cpp dk3wxcs.h
	echo Compile dk3wxs.cpp
	$(COMPILEPP) -o dk3wxs.o -c dk3wxs.cpp

TESTMAOBJ=	test-ma.o dk3mastr.o dk3maul.o dk3str.o dk3mem.o dk3app.o dk3sto.o dk3strm.o dk3enc.o dk3sf.o dk3inst.o dk3srch.o dk3trace.o

test-ma:	$(TESTMAOBJ)
	$(LD) -o test-ma $(TESTMAOBJ)
	chmod 755 test-ma

TESTFPEOBJ=	test-fpe.o dk3mafpe.o dk3trace.o
test-fpe:	$(TESTFPEOBJ)
	$(LD) -o test-fpe $(TESTFPEOBJ) -lm
	chmod 755 test-fpe

