# 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
# xmlpages:        compile xml source for the Wine API Guide

# Directories

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

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

# Sub-directories to run make install/uninstall into
INSTALLSUBDIRS = @ALL_TOP_DIRS@

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

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

WINAPI_CHECK_EXTRA_FLAGS = --global

INSTALLDIRS = $(DESTDIR)$(datadir)/aclocal

@MAKE_RULES@

$(SRCDIR)/configure: @MAINTAINER_MODE@ configure.ac aclocal.m4
	cd $(SRCDIR) && autoconf --warnings=all

$(SRCDIR)/include/config.h.in: @MAINTAINER_MODE@ include/stamp-h.in
$(SRCDIR)/include/stamp-h.in: configure.ac aclocal.m4
	cd $(SRCDIR) && autoheader --warnings=all
	@echo timestamp > $@

config.status: configure
	@./config.status --recheck

include/config.h: include/stamp-h
include/stamp-h: include/config.h.in config.status
	@./config.status include/config.h include/stamp-h

wine: $(WINEWRAPPER)
	$(RM) $@ && $(LN_S) $(WINEWRAPPER) $@

# Installation rules

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

uninstall::
	$(RM) $(DESTDIR)$(datadir)/aclocal/wine.m4
	-rmdir $(DESTDIR)$(datadir)/wine $(DESTDIR)$(datadir)/aclocal

# Dependencies between directories

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

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

RECURSE_TARGETS = \
	$(SUBDIRS) \
	$(SUBDIRS:%=%/__clean__) \
	$(SUBDIRS:%=%/__depend__) \
	$(SUBDIRS:%=%/__install-dev__) \
	$(SUBDIRS:%=%/__install-lib__) \
	$(SUBDIRS:%=%/__install__) \
	$(SUBDIRS:%=%/__uninstall__) \
	$(TESTSUBDIRS:%=%/__crosstest__) \
	$(TESTSUBDIRS:%=%/__test__) \
	$(TESTSUBDIRS:%=%/__testclean__)

depend $(RECURSE_TARGETS): $(MAKEDEP)

$(MAKEDEP): include/config.h
	@cd $(TOOLSDIR)/tools && $(MAKE) makedep

# Test rules

$(TESTSUBDIRS:%=%/__test__): wine
$(TESTSUBDIRS:%=%/__crosstest__): tools include

# Misc rules

TAGS etags:
	$(RM) TAGS
	(test -d .git && git ls-files '*.[chly]' '*.idl' || find -L $(TOPSRCDIR) -name '*.[ch]' -print) | xargs etags -a

tags ctags:
	$(RM) tags
	(test -d .git && git ls-files '*.[chly]' '*.idl' || find -L $(TOPSRCDIR) -name '*.[ch]' -print) | xargs ctags -a

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

distclean:: clean
	$(RM) config.* configure.lineno TAGS tags include/config.h include/stamp-h
	$(RM) -r autom4te.cache

.PHONY: manpages htmlpages sgmlpages xmlpages distclean

# Makefile rules

ALL_MAKERULES = @ALL_MAKERULES@
ALL_MAKEFILES = @ALL_MAKEFILES@

Makefile $(ALL_MAKERULES) $(ALL_MAKEFILES): config.status
	@./config.status $@
.INIT: Makefile
.BEGIN: Makefile
.MAKEFILEDEPS:

$(RECURSE_TARGETS) $(MAKEDEP): $(ALL_MAKEFILES)

distclean::
	$(RM) Makefile $(ALL_MAKERULES) $(ALL_MAKEFILES)

@ALL_MAKEFILE_DEPENDS@
