# This Makefile understands the following targets:
#
# all (default):	build wine
# lib:                  build libwine
# clean:		remove all intermediate files
# distclean:		also remove all files created by configure
# install:              install everything
# uninstall:		uninstall everything
# depend:		create the dependencies
# etags:		create a TAGS file for Emacs.
# manpages:		compile manpages for Wine API
#

# Main target to build

MAIN_TARGET = @MAIN_TARGET@

# Directories

TOPSRCDIR = @top_srcdir@
TOPOBJDIR = .
SRCDIR    = @srcdir@
VPATH     = @srcdir@
MODULE    = none

LIBSUBDIRS = \
	tools \
	tools/wrc \
	controls \
	console \
	dlls/advapi32 \
	dlls/comctl32 \
	dlls/imagehlp \
	dlls/msacm \
	dlls/msacm32 \
	dlls/ntdll \
	dlls/psapi \
	dlls/rasapi32 \
	dlls/shell32 \
	dlls/winaspi \
	dlls/wnaspi32 \
	files \
	graphics \
	graphics/metafiledrv \
	graphics/psdrv \
	ipc \
	library \
	loader \
	loader/ne \
	loader/dos \
	memory \
	misc \
	msdos \
	multimedia \
	objects \
	ole \
	relay32 \
	resources \
	scheduler \
	server \
	win32 \
	windows \
	windows/ttydrv

X11SUBDIRS = \
	graphics/x11drv \
	tsx11 \
	windows/x11drv

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

PROGSUBDIRS = libtest programs

DOCSUBDIRS = documentation

# All sub-directories
ALLSUBDIRS = \
	$(LIBSUBDIRS) \
	$(X11SUBDIRS) \
	$(EMUSUBDIRS) \
	$(PROGSUBDIRS) \
	$(DOCSUBDIRS)

# Sub-directories to run make depend into
DEPENDSUBDIRS = $(LIBSUBDIRS) $(X11SUBDIRS) $(EMUSUBDIRS) $(DOCSUBDIRS)

# Sub-directories to run make install into
INSTALLSUBDIRS = $(DOCSUBDIRS)

LIBOBJS = \
	controls/controls.o \
	console/console.o \
	dlls/advapi32/advapi32.o \
	dlls/comctl32/comctl32.o \
	dlls/imagehlp/imagehlp.o \
	dlls/msacm/msacm.o \
	dlls/msacm32/msacm32.o \
	dlls/ntdll/ntdll.o \
	dlls/psapi/psapi.o \
	dlls/rasapi32/rasapi32.o \
	dlls/shell32/shell32.o \
	dlls/winaspi/winaspi.o \
	dlls/wnaspi32/wnaspi32.o \
	files/files.o \
	graphics/graphics.o \
	graphics/metafiledrv/metafiledrv.o \
	graphics/psdrv/psdrv.o \
	ipc/ipc.o \
	loader/loader.o \
	loader/ne/ne.o \
	loader/dos/dos.o \
	memory/memory.o \
	misc/misc.o \
	msdos/msdos.o \
	multimedia/multimedia.o \
	objects/objects.o \
	ole/ole.o \
	relay32/relay32.o \
	resources/resources.o \
	scheduler/scheduler.o \
	server/server.o \
	win32/win32.o \
	windows/windows.o \
	windows/ttydrv/ttydrv.o

X11OBJS = \
	graphics/x11drv/x11drv.o \
	tsx11/tsx11.o \
	windows/x11drv/x11drv.o

EMUOBJS = \
	debugger/debugger.o \
	graphics/win16drv/win16drv.o \
	if1632/if1632.o \
	miscemu/miscemu.o

LIB_TARGET  = @LIB_TARGET@

ALT_LINK    = @ALT_LINK@

all: Makefile Make.rules $(MAIN_TARGET)

@MAKE_RULES@

Make.rules: Make.rules.in configure
	@echo $? is newer than 'Make.rules', please rerun ./configure!
	@exit 1

install:: install_$(MAIN_TARGET)

uninstall:: uninstall_$(MAIN_TARGET)

emu: wine

lib: $(LIBSUBDIRS) $(X11SUBDIRS) $(LIB_TARGET)

wine wine.sym: $(LIBSUBDIRS) $(X11SUBDIRS) $(LIB_TARGET) $(EMUSUBDIRS) dummy
	$(CC) -o wine $(EMUOBJS) $(ALT_LINK) $(LDOPTIONS) $(X_LIBS) $(XLIB) $(LIBS)
	nm -n wine | grep -v _compiled >wine.sym
	@echo "Wine build complete."

libwine.a: $(LIBOBJS) $(X11OBJS)
	$(RM) $@
	$(AR) $@ $(LIBOBJS) $(X11OBJS)
	$(RANLIB) $@

libwine.so.1.0: $(LIBOBJS) $(X11OBJS)
	$(LDSHARED) -o$@ $(LIBOBJS) $(X11OBJS) $(LDOPTIONS)
	ln -sf $@ libwine.so

install_emu: install_lib
	[ -d $(bindir) ] || $(MKDIR) $(bindir)
	$(INSTALL_PROGRAM) wine $(bindir)/wine
	$(INSTALL_PROGRAM) loader/dos/dosmod $(bindir)/dosmod

uninstall_emu: uninstall_lib
	$(RM) $(bindir)/wine $(bindir)/dosmod

install_lib: install_includes
	[ -d $(libdir) ] || $(MKDIR) $(libdir)
	if [ $(LIB_TARGET) ]; then $(INSTALL_DATA) $(LIB_TARGET) $(libdir); fi
	$(INSTALL_DATA) wine.sym $(libdir)/wine.sym

uninstall_lib: uninstall_includes
	cd $(libdir); $(RM) $(LIB_TARGET)
	$(RM) $(libdir)/wine.sym

install_includes: dummy
	[ -d $(includedir) ] || $(MKDIR) $(includedir)
	cd $(TOPSRCDIR)/include; $(INSTALL_DATA) windows.h wintypes.h $(includedir)

# Don't just do a rm -rf on $(includedir) -- don't want to wipe out 
# anything extra the user may have put there.
uninstall_includes: dummy
	$(RM) $(includedir)/windows.h $(includedir)/wintypes.h
	-rmdir $(includedir)

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

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

uninstall_programs: dummy
	@cd programs; $(SUBMAKE) uninstall

install::
	for i in $(INSTALLSUBDIRS); do (cd $$i && $(MAKE) install) || exit 1; done

uninstall::
	for i in $(INSTALLSUBDIRS); do (cd $$i && $(MAKE) uninstall) || exit 1; done

depend:: dummy
	for i in $(DEPENDSUBDIRS); do (cd $$i && $(MAKE) depend) || exit 1; done

TAGS etags:
	etags `find $(TOPSRCDIR) -name '*.[chS]' -print | grep -v dbgmain`

manpages:
	-$(MKDIR) $(TOPOBJDIR)/documentation/man3w
	for i in $(LIBSUBDIRS); do (cd $$i && $(MAKE) man); done

htmlpages:
	-$(MKDIR) $(TOPOBJDIR)/documentation/html
	for i in $(LIBSUBDIRS); do (cd $$i && $(MAKE) html); done

clean::
	for i in $(ALLSUBDIRS); do (cd $$i; $(MAKE) clean) || exit 1; done
	for i in include; do (cd $$i; $(RM) *.o \#*\# .#* *~ *% *.bak *.orig *.rej *.flc); done
	$(RM) wine wine.sym libwine.a libwine.so.1.0 libwine.so TAGS .#*

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

### Dependencies:
