makefiles: Move all the recursion rules to the top-level makefile.
diff --git a/Make.rules.in b/Make.rules.in
index 6a52a01..f658412 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -13,9 +13,7 @@
 # EXTRA_OBJS   : extra object files
 # IMPORTS      : dlls to import
 # DELAYIMPORTS : dlls to import in delayed mode
-# SUBDIRS      : subdirectories that contain a Makefile
 # EXTRASUBDIRS : subdirectories that do not contain a Makefile
-# INSTALLSUBDIRS : subdirectories to run make install/uninstall into
 # MODCFLAGS    : extra CFLAGS for this module
 
 # First some useful definitions
@@ -229,92 +227,29 @@
               $(IDL_GEN_C_SRCS) $(IDL_TLB_SRCS) $(IDL_TLB_SRCS:.idl=.tlb) \
               $(BISON_SRCS) $(LEX_SRCS) $(EXTRA_SRCS)
 
-$(SUBDIRS:%=%/__depend__): dummy
-	@cd `dirname $@` && $(MAKE) depend
-
-depend: $(SUBDIRS:%=%/__depend__) dummy
+depend: dummy
 	$(MAKEDEP) $(MAKEDEPFLAGS) -C$(SRCDIR) -S$(TOPSRCDIR) -T$(TOPOBJDIR) $(EXTRAINCL) $(DEPEND_SRCS)
 
-.PHONY: depend $(SUBDIRS:%=%/__depend__)
+.PHONY: depend
 
 # Rules for cleaning
 
-$(SUBDIRS:%=%/__clean__): dummy
-	@cd `dirname $@` && $(MAKE) clean
-
 $(EXTRASUBDIRS:%=%/__clean__): dummy
 	-cd `dirname $@` && $(RM) $(CLEAN_FILES)
 
-clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
+clean:: $(EXTRASUBDIRS:%=%/__clean__)
 	$(RM) $(CLEAN_FILES) $(CLEAN_TARGETS) $(PROGRAMS) $(MANPAGES)
 
-.PHONY: clean $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
+.PHONY: clean $(EXTRASUBDIRS:%=%/__clean__)
 
 # Rules for installing
 
-$(SUBDIRS:%=%/__install__): dummy
-	@cd `dirname $@` && $(MAKE) install
-
-$(SUBDIRS:%=%/__install-lib__): dummy
-	@cd `dirname $@` && $(MAKE) install-lib
-
-$(SUBDIRS:%=%/__install-dev__): dummy
-	@cd `dirname $@` && $(MAKE) install-dev
-
-$(SUBDIRS:%=%/__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
-
 $(INSTALLDIRS):
 	$(MKINSTALLDIRS) $@
 
-.PHONY: install install-lib install-dev uninstall \
-	$(SUBDIRS:%=%/__install__) $(SUBDIRS:%=%/__uninstall__) \
-	$(SUBDIRS:%=%/__install-lib__) $(SUBDIRS:%=%/__install-dev__)
+install install-lib install-dev uninstall::
 
-# Rules for testing
-
-$(TESTSUBDIRS:%=%/__test__): dummy
-	@cd `dirname $@` && $(MAKE) test
-
-$(TESTSUBDIRS:%=%/__crosstest__): dummy
-	@cd `dirname $@` && $(MAKE) crosstest
-
-$(TESTSUBDIRS:%=%/__testclean__): dummy
-	@cd `dirname $@` && $(MAKE) testclean
-
-check test:: $(TESTSUBDIRS:%=%/__test__) dummy
-
-crosstest:: $(TESTSUBDIRS:%=%/__crosstest__) dummy
-
-testclean:: $(TESTSUBDIRS:%=%/__testclean__) dummy
-
-.PHONY: check test testclean crosstest $(TESTSUBDIRS:%=%/__test__) $(TESTSUBDIRS:%=%/__crosstest__) $(TESTSUBDIRS:%=%/__testclean__) 
-
-# Rules for auto documentation
-
-$(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__)
-
-.PHONY: man doc-html doc-sgml doc-xml $(DOCSUBDIRS:%=%/__man__) $(DOCSUBDIRS:%=%/__doc_html__) $(DOCSUBDIRS:%=%/__doc_sgml__) $(DOCSUBDIRS:%=%/__doc_xml__)
+.PHONY: install install-lib install-dev uninstall
 
 # Misc. rules
 
@@ -324,11 +259,8 @@
 
 $(RC_SRCS:.rc=.res) $(MC_SRCS:.mc=.mc.res): $(WRC)
 
-$(SUBDIRS): dummy
-	@cd $@ && $(MAKE)
-
 dummy:
 
-.PHONY: dummy $(SUBDIRS)
+.PHONY: dummy
 
 # End of global rules
diff --git a/Makefile.in b/Makefile.in
index eaf9fa6..059fb6c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -36,9 +36,6 @@
 ALL_TOOL_DIRS      = @ALL_TOOL_DIRS@
 ALL_TOP_DIRS       = @ALL_TOP_DIRS@
 
-# Sub-directories to run make depend/clean into
-SUBDIRS = $(ALL_DIRS)
-
 # Sub-directories to run make all into
 BUILDSUBDIRS = \
 	libs/wine \
@@ -58,12 +55,6 @@
 	$(ALL_DLL_DIRS) \
 	$(ALL_INSTALL_DIRS)
 
-# Sub-directories to run make test into
-TESTSUBDIRS = $(ALL_TEST_DIRS)
-
-# Sub-directories that contain documentation
-DOCSUBDIRS = $(ALL_DLL_DIRS)
-
 # Sub-directories that don't have a makefile
 EXTRASUBDIRS = dlls libs
 
@@ -74,6 +65,10 @@
 
 @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
 
@@ -89,12 +84,110 @@
 include/stamp-h: include/config.h.in config.status
 	@./config.status include/config.h include/stamp-h
 
-# Installation rules
+$(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)
 
-# Import libraries
+# 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@
@@ -104,8 +197,6 @@
 
 # Dependencies between directories
 
-all: $(BUILDSUBDIRS)
-
 # dependencies needed to build any dll or program
 __builddeps__: libs/port libs/wine libs/wpp $(ALL_TOOL_DIRS) include $(ALL_STATICLIB_DIRS) $(IMPORT_LIBS)
 __buildcrossdeps__: libs/port libs/wine $(ALL_TOOL_DIRS) include $(STATIC_LIBS:.a=.cross.a) $(IMPORT_LIBS:.def=.cross.a)
@@ -142,8 +233,6 @@
 	__uninstall__ \
 	__crosstest__
 
-depend: $(MAKEDEP)
-
 $(MAKEDEP): include/config.h tools/Makefile
 	@cd $(TOOLSDIR)/tools && $(MAKE) makedep$(TOOLSEXT)
 
@@ -157,26 +246,10 @@
 	$(RM) tags
 	(test -d .git && git ls-files '*.[chly]' '*.idl' || find -L $(TOPSRCDIR) -name '*.[ch]' -print) | xargs ctags -a
 
-manpages htmlpages sgmlpages xmlpages: 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 xmlpages distclean
-
 # Makefile rules
 
-ALL_CONFIGS = Makefile $(ALL_DIRS:%=%/Makefile) @ALL_MAKERULES@ @ALL_SYMLINKS@
-
-$(ALL_CONFIGS):
-	@./config.status $@
 .INIT: Makefile
 .BEGIN: Makefile
 .MAKEFILEDEPS:
 
-distclean::
-	$(RM) $(ALL_CONFIGS)
-
 @ALL_MAKEFILE_DEPENDS@
diff --git a/Maketest.rules.in b/Maketest.rules.in
index 2cd642b..49d799a 100644
--- a/Maketest.rules.in
+++ b/Maketest.rules.in
@@ -31,6 +31,8 @@
 $(MODULE) $(MODULE).so: $(OBJS) Makefile.in
 	$(WINEGCC) $(APPMODE) $(OBJS) -o $@ $(LIBPORT) $(ALL_LIBS)
 
+.PHONY: check test testclean crosstest
+
 # Rules for building test list
 
 testlist.c: Makefile.in $(MAKECTESTS)
diff --git a/dlls/Makedll.rules.in b/dlls/Makedll.rules.in
index c3c8c67..2269659 100644
--- a/dlls/Makedll.rules.in
+++ b/dlls/Makedll.rules.in
@@ -21,7 +21,7 @@
 
 @MAKE_RULES@
 
-all: $(MODULE)$(DLLEXT) $(MODULE)$(FAKEEXT) $(SUBDIRS)
+all: $(MODULE)$(DLLEXT) $(MODULE)$(FAKEEXT)
 
 $(MODULE) $(MODULE).so $(MODULE).fake: $(MAINSPEC) $(OBJS) Makefile.in
 	$(WINEGCC) -shared $(SRCDIR)/$(MAINSPEC) $(OBJS) $(EXTRADLLFLAGS) -o $@ $(DELAYIMPORTS:%=-l%) $(IMPORTS:%=-l%) $(DELAYIMPORTS:%=-Wb,-d%) $(ALL_LIBS)
@@ -30,9 +30,9 @@
 
 IMPLIB_CROSSOBJS = $(IMPLIB_OBJS:.o=.cross.o)
 
-.PHONY: implib $(IMPLIB_SRCS:%=__static_implib__%)
+.PHONY: $(IMPLIB_SRCS:%=__static_implib__%)
 
-all implib: $(IMPORTLIBFILE) $(IMPLIB_SRCS:%=__static_implib__%)
+all: $(IMPORTLIBFILE) $(IMPLIB_SRCS:%=__static_implib__%)
 
 $(IMPLIB_SRCS:%=__static_implib__%): $(STATICIMPLIB)
 
@@ -50,14 +50,6 @@
 $(IMPORTLIB:%=lib%.cross.a): $(MAINSPEC) $(IMPLIB_CROSSOBJS)
 	$(WINEBUILD) $(IMPLIBFLAGS) $(CROSSTARGET:%=-b %) -w --implib -o $@ --export $(SRCDIR)/$(MAINSPEC) $(IMPLIB_CROSSOBJS)
 
-$(SUBDIRS): implib
-
-# Rules for testing
-
-check test:: $(SUBDIRS:%=%/__test__) dummy
-
-crosstest:: $(SUBDIRS:%=%/__crosstest__) dummy
-
 # Rules for auto documentation
 
 man: $(C_SRCS) dummy
diff --git a/programs/Makeprog.rules.in b/programs/Makeprog.rules.in
index 77119e8..9eb832b 100644
--- a/programs/Makeprog.rules.in
+++ b/programs/Makeprog.rules.in
@@ -12,7 +12,6 @@
 DLLFLAGS    = @DLLFLAGS@
 DEFS        = -DWINE_STRICT_PROTOTYPES $(EXTRADEFS)
 ALL_LIBS    = $(DELAYIMPORTS:%=-l%) $(IMPORTS:%=-l%) $(EXTRALIBS) -lwine $(LIBPORT) $(LDFLAGS) $(LIBS)
-RUNTESTFLAGS= -q -P wine -T $(TOPOBJDIR)
 INSTALLDIRS = $(DESTDIR)$(bindir) $(DESTDIR)$(dlldir) $(DESTDIR)$(fakedlldir) $(DESTDIR)$(mandir)/man$(prog_manext)
 
 @MAKE_RULES@
@@ -22,12 +21,6 @@
 $(MODULE) $(MODULE).so $(MODULE).fake: $(OBJS) Makefile.in
 	$(WINEGCC) $(APPMODE) $(OBJS) -o $@ $(ALL_LIBS) $(DELAYIMPORTS:%=-Wb,-d%)
 
-# Rules for testing
-
-check test:: $(SUBDIRS:%=%/__test__) dummy
-
-$(TESTRESULTS): $(MODULE)$(DLLEXT)
-
 # Rules for installation
 
 .PHONY: install_prog install_prog.so install_prog.fake