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