# 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
# ctags:           create a tags file for vim and others.
# 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:
