# This Makefile understands the following targets:
#
# all (default):	build wine
# clean:		remove all intermediate files
# distclean:		also remove all files created by configure
# depend:		create the dependencies
# etags:		Create a TAGS file for Emacs.
#
# Author: Michael Patra   <micky@marie.physik.tu-berlin.de>
#                         <patra@itp1.physik.tu-berlin.de>

# First some useful definitions

SHELL     = /bin/sh
CC        = @CC@
CPP       = @CPP@
CFLAGS 	  = @CFLAGS@
DEFS      = @DEFS@ -DWINE_INI_GLOBAL=\"$(WINE_INI_GLOBAL)\"
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	  = @LDLIBS@
AR        = ar rc
RANLIB    = @RANLIB@
RM        = rm -f
SUBMAKE   = $(MAKE) 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' 'DEFS=$(DEFS)'
@SET_MAKE@

# Installation infos

INSTALL         = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@
prefix          = @prefix@
exec_prefix     = @exec_prefix@
bindir          = @bindir@
libdir          = @libdir@
sysconfdir      = @sysconfdir@
mandir          = @mandir@/man1
manext          = .1
WINE_INI_GLOBAL = $(sysconfdir)/wine.conf

# Main target to build

MAIN_TARGET = @MAIN_TARGET@

COMMONSUBDIRS = \
	rc \
	controls \
	files \
	ipc \
	loader \
	memory \
	misc \
	multimedia \
	objects \
	resources \
	win32 \
	windows

EMUSUBDIRS = \
	tools \
	debugger \
	debugger/readline \
	if1632 \
	miscemu

LIBSUBDIRS = library

PROGSUBDIRS = libtest programs

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

COMMONOBJS = \
	controls/controls.o \
	files/files.o \
	ipc/ipc.o \
	loader/loader.o \
	memory/memory.o \
	misc/misc.o \
	multimedia/multimedia.o \
	objects/objects.o \
	resources/resources.o \
	win32/win32.o \
	windows/windows.o

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

LIBOBJS = library/library.o


all: $(MAIN_TARGET)

install: install_$(MAIN_TARGET)

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

install_wine: dummy
	$(INSTALL_PROGRAM) wine $(bindir)/wine
	$(INSTALL_DATA) wine.man $(mandir)/wine$(manext)

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

install_libwine.a: dummy
	$(INSTALL_DATA) libwine.a $(libdir)

libwine.so.1.0: $(COMMONSUBDIRS) $(LIBSUBDIRS) dummy
	$(CC) -shared -Wl,-soname,libwine.so.1 -o$@ $(COMMONOBJS) $(LIBOBJS) $(LDOPTIONS) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS)

install_libwine.so.1.0: dummy
	$(INSTALL_DATA) libwine.so.1.0 $(libdir)

$(ALLSUBDIRS): dummy
	@cd $@; $(SUBMAKE)

install_programs: dummy
	@cd programs; $(SUBMAKE) install

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 *.orig *.rej *.flc
	$(RM) wine wine.sym libwine.a libwine.so.1.0 TAGS
	(cd include; $(RM) *.o \#*\# *~ *.bak *.orig *.rej *.flc)

distclean: clean
	$(RM) config.* Make.rules
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

dummy:
