# Makefile,v 1.27 1993/04/05 08:33:33 jan Exp
#
# Makefile for the PCE object files
#
# THIS FILE IS INCLUDED FROM THE MAKE FILES IN THE SYSTEM DIRECTORIES
# TO BUILD PCE INVOKE THE SHELL SCRIPT `./make' IN THIS DIRECTORY.
#
# January, 1992
#

.SUFFIXES: .C
C++=g++

H=	pce-include.h ari-include.h pce-trace.h xwn-include.h \
	gra-include.h pce-types.h gnu-regex.h itf-interface.h \
	txt-syntax.h prg-include.h

ADT=	adt-area.o adt-attribute.o adt-dict.o adt-dictitem.o \
	adt-number.o adt-point.o adt-real.o adt-sheet.o adt-size.o \
	adt-region.o adt-chain.o adt-date.o adt-vector.o \
	adt-hashtable.o adt-chaintable.o adt-bool.o adt-constant.o
ARI=	ari-equation.o ari-expression.o adt-tuple.o
EXP=	exp-hyper.o exp-atable.o
MSG=	msg-code.o msg-function.o msg-block.o msg-message.o msg-obtain.o \
	msg-if.o msg-while.o msg-equal.o msg-nonequal.o msg-var.o \
	msg-passing.o msg-and.o msg-or.o msg-not.o msg-assign.o \
	msg-when.o msg-progn.o msg-binding.o msg-quote_function.o \
	msg-create.o
PCE=	pce-alloc.o pce-method.o pce-class.o pce-debug.o pce-name.o \
	pce-self.o pce-variable.o pce-conversion.o pce-goodies.o \
	pce-trace.o pce-object.o pce-assoc.o pce-save.o \
	pce-string.o pce-glob.o pce-type.o pce-global.o \
	pce-behaviour.o pce-sendmethod.o pce-getmethod.o \
	pce-sourcelocation.o pce-visual.o pce-error.o pce-gc.o \
	pce-chararray.o pce-programobject.o pce-vmi.o pce-csymbol.o
REL=	rel-relation.o rel-constraint.o rel-identity.o pce-declarations.o
TXT=	txt-textimage.o txt-editor.o txt-textcursor.o txt-textmargin.o \
	txt-textbuffer.o txt-fragment.o txt-style.o \
	gra-listbrowser.o txt-view.o txt-browser.o txt-undo.o txt-regex.o \
	txt-keybinding.o txt-syntax.o
UNX=	unx-directory.o unx-file.o unx-process.o unx-socket.o
WID=	wid-canvas.o wid-frame.o
MEN=	men-dialogitem.o men-button.o men-label.o men-textitem.o men-slider.o \
	men-menu.o men-menuitem.o men-popup.o men-menubar.o
XWN=	xwn-display.o xwn-frame.o xwn-window.o \
	xwn-event.o xwn-eventtree.o xwn-eventnode.o xwn-draw.o oog-device.o \
	xwn-bitmap.o xwn-font.o xwn-cursor.o xwn-decorate.o \
	xwn-resource.o xwn-timer.o xwn-colour.o xwn-x11.o xwn-xref.o \
	xwn-displaymanager.o xwn-conversion.o xwn-image.o
GRA=	gra-graphical.o gra-box.o gra-arrow.o gra-line.o gra-ellipse.o \
	gra-circle.o gra-arc.o gra-text.o gra-path.o gra-figure.o \
	gra-connection.o gra-postscript.o gra-scrollbar.o gra-joint.o \
	oog-handle.o oog-format.o rel-spatial.o rel-link.o xwn-tile.o \
	xwn-dialog.o oog-tree.o oog-node.o xwn-picture.o
ITF=	itf-interface.o itf-host.o itf-c.o
EVT=	evt-modifier.o evt-gesture.o evt-popupgesture.o evt-movegesture.o \
	evt-moveoutlinegesture.o evt-resizegesture.o evt-clickgesture.o \
	evt-resizeoutlinegesture.o evt-connectgesture.o \
	exp-handler.o exp-handlergroup.o exp-recogniser.o
PRG=	prg-tokeniser.o prg-parser.o prg-operator.o
GNU=	gnu-regex.o
INL=	pce-inline.o
YAC=	gnu-getdate.o
STUB=	stub-action.o stub-query.o stub-send.o stub-get.o stub-main.o \
        stub-xmalloc.o
CPP=	itf-C.o
INLINE=	msg-passing.o msg-code.o pce-method.o pce-type.o

KERNEL= 	$(ADT) $(EXP) $(PCE) $(MSG) $(UNX) $(ARI) $(REL)
GRAPHICS=	$(GRA) $(EVT) $(MEN) $(TXT)
XWINDOW=	$(XWN) $(WID)

OBJECTS=	$(KERNEL) $(GRAPHICS) $(XWINDOW) $(PRG) $(ITF) $(GNU)
SRC=		$(OBJECTS:.o=.c)
SOURCES=	$(H) $(SRC) $(YAC:.o=.y) $(INL:.o=.c) $(CPP:.o=.C)
ALLOBJS=	$(OBJECTS) $(INL) $(YAC) $(CPP)

# Just the object files

all:		$(ALLOBJS)

XPCE.a:		$(ALLOBJS) $(STUB)
		rm -f $@
		$(AR) q $@ $(ALLOBJS) $(STUB)
		sh -c 'if [ -x /bin/ranlib -o -x/usr/bin/ranlib ]; then \
		               ranlib $@; fi'

# Everything from scratch

everything:	names tags all

# LIBRARY STUBS

ALLCFLAGS=	$(CFLAGS) $(IFLAGS) $(OPTIMISE)

stub-action.o:	itf-stub.c
	        ln -sf itf-stub.c $(@:.o=.c)
		$(CC) -c -DHOSTACTION $(ALLCFLAGS) $(@:.o=.c)
		rm -f $(@:.o=.c)
stub-query.o:	itf-stub.c
	        ln -sf itf-stub.c $(@:.o=.c)
		$(CC) -c -DHOSTQUERY $(ALLCFLAGS) $(@:.o=.c)
		rm -f $(@:.o=.c)
stub-send.o:	itf-stub.c
	        ln -sf itf-stub.c $(@:.o=.c)
		$(CC) -c -DHOSTSEND $(ALLCFLAGS) $(@:.o=.c)
		rm -f $(@:.o=.c)
stub-get.o:	itf-stub.c
	        ln -sf itf-stub.c $(@:.o=.c)
		$(CC) -c -DHOSTGET $(ALLCFLAGS) $(@:.o=.c)
		rm -f $(@:.o=.c)
stub-main.o:	itf-stub.c
	        ln -sf itf-stub.c $(@:.o=.c)
		$(CC) -c -DMAIN $(ALLCFLAGS) $(@:.o=.c)
		rm -f $(@:.o=.c)
stub-xmalloc.o:	itf-stub.c
	        ln -sf itf-stub.c $(@:.o=.c)
		$(CC) -c -DMAIN $(ALLCFLAGS) $(@:.o=.c)
		rm -f $(@:.o=.c)


# Dependencies

$(INLINE):	pce-inline.c
$(OBJECTS):	names.rebuild xwn-version.h
pce-name.o:	pce-name.h pce-name.ih pce-name.ic
pce-trace.o:	pce-trace.h
msg-passing.o:	pce-trace.h
pce-object.o:	pce-trace.h
itf-interface.o:itf-interface.h
pce-self.o:	itf-interface.h pce-csymbol.c
wid-frame.o:	wid-frame.h wid-frameP.h
wid-canvas.o:	wid-canvas.h wid-canvasP.h
pce-glob.o:	$(H)

gnu-regex.o:	gnu-regex.c gnu-regex.h
		$(CC) -c $(CFLAGS) $(IFLAGS) $(OPTIMISE) -Dpce_source $*.c
gnu-getdate.o:	gnu-getdate.c
		$(CC) -c $(OPTIMISE) $*.c
gnu-getdate.c:	gnu-getdate.y
		yacc gnu-getdate.y
		mv -f y.tab.c gnu-getdate.c

names.rebuild:	Names.Gen Names.X
		./FN -a ${SRC} pce-csymbol.c

names:		names.rebuild

Names.Gen:	Names.Gen.c
		$(CC) -o $@ Names.Gen.c

Names.X:	Names.X.c
		$(CC) -o $@ Names.X.c

xpce-client:	unx-client.c
		$(CC) -O -o $@ unx-client.c

tags:
		etags $(SOURCES)
		mv TAGS ../src

files:		../src/Makefile
		echo $(ALLOBJS) | tr ' ' '\012' > ../src/files

install:
		echo "Use the ../build script to install xpce"
		
.c.o:
		$(CC) -c $(CFLAGS) $(IFLAGS) $(OPTIMISE) $*.c

.C.o:
		$(C++) -c $(CFLAGS) $(IFLAGS) -I../include $(OPTIMISE) $*.C

lint:
		lint -h $(SRC) > ../src/lint.out

protoize:
		protoize $(SRC) | tee protoize.out

proto:		ker-proto.h prg-proto.h gra-proto.h xwn-proto.h txt-proto.h

ker-proto.h:	$(KERNEL:.o=.c)
		mkproto -p $(KERNEL:.o=.c) | grep -vw NewClass > ker-proto.h

gra-proto.h:	$(GRAPHICS:.o=.c)
		mkproto -p $(GRAPHICS:.o=.c) | grep -vw NewClass > gra-proto.h

prg-proto.h:	$(PRG:.o=.c)
		mkproto -p $(PRG:.o=.c) | grep -vw NewClass > $@

xwn-proto.h:	$(XWINDOW:.o=.c)
		mkproto -p $(XWINDOW:.o=.c) | grep -vw NewClass > $@

txt-proto.h:	$(TEXT:.o=.c)
		mkproto -p $(TEXT:.o=.c) | grep -vw NewClass > $@
