# 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_DIRS:%=%/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

$(ALL_DIRS:%=%/__depend__): dummy
	@cd `dirname $@` && $(MAKE) depend

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

# Rules for cleaning

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

clean:: $(ALL_DIRS:%=%/__clean__)

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

$(ALL_TEST_DIRS:%=%/__testclean__): dummy
	@cd `dirname $@` && $(MAKE) testclean

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

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

# 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

RECURSE_TARGETS = \
	__clean__ \
	__depend__ \
	__install__ \
	__instal-dev__ \
	__install-lib__ \
	__uninstall__ \
	__crosstest__

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