# 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
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: 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 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@