# 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 \
	graphics \
	graphics/metafiledrv \
	graphics/x11drv \
	ipc \
	loader \
	memory \
	misc \
	msdos \
	multimedia \
	objects \
	resources \
	scheduler \
	win32 \
	windows

EMUSUBDIRS = \
	tools \
	debugger \
	graphics/win16drv \
	if1632 \
	miscemu

LIBSUBDIRS = library

PROGSUBDIRS = libtest programs

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

COMMONOBJS = \
	controls/controls.o \
	files/files.o \
	graphics/graphics.o \
	graphics/metafiledrv/metafiledrv.o \
	graphics/x11drv/x11drv.o \
	ipc/ipc.o \
	loader/loader.o \
	memory/memory.o \
	misc/misc.o \
	msdos/msdos.o \
	multimedia/multimedia.o \
	objects/objects.o \
	resources/resources.o \
	scheduler/scheduler.o \
	win32/win32.o \
	windows/windows.o

EMUOBJS = \
	debugger/debugger.o \
	graphics/win16drv/win16drv.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: dummy
	for i in $(COMMONSUBDIRS) $(LIBSUBDIRS) $(EMUSUBDIRS); do \
	  (cd $$i; $(MAKE) depend) || exit 1; \
	done

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

clean:
	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean) || exit 1; 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`

configure: configure.in
	autoconf

include/config.h.in: configure.in include/acconfig.h
	autoheader -l include

dummy:
