# This Makefile understands the following targets:
#
# all (default):	build wine
# clean:		remove all intermediate files
# distclean:		also remove all files created by configure
# countryclean:		remove all files which have to be remade if
#			a different LANGuage is selected
# depend:		create the dependencies
#
# Author: Michael Patra   <micky@marie.physik.tu-berlin.de>
#                         <patra@itp1.physik.tu-berlin.de>

CC 	= @CC@
CFLAGS 	= @CFLAGS@
XINCL 	= @x_includes@
TOPSRC  = @top_srcdir@
DIVINCL = -I$(TOPSRC)/include
XPM_LIB	= -lXpm
XLIB	= -lXext -lX11
XDIR	= -L@x_libraries@
LDLIBS	= -lm
LD	= @LD@
LANG	= @LANG@
LDCOMBINEFLAGS = @LDCOMBINEFLAGS@
 

COMMONSUBDIRS = controls rc ipc loader misc multimedia objects windows

EMUSUBDIRS = tools debugger if1632 memory miscemu

LIBSUBDIRS = toolkit
 
COMMONOBJS = controls/controls.o ipc/ipc.o loader/loader.o misc/misc.o \
	multimedia/multimedia.o objects/objects.o rc/rc.o \
	windows/windows.o

EMUOBJS = debugger/debugger.o if1632/if1632.o memory/memory.o miscemu/miscemu.o

LIBOBJS = toolkit/toolkit.o
 

SUBDIRS = $(COMMONSUBDIRS) $(EMUSUBDIRS)

OBJS = $(COMMONOBJS) $(EMUOBJS)


all: wine wine.sym

wine.sym: wine
	nm wine | grep -v _compiled | sort >wine.sym

wine: $(SUBDIRS) dummy
	$(CC) -o wine $(OBJS) $(LDOPTIONS) $(XDIR) $(XPM_LIB) $(XLIB) $(LDLIBS)

$(SUBDIRS): dummy
	@cd $@; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'LD=$(LD)' 'LDCOMBINEFLAGS=$(LDCOMBINEFLAGS)' 'LANG=$(LANG)'

depend:
	for i in $(SUBDIRS); do (cd $$i; $(MAKE) depend); done

etags:
	etags `find . -name '*.[chS]' -print`

clean:
	for i in $(SUBDIRS); do (cd $$i; $(MAKE) clean); done
	rm -f *.o \#*\# *~ wine wine.sym TAGS

distclean:
	for i in $(SUBDIRS); do (cd $$i; $(MAKE) distclean); done
	echo "/* autoconf.h generated automatically.  Run Configure */" >autoconf.h
	echo "#error You must run Configure before you can build the makefiles." >>autoconf.h
	rm -f *.o \#*\# *~ wine wine.sym
	rm -f stamp-config config.* include/config.h Makefile

countryclean:
	for i in $(SUBDIRS); do (cd $$i; $(MAKE) countryclean); done
	rm -f wine wine.sym
	
dummy:
