# This Makefile understands the following targets:
#
# all (default):	build wine
# 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
#

# Directories

TOPSRCDIR = @top_srcdir@
TOPOBJDIR = .
SRCDIR    = @srcdir@
VPATH     = @srcdir@
LIBEXT    = @LIBEXT@
LDSHARED  = @LDSHARED@
LDCONFIG  = @LDCONFIG@
MODULE    = wine
SOVERSION = 1.0
SONAME    = libwine.so

TOOLSUBDIRS = tools

LIBSUBDIRS = \
	controls \
	console \
	dlls/advapi32 \
	dlls/crtdll \
	dlls/display \
	dlls/mouse \
	dlls/ntdll \
	files \
	graphics \
	graphics/enhmetafiledrv \
	graphics/metafiledrv \
	graphics/psdrv \
	graphics/win16drv \
	if1632 \
	library \
	loader \
	loader/ne \
	loader/dos \
	memory \
	misc \
	msdos \
	objects \
	ole \
	relay32 \
	resources \
	scheduler \
	win32 \
	windows

EMUSUBDIRS = \
	miscemu \
	server

PROGSUBDIRS = \
	debugger \
	libtest \
	programs

DOCSUBDIRS = documentation

INCSUBDIRS = include

# Stand-alone programs
PROGRAMS = \
	loader/dos/dosmod \
	server/wineserver

# Programs that link with libwine
LIBPROGRAMS = \
	debugger/winedbg

# Sub-directories to run make into
SUBDIRS = \
	$(TOOLSUBDIRS) \
	$(LIBSUBDIRS) \
	$(DLLDIR) \
	$(EMUSUBDIRS) \
	$(PROGSUBDIRS) \
	$(DOCSUBDIRS) \
	include

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

# Sub-directories to run make lint into
LINTSUBDIRS = $(LIBSUBDIRS) $(DLLDIR) $(EMUSUBDIRS) $(DOCSUBDIRS)

LIBOBJS = \
	controls/controls.o \
	console/console.o \
	dlls/advapi32/advapi32.o \
	dlls/crtdll/crtdll.o \
	dlls/display/display.o \
	dlls/mouse/mouse.o \
	dlls/ntdll/ntdll.o \
	files/files.o \
	graphics/graphics.o \
	graphics/enhmetafiledrv/enhmetafiledrv.o \
	graphics/metafiledrv/metafiledrv.o \
	graphics/psdrv/psdrv.o \
	graphics/win16drv/win16drv.o \
	if1632/if1632.o \
	loader/loader.o \
	loader/ne/ne.o \
	loader/dos/dos.o \
	memory/memory.o \
	misc/misc.o \
	msdos/msdos.o \
	objects/objects.o \
	ole/ole.o \
	relay32/relay32.o \
	resources/resources.o \
	scheduler/scheduler.o \
	win32/win32.o \
	windows/windows.o

EMUOBJS = \
	miscemu/miscemu.o

DLLOBJS = $(DLLS:%=dlls/lib%.@LIBEXT@)

EXTRA_OBJS = $(LIBOBJS)

EMU_TARGET = @EMU_TARGET@

all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) lib$(MODULE).$(LIBEXT) $(DLLDIR) $(EMU_TARGET)
	@echo "Wine build complete."

LIBLINTS = $(LIBOBJS:.o=.ln) 
EMULINTS = $(EMUOBJS:.o=.ln)

lint:: llib-lwine.ln $(EMULINTS)
	$(LINT) $(ALLLINTFLAGS) -L. -lwine $(EMULINTS)

WINAPI_CHECK_EXTRA_FLAGS = --global

@MAKE_RULES@

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

wine: lib$(MODULE).$(LIBEXT) $(DLLDIR) $(EMUOBJS)
	$(CC) -o wine $(EMUOBJS) $(DLL_LINK) $(LIBS)

llib-lwine.ln : $(LIBLINTS)
	$(LINT) $(ALLLINTFLAGS) -owine $(LIBLINTS)

install_so: lib$(MODULE).so.$(SOVERSION)
	[ -d $(libdir) ] || $(MKDIR) $(libdir)
	$(INSTALL_PROGRAM) lib$(MODULE).so.$(SOVERSION) $(libdir)/lib$(MODULE).so.$(SOVERSION)
	cd $(libdir) && $(RM) lib$(MODULE).so && $(LN_S) lib$(MODULE).so.$(SOVERSION) lib$(MODULE).so

install_a: lib$(MODULE).a
	[ -d $(libdir) ] || $(MKDIR) $(libdir)
	$(INSTALL_DATA) lib$(MODULE).a $(libdir)/lib$(MODULE).a

install_wine: wine
	[ -d $(bindir) ] || $(MKDIR) $(bindir)
	$(INSTALL_PROGRAM) wine $(bindir)/wine

install:: $(PROGRAMS) $(LIBPROGRAMS) $(EMU_TARGET:%=install_%) $(LIBEXT:%=install_%)
	[ -d $(bindir) ] || $(MKDIR) $(bindir)
	$(INSTALL_PROGRAM) server/wineserver $(bindir)/wineserver
	$(INSTALL_PROGRAM) loader/dos/dosmod $(bindir)/dosmod
	$(INSTALL_PROGRAM) debugger/winedbg $(bindir)/winedbg

uninstall::
	cd $(libdir) && $(RM) libwine.a libwine.so libwine.so.$(SOVERSION)
	cd $(bindir) && $(RM) wine wineserver dosmod winedbg

lib$(MODULE).so.$(SOVERSION): $(OBJS) Makefile.in Make.rules.in
	$(LDSHARED) $(OBJS) -o $@

lib$(MODULE).so: lib$(MODULE).so.$(SOVERSION)
	$(RM) $@ && $(LN_S) lib$(MODULE).so.$(SOVERSION) $@

lib$(MODULE).a: $(OBJS) Makefile.in Make.rules.in
	$(RM) $@
	$(AR) $@ $(OBJS)
	$(RANLIB) $@

checklink::
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -lwine $(LIBS) && $(RM) checklink

$(EMUOBJS) $(LIBOBJS) $(DLLOBJS) $(PROGRAMS) $(LIBPROGRAMS): $(TOOLSUBDIRS) dummy
	@cd `dirname $@` && $(MAKE) `basename $@`

$(DLLDIR): $(TOOLSUBDIRS) dummy

$(LIBPROGRAMS): lib$(MODULE).$(LIBEXT) $(DLLDIR)

$(LIBLINTS) $(EMULINTS): dummy
	@cd `dirname $@` && $(MAKE) lint

install_programs: dummy
	@cd programs && $(MAKE) install

uninstall_programs: dummy
	@cd programs && $(MAKE) uninstall

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

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

checklink::
	@cd dlls && $(MAKE) checklink

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::
	$(RM) wine libwine.so.1.0 TAGS

distclean: clean
	$(RM) config.* Make.rules dlls/Makedll.rules include/config.h documentation/wine.man documentation/wine.conf.man
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

# We depend on configure above for checks, so we better don't use this rule.
#configure: configure.in
#	autoconf

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

### Dependencies:
