# 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@
DEFS    = @DEFS@
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@
@SET_MAKE@

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)' 'DEFS=$(DEFS)' '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 \#*\# *~ *.bak 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 \#*\# *~ *.bak wine wine.sym TAGS
	rm -f config.* include/config.h Makefile

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