# 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 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 \
	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:
