# 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
# crosstest:       build tests as native windows applications (requires MinGW)
# install-lib:     install libraries needed to run applications
# install-dev:     install development environment
# install:         install everything
# uninstall:       uninstall everything
# depend:          create the dependencies
# etags:           create a TAGS file for Emacs.
# manpages:        compile manpages for Wine API
# htmlpages:       compile html pages for Wine API
# sgmlpages:       compile sgml source for the Wine API Guide

# Directories

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

FONTSSUBDIRS = @FONTSSUBDIRS@

# Sub-directories to run make depend/clean into
SUBDIRS = \
	dlls \
	documentation \
	fonts \
	include \
	libs \
	loader \
	programs \
	server \
	tools

# Sub-directories to install for install-lib
INSTALLLIBSUBDIRS = \
	$(FONTSSUBDIRS) \
	loader \
	programs \
	server

# Sub-directories to install for install-dev
INSTALLDEVSUBDIRS = include

# Sub-directories to install for both install-lib and install-dev
INSTALLBOTHSUBDIRS = dlls libs tools

INSTALLSUBDIRS = $(INSTALLDEVSUBDIRS) $(INSTALLLIBSUBDIRS)

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

all: Make.rules 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) $@

# Installation rules

install-aclocal: dummy
	$(MKINSTALLDIRS) $(DESTDIR)$(datadir)/aclocal
	$(INSTALL_DATA) $(SRCDIR)/aclocal.m4 $(DESTDIR)$(datadir)/aclocal/wine.m4

install-lib:: $(INSTALLLIBSUBDIRS:%=%/__install__) $(INSTALLBOTHSUBDIRS:%=%/__install-lib__)

install-dev:: $(INSTALLDEVSUBDIRS:%=%/__install__) $(INSTALLBOTHSUBDIRS:%=%/__install-dev__) install-aclocal

install:: install-lib install-dev install-aclocal

uninstall:: $(INSTALLBOTHSUBDIRS:%=%/__uninstall__)
	$(RM) $(DESTDIR)$(datadir)/aclocal/wine.m4
	-rmdir $(DESTDIR)$(datadir)/wine $(DESTDIR)$(datadir)/aclocal

.PHONY: install-aclocal

# Dependencies between directories

all: $(INSTALLSUBDIRS) $(INSTALLBOTHSUBDIRS)
dlls: include libs tools
fonts loader server: libs tools
programs: dlls include libs tools
include: libs tools
tools: libs

dlls/__install-lib__ dlls/__install-dev__: libs tools include
include/__install__: include libs tools
libs/__install-lib__ libs/__install-dev__: libs
fonts/__install__ loader/__install__ server/__install__: libs tools
programs/__install__: libs tools include dlls/__install-lib__
tools/__install-lib__ tools/__install-dev__: tools

$(SUBDIRS:%=%/__depend__): tools include

# Test rules

checklink:: $(TESTSUBDIRS:%=%/__checklink__)

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

crosstest:: $(TESTSUBDIRS:%=%/__crosstest__)
$(TESTSUBDIRS:%=%/__crosstest__): tools include

# Misc rules

TAGS etags:
	find $(TOPSRCDIR)/ -name '*.[ch]' -print | etags -

tags ctags:
	find $(TOPSRCDIR)/ -name '*.[ch]' -print | ctags --c-types=+px -L -

manpages htmlpages sgmlpages:
	cd documentation && $(MAKE) $@

clean::
	$(RM) wine

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

.PHONY: manpages htmlpages sgmlpages distclean

### Dependencies:
