# 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@
CFLAGS    = @CFLAGS@
OPTIONS   = @OPTIONS@
X_LIBS    = @X_LIBS@
TOPSRC    = @top_srcdir@
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)' 'OPTIONS=$(OPTIONS)'
@SET_MAKE@

# Installation infos

INSTALL         = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@
prefix          = @prefix@
exec_prefix     = @exec_prefix@
bindir          = @bindir@
libdir          = @libdir@
mandir          = @mandir@/man1
manext          = .1

# Main target to build

MAIN_TARGET = @MAIN_TARGET@

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

EMUSUBDIRS = \
	tools \
	debugger \
	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 \
	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 include/config.h
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

dummy:
