# 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__ 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

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

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

@ALL_MAKEFILE_DEPENDS@
