# 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

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 $(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

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

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

uninstall:: $(INSTALLBOTHSUBDIRS:%=%/__uninstall__)
	$(RM) $(DESTDIR)$(datadir)/aclocal/wine.m4
	-rmdir $(DESTDIR)$(datadir)/wine $(DESTDIR)$(datadir)/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

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

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

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

@ALL_MAKEFILE_DEPENDS@
