# 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

ALL_DIRS           = @ALL_DIRS@
ALL_DLL_DIRS       = @ALL_DLL_DIRS@
ALL_INSTALL_DIRS   = @ALL_INSTALL_DIRS@
ALL_PROGRAM_DIRS   = @ALL_PROGRAM_DIRS@
ALL_STATICLIB_DIRS = @ALL_STATICLIB_DIRS@
ALL_TEST_DIRS      = @ALL_TEST_DIRS@
ALL_TOOL_DIRS      = @ALL_TOOL_DIRS@
ALL_TOP_DIRS       = @ALL_TOP_DIRS@

# Sub-directories to run make all into
BUILDSUBDIRS = \
	libs/wine \
	$(ALL_TOOL_DIRS) \
	$(ALL_TOP_DIRS) \
	$(ALL_STATICLIB_DIRS) \
	$(ALL_DLL_DIRS) \
	$(ALL_PROGRAM_DIRS) \
	$(ALL_TEST_DIRS)

# Sub-directories to run make install/uninstall into
INSTALLSUBDIRS = \
	libs/wine \
	$(ALL_TOOL_DIRS) \
	$(ALL_TOP_DIRS) \
	$(ALL_STATICLIB_DIRS) \
	$(ALL_DLL_DIRS) \
	$(ALL_INSTALL_DIRS)

# Sub-directories that don't have a makefile
EXTRASUBDIRS = dlls libs

all: wine
	@echo "Wine build complete."

WINAPI_CHECK_EXTRA_FLAGS = --global

@MAKE_RULES@

# Rules for re-running configure

ALL_CONFIGS = Makefile @ALL_MAKERULES@ @ALL_SYMLINKS@

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

$(ALL_CONFIGS):
	@./config.status $@

# Rules for building

all: $(BUILDSUBDIRS)

$(ALL_DIRS): dummy
	@cd $@ && $(MAKE)

.PHONY: $(ALL_DIRS)

# Rules for dependencies

depend: $(ALL_DIRS:%=%/__depend__) dummy
.PHONY: $(ALL_DIRS:%=%/__depend__)

# Rules for cleaning

$(ALL_DIRS:%=%/__clean__): dummy
	@cd `dirname $@` && $(MAKE) clean

clean:: $(ALL_DIRS:%=%/__clean__)
	$(RM) $(ALL_DIRS:%=%/Makefile) tools/makedep$(EXEEXT)

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

.PHONY: distclean $(ALL_DIRS:%=%/__clean__)

# Rules for installing

$(INSTALLSUBDIRS:%=%/__install__): dummy
	@cd `dirname $@` && $(MAKE) install

$(INSTALLSUBDIRS:%=%/__install-lib__): dummy
	@cd `dirname $@` && $(MAKE) install-lib

$(INSTALLSUBDIRS:%=%/__install-dev__): dummy
	@cd `dirname $@` && $(MAKE) install-dev

$(INSTALLSUBDIRS:%=%/__uninstall__): dummy
	@cd `dirname $@` && $(MAKE) uninstall

install:: $(INSTALLSUBDIRS:%=%/__install__) dummy
install-lib:: $(INSTALLSUBDIRS:%=%/__install-lib__) dummy
install-dev:: $(INSTALLSUBDIRS:%=%/__install-dev__) dummy
uninstall:: $(INSTALLSUBDIRS:%=%/__uninstall__) dummy

.PHONY: $(INSTALLSUBDIRS:%=%/__install__) $(INSTALLSUBDIRS:%=%/__uninstall__) \
	$(INSTALLSUBDIRS:%=%/__install-lib__) $(INSTALLSUBDIRS:%=%/__install-dev__)

uninstall::
	-rmdir $(DESTDIR)$(datadir)/wine $(DESTDIR)$(fakedlldir) $(DESTDIR)$(dlldir)

# Rules for testing

$(ALL_TEST_DIRS:%=%/__test__): dummy
	@cd `dirname $@` && $(MAKE) test

$(ALL_TEST_DIRS:%=%/__crosstest__): dummy
	@cd `dirname $@` && $(MAKE) crosstest

check test:: $(ALL_TEST_DIRS:%=%/__test__)
crosstest:: $(ALL_TEST_DIRS:%=%/__crosstest__)

testclean::
	$(RM) $(ALL_TEST_DIRS:%=%/*.ok)

.PHONY: check test testclean crosstest $(ALL_TEST_DIRS:%=%/__test__) $(ALL_TEST_DIRS:%=%/__crosstest__)

# Rules for auto documentation

DOCSUBDIRS = $(ALL_DLL_DIRS)

$(DOCSUBDIRS:%=%/__man__): dummy
	@cd `dirname $@` && $(MAKE) man

$(DOCSUBDIRS:%=%/__doc_html__): dummy
	@cd `dirname $@` && $(MAKE) doc-html

$(DOCSUBDIRS:%=%/__doc_sgml__): dummy
	@cd `dirname $@` && $(MAKE) doc-sgml

$(DOCSUBDIRS:%=%/__doc_xml__): dummy
	@cd `dirname $@` && $(MAKE) doc-xml

man: $(DOCSUBDIRS:%=%/__man__)
doc-html: $(DOCSUBDIRS:%=%/__doc_html__)
doc-sgml: $(DOCSUBDIRS:%=%/__doc_sgml__)
doc-xml: $(DOCSUBDIRS:%=%/__doc_xml__)

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

.PHONY: man doc-html doc-sgml doc-xml manpages htmlpages sgmlpages xmlpages \
	$(DOCSUBDIRS:%=%/__man__) $(DOCSUBDIRS:%=%/__doc_html__) $(DOCSUBDIRS:%=%/__doc_sgml__) $(DOCSUBDIRS:%=%/__doc_xml__)

# Rules for import libraries

STATIC_LIBS = @ALL_STATIC_LIBS@
IMPORT_LIBS = @ALL_IMPORT_LIBS@

implib: $(ALL_STATICLIB_DIRS) $(IMPORT_LIBS)
.PHONY: implib

# Dependencies between directories

# dependencies needed to build any dll or program
__tooldeps__: libs/port libs/wine libs/wpp $(ALL_TOOL_DIRS)
__builddeps__: __tooldeps__ include $(ALL_STATICLIB_DIRS) $(IMPORT_LIBS)
__buildcrossdeps__: __tooldeps__ include $(STATIC_LIBS:.a=.cross.a) $(IMPORT_LIBS:.def=.cross.a)
.PHONY: __tooldeps__ __builddeps__ __buildcrossdeps__

loader server: libs/port libs/wine tools
fonts: tools
include: tools/widl
programs/winetest: $(ALL_TEST_DIRS)
libs/wine $(ALL_TOOL_DIRS): libs/port
tools/wmc tools/wrc: tools
tools tools/wmc tools/wrc: libs/wine
tools/widl tools/wmc tools/wrc: libs/wpp

fonts/__install__ fonts/__install-lib__: tools
include/__install__ include/__install-dev__: include
libs/wine/__install__ libs/wine/__install-lib__ libs/wine/__install-dev__: libs/wine
loader/__install__ loader/__install-lib__: libs/port libs/wine tools
server/__install__ server/__install-lib__: libs/port libs/wine tools
tools/__install__ tools/__install-lib__ tools/__install-dev__: tools
tools/widl/__install__ tools/widl/__install-dev__: tools/widl
tools/winebuild/__install__ tools/winebuild/__install-dev__: tools/winebuild
tools/winedump/__install__ tools/winedump/__install-dev__: tools/winedump
tools/winegcc/__install__ tools/winegcc/__install-dev__: tools/winegcc
tools/wmc/__install__ tools/wmc/__install-dev__: tools/wmc
tools/wrc/__install__ tools/wrc/__install-dev__: tools/wrc
tools/__depend__: $(MAKEDEP)

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

# 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

# Makefile rules

.INIT: Makefile
.BEGIN: Makefile
.MAKEFILEDEPS:

@ALL_MAKEFILE_DEPENDS@
