# 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    = none

# Sub-directories containing stand-alone programs
PROGSUBDIRS = \
	server

# Sub-directories containing programs that use some Wine dlls
LIBPROGSUBDIRS = \
	miscemu \
	programs

# Sub-directories containing libraries (not dlls) to build
LIBSUBDIRS = \
	library \
	ole \
	tsx11 \
	unicode

# Sub-directories to run make depend/clean/install into
SUBDIRS = \
	$(LIBPROGSUBDIRS) \
	$(LIBSUBDIRS) \
	$(PROGSUBDIRS) \
	dlls \
	documentation \
	include \
	tools

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

EMUOBJS = \
	miscemu/miscemu.o

all: Make.rules $(PROGSUBDIRS) $(LIBPROGSUBDIRS) 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: $(WINEWRAPPER)
	$(RM) $@ && $(LN_S) $(WINEWRAPPER) $@

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

uninstall:: $(SUBDIRS:%=%/__uninstall__)

# Dependencies between directories

$(LIBPROGSUBDIRS): tools dlls $(LIBSUBDIRS)

$(PROGSUBDIRS): tools $(LIBSUBDIRS)

dlls: tools $(LIBSUBDIRS)

tools: $(LIBSUBDIRS)

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

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

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

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

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

TAGS etags:
	etags `find $(TOPSRCDIR) -name '*.[ch]' -a -not -name '*.spec.c' -a -not -name '*.glue.c' -a -not -name '*.dbg.c' -print`

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:
