# This Makefile understands the following targets:
#
# all (default):	build wine
# clean:		remove all intermediate files
# distclean:		also remove all files created by configure
# langclean:		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@
LANG	  = @LANG@
X_CFLAGS  = @X_CFLAGS@
X_LIBS    = @X_LIBS@
TOPSRC    = @top_srcdir@
DIVINCL   = -I$(TOPSRC)/include
XPM_LIB	  = -lXpm
XLIB	  = @X_PRE_LIBS@ -lXext -lX11 @X_EXTRA_LIBS@
LDLIBS	  = -lm
AR        = ar rc
RANLIB    = @RANLIB@
RM        = rm -f
@SET_MAKE@

MAIN_TARGET = @MAIN_TARGET@

COMMONSUBDIRS = rc controls ipc loader misc multimedia objects win32 windows

EMUSUBDIRS = tools debugger debugger/readline if1632 memory miscemu

LIBSUBDIRS = toolkit

ALLSUBDIRS = $(COMMONSUBDIRS) $(EMUSUBDIRS) $(LIBSUBDIRS)

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

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

LIBOBJS = toolkit/toolkit.o


all: $(MAIN_TARGET)

wine: $(COMMONSUBDIRS) $(EMUSUBDIRS) dummy
	$(CC) -o wine $(COMMONOBJS) $(EMUOBJS) $(LDOPTIONS) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS)
	nm wine | grep -v _compiled | sort >wine.sym

winelib.a: $(COMMONSUBDIRS) $(LIBSUBDIRS) dummy
	$(RM) $@
	$(AR) $@ $(COMMONOBJS) $(LIBOBJS)
	$(RANLIB) $@

$(ALLSUBDIRS): dummy
	@cd $@; $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)' 'LANG=$(LANG)'

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

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

clean:
	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean); done
	$(RM) *.o \#*\# *~ *.bak wine wine.sym winelib.a TAGS

distclean:
	for i in $(ALLSUBDIRS); 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) *.o \#*\# *~ *.bak wine wine.sym winelib.a TAGS
	$(RM) config.* include/config.h Make.rules Makefile

langclean:
	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) langclean); done
	$(RM) wine wine.sym winelib.a

dummy:
