################################################################
# $Id: Makefile.in,v 1.85 2001/04/20 11:33:52 jan Exp $
#
# Makefile for XPCE-5
#
# NOTE NOTE NOTE: This Makefile only works with GNU-Make!!
#
# The XPCE project was started by Anjo Anjewierden, who developed version
# 1 and 2.  Version 3 is result of joint effort from Anjo Anjewierden and
# Jan Wielemaker.  Version 4 and 5 are written by Jan Wielemaker.
#
# Addresses:	Jan Wielemaker:		jan@swi.psy.uva.nl
#		Anjo Anjewierden:	anjo@swi.psy.uva.nl
#
# 		SWI
#		University of Amsterdam
#		Roetersstraat 15
#		1018 WB  Amsterdam
#		The Netherlands
#		FAX: (+31) 20 5256896
#		Phone: (+31) 20 5256121
#
# XPCE is *NOT* free software.  If you have a copy of XPCE and
# no licence, please
#
#	+ If you want a licence, contact xpce-request@swi.psy.uva.nl
#	+ Please inform us where you found the illegal copy.
#
# Copyright (C) 1999, University of Amsterdam
################################################################

.EXPORT_ALL_VARIABLES:
.SUFFIXES: .cxx

SHELL=@MAKESHELL@
MAKE=@MAKE@

builddir=@builddir@
srcdir=@srcdir@
vpath %.c @srcdir@
vpath %.h @srcdir@
vpath %.y @srcdir@
vpath %.cxx @srcdir@
prefix=@prefix@
exec_prefix=@exec_prefix@
mansec=1
mandir=$(prefix)/man/man$(mansec)
libdir=$(prefix)/lib
bindir=$(exec_prefix)/bin

PCEHOME=@PCEHOME@
XINCLUDES=@XINCLUDES@
XLIB=@XLIB@

# PROGRAMS

CC=@CC@
CXX=@CXX@
LD=@LD@
RANLIB=@RANLIB@
LDCONFIG=@LDCONFIG@
YACC=@YACC@
PL=@PL@
MKPROTO=mkproto -p
CLPROTO=grep -vw NewClass
LN=@LN_S@
AR=@AR@
ARFLAGS=ru
ETAGS=@ETAGS@
SED=sed
RM=rm
REL_LN=$(srcdir)/rel-ln
INSTALL=./xpce-install
INSTALL_PROGRAM=./xpce-install -m 755
INSTALL_DATA=./xpce-install -m 644

# LIBRARIES

NETLIBS=@NETLIBS@
PLLIBS=@PLLIBS@
XLIBS=@XLIBS@
LDFLAGS=-L$(XLIB) @LDFLAGS@
GCCLIB=@GCCLIB@
LDSOFLAGS=@LDSOFLAGS@ $(LDFLAGS)
SOEXTRAOBJ=@SOEXTRAOBJ@
SO=@SO@

LIBS=	$(XLIBS) $(PLLIBS) $(NETLIBS)

################################################################
# CFLAGS
#
# COFLAGS:	Optimiser flags.  Use make COFLAGS=-g for debugging
# CWFLAGS:	Warning flags
# CIFLAGS:	Include directories (for X11 for example)
# CMFLAGS:	Miscelaneous flags (all others)
# CFLAGS:	The combination.  Don't edit this.
################################################################

COFLAGS=@COFLAGS@
CWFLAGS=@CWFLAGS@
CIFLAGS=-I. -I$(srcdir) @CIFLAGS@
CMFLAGS=@CMFLAGS@ @DEFS@
CFLAGS=$(CWFLAGS) $(COFLAGS) $(CIFLAGS) $(CMFLAGS)

################################################################
# TARGET LIBRARIES
################################################################

LIB=libXPCE.a

################################################################
# PATHS FOR HOST-LANGUAGES
################################################################

# SWI-Prolog

PLBASE=@PLBASE@
PLARCH=@PLARCH@
PLINCL=@PLINCL@
BOOTPL=@BOOTPL@

PLRUNTIME=$(PLBASE)/runtime/$(PLARCH)
PLOBJ=pl$(RTSUFFIX).o

PLTARGET=@PLTARGET@

# SICStus Prolog (not used, see README.sicstus)

SICSHOME=/usr/local/lib/sicstus
SICSTARGET=xpce-sicstus

################################################################
# Version information
################################################################

VMAJOR=@VMAJOR@
VMINOR=@VMINOR@
VPATCH=@VPATCH@
PCEVERSIONDATE=April 2001

SOMAJOR=$(VMAJOR)
SOMINOR=$(VMINOR).$(VPATCH)
PCEVERSION=$(VMAJOR).$(VMINOR).$(VPATCH)
VERSION=$(PCEVERSION), $(PCEVERSIONDATE)
RTSUFFIX=@RTSUFFIX@
ARCH=@ARCH@
OS=@OS@

################################################################
# OTHER PATHS
################################################################

MANINDEX=../man/reference/index.obj

################################################################
# IMPLICIT RULES
################################################################

.c.o:
		$(CC) -c $(CFLAGS) $< -o $@

.c.a:
		$(CC) -c $(CFLAGS) $< -o $(*F).o
		@$(AR) r $@ $(*F).o
		@$(RM) $(*F).o

.cxx.a:
		$(CXX) -c -I../include $(CFLAGS) $< -o $(*F).o
		@$(AR) r $@ $(*F).o
		@$(RM) $(*F).o

################################################################
# MAIN TARGETS
################################################################

all:		banner ./xpce-install @ALLTARGET@

everything:	proto tags xpce-pl

./xpce-install:	xpce-install.c
		$(CC) $(CFLAGS) -o $@ $(srcdir)/xpce-install.c

banner:
		@echo "****************"
		@echo "Making XPCE $(VERSION) for $(ARCH)-$(OS)"
		@echo "****************"

xpce:		prepare libXPCE xpce-client

xpce-pl:	xpce pl-itf

pl-itf:		pl
		cd ../pl/src; \
		CANONICAL_PATHS=$(PCEHOME); export CANONICAL_PATHS; \
		$(MAKE) PL=$(PL) $(PLTARGET)

pl-shared:	pl
		cd ../pl/src; \
		CANONICAL_PATHS=$(PCEHOME); export CANONICAL_PATHS; \
		$(MAKE) soall

pl-static:	pl
		cd ../pl/src; \
		CANONICAL_PATHS=$(PCEHOME); export CANONICAL_PATHS; \
		$(MAKE) nosoall

pl:
		mkdir $@

man-index:	$(MANINDEX)

$(MANINDEX):	$(shell find ../man/reference -name '*.doc')
		-$(PL) \
		  -F none \
		  -f ../pl/src/plrc \
		  -g "[library('man/man_index')],pce_make_manual_index('$@')" \
		  -t halt

xpce-sicstus:	xpce
		cd ../sicstus/src; \
		$(MAKE) TARGET=$(SICSTARGET)

################################################################
# Public shared library objects
################################################################

LIBXPCESO=	libXPCE.$(SO)
LIBXPCESOM=	$(LIBXPCESO).$(SOMAJOR)
LIBXPCESOMM=	$(LIBXPCESO).$(SOMAJOR).$(SOMINOR)
LIBXPCEMAIN=	libXPCEmain.a

SONAMEFLAG=	@SONAMEFLAG@
MKSOFLAGS=	$(LDSOFLAGS) @SOWHOLEARCHIVE@ -L$(XLIB)
SOLIBS=		$(SOEXTRAOBJ) libXPCE.a $(GCCLIB) $(XLIBS) $(NETLIBS) -lm

so:		$(LIBXPCESO) $(LIBXPCEMAIN)

so-clean:
		for lib in $(SOLIBS); do $(RM) -f $$lib*; done

so-install:	so
		@echo "****************"
		@echo "* Installing XPCE shared libraries in $(libdir)"
		@echo "****************"
		$(INSTALL_PROGRAM) $(LIBXPCESOMM) $(libdir)
		(cd $(libdir); \
		     rm -f $(LIBXPCESOM) $(LIBXPCESO); \
		     ln -s $(LIBXPCESOMM) $(LIBXPCESOM); \
		     ln -s $(LIBXPCESOM) $(LIBXPCESO))
		$(LDCONFIG)
		$(INSTALL_DATA) $(LIBXPCEMAIN) $(libdir)
		(cd $(libdir) ; $(RANLIB) $(LIBXPCEMAIN))

$(LIBXPCESO):	libXPCE.a $(SOEXTRAOBJ)
		$(LD) $(MKSOFLAGS) $(SONAMEFLAG) -o $(LIBXPCESOMM) $(SOLIBS)
		rm -f $(LIBXPCESOM) $(LIBXPCESO)
		ln -s $(LIBXPCESOMM) $(LIBXPCESOM)
		ln -s $(LIBXPCESOM) $(LIBXPCESO)

$(LIBXPCEMAIN):	$(srcdir)/itf/main.cxx
		$(CXX) -c -I../include $(CFLAGS) $< -o main.o
		rm -f $@
		ar r $@ main.o
		$(RANLIB) $@

# On SunOs using MIT X11R5 the symbol __XtInherit will be reported
# unititialized it this file isn't included explicitely.
# Looks like a bug to me.

Initialize.o:	
		ar x $(XLIB)/libXt.a $@

################################################################
# XPCE's modules
################################################################

MODULES=	adt ari evt gnu gra itf ker men fmt msg prg rel \
		txt unx win img box

################################################################
# PROTOTYPES (must be made in the source directory)
################################################################

proto:		$(foreach m, $(MODULES) x11, $(srcdir)/$(m)/proto.h)

################################################################
# Building the directories
################################################################

prepare:	directories names version h/interface.h

directories:	h $(MODULES) x11

$(MODULES) bin lib x11:
		mkdir $@

h:		
		ln -s $(srcdir)/h .

names::	
		@if [ ! -d $(srcdir)/names ]; then \
		    mkdir $(srcdir)/names; \
		    if [ ! -d names ]; then ln -s $(srcdir)/names .; fi; \
		    $(MAKE) names/built; \
	        fi

version:
		@rm -f ../src/version.h

################################################################
# Building the name tables
################################################################

Names.Gen:	$(srcdir)/Names.Gen.c
		$(CC) $(CFLAGS) -o Names.Gen $(srcdir)/Names.Gen.c
Names.X:	$(srcdir)/Names.X.c
		$(CC) $(CFLAGS) -o Names.X $(srcdir)/Names.X.c

names/built:	names Names.Gen Names.X
		$(srcdir)/FN -a $(srcdir)/h/*.h $(srcdir)/???/*.c
		@touch names/built

################################################################
# GNU-Emacs TAG table
################################################################

tags:		
		cd $(srcdir); \
		fs="h/*.h x11/*.c"; \
		for d in $(MODULES); do fs="$$fs $$d/*.c"; done; \
		$(ETAGS) $$fs

################################################################
# ADT 		--- Abstract Data Types
################################################################

ADTOBJS=	area.o atable.o attribute.o bool.o chain.o chaintable.o \
		constant.o date.o dict.o dictitem.o hashtable.o number.o \
		point.o real.o region.o sheet.o size.o tuple.o vector.o
ADTSRC=		$(addprefix $(srcdir)/adt/, $(ADTOBJS:.o=.c))

$(srcdir)/adt/proto.h:	$(ADTSRC)
		$(MKPROTO) $(ADTSRC) | $(CLPROTO) > $@

################################################################
# ARI 		--- Arithmetic Operations
################################################################

ARIOBJS=	equation.o expression.o
ARISRC=		$(addprefix $(srcdir)/ari/, $(ARIOBJS:.o=.c))

$(srcdir)/ari/proto.h:	$(ARISRC)
		$(MKPROTO) $(ARISRC) | $(CLPROTO) > $@

################################################################
# EVT 		--- Event Handling Primitives
################################################################

EVTOBJS=	clickgesture.o conngesture.o event.o \
		eventnode.o eventtree.o gesture.o handler.o \
		handlergroup.o modifier.o movegesture.o \
		mvolgesture.o popupgesture.o recogniser.o \
		resizegesture.o rzolgesture.o edittextgest.o \
		browserselgesture.o resizetabslice.o
EVTSRC=		$(addprefix $(srcdir)/evt/, $(EVTOBJS:.o=.c))

$(srcdir)/evt/proto.h:	$(EVTSRC)
		$(MKPROTO) $(EVTSRC) | $(CLPROTO) > $@

################################################################
# GNU 		--- GNU-Project Libraries
################################################################

GNUOBJS=	gregex.o getdate.o
GNUSRC=		$(addprefix $(srcdir)/gnu/, $(GNUOBJS:.o=.c))
CNWFLAGS=	$(CMFLAGS) $(COFLAGS) $(CIFLAGS)

gnu/gregex.o:	gnu/gregex.c gnu/gregex.h
		$(CC) -c $(CFLAGS) -Dpce_source $< -o $@
gnu/getdate.o:	$(srcdir)/gnu/getdate.c
		$(CC) -c $(CNWFLAGS) $< -o $@
$(srcdir)/gnu/getdate.c:	gnu/getdate.y
		$(YACC) $<
		mv -f y.tab.c $@

$(srcdir)/gnu/proto.h:	$(GNUSRC)
		$(MKPROTO) $(GNUSRC) | $(CLPROTO) > $@

################################################################
# GRA 		--- Graphics Classes
################################################################

GRAOBJS=	arc.o arrow.o bitmap.o box.o circle.o colour.o \
		connection.o cursor.o device.o ellipse.o figure.o \
		font.o format.o graphical.o handle.o image.o \
		joint.o line.o link.o listbrowser.o node.o path.o \
		postscript.o scrollbar.o text.o tree.o visual.o \
		pixmap.o elevation.o pen.o draw.o colourmap.o \
		bezier.o hsv.o
GRASRC=		$(addprefix $(srcdir)/gra/, $(GRAOBJS:.o=.c))

$(srcdir)/gra/proto.h:	$(GRASRC)
		$(MKPROTO) $(GRASRC) | $(CLPROTO) > $@

################################################################
# ITF 		--- Host Interface Layer
################################################################

ITF1OBJS=	c.o host.o interface.o cpointer.o asfile.o console.o \
		stub.o xmalloc.o iostream.o srcsink.o rc.o hostdata.o
ITF2OBJS=	@CXXTARGETS@
ITFOBJS=	$(ITF1OBJS) $(ITF2OBJS)
ITFSRC=		$(addprefix $(srcdir)/itf/, $(ITF1OBJS:.o=.c) $(ITF2OBJS:.o=.cxx))

$(srcdir)/itf/proto.h:	$(ITFSRC)
		$(MKPROTO) $(ITFSRC) | $(CLPROTO) > $@

itf/cpp.o:	itf/cpp.cxx
		$(CXX) -c -I../include $(CFLAGS) $< -o $@

################################################################
# KER 		--- Kernel modules
################################################################

KER1OBJS=	alloc.o assoc.o behaviour.o class.o conversion.o \
		debug.o declarations.o error.o gc.o \
		getmethod.o glob.o global.o goodies.o passing.o \
		method.o name.o object.o programobject.o save.o \
		self.o sendmethod.o srclocation.o timer.o \
		trace.o type.o variable.o xref.o classvar.o
KER2OBJS=	inline.o
KEROBJS=	$(KER1OBJS) $(KER2OBJS)
KER1SRC=	$(addprefix $(srcdir)/ker/, $(KER1OBJS:.o=.c))

$(srcdir)/ker/proto.h:	$(KER1SRC)
		$(MKPROTO) $(KER1SRC) | $(CLPROTO) | grep -v PceGoal | grep -v PceType > $@

version.h:	Makefile
		@echo "#define MACHINE \"$(ARCH)\"" > $@%
		@echo "#define PCE_VERSION \"$(VERSION)\"" >> $@%
		@echo "#define OS \"$(OS)\"" >> $@%
		@if cmp -s $@% $@; then rm $@%; else mv $@% $@; fi

h/interface.h:	Makefile
		@sed 's/^#define *PCE_VERSION *.*/#define PCE_VERSION \"$(VERSION)\"/' $@ > $@%
		@if cmp -s $@% $@; then rm $@%; else mv $@% $@; fi

ker/self.o:	version.h

ker/name.o:	h/names.ih

ker/glob.o:	h/kernel.h h/types.h h/graphics.h h/lang.h h/layout.h


################################################################
# MEN 		--- Menu (Dialog) items
################################################################

MENOBJS=	button.o dialogitem.o label.o menu.o menubar.o \
		menuitem.o popup.o slider.o textitem.o tab.o diagroup.o \
		tabstack.o labelbox.o intitem.o
MENSRC=		$(addprefix $(srcdir)/men/, $(MENOBJS:.o=.c))

$(srcdir)/men/proto.h:	$(MENSRC)
		$(MKPROTO) $(MENSRC) | $(CLPROTO) > $@


################################################################
# FMT 		--- Layout managers
################################################################

FMTOBJS=	layoutmgr.o layoutitf.o \
		table.o tabcell.o tabslice.o
FMTSRC=		$(addprefix $(srcdir)/fmt/, $(FMTOBJS:.o=.c))

$(srcdir)/fmt/proto.h:	$(FMTSRC)
		$(MKPROTO) $(FMTSRC) | $(CLPROTO) > $@


################################################################
# BOX 		--- Typesetting stuff
################################################################

BOXOBJS=	boxes.o hbox.o tbox.o parbox.o grbox.o rubber.o \
		lbox.o
BOXSRC=		$(addprefix $(srcdir)/box/, $(BOXOBJS:.o=.c))

$(srcdir)/box/proto.h:	$(BOXSRC)
		$(MKPROTO) $(BOXSRC) | $(CLPROTO) > $@


################################################################
# MSG 		--- Executable (message) Objects
################################################################

MSGOBJS=	and.o assign.o binding.o block.o code.o create.o \
		equal.o function.o if.o message.o nonequal.o \
		not.o obtain.o or.o progn.o quote.o var.o when.o while.o \
		nameref.o
MSGSRC=		$(addprefix $(srcdir)/msg/, $(MSGOBJS:.o=.c))

$(srcdir)/msg/proto.h:	$(MSGSRC)
		$(MKPROTO) $(MSGSRC) | $(CLPROTO) > $@

################################################################
# PRG 		--- Language Definition Classes
################################################################

PRGOBJS=	operator.o parser.o tokeniser.o
PRGSRC=		$(addprefix $(srcdir)/prg/, $(PRGOBJS:.o=.c))

$(srcdir)/prg/proto.h:	$(PRGSRC)
		$(MKPROTO) $(PRGSRC) | $(CLPROTO) > $@

################################################################
# REL 		--- Relation Classes
################################################################

RELOBJS=	constraint.o hyper.o identity.o relation.o \
		spatial.o
RELSRC=		$(addprefix $(srcdir)/rel/, $(RELOBJS:.o=.c))

$(srcdir)/rel/proto.h:	$(RELSRC)
		$(MKPROTO) $(RELSRC) | $(CLPROTO) > $@

################################################################
# TXT 		--- Text Representation and Manipulation Classes
################################################################

TXTOBJS=	chararray.o editor.o fragment.o keybinding.o \
		regex.o str.o string.o style.o syntax.o \
		textbuffer.o textcursor.o textimage.o \
		textmargin.o undo.o
TXTSRC=		$(addprefix $(srcdir)/txt/, $(TXTOBJS:.o=.c))

$(srcdir)/txt/proto.h:	$(TXTSRC)
		$(MKPROTO) $(TXTSRC) | $(CLPROTO) > $@

################################################################
# UNX 		--- Unix File, Process and Network Classes
################################################################

UNXOBJS=	directory.o file.o process.o socket.o stream.o
UNXSRC=		$(addprefix $(srcdir)/unx/, $(UNXOBJS:.o=.c))

$(srcdir)/unx/proto.h:	$(UNXSRC)
		$(MKPROTO) $(UNXSRC) | $(CLPROTO) > $@

xpce-client:	unx/client.c
		$(CC) -c $(CFLAGS) $< -o client.o
		$(CC) $(COFLAGS) $(CIFLAGS) -o $@ client.o $(NETLIBS)
		rm -f client.o


################################################################
# WIN 		--- Windows and Frames
################################################################

WINOBJS=	browser.o decorate.o dialog.o display.o \
		displaymgr.o frame.o picture.o \
		setup.o tile.o view.o window.o application.o
WINSRC=		$(addprefix $(srcdir)/win/, $(WINOBJS:.o=.c))

$(srcdir)/win/proto.h:	$(WINSRC)
		$(MKPROTO) $(WINSRC) | $(CLPROTO) > $@


################################################################
# IMG 		--- Platform independent low-level image stuff
################################################################

IMGOBJS=	jdatasrc.o jdatadst.o jpegtoxpm.o gifread.o giftoxpm.o \
		gifwrite.o
IMGSRC=		$(addprefix $(srcdir)/img/, $(IMGOBJS:.o=.c))

$(srcdir)/img/proto.h:	$(IMGSRC)
		$(MKPROTO) $(IMGSRC) | $(CLPROTO) > $@

################################################################
# X11 		--- X11 implementation of the XPCE Virtual Window Interface
################################################################

XCOMMOBJS=	canvas.o fshell.o xcommon.o xconvert.o x11-compat.o xppm.o
WSTOBJS=	xcolour.o xcursor.o xdisplay.o xdraw.o xevent.o xfont.o \
		xframe.o ximage.o xstream.o xtimer.o xwindow.o x11.o xmenu.o
X11OBJS=	$(XCOMMOBJS) $(WSTOBJS)

XCOMMSRC=	$(addprefix $(srcdir)/x11/, $(XCOMMOBJS:.o=.c))
WSTSRC=		$(addprefix $(srcdir)/x11/, $(WSTOBJS:.o=.c)) \
		$(srcdir)/gra/graphstate.c

$(srcdir)/x11/wstproto.h: $(WSTSRC)
		$(MKPROTO) $(WSTSRC) | $(CLPROTO) | grep -v '^XImage' > $@

$(srcdir)/x11/proto.h:	$(XCOMMSRC)
		$(MKPROTO) $(XCOMMSRC) | $(CLPROTO) > $@

################################################################$
# LIBRARY TARGET
################################################################

OBJECTS=	$(addprefix adt/, $(ADTOBJS)) \
		$(addprefix ari/, $(ARIOBJS)) \
		$(addprefix evt/, $(EVTOBJS)) \
		$(addprefix gnu/, $(GNUOBJS)) \
		$(addprefix gra/, $(GRAOBJS)) \
		$(addprefix itf/, $(ITFOBJS)) \
		$(addprefix ker/, $(KEROBJS)) \
		$(addprefix men/, $(MENOBJS)) \
		$(addprefix fmt/, $(FMTOBJS)) \
		$(addprefix box/, $(BOXOBJS)) \
		$(addprefix msg/, $(MSGOBJS)) \
		$(addprefix prg/, $(PRGOBJS)) \
		$(addprefix rel/, $(RELOBJS)) \
		$(addprefix txt/, $(TXTOBJS)) \
		$(addprefix unx/, $(UNXOBJS)) \
		$(addprefix win/, $(WINOBJS))

XOBJECTS=	$(addprefix x11/, $(X11OBJS)) \
		$(addprefix img/, $(IMGOBJS))

libXPCE:	version.h $(OBJECTS) doxobjs
		@echo "Running ar ru $(LIB) objects ..."
		@$(AR) ru $(LIB) $(OBJECTS) $(XOBJECTS)
		$(RANLIB) $(LIB)

doxobjs:
		$(MAKE) CIFLAGS="$(CIFLAGS) -I$(XINCLUDES)" xobjs

xobjs:		$(XOBJECTS)


################################################################
# INSTALLATION
################################################################

RTINSTALLDIRS=	postscript
RTHOME=		$(PLBASE)/xpce-$(PCEVERSION)
PLBINDIR=	$(PLBASE)/bin/$(PLARCH)
RTBINDIR=	$(RTHOME)/bin/$(PLARCH)
DVHOME=		$(RTHOME)
DVLIBDIRS=	lib lib/compatibility lib/dialog lib/draw lib/emacs lib/man \
		lib/xref lib/english demo contrib contrib/rubik lib/trace \
		lib/http lib/plot lib/doc lib/math
DVIMGDIRS=	lib/dialog/bitmaps lib/trace/icons lib/trace/icons/16x16
DVBOOTDIRS=	boot
DVMISCFILES=	ChangeLog 
RTMISC=		Defaults COPYING README

install:	dv-install

rt-install:	$(INSTALL) rt-home rt-misc rt-bitmaps rt-bins rt-link

dv-install:	rt-install dv-home dv-lib dv-boot dv-help \
	        dv-link dv-pl-files dv-manual dv-man \
		dv-misc cxx-install dv-qlf dv-bins dv-online

rpm-install:	manindex rt-home rt-misc rt-bitmaps rt-bins rpm-link \
		dv-lib dv-boot dv-help dv-link dv-pl-files dv-manual dv-man \
		dv-misc cxx-install rpm-bins

manindex:	$(MANINDEX)

rpm-bins::
		rm -f $(bindir)/xpce
		$(REL_LN) $(PLBINDIR)/pl $(bindir)/xpce
		$(INSTALL_PROGRAM) xpce-client $(bindir)
rpm-link::
		rm -f $(PLBASE)/xpce
		(cd $(PLBASE) && ln -s xpce-$(PCEVERSION) xpce)

#	runtime only stuff

RTBINS=		xpce xpce-client
RTLIBS=		pl2xpce.$(SO) $(LIBXPCESOMM) $(LIBXPCEMAIN)

rt-home:
		if [ ! -d $(RTHOME) ]; then mkdir $(RTHOME); fi

rt-bitmaps:
		BMFS=`find ../bitmaps/ \( -name '*.bm' -o -name '*.xpm' -o -name '*.xbm' \) -print` && \
		$(INSTALL_DATA) -p1 ../bitmaps/README $$BMFS $(RTHOME)

rt-misc:
		$(INSTALL_DATA) -C .. $(RTMISC) $(RTHOME)

rt-bins:
		$(INSTALL_DATA) -dC $(RTHOME) bin/$(PLARCH) lib/$(PLARCH)
		@if [ -f xpce ]; then \
		    echo "xpce --> $(PLBINDIR)"; \
		    $(INSTALL_PROGRAM) xpce $(PLBINDIR); \
		else \
		    rm -f $(PLBINDIR)/xpce; \
		    echo "linking xpce to pl in $(PLBINDIR)"; \
		    (cd $(PLBINDIR); ln -s pl xpce) ; \
		fi
		@for f in xpce-client; do \
		    if [ -f $$f ]; then \
			echo "$$f --> $(RTBINDIR)"; \
		        $(INSTALL_PROGRAM) $$f $(RTBINDIR); \
		    fi; \
		done
		@for f in $(RTLIBS); do \
		    if [ -f $$f ]; then \
			echo "$$f --> $(RTHOME)/lib/$(PLARCH)"; \
		        $(INSTALL_PROGRAM) $$f $(RTHOME)/lib/$(PLARCH); \
		    fi; \
		done
		if [ -f $(RTHOME)/lib/$(PLARCH)/$(LIBXPCESOMM) ]; then \
		    (cd $(RTHOME)/lib/$(PLARCH); \
		         rm -f $(LIBXPCESOM) $(LIBXPCESO); \
		         ln -s $(LIBXPCESOMM) $(LIBXPCESOM); \
		         ln -s $(LIBXPCESOM) $(LIBXPCESO)); \
		fi

dv-home:
		if [ ! -d $(DVHOME) ]; then mkdir $(DVHOME); fi

dv-lib:
		@if [ ! -d $(DVHOME)/prolog ]; then mkdir $(DVHOME)/prolog; fi
		@for d in $(DVLIBDIRS); do \
		    if [ ! -d $(DVHOME)/prolog/$$d ]; then \
		        mkdir $(DVHOME)/prolog/$$d; \
		    fi; \
		    echo -n "Installing library files for prolog/$$d ..."; \
		    $(INSTALL_DATA) ../prolog/$$d/*.pl $(DVHOME)/prolog/$$d; \
		    if [ -r ../prolog/$$d/README ]; then \
		        $(INSTALL_DATA) ../prolog/$$d/README $(DVHOME)/prolog/$$d; \
		    fi; \
		    echo done; \
		done
		$(PL) -f none -F none -g true \
			-t "make_library_index('$(DVHOME)/prolog/lib')"
		$(INSTALL_DATA) ../prolog/lib/Overview $(DVHOME)/prolog/lib
		$(INSTALL_DATA) ../prolog/lib/trace/pltracer.hlp $(DVHOME)/prolog/lib/trace
		@for d in $(DVIMGDIRS); do \
		    if [ ! -d $(DVHOME)/prolog/$$d ]; then \
		        mkdir $(DVHOME)/prolog/$$d; \
		    fi; \
		    echo -n "Installing icons in prolog/$$d ..."; \
		    $(INSTALL_DATA) ../prolog/$$d/*.bm ../prolog/$$d/*.xpm \
						$(DVHOME)/prolog/$$d; \
		    echo done; \
		done
		$(INSTALL_DATA) ../prolog/lib/man/classification.dat \
				$(DVHOME)/prolog/lib/man
		$(INSTALL_DATA) ../prolog/lib/Makefile $(DVHOME)/prolog/lib

dv-boot:	
		@for d in $(DVBOOTDIRS); do \
		    if [ ! -d $(DVHOME)/prolog/$$d ]; then \
		        mkdir $(DVHOME)/prolog/$$d; \
		    fi; \
		    for f in ../prolog/$$d/*.pl; do \
			echo $$f; \
			$(INSTALL_DATA) $$f $(DVHOME)/prolog/$$d; \
		    done; \
		done

dv-help:
		$(INSTALL_DATA) -vp1 ../appl-help/*.hlp $(DVHOME)

dv-misc:
		$(INSTALL_DATA) -C .. $(DVMISCFILES) $(DVHOME)

dv-manual:	
		$(INSTALL_DATA) -p1 ../man/reference/*.doc $(DVHOME)
		$(INSTALL_DATA) -p1 ../man/reference/class/*.doc $(DVHOME)
		$(INSTALL_DATA) -p1 ../man/faq/*.html $(DVHOME)

dv-online:	man-index
		if [ -r $(MANINDEX) ]; then \
		    $(INSTALL_DATA) -p1 $(MANINDEX) $(DVHOME); \
		fi

dv-man:
		for f in xpce-client xpce; do \
		    $(INSTALL_DATA) ../man/$$f.1 $(DVHOME)/man; \
		    if test -w $(mandir); then \
		        $(INSTALL_DATA) ../man/$$f.1 $(mandir)/$$f.$(mansec); \
		    fi; \
	        done

rt-link:
		cd $(PLBASE); rm -f xpce; ln -s xpce-$(PCEVERSION) xpce

dv-link:	rt-link
		$(INSTALL_DATA) ../pl/src/plrc $(PLBASE)/pl.rc
		$(INSTALL_DATA) ../pl/src/plrc $(PLBASE)/xpce.rc
		$(INSTALL_DATA) ../pl/src/Makefile.bin $(PLBASE)/Makefile

dv-pl-files:
		if [ ! -d $(RTHOME)/pl ]; then mkdir $(RTHOME)/pl; fi
		$(INSTALL_DATA) ../pl/src/plrc $(RTHOME)/pl/pl.rc
		$(INSTALL_DATA) ../pl/src/plrc $(RTHOME)/pl/xpce.rc
		$(INSTALL_DATA) ../pl/src/Makefile.bin $(RTHOME)/pl/Makefile

dv-qlf:		
		cd $(RTHOME)/prolog/lib; \
		make PL=$(PLBINDIR)/xpce

dv-bins:
		(cd $(bindir); \
		 rm -f xpce; ln -s $(PLBINDIR)/xpce xpce)
		(cd $(bindir); \
		 rm -f xpce-client; ln -s $(RTBINDIR)/xpce-client xpce-client)

pdf-install::
html-install::

################################################################
# CXX interface installation
################################################################

CXXDEMO=	DEMOS Makefile Makefile.in README bnode.cxx dir.cxx \
		dispatch.cxx dispatch.pl drawBoxes.cxx east.cxx getenv.cxx \
		global.cxx hello.cxx home.cxx multi3.bm multi5.bm onexit.cxx \
		open.bm pcerc.c persist.cxx persist.pl person.cxx \
		showinst.cxx super.cxx test.cxx view.cxx yesno.bm

cxx-install:	cxx-headers cxx-demos cxx-misc

cxx-headers:
		$(INSTALL_DATA) -p1 ../include/pce/*.h $(DVHOME)

cxx-demos:
		$(INSTALL_DATA) -pC ../CXX/demo $(CXXDEMO) $(DVHOME)/CXX/demo

cxx-misc:
		$(INSTALL_DATA) -C .. README.CXX $(DVHOME)
		$(INSTALL_DATA) -p1 ../src/itf/main.cxx $(DVHOME)

################################################################
# CLEANUP
################################################################

clean:
		for d in ../pl/src; do (cd $$d; $(MAKE) clean); done
		for m in $(MODULES) x11 msw; do \
		    if [ -d $$m ]; then \
		        (cd $$m; $(RM) -f *.o *~ *% core); \
		    fi; \
		done
		$(RM) -f *.o config.log
		$(RM) -rf names $(srcdir)/names

distclean:	clean
		for d in ../pl/src; do (cd $$d; $(MAKE) distclean); done
		$(RM) -f version.h
		$(RM) -f h/names.ic h/names.ih
		$(RM) -rf names Names.Gen Names.X
		$(RM) -f $(LIB)
		$(RM) -f install rt-install xpce pl2xpce.so xpce-client
		$(RM) -f Makefile config.h config.status config.cache
