# This Makefile understands the following targets:
#
# all (default):   build wine
# clean:           remove all intermediate files
# distclean:       also remove all files created by configure
# test:            run tests
# testclean:       clean test results to force running all tests again
# 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@
LDCONFIG  = @LDCONFIG@
MODULE    = wine
LDIMPORTS = ntdll.dll

# Stand-alone programs
PROGRAMS = \
	server/wineserver

# Programs that link with libwine
LIBPROGRAMS = \
	debugger \
	programs

# Libraries (not dlls) to build
LIBRARIES = \
	library/libwine.$(LIBEXT) \
	ole/libwine_uuid.a \
	tsx11/libwine_tsx11.$(LIBEXT) \
	unicode/libwine_unicode.$(LIBEXT)

# Dlls that we need to link against (should go away)
LINKABLE_DLLS = user32.dll gdi32.dll kernel32.dll ntdll.dll

# Libraries symlinks to create at the top level
LIBSYMLINKS = \
	$(LINKABLE_DLLS:%=lib%.$(LIBEXT)) \
	libwine.$(LIBEXT) \
	libwine_tsx11.$(LIBEXT) \
	libwine_unicode.$(LIBEXT) \
	libwine_uuid.a

# Sub-directories to run make depend/clean into
SUBDIRS = \
	$(INSTALLSUBDIRS) \
	libtest \
	miscemu

# Sub-directories to run make install into
INSTALLSUBDIRS = \
	debugger \
	dlls \
	documentation \
	include \
	library \
	ole \
	programs \
	server \
	tools \
	tsx11 \
	unicode

# Sub-directories to run make test into
TESTSUBDIRS = \
	dlls \
	programs

EMUOBJS = \
	miscemu/miscemu.o

all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) $(LIBSYMLINKS) wine
	@echo "Wine build complete."

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: $(EMUOBJS) $(LDIMPORTS:%=lib%.$(LIBEXT)) library/libwine.$(LIBEXT) unicode/libwine_unicode.$(LIBEXT)
	$(CC) -o wine $(EMUOBJS) -L. $(LDIMPORTS:%=-l%) $(LIBWINE) $(LIBUNICODE) $(LIBS) $(LDFLAGS)

install_wine: dummy
	$(MKINSTALLDIRS) $(bindir)
	$(INSTALL_PROGRAM) wine $(bindir)/wine

install:: all install_wine $(INSTALLSUBDIRS:%=%/__install__)
	-$(LDCONFIG)

uninstall:: $(INSTALLSUBDIRS:%=%/__uninstall__)
	$(RM) $(bindir)/wine

$(EMUOBJS) $(PROGRAMS) $(LIBRARIES): dummy
	@cd `dirname $@` && $(MAKE) `basename $@`

# Symlinks to libraries that we need to link against

libwine.$(LIBEXT): library/libwine.$(LIBEXT)
	$(RM) $@ && $(LN_S) library/libwine.$(LIBEXT) $@

libwine_tsx11.$(LIBEXT): tsx11/libwine_tsx11.$(LIBEXT)
	$(RM) $@ && $(LN_S) tsx11/libwine_tsx11.$(LIBEXT) $@

libwine_unicode.$(LIBEXT): unicode/libwine_unicode.$(LIBEXT)
	$(RM) $@ && $(LN_S) unicode/libwine_unicode.$(LIBEXT) $@

libwine_uuid.a: ole/libwine_uuid.a
	$(RM) $@ && $(LN_S) ole/libwine_uuid.a $@

libuser32.dll.$(LIBEXT): dlls/user32.dll$(DLLEXT)
	$(RM) $@ && $(LN_S) dlls/user32.dll$(DLLEXT) $@

libgdi32.dll.$(LIBEXT): dlls/gdi32.dll$(DLLEXT)
	$(RM) $@ && $(LN_S) dlls/gdi32.dll$(DLLEXT) $@

libkernel32.dll.$(LIBEXT): dlls/kernel32.dll$(DLLEXT)
	$(RM) $@ && $(LN_S) dlls/kernel32.dll$(DLLEXT) $@

libntdll.dll.$(LIBEXT): dlls/ntdll.dll$(DLLEXT)
	$(RM) $@ && $(LN_S) dlls/ntdll.dll$(DLLEXT) $@

$(LINKABLE_DLLS:%=dlls/%$(DLLEXT)): dlls

# Dependencies between directories

$(PROGRAMS): tools

$(EMUOBJS): tools dlls

$(LIBPROGRAMS): tools dlls wine

server tools: $(LIBRARIES)

dlls: tools $(LIBRARIES)

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

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

test_environment: dummy
	@cd programs/winetest && $(MAKE) all

$(TESTSUBDIRS:%=%/__test__): test_environment

check test:: $(TESTSUBDIRS:%=%/__test__)

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

manpages:
	$(MKINSTALLDIRS) $(TOPOBJDIR)/documentation/man3w
	for i in $(SUBDIRS); do (cd $$i && $(MAKE) man); done

htmlpages:
	$(MKINSTALLDIRS) $(TOPOBJDIR)/documentation/html
	for i in $(SUBDIRS); do (cd $$i && $(MAKE) html); done

clean::
	$(RM) wine

distclean: clean
	$(RM) config.* TAGS Make.rules dlls/Makedll.rules programs/Makeprog.rules include/config.h
	$(RM) -r autom4te.cache
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

### Dependencies:
