Improved make_dlls script. Moved dll list out of
Make.rules.in. Removed a few no longer used rules.

diff --git a/dlls/Makedll.rules.in b/dlls/Makedll.rules.in
index 2f3a51d..23d1c83 100644
--- a/dlls/Makedll.rules.in
+++ b/dlls/Makedll.rules.in
@@ -13,12 +13,11 @@
 LIBEXT     = @LIBEXT@
 SONAME     = lib$(MODULE).so
 IMPORTLIBS = $(IMPORTS:%=$(DLLDIR)/lib%.$(LIBEXT))
-ALLNAMES   = lib$(MODULE).so $(ALTNAMES:%=lib%.so)
 SPEC_SRCS  = $(ALTNAMES:%=%.spec)
 ALL_OBJS   = $(MODULE).spec.o $(OBJS)
 ALL_LIBS   = $(LIBWINE) $(EXTRALIBS) $(LIBS)
 
-all: lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT))
+all: lib$(MODULE).$(LIBEXT)
 
 @MAKE_RULES@
 
@@ -27,17 +26,8 @@
 lib$(MODULE).so: $(ALL_OBJS) Makefile.in
 	$(LDSHARED) $(LDDLLFLAGS) $(ALL_OBJS) -o $@ -L$(DLLDIR) $(IMPORTS:%=-l%) $(ALL_LIBS)
 
-$(ALTNAMES:%=lib%.$(LIBEXT)): lib$(MODULE).$(LIBEXT)
-	$(RM) $@ && $(LN_S) lib$(MODULE).$(LIBEXT) $@
-
-# Rules for .a files
-
-lib$(MODULE).a: $(ALL_OBJS) Makefile.in
-	$(RM) $@
-	$(AR) $@ $(ALL_OBJS)
-	$(RANLIB) $@
-
 # Rules for .dll files
+
 lib$(MODULE).dll: $(ALL_OBJS) Makefile.in
 	$(DLLWRAP) $(DLLWRAPFLAGS) --implib lib$(MODULE).a -o lib$(MODULE).dll $(ALL_OBJS) -L$(DLLDIR) $(IMPORTS:%=-l%) $(ALL_LIBS)
 
@@ -59,20 +49,18 @@
 
 # Rules for installation
 
-.PHONY: install_so install_a
+.PHONY: install_lib $(ALTNAMES:%=_install_/lib%.$(LIBEXT))
 
-$(ALTNAMES:%=_install_/lib%.$(LIBEXT)): $(LIBEXT:%=install_%)
+$(ALTNAMES:%=_install_/lib%.$(LIBEXT)): install_lib
 	cd $(libdir) && $(RM) `basename $@` && $(LN_S) lib$(MODULE).$(LIBEXT) `basename $@`
 
-install_so: lib$(MODULE).so
+install_lib: lib$(MODULE).$(LIBEXT)
 	[ -d $(libdir) ] || $(MKDIR) $(libdir)
-	$(INSTALL_PROGRAM) lib$(MODULE).so $(libdir)/lib$(MODULE).so
+	$(INSTALL_PROGRAM) lib$(MODULE).$(LIBEXT) $(libdir)/lib$(MODULE).$(LIBEXT)
 
-install_a: lib$(MODULE).a
-	[ -d $(libdir) ] || $(MKDIR) $(libdir)
-	$(INSTALL_DATA) lib$(MODULE).a $(libdir)/lib$(MODULE).a
-
-install:: $(LIBEXT:%=install_%) $(ALTNAMES:%=_install_/lib%.$(LIBEXT))
+install:: install_lib $(ALTNAMES:%=_install_/lib%.$(LIBEXT))
 
 uninstall::
 	cd $(libdir) && $(RM) lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT))
+
+# End of global dll rules
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index 8352ba9..3a8a137 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -1,155 +1,33 @@
+# Automatically generated by make_dlls; DO NOT EDIT!!
+
 TOPSRCDIR = @top_srcdir@
 TOPOBJDIR = ..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
+LIBEXT    = @LIBEXT@
 
-GLU32FILES= \
-	glu32/libglu32.@LIBEXT@
+# special configure-dependent targets
 
-OPENGLFILES= \
-	@GLU32FILES@ \
-	opengl32/libopengl32.@LIBEXT@
+GLU32FILES = glu32
+OPENGLFILES = opengl32
+XFILES = ddraw x11drv
+EXTRADIRS = @GLU32FILES@ @OPENGLFILES@ @XFILES@
 
-XFILES = \
-	ddraw/libddraw.@LIBEXT@ \
-	@OPENGLFILES@ \
-	x11drv/libx11drv.@LIBEXT@
-
-DLLFILES = \
-	@XFILES@ \
-	advapi32/libadvapi32.@LIBEXT@ \
-	avifil32/libavifil32.@LIBEXT@ \
-	comctl32/libcomctl32.@LIBEXT@ \
-	commdlg/libcomdlg32.@LIBEXT@ \
-	crtdll/libcrtdll.@LIBEXT@ \
-	dciman32/libdciman32.@LIBEXT@ \
-	dinput/libdinput.@LIBEXT@ \
-	dplay/libdplay.@LIBEXT@ \
-	dplayx/libdplayx.@LIBEXT@ \
-	dsound/libdsound.@LIBEXT@ \
-	gdi/libgdi32.@LIBEXT@ \
-	icmp/libicmp.@LIBEXT@ \
-	imagehlp/libimagehlp.@LIBEXT@ \
-	imm32/libimm32.@LIBEXT@ \
-	kernel/libkernel32.@LIBEXT@ \
-	lzexpand/liblz32.@LIBEXT@ \
-	mapi32/libmapi32.@LIBEXT@ \
-	mpr/libmpr.@LIBEXT@ \
-	msacm/libmsacm32.@LIBEXT@ \
-	msimg32/libmsimg32.@LIBEXT@ \
-	msnet32/libmsnet32.@LIBEXT@ \
-	msvcrt/libmsvcrt.@LIBEXT@ \
-	msvideo/libmsvfw32.@LIBEXT@ \
-	ntdll/libntdll.@LIBEXT@ \
-	odbc32/libodbc32.@LIBEXT@ \
-	ole32/libole32.@LIBEXT@ \
-	oleaut32/liboleaut32.@LIBEXT@ \
-	olecli/libolecli32.@LIBEXT@ \
-	oledlg/liboledlg.@LIBEXT@ \
-	olepro32/libolepro32.@LIBEXT@ \
-	olesvr/libolesvr32.@LIBEXT@ \
-	psapi/libpsapi.@LIBEXT@ \
-	quartz/libquartz.@LIBEXT@ \
-	rasapi32/librasapi32.@LIBEXT@ \
-	richedit/libriched32.@LIBEXT@ \
-	rpcrt4/librpcrt4.@LIBEXT@ \
-	serialui/libserialui.@LIBEXT@ \
-	setupapi/libsetupapi.@LIBEXT@ \
-	shdocvw/libshdocvw.@LIBEXT@ \
-	shell32/libshell32.@LIBEXT@ \
-	shfolder/libshfolder.@LIBEXT@ \
-	shlwapi/libshlwapi.@LIBEXT@ \
-	sti/libsti.@LIBEXT@ \
-	tapi32/libtapi32.@LIBEXT@ \
-	ttydrv/libttydrv.@LIBEXT@ \
-	url/liburl.@LIBEXT@ \
-	urlmon/liburlmon.@LIBEXT@ \
-	user/libuser32.@LIBEXT@ \
-	version/libversion.@LIBEXT@ \
-	win32s/libw32skrnl.@LIBEXT@ \
-	winaspi/libwnaspi32.@LIBEXT@ \
-	winedos/libwinedos.@LIBEXT@ \
-	wineps/libwineps.@LIBEXT@ \
-	wininet/libwininet.@LIBEXT@ \
-	winmm/joystick/libjoystick.drv.@LIBEXT@ \
-	winmm/libwinmm.@LIBEXT@ \
-	winmm/mcianim/libmcianim.drv.@LIBEXT@ \
-	winmm/mciavi/libmciavi.drv.@LIBEXT@ \
-	winmm/mcicda/libmcicda.drv.@LIBEXT@ \
-	winmm/mciseq/libmciseq.drv.@LIBEXT@ \
-	winmm/mciwave/libmciwave.drv.@LIBEXT@ \
-	winmm/midimap/libmidimap.drv.@LIBEXT@ \
-	winmm/wavemap/libmsacm.drv.@LIBEXT@ \
-	winmm/wineoss/libwineoss.drv.@LIBEXT@ \
-	winnls/libwinnls32.@LIBEXT@ \
-	winsock/libws2_32.@LIBEXT@ \
-	winspool/libwinspool.drv.@LIBEXT@ \
-	wintrust/libwintrust.@LIBEXT@ \
-	wow32/libwow32.@LIBEXT@ \
-	wsock32/libwsock32.@LIBEXT@
-
-# extra names for dlls containing multiple spec files
-EXTRADLLNAMES = \
-	avifile \
-	comm \
-	commdlg \
-	compobj \
-	ddeml \
-	dispdib \
-	display \
-	gdi \
-	imm \
-	kernel \
-	keyboard \
-	lzexpand \
-	mmsystem \
-	mouse \
-	msacm \
-	msvideo \
-	ole2 \
-	ole2conv \
-	ole2disp \
-	ole2nls \
-	ole2prox \
-	ole2thk \
-	olecli \
-	olesvr \
-	rasapi16 \
-	setupx \
-	shell \
-	sound \
-	storage \
-	stress \
-	system \
-	toolhelp \
-	typelib \
-	user \
-	ver \
-	w32sys \
-	win32s16 \
-	win87em \
-	winaspi \
-	windebug \
-	wineps16 \
-	wing \
-	winnls \
-	winsock \
-	wprocs
+# Subdir list
 
 SUBDIRS = \
+	$(EXTRADIRS) \
 	advapi32 \
 	avifil32 \
 	comctl32 \
 	commdlg \
 	crtdll \
 	dciman32 \
-	ddraw \
 	dinput \
 	dplay \
 	dplayx \
 	dsound \
 	gdi \
-	glu32 \
 	icmp \
 	imagehlp \
 	imm32 \
@@ -170,7 +48,6 @@
 	oledlg \
 	olepro32 \
 	olesvr \
-	opengl32 \
 	psapi \
 	quartz \
 	rasapi32 \
@@ -209,330 +86,643 @@
 	winspool \
 	wintrust \
 	wow32 \
-	wsock32 \
-	x11drv
+	wsock32
+
+# Main target
+
+all: \
+	$(EXTRADIRS:%=lib%.$(LIBEXT)) \
+	libadvapi32.$(LIBEXT) \
+	libavifil32.$(LIBEXT) \
+	libavifile.$(LIBEXT) \
+	libcomctl32.$(LIBEXT) \
+	libcomdlg32.$(LIBEXT) \
+	libcomm.$(LIBEXT) \
+	libcommdlg.$(LIBEXT) \
+	libcompobj.$(LIBEXT) \
+	libcrtdll.$(LIBEXT) \
+	libdciman32.$(LIBEXT) \
+	libddeml.$(LIBEXT) \
+	libdinput.$(LIBEXT) \
+	libdispdib.$(LIBEXT) \
+	libdisplay.$(LIBEXT) \
+	libdplay.$(LIBEXT) \
+	libdplayx.$(LIBEXT) \
+	libdsound.$(LIBEXT) \
+	libgdi.$(LIBEXT) \
+	libgdi32.$(LIBEXT) \
+	libicmp.$(LIBEXT) \
+	libimagehlp.$(LIBEXT) \
+	libimm.$(LIBEXT) \
+	libimm32.$(LIBEXT) \
+	libjoystick.drv.$(LIBEXT) \
+	libkernel.$(LIBEXT) \
+	libkernel32.$(LIBEXT) \
+	libkeyboard.$(LIBEXT) \
+	liblz32.$(LIBEXT) \
+	liblzexpand.$(LIBEXT) \
+	libmapi32.$(LIBEXT) \
+	libmcianim.drv.$(LIBEXT) \
+	libmciavi.drv.$(LIBEXT) \
+	libmcicda.drv.$(LIBEXT) \
+	libmciseq.drv.$(LIBEXT) \
+	libmciwave.drv.$(LIBEXT) \
+	libmidimap.drv.$(LIBEXT) \
+	libmmsystem.$(LIBEXT) \
+	libmouse.$(LIBEXT) \
+	libmpr.$(LIBEXT) \
+	libmsacm.$(LIBEXT) \
+	libmsacm.drv.$(LIBEXT) \
+	libmsacm32.$(LIBEXT) \
+	libmsimg32.$(LIBEXT) \
+	libmsnet32.$(LIBEXT) \
+	libmsvcrt.$(LIBEXT) \
+	libmsvfw32.$(LIBEXT) \
+	libmsvideo.$(LIBEXT) \
+	libntdll.$(LIBEXT) \
+	libodbc32.$(LIBEXT) \
+	libole2.$(LIBEXT) \
+	libole2conv.$(LIBEXT) \
+	libole2disp.$(LIBEXT) \
+	libole2nls.$(LIBEXT) \
+	libole2prox.$(LIBEXT) \
+	libole2thk.$(LIBEXT) \
+	libole32.$(LIBEXT) \
+	liboleaut32.$(LIBEXT) \
+	libolecli.$(LIBEXT) \
+	libolecli32.$(LIBEXT) \
+	liboledlg.$(LIBEXT) \
+	libolepro32.$(LIBEXT) \
+	libolesvr.$(LIBEXT) \
+	libolesvr32.$(LIBEXT) \
+	libpsapi.$(LIBEXT) \
+	libquartz.$(LIBEXT) \
+	librasapi16.$(LIBEXT) \
+	librasapi32.$(LIBEXT) \
+	libriched32.$(LIBEXT) \
+	librpcrt4.$(LIBEXT) \
+	libserialui.$(LIBEXT) \
+	libsetupapi.$(LIBEXT) \
+	libsetupx.$(LIBEXT) \
+	libshdocvw.$(LIBEXT) \
+	libshell.$(LIBEXT) \
+	libshell32.$(LIBEXT) \
+	libshfolder.$(LIBEXT) \
+	libshlwapi.$(LIBEXT) \
+	libsound.$(LIBEXT) \
+	libsti.$(LIBEXT) \
+	libstorage.$(LIBEXT) \
+	libstress.$(LIBEXT) \
+	libsystem.$(LIBEXT) \
+	libtapi32.$(LIBEXT) \
+	libtoolhelp.$(LIBEXT) \
+	libttydrv.$(LIBEXT) \
+	libtypelib.$(LIBEXT) \
+	liburl.$(LIBEXT) \
+	liburlmon.$(LIBEXT) \
+	libuser.$(LIBEXT) \
+	libuser32.$(LIBEXT) \
+	libver.$(LIBEXT) \
+	libversion.$(LIBEXT) \
+	libw32skrnl.$(LIBEXT) \
+	libw32sys.$(LIBEXT) \
+	libwin32s16.$(LIBEXT) \
+	libwin87em.$(LIBEXT) \
+	libwinaspi.$(LIBEXT) \
+	libwindebug.$(LIBEXT) \
+	libwinedos.$(LIBEXT) \
+	libwineoss.drv.$(LIBEXT) \
+	libwineps.$(LIBEXT) \
+	libwineps16.$(LIBEXT) \
+	libwing.$(LIBEXT) \
+	libwininet.$(LIBEXT) \
+	libwinmm.$(LIBEXT) \
+	libwinnls.$(LIBEXT) \
+	libwinnls32.$(LIBEXT) \
+	libwinsock.$(LIBEXT) \
+	libwinspool.drv.$(LIBEXT) \
+	libwintrust.$(LIBEXT) \
+	libwnaspi32.$(LIBEXT) \
+	libwow32.$(LIBEXT) \
+	libwprocs.$(LIBEXT) \
+	libws2_32.$(LIBEXT) \
+	libwsock32.$(LIBEXT)
 
 @MAKE_RULES@
 
-all: $(DLLS:%=lib%.@LIBEXT@) $(EXTRADLLNAMES:%=lib%.@LIBEXT@)
-
 # Map library name to directory
 
-libadvapi32.@LIBEXT@: advapi32/libadvapi32.@LIBEXT@
-	$(RM) $@ && $(LN_S) advapi32/libadvapi32.@LIBEXT@ $@
+libadvapi32.$(LIBEXT): advapi32/libadvapi32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) advapi32/libadvapi32.$(LIBEXT) $@
 
-libavifil32.@LIBEXT@ libavifile.@LIBEXT@: avifil32/libavifil32.@LIBEXT@
-	$(RM) $@ && $(LN_S) avifil32/libavifil32.@LIBEXT@ $@
+libavifil32.$(LIBEXT) libavifile.$(LIBEXT): avifil32/libavifil32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) avifil32/libavifil32.$(LIBEXT) $@
 
-libcomctl32.@LIBEXT@: comctl32/libcomctl32.@LIBEXT@
-	$(RM) $@ && $(LN_S) comctl32/libcomctl32.@LIBEXT@ $@
+libcomctl32.$(LIBEXT): comctl32/libcomctl32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) comctl32/libcomctl32.$(LIBEXT) $@
 
-libcomdlg32.@LIBEXT@ libcommdlg.@LIBEXT@: commdlg/libcomdlg32.@LIBEXT@
-	$(RM) $@ && $(LN_S) commdlg/libcomdlg32.@LIBEXT@ $@
+libcomdlg32.$(LIBEXT) libcommdlg.$(LIBEXT): commdlg/libcomdlg32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) commdlg/libcomdlg32.$(LIBEXT) $@
 
-libcrtdll.@LIBEXT@: crtdll/libcrtdll.@LIBEXT@
-	$(RM) $@ && $(LN_S) crtdll/libcrtdll.@LIBEXT@ $@
+libcrtdll.$(LIBEXT): crtdll/libcrtdll.$(LIBEXT)
+	$(RM) $@ && $(LN_S) crtdll/libcrtdll.$(LIBEXT) $@
 
-libdciman32.@LIBEXT@: dciman32/libdciman32.@LIBEXT@
-	$(RM) $@ && $(LN_S) dciman32/libdciman32.@LIBEXT@ $@
+libdciman32.$(LIBEXT): dciman32/libdciman32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) dciman32/libdciman32.$(LIBEXT) $@
 
-libddraw.@LIBEXT@: ddraw/libddraw.@LIBEXT@
-	$(RM) $@ && $(LN_S) ddraw/libddraw.@LIBEXT@ $@
+libddraw.$(LIBEXT): ddraw/libddraw.$(LIBEXT)
+	$(RM) $@ && $(LN_S) ddraw/libddraw.$(LIBEXT) $@
 
-libdinput.@LIBEXT@: dinput/libdinput.@LIBEXT@
-	$(RM) $@ && $(LN_S) dinput/libdinput.@LIBEXT@ $@
+libdinput.$(LIBEXT): dinput/libdinput.$(LIBEXT)
+	$(RM) $@ && $(LN_S) dinput/libdinput.$(LIBEXT) $@
 
-libdplay.@LIBEXT@: dplay/libdplay.@LIBEXT@
-	$(RM) $@ && $(LN_S) dplay/libdplay.@LIBEXT@ $@
+libdplay.$(LIBEXT): dplay/libdplay.$(LIBEXT)
+	$(RM) $@ && $(LN_S) dplay/libdplay.$(LIBEXT) $@
 
-libdplayx.@LIBEXT@: dplayx/libdplayx.@LIBEXT@
-	$(RM) $@ && $(LN_S) dplayx/libdplayx.@LIBEXT@ $@
+libdplayx.$(LIBEXT): dplayx/libdplayx.$(LIBEXT)
+	$(RM) $@ && $(LN_S) dplayx/libdplayx.$(LIBEXT) $@
 
-libdsound.@LIBEXT@: dsound/libdsound.@LIBEXT@
-	$(RM) $@ && $(LN_S) dsound/libdsound.@LIBEXT@ $@
+libdsound.$(LIBEXT): dsound/libdsound.$(LIBEXT)
+	$(RM) $@ && $(LN_S) dsound/libdsound.$(LIBEXT) $@
 
-libgdi32.@LIBEXT@ libdispdib.@LIBEXT@ libgdi.@LIBEXT@ libwing.@LIBEXT@: gdi/libgdi32.@LIBEXT@
-	$(RM) $@ && $(LN_S) gdi/libgdi32.@LIBEXT@ $@
+libgdi32.$(LIBEXT) libdispdib.$(LIBEXT) libgdi.$(LIBEXT) \
+  libwing.$(LIBEXT): gdi/libgdi32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) gdi/libgdi32.$(LIBEXT) $@
 
-libglu32.@LIBEXT@: glu32/libglu32.@LIBEXT@
-	$(RM) $@ && $(LN_S) glu32/libglu32.@LIBEXT@ $@
+libglu32.$(LIBEXT): glu32/libglu32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) glu32/libglu32.$(LIBEXT) $@
 
-libicmp.@LIBEXT@: icmp/libicmp.@LIBEXT@
-	$(RM) $@ && $(LN_S) icmp/libicmp.@LIBEXT@ $@
+libicmp.$(LIBEXT): icmp/libicmp.$(LIBEXT)
+	$(RM) $@ && $(LN_S) icmp/libicmp.$(LIBEXT) $@
 
-libimagehlp.@LIBEXT@: imagehlp/libimagehlp.@LIBEXT@
-	$(RM) $@ && $(LN_S) imagehlp/libimagehlp.@LIBEXT@ $@
+libimagehlp.$(LIBEXT): imagehlp/libimagehlp.$(LIBEXT)
+	$(RM) $@ && $(LN_S) imagehlp/libimagehlp.$(LIBEXT) $@
 
-libimm32.@LIBEXT@ libimm.@LIBEXT@: imm32/libimm32.@LIBEXT@
-	$(RM) $@ && $(LN_S) imm32/libimm32.@LIBEXT@ $@
+libimm32.$(LIBEXT) libimm.$(LIBEXT): imm32/libimm32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) imm32/libimm32.$(LIBEXT) $@
 
-libjoystick.drv.@LIBEXT@: winmm/joystick/libjoystick.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/joystick/libjoystick.drv.@LIBEXT@ $@
+libjoystick.drv.$(LIBEXT): winmm/joystick/libjoystick.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/joystick/libjoystick.drv.$(LIBEXT) $@
 
-libkernel32.@LIBEXT@ libcomm.@LIBEXT@ libkernel.@LIBEXT@ libstress.@LIBEXT@ \
-  libsystem.@LIBEXT@ libtoolhelp.@LIBEXT@ libwin87em.@LIBEXT@ libwindebug.@LIBEXT@ \
-  libwprocs.@LIBEXT@: kernel/libkernel32.@LIBEXT@
-	$(RM) $@ && $(LN_S) kernel/libkernel32.@LIBEXT@ $@
+libkernel32.$(LIBEXT) libcomm.$(LIBEXT) libkernel.$(LIBEXT) \
+  libstress.$(LIBEXT) libsystem.$(LIBEXT) libtoolhelp.$(LIBEXT) \
+  libwin87em.$(LIBEXT) libwindebug.$(LIBEXT) libwprocs.$(LIBEXT): kernel/libkernel32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) kernel/libkernel32.$(LIBEXT) $@
 
-liblz32.@LIBEXT@ liblzexpand.@LIBEXT@: lzexpand/liblz32.@LIBEXT@
-	$(RM) $@ && $(LN_S) lzexpand/liblz32.@LIBEXT@ $@
+liblz32.$(LIBEXT) liblzexpand.$(LIBEXT): lzexpand/liblz32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) lzexpand/liblz32.$(LIBEXT) $@
 
-libmapi32.@LIBEXT@: mapi32/libmapi32.@LIBEXT@
-	$(RM) $@ && $(LN_S) mapi32/libmapi32.@LIBEXT@ $@
+libmapi32.$(LIBEXT): mapi32/libmapi32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) mapi32/libmapi32.$(LIBEXT) $@
 
-libmcianim.drv.@LIBEXT@: winmm/mcianim/libmcianim.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/mcianim/libmcianim.drv.@LIBEXT@ $@
+libmcianim.drv.$(LIBEXT): winmm/mcianim/libmcianim.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/mcianim/libmcianim.drv.$(LIBEXT) $@
 
-libmciavi.drv.@LIBEXT@: winmm/mciavi/libmciavi.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/mciavi/libmciavi.drv.@LIBEXT@ $@
+libmciavi.drv.$(LIBEXT): winmm/mciavi/libmciavi.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/mciavi/libmciavi.drv.$(LIBEXT) $@
 
-libmcicda.drv.@LIBEXT@: winmm/mcicda/libmcicda.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/mcicda/libmcicda.drv.@LIBEXT@ $@
+libmcicda.drv.$(LIBEXT): winmm/mcicda/libmcicda.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/mcicda/libmcicda.drv.$(LIBEXT) $@
 
-libmciseq.drv.@LIBEXT@: winmm/mciseq/libmciseq.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/mciseq/libmciseq.drv.@LIBEXT@ $@
+libmciseq.drv.$(LIBEXT): winmm/mciseq/libmciseq.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/mciseq/libmciseq.drv.$(LIBEXT) $@
 
-libmciwave.drv.@LIBEXT@: winmm/mciwave/libmciwave.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/mciwave/libmciwave.drv.@LIBEXT@ $@
+libmciwave.drv.$(LIBEXT): winmm/mciwave/libmciwave.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/mciwave/libmciwave.drv.$(LIBEXT) $@
+
+libmidimap.drv.$(LIBEXT): winmm/midimap/libmidimap.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/midimap/libmidimap.drv.$(LIBEXT) $@
+
+libmpr.$(LIBEXT): mpr/libmpr.$(LIBEXT)
+	$(RM) $@ && $(LN_S) mpr/libmpr.$(LIBEXT) $@
+
+libmsacm.drv.$(LIBEXT): winmm/wavemap/libmsacm.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/wavemap/libmsacm.drv.$(LIBEXT) $@
+
+libmsacm32.$(LIBEXT) libmsacm.$(LIBEXT): msacm/libmsacm32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) msacm/libmsacm32.$(LIBEXT) $@
+
+libmsimg32.$(LIBEXT): msimg32/libmsimg32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) msimg32/libmsimg32.$(LIBEXT) $@
+
+libmsnet32.$(LIBEXT): msnet32/libmsnet32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) msnet32/libmsnet32.$(LIBEXT) $@
+
+libmsvcrt.$(LIBEXT): msvcrt/libmsvcrt.$(LIBEXT)
+	$(RM) $@ && $(LN_S) msvcrt/libmsvcrt.$(LIBEXT) $@
+
+libmsvfw32.$(LIBEXT) libmsvideo.$(LIBEXT): msvideo/libmsvfw32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) msvideo/libmsvfw32.$(LIBEXT) $@
+
+libntdll.$(LIBEXT): ntdll/libntdll.$(LIBEXT)
+	$(RM) $@ && $(LN_S) ntdll/libntdll.$(LIBEXT) $@
+
+libodbc32.$(LIBEXT): odbc32/libodbc32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) odbc32/libodbc32.$(LIBEXT) $@
+
+libole32.$(LIBEXT) libcompobj.$(LIBEXT) libole2.$(LIBEXT) \
+  libole2conv.$(LIBEXT) libole2nls.$(LIBEXT) libole2prox.$(LIBEXT) \
+  libole2thk.$(LIBEXT) libstorage.$(LIBEXT): ole32/libole32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) ole32/libole32.$(LIBEXT) $@
+
+liboleaut32.$(LIBEXT) libole2disp.$(LIBEXT) libtypelib.$(LIBEXT): oleaut32/liboleaut32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) oleaut32/liboleaut32.$(LIBEXT) $@
+
+libolecli32.$(LIBEXT) libolecli.$(LIBEXT): olecli/libolecli32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) olecli/libolecli32.$(LIBEXT) $@
+
+liboledlg.$(LIBEXT): oledlg/liboledlg.$(LIBEXT)
+	$(RM) $@ && $(LN_S) oledlg/liboledlg.$(LIBEXT) $@
+
+libolepro32.$(LIBEXT): olepro32/libolepro32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) olepro32/libolepro32.$(LIBEXT) $@
+
+libolesvr32.$(LIBEXT) libolesvr.$(LIBEXT): olesvr/libolesvr32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) olesvr/libolesvr32.$(LIBEXT) $@
+
+libopengl32.$(LIBEXT): opengl32/libopengl32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) opengl32/libopengl32.$(LIBEXT) $@
+
+libpsapi.$(LIBEXT): psapi/libpsapi.$(LIBEXT)
+	$(RM) $@ && $(LN_S) psapi/libpsapi.$(LIBEXT) $@
+
+libquartz.$(LIBEXT): quartz/libquartz.$(LIBEXT)
+	$(RM) $@ && $(LN_S) quartz/libquartz.$(LIBEXT) $@
+
+librasapi32.$(LIBEXT) librasapi16.$(LIBEXT): rasapi32/librasapi32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) rasapi32/librasapi32.$(LIBEXT) $@
+
+libriched32.$(LIBEXT): richedit/libriched32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) richedit/libriched32.$(LIBEXT) $@
+
+librpcrt4.$(LIBEXT): rpcrt4/librpcrt4.$(LIBEXT)
+	$(RM) $@ && $(LN_S) rpcrt4/librpcrt4.$(LIBEXT) $@
+
+libserialui.$(LIBEXT): serialui/libserialui.$(LIBEXT)
+	$(RM) $@ && $(LN_S) serialui/libserialui.$(LIBEXT) $@
+
+libsetupapi.$(LIBEXT) libsetupx.$(LIBEXT): setupapi/libsetupapi.$(LIBEXT)
+	$(RM) $@ && $(LN_S) setupapi/libsetupapi.$(LIBEXT) $@
+
+libshdocvw.$(LIBEXT): shdocvw/libshdocvw.$(LIBEXT)
+	$(RM) $@ && $(LN_S) shdocvw/libshdocvw.$(LIBEXT) $@
+
+libshell32.$(LIBEXT) libshell.$(LIBEXT): shell32/libshell32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) shell32/libshell32.$(LIBEXT) $@
+
+libshfolder.$(LIBEXT): shfolder/libshfolder.$(LIBEXT)
+	$(RM) $@ && $(LN_S) shfolder/libshfolder.$(LIBEXT) $@
+
+libshlwapi.$(LIBEXT): shlwapi/libshlwapi.$(LIBEXT)
+	$(RM) $@ && $(LN_S) shlwapi/libshlwapi.$(LIBEXT) $@
+
+libsti.$(LIBEXT): sti/libsti.$(LIBEXT)
+	$(RM) $@ && $(LN_S) sti/libsti.$(LIBEXT) $@
+
+libtapi32.$(LIBEXT): tapi32/libtapi32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) tapi32/libtapi32.$(LIBEXT) $@
+
+libttydrv.$(LIBEXT): ttydrv/libttydrv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) ttydrv/libttydrv.$(LIBEXT) $@
+
+liburl.$(LIBEXT): url/liburl.$(LIBEXT)
+	$(RM) $@ && $(LN_S) url/liburl.$(LIBEXT) $@
+
+liburlmon.$(LIBEXT): urlmon/liburlmon.$(LIBEXT)
+	$(RM) $@ && $(LN_S) urlmon/liburlmon.$(LIBEXT) $@
+
+libuser32.$(LIBEXT) libddeml.$(LIBEXT) libdisplay.$(LIBEXT) \
+  libkeyboard.$(LIBEXT) libmouse.$(LIBEXT) libuser.$(LIBEXT): user/libuser32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) user/libuser32.$(LIBEXT) $@
+
+libversion.$(LIBEXT) libver.$(LIBEXT): version/libversion.$(LIBEXT)
+	$(RM) $@ && $(LN_S) version/libversion.$(LIBEXT) $@
+
+libw32skrnl.$(LIBEXT) libw32sys.$(LIBEXT) libwin32s16.$(LIBEXT): win32s/libw32skrnl.$(LIBEXT)
+	$(RM) $@ && $(LN_S) win32s/libw32skrnl.$(LIBEXT) $@
+
+libwinedos.$(LIBEXT): winedos/libwinedos.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winedos/libwinedos.$(LIBEXT) $@
+
+libwineoss.drv.$(LIBEXT): winmm/wineoss/libwineoss.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/wineoss/libwineoss.drv.$(LIBEXT) $@
+
+libwineps.$(LIBEXT) libwineps16.$(LIBEXT): wineps/libwineps.$(LIBEXT)
+	$(RM) $@ && $(LN_S) wineps/libwineps.$(LIBEXT) $@
+
+libwininet.$(LIBEXT): wininet/libwininet.$(LIBEXT)
+	$(RM) $@ && $(LN_S) wininet/libwininet.$(LIBEXT) $@
+
+libwinmm.$(LIBEXT) libmmsystem.$(LIBEXT) libsound.$(LIBEXT): winmm/libwinmm.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winmm/libwinmm.$(LIBEXT) $@
+
+libwinnls32.$(LIBEXT) libwinnls.$(LIBEXT): winnls/libwinnls32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winnls/libwinnls32.$(LIBEXT) $@
+
+libwinspool.drv.$(LIBEXT): winspool/libwinspool.drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winspool/libwinspool.drv.$(LIBEXT) $@
+
+libwintrust.$(LIBEXT): wintrust/libwintrust.$(LIBEXT)
+	$(RM) $@ && $(LN_S) wintrust/libwintrust.$(LIBEXT) $@
+
+libwnaspi32.$(LIBEXT) libwinaspi.$(LIBEXT): winaspi/libwnaspi32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winaspi/libwnaspi32.$(LIBEXT) $@
+
+libwow32.$(LIBEXT): wow32/libwow32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) wow32/libwow32.$(LIBEXT) $@
+
+libws2_32.$(LIBEXT) libwinsock.$(LIBEXT): winsock/libws2_32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) winsock/libws2_32.$(LIBEXT) $@
+
+libwsock32.$(LIBEXT): wsock32/libwsock32.$(LIBEXT)
+	$(RM) $@ && $(LN_S) wsock32/libwsock32.$(LIBEXT) $@
+
+libx11drv.$(LIBEXT): x11drv/libx11drv.$(LIBEXT)
+	$(RM) $@ && $(LN_S) x11drv/libx11drv.$(LIBEXT) $@
+
+# Inter-dll dependencies
+
+advapi32/libadvapi32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd advapi32 && $(MAKE) libadvapi32.$(LIBEXT)
+
+avifil32/libavifil32.$(LIBEXT): dummy libmsvfw32.$(LIBEXT) libole32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd avifil32 && $(MAKE) libavifil32.$(LIBEXT)
+
+comctl32/libcomctl32.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libgdi32.$(LIBEXT) libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd comctl32 && $(MAKE) libcomctl32.$(LIBEXT)
+
+commdlg/libcomdlg32.$(LIBEXT): dummy libshell32.$(LIBEXT) libshlwapi.$(LIBEXT) \
+  libcomctl32.$(LIBEXT) libwinspool.drv.$(LIBEXT) libuser32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd commdlg && $(MAKE) libcomdlg32.$(LIBEXT)
+
+crtdll/libcrtdll.$(LIBEXT): dummy libmsvcrt.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd crtdll && $(MAKE) libcrtdll.$(LIBEXT)
+
+dciman32/libdciman32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd dciman32 && $(MAKE) libdciman32.$(LIBEXT)
+
+ddraw/libddraw.$(LIBEXT): dummy libuser32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd ddraw && $(MAKE) libddraw.$(LIBEXT)
+
+dinput/libdinput.$(LIBEXT): dummy libuser32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd dinput && $(MAKE) libdinput.$(LIBEXT)
+
+dplay/libdplay.$(LIBEXT): dummy libdplayx.$(LIBEXT)
+	@cd dplay && $(MAKE) libdplay.$(LIBEXT)
+
+dplayx/libdplayx.$(LIBEXT): dummy libwinmm.$(LIBEXT) libole32.$(LIBEXT) \
+  libuser32.$(LIBEXT) libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd dplayx && $(MAKE) libdplayx.$(LIBEXT)
+
+dsound/libdsound.$(LIBEXT): dummy libwinmm.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd dsound && $(MAKE) libdsound.$(LIBEXT)
+
+gdi/libgdi32.$(LIBEXT): dummy libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd gdi && $(MAKE) libgdi32.$(LIBEXT)
+
+glu32/libglu32.$(LIBEXT): dummy
+	@cd glu32 && $(MAKE) libglu32.$(LIBEXT)
+
+icmp/libicmp.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd icmp && $(MAKE) libicmp.$(LIBEXT)
+
+imagehlp/libimagehlp.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd imagehlp && $(MAKE) libimagehlp.$(LIBEXT)
+
+imm32/libimm32.$(LIBEXT): dummy libuser32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd imm32 && $(MAKE) libimm32.$(LIBEXT)
+
+kernel/libkernel32.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd kernel && $(MAKE) libkernel32.$(LIBEXT)
+
+lzexpand/liblz32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd lzexpand && $(MAKE) liblz32.$(LIBEXT)
+
+mapi32/libmapi32.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd mapi32 && $(MAKE) libmapi32.$(LIBEXT)
+
+mpr/libmpr.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd mpr && $(MAKE) libmpr.$(LIBEXT)
+
+msacm/libmsacm32.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd msacm && $(MAKE) libmsacm32.$(LIBEXT)
 
-libmidimap.drv.@LIBEXT@: winmm/midimap/libmidimap.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/midimap/libmidimap.drv.@LIBEXT@ $@
+msimg32/libmsimg32.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd msimg32 && $(MAKE) libmsimg32.$(LIBEXT)
 
-libmpr.@LIBEXT@: mpr/libmpr.@LIBEXT@
-	$(RM) $@ && $(LN_S) mpr/libmpr.@LIBEXT@ $@
+msnet32/libmsnet32.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd msnet32 && $(MAKE) libmsnet32.$(LIBEXT)
 
-libmsacm.drv.@LIBEXT@: winmm/wavemap/libmsacm.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/wavemap/libmsacm.drv.@LIBEXT@ $@
+msvcrt/libmsvcrt.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd msvcrt && $(MAKE) libmsvcrt.$(LIBEXT)
 
-libmsacm32.@LIBEXT@ libmsacm.@LIBEXT@: msacm/libmsacm32.@LIBEXT@
-	$(RM) $@ && $(LN_S) msacm/libmsacm32.@LIBEXT@ $@
+msvideo/libmsvfw32.$(LIBEXT): dummy libwinmm.$(LIBEXT) libcomctl32.$(LIBEXT) \
+  libversion.$(LIBEXT) libuser32.$(LIBEXT) libgdi32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd msvideo && $(MAKE) libmsvfw32.$(LIBEXT)
 
-libmsimg32.@LIBEXT@: msimg32/libmsimg32.@LIBEXT@
-	$(RM) $@ && $(LN_S) msimg32/libmsimg32.@LIBEXT@ $@
+ntdll/libntdll.$(LIBEXT): dummy
+	@cd ntdll && $(MAKE) libntdll.$(LIBEXT)
 
-libmsnet32.@LIBEXT@: msnet32/libmsnet32.@LIBEXT@
-	$(RM) $@ && $(LN_S) msnet32/libmsnet32.@LIBEXT@ $@
+odbc32/libodbc32.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd odbc32 && $(MAKE) libodbc32.$(LIBEXT)
 
-libmsvcrt.@LIBEXT@: msvcrt/libmsvcrt.@LIBEXT@
-	$(RM) $@ && $(LN_S) msvcrt/libmsvcrt.@LIBEXT@ $@
+ole32/libole32.$(LIBEXT): dummy libadvapi32.$(LIBEXT) libuser32.$(LIBEXT) \
+  libgdi32.$(LIBEXT) librpcrt4.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd ole32 && $(MAKE) libole32.$(LIBEXT)
 
-libmsvfw32.@LIBEXT@ libmsvideo.@LIBEXT@: msvideo/libmsvfw32.@LIBEXT@
-	$(RM) $@ && $(LN_S) msvideo/libmsvfw32.@LIBEXT@ $@
+oleaut32/liboleaut32.$(LIBEXT): dummy libole32.$(LIBEXT) libuser32.$(LIBEXT) \
+  libgdi32.$(LIBEXT) libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd oleaut32 && $(MAKE) liboleaut32.$(LIBEXT)
 
-libntdll.@LIBEXT@: ntdll/libntdll.@LIBEXT@
-	$(RM) $@ && $(LN_S) ntdll/libntdll.@LIBEXT@ $@
+olecli/libolecli32.$(LIBEXT): dummy libole32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd olecli && $(MAKE) libolecli32.$(LIBEXT)
 
-libodbc32.@LIBEXT@: odbc32/libodbc32.@LIBEXT@
-	$(RM) $@ && $(LN_S) odbc32/libodbc32.@LIBEXT@ $@
+oledlg/liboledlg.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd oledlg && $(MAKE) liboledlg.$(LIBEXT)
 
-libole32.@LIBEXT@ libcompobj.@LIBEXT@ libole2.@LIBEXT@ libole2conv.@LIBEXT@ \
-  libole2nls.@LIBEXT@ libole2prox.@LIBEXT@ libole2thk.@LIBEXT@ libstorage.@LIBEXT@: ole32/libole32.@LIBEXT@
-	$(RM) $@ && $(LN_S) ole32/libole32.@LIBEXT@ $@
+olepro32/libolepro32.$(LIBEXT): dummy liboleaut32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd olepro32 && $(MAKE) libolepro32.$(LIBEXT)
 
-liboleaut32.@LIBEXT@ libole2disp.@LIBEXT@ libtypelib.@LIBEXT@: oleaut32/liboleaut32.@LIBEXT@
-	$(RM) $@ && $(LN_S) oleaut32/liboleaut32.@LIBEXT@ $@
+olesvr/libolesvr32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd olesvr && $(MAKE) libolesvr32.$(LIBEXT)
 
-libolecli32.@LIBEXT@ libolecli.@LIBEXT@: olecli/libolecli32.@LIBEXT@
-	$(RM) $@ && $(LN_S) olecli/libolecli32.@LIBEXT@ $@
+opengl32/libopengl32.$(LIBEXT): dummy libuser32.$(LIBEXT) libx11drv.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd opengl32 && $(MAKE) libopengl32.$(LIBEXT)
 
-liboledlg.@LIBEXT@: oledlg/liboledlg.@LIBEXT@
-	$(RM) $@ && $(LN_S) oledlg/liboledlg.@LIBEXT@ $@
+psapi/libpsapi.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd psapi && $(MAKE) libpsapi.$(LIBEXT)
 
-libolepro32.@LIBEXT@: olepro32/libolepro32.@LIBEXT@
-	$(RM) $@ && $(LN_S) olepro32/libolepro32.@LIBEXT@ $@
+quartz/libquartz.$(LIBEXT): dummy liboleaut32.$(LIBEXT) libole32.$(LIBEXT) \
+  libwinmm.$(LIBEXT) libuser32.$(LIBEXT) libgdi32.$(LIBEXT) libadvapi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd quartz && $(MAKE) libquartz.$(LIBEXT)
 
-libolesvr32.@LIBEXT@ libolesvr.@LIBEXT@: olesvr/libolesvr32.@LIBEXT@
-	$(RM) $@ && $(LN_S) olesvr/libolesvr32.@LIBEXT@ $@
+rasapi32/librasapi32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd rasapi32 && $(MAKE) librasapi32.$(LIBEXT)
 
-libopengl32.@LIBEXT@: opengl32/libopengl32.@LIBEXT@
-	$(RM) $@ && $(LN_S) opengl32/libopengl32.@LIBEXT@ $@
+richedit/libriched32.$(LIBEXT): dummy libuser32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd richedit && $(MAKE) libriched32.$(LIBEXT)
 
-libpsapi.@LIBEXT@: psapi/libpsapi.@LIBEXT@
-	$(RM) $@ && $(LN_S) psapi/libpsapi.@LIBEXT@ $@
+rpcrt4/librpcrt4.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd rpcrt4 && $(MAKE) librpcrt4.$(LIBEXT)
 
-libquartz.@LIBEXT@: quartz/libquartz.@LIBEXT@
-	$(RM) $@ && $(LN_S) quartz/libquartz.@LIBEXT@ $@
+serialui/libserialui.$(LIBEXT): dummy libuser32.$(LIBEXT) libadvapi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd serialui && $(MAKE) libserialui.$(LIBEXT)
 
-librasapi32.@LIBEXT@ librasapi16.@LIBEXT@: rasapi32/librasapi32.@LIBEXT@
-	$(RM) $@ && $(LN_S) rasapi32/librasapi32.@LIBEXT@ $@
+setupapi/libsetupapi.$(LIBEXT): dummy libuser32.$(LIBEXT) libadvapi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd setupapi && $(MAKE) libsetupapi.$(LIBEXT)
 
-libriched32.@LIBEXT@: richedit/libriched32.@LIBEXT@
-	$(RM) $@ && $(LN_S) richedit/libriched32.@LIBEXT@ $@
+shdocvw/libshdocvw.$(LIBEXT): dummy libole32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd shdocvw && $(MAKE) libshdocvw.$(LIBEXT)
 
-librpcrt4.@LIBEXT@: rpcrt4/librpcrt4.@LIBEXT@
-	$(RM) $@ && $(LN_S) rpcrt4/librpcrt4.@LIBEXT@ $@
+shell32/libshell32.$(LIBEXT): dummy libole32.$(LIBEXT) libshlwapi.$(LIBEXT) \
+  libcomctl32.$(LIBEXT) libuser32.$(LIBEXT) libgdi32.$(LIBEXT) libadvapi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd shell32 && $(MAKE) libshell32.$(LIBEXT)
 
-libserialui.@LIBEXT@: serialui/libserialui.@LIBEXT@
-	$(RM) $@ && $(LN_S) serialui/libserialui.@LIBEXT@ $@
+shfolder/libshfolder.$(LIBEXT): dummy libshell32.$(LIBEXT)
+	@cd shfolder && $(MAKE) libshfolder.$(LIBEXT)
 
-libsetupapi.@LIBEXT@ libsetupx.@LIBEXT@: setupapi/libsetupapi.@LIBEXT@
-	$(RM) $@ && $(LN_S) setupapi/libsetupapi.@LIBEXT@ $@
+shlwapi/libshlwapi.$(LIBEXT): dummy libadvapi32.$(LIBEXT) libuser32.$(LIBEXT) \
+  libgdi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd shlwapi && $(MAKE) libshlwapi.$(LIBEXT)
 
-libshdocvw.@LIBEXT@: shdocvw/libshdocvw.@LIBEXT@
-	$(RM) $@ && $(LN_S) shdocvw/libshdocvw.@LIBEXT@ $@
+sti/libsti.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd sti && $(MAKE) libsti.$(LIBEXT)
 
-libshell32.@LIBEXT@ libshell.@LIBEXT@: shell32/libshell32.@LIBEXT@
-	$(RM) $@ && $(LN_S) shell32/libshell32.@LIBEXT@ $@
+tapi32/libtapi32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd tapi32 && $(MAKE) libtapi32.$(LIBEXT)
 
-libshfolder.@LIBEXT@: shfolder/libshfolder.@LIBEXT@
-	$(RM) $@ && $(LN_S) shfolder/libshfolder.@LIBEXT@ $@
+ttydrv/libttydrv.$(LIBEXT): dummy libuser32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd ttydrv && $(MAKE) libttydrv.$(LIBEXT)
 
-libshlwapi.@LIBEXT@: shlwapi/libshlwapi.@LIBEXT@
-	$(RM) $@ && $(LN_S) shlwapi/libshlwapi.@LIBEXT@ $@
+url/liburl.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd url && $(MAKE) liburl.$(LIBEXT)
 
-libsti.@LIBEXT@: sti/libsti.@LIBEXT@
-	$(RM) $@ && $(LN_S) sti/libsti.@LIBEXT@ $@
+urlmon/liburlmon.$(LIBEXT): dummy libole32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd urlmon && $(MAKE) liburlmon.$(LIBEXT)
 
-libtapi32.@LIBEXT@: tapi32/libtapi32.@LIBEXT@
-	$(RM) $@ && $(LN_S) tapi32/libtapi32.@LIBEXT@ $@
+user/libuser32.$(LIBEXT): dummy libgdi32.$(LIBEXT) libadvapi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd user && $(MAKE) libuser32.$(LIBEXT)
 
-libttydrv.@LIBEXT@: ttydrv/libttydrv.@LIBEXT@
-	$(RM) $@ && $(LN_S) ttydrv/libttydrv.@LIBEXT@ $@
+version/libversion.$(LIBEXT): dummy liblz32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd version && $(MAKE) libversion.$(LIBEXT)
 
-liburl.@LIBEXT@: url/liburl.@LIBEXT@
-	$(RM) $@ && $(LN_S) url/liburl.@LIBEXT@ $@
+win32s/libw32skrnl.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd win32s && $(MAKE) libw32skrnl.$(LIBEXT)
 
-liburlmon.@LIBEXT@: urlmon/liburlmon.@LIBEXT@
-	$(RM) $@ && $(LN_S) urlmon/liburlmon.@LIBEXT@ $@
+winaspi/libwnaspi32.$(LIBEXT): dummy libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd winaspi && $(MAKE) libwnaspi32.$(LIBEXT)
 
-libuser32.@LIBEXT@ libddeml.@LIBEXT@ libdisplay.@LIBEXT@ libkeyboard.@LIBEXT@ \
-  libmouse.@LIBEXT@ libuser.@LIBEXT@: user/libuser32.@LIBEXT@
-	$(RM) $@ && $(LN_S) user/libuser32.@LIBEXT@ $@
+winedos/libwinedos.$(LIBEXT): dummy libuser32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd winedos && $(MAKE) libwinedos.$(LIBEXT)
 
-libversion.@LIBEXT@ libver.@LIBEXT@: version/libversion.@LIBEXT@
-	$(RM) $@ && $(LN_S) version/libversion.@LIBEXT@ $@
+wineps/libwineps.$(LIBEXT): dummy libuser32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libwinspool.drv.$(LIBEXT) libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd wineps && $(MAKE) libwineps.$(LIBEXT)
 
-libw32skrnl.@LIBEXT@ libw32sys.@LIBEXT@ libwin32s16.@LIBEXT@: win32s/libw32skrnl.@LIBEXT@
-	$(RM) $@ && $(LN_S) win32s/libw32skrnl.@LIBEXT@ $@
+wininet/libwininet.$(LIBEXT): dummy libshlwapi.$(LIBEXT) libuser32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd wininet && $(MAKE) libwininet.$(LIBEXT)
 
-libwinedos.@LIBEXT@: winedos/libwinedos.@LIBEXT@
-	$(RM) $@ && $(LN_S) winedos/libwinedos.@LIBEXT@ $@
+winmm/joystick/libjoystick.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd winmm/joystick && $(MAKE) libjoystick.drv.$(LIBEXT)
 
-libwineoss.drv.@LIBEXT@: winmm/wineoss/libwineoss.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/wineoss/libwineoss.drv.@LIBEXT@ $@
+winmm/libwinmm.$(LIBEXT): dummy libuser32.$(LIBEXT) libadvapi32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm && $(MAKE) libwinmm.$(LIBEXT)
 
-libwineps.@LIBEXT@ libwineps16.@LIBEXT@: wineps/libwineps.@LIBEXT@
-	$(RM) $@ && $(LN_S) wineps/libwineps.@LIBEXT@ $@
+winmm/mcianim/libmcianim.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/mcianim && $(MAKE) libmcianim.drv.$(LIBEXT)
 
-libwininet.@LIBEXT@: wininet/libwininet.@LIBEXT@
-	$(RM) $@ && $(LN_S) wininet/libwininet.@LIBEXT@ $@
+winmm/mciavi/libmciavi.drv.$(LIBEXT): dummy libmsvfw32.$(LIBEXT) libwinmm.$(LIBEXT) \
+  libuser32.$(LIBEXT) libgdi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/mciavi && $(MAKE) libmciavi.drv.$(LIBEXT)
 
-libwinmm.@LIBEXT@ libmmsystem.@LIBEXT@ libsound.@LIBEXT@: winmm/libwinmm.@LIBEXT@
-	$(RM) $@ && $(LN_S) winmm/libwinmm.@LIBEXT@ $@
+winmm/mcicda/libmcicda.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/mcicda && $(MAKE) libmcicda.drv.$(LIBEXT)
 
-libwinnls32.@LIBEXT@ libwinnls.@LIBEXT@: winnls/libwinnls32.@LIBEXT@
-	$(RM) $@ && $(LN_S) winnls/libwinnls32.@LIBEXT@ $@
+winmm/mciseq/libmciseq.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/mciseq && $(MAKE) libmciseq.drv.$(LIBEXT)
 
-libwinspool.drv.@LIBEXT@: winspool/libwinspool.drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) winspool/libwinspool.drv.@LIBEXT@ $@
+winmm/mciwave/libmciwave.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/mciwave && $(MAKE) libmciwave.drv.$(LIBEXT)
 
-libwintrust.@LIBEXT@: wintrust/libwintrust.@LIBEXT@
-	$(RM) $@ && $(LN_S) wintrust/libwintrust.@LIBEXT@ $@
+winmm/midimap/libmidimap.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/midimap && $(MAKE) libmidimap.drv.$(LIBEXT)
 
-libwnaspi32.@LIBEXT@ libwinaspi.@LIBEXT@: winaspi/libwnaspi32.@LIBEXT@
-	$(RM) $@ && $(LN_S) winaspi/libwnaspi32.@LIBEXT@ $@
+winmm/wavemap/libmsacm.drv.$(LIBEXT): dummy libmsacm32.$(LIBEXT) libwinmm.$(LIBEXT) \
+  libuser32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/wavemap && $(MAKE) libmsacm.drv.$(LIBEXT)
 
-libwow32.@LIBEXT@: wow32/libwow32.@LIBEXT@
-	$(RM) $@ && $(LN_S) wow32/libwow32.@LIBEXT@ $@
+winmm/wineoss/libwineoss.drv.$(LIBEXT): dummy libwinmm.$(LIBEXT) libuser32.$(LIBEXT) \
+  libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winmm/wineoss && $(MAKE) libwineoss.drv.$(LIBEXT)
 
-libws2_32.@LIBEXT@ libwinsock.@LIBEXT@: winsock/libws2_32.@LIBEXT@
-	$(RM) $@ && $(LN_S) winsock/libws2_32.@LIBEXT@ $@
+winnls/libwinnls32.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd winnls && $(MAKE) libwinnls32.$(LIBEXT)
 
-libwsock32.@LIBEXT@: wsock32/libwsock32.@LIBEXT@
-	$(RM) $@ && $(LN_S) wsock32/libwsock32.@LIBEXT@ $@
+winsock/libws2_32.$(LIBEXT): dummy libuser32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd winsock && $(MAKE) libws2_32.$(LIBEXT)
 
-libx11drv.@LIBEXT@: x11drv/libx11drv.@LIBEXT@
-	$(RM) $@ && $(LN_S) x11drv/libx11drv.@LIBEXT@ $@
+winspool/libwinspool.drv.$(LIBEXT): dummy libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd winspool && $(MAKE) libwinspool.drv.$(LIBEXT)
 
-# Inter-dll dependencies (only necessary for dynamic libs)
+wintrust/libwintrust.$(LIBEXT): dummy libntdll.$(LIBEXT)
+	@cd wintrust && $(MAKE) libwintrust.$(LIBEXT)
 
-advapi32/libadvapi32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-avifil32/libavifil32.@LIBEXT@: libmsvfw32.@LIBEXT@ libole32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-comctl32/libcomctl32.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-commdlg/libcomdlg32.@LIBEXT@: libshell32.@LIBEXT@ libshlwapi.@LIBEXT@ libcomctl32.@LIBEXT@ libwinspool.drv.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-crtdll/libcrtdll.@LIBEXT@: libmsvcrt.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-dciman32/libdciman32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-ddraw/libddraw.@LIBEXT@: libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-dinput/libdinput.@LIBEXT@: libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-dplay/libdplay.@LIBEXT@: libdplayx.@LIBEXT@
-dplayx/libdplayx.@LIBEXT@: libwinmm.@LIBEXT@ libole32.@LIBEXT@ libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-dsound/libdsound.@LIBEXT@: libwinmm.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-gdi/libgdi32.@LIBEXT@: libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-icmp/libicmp.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-imagehlp/libimagehlp.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-imm32/libimm32.@LIBEXT@: libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-kernel/libkernel32.@LIBEXT@: libntdll.@LIBEXT@
-lzexpand/liblz32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-mapi32/libmapi32.@LIBEXT@: libntdll.@LIBEXT@
-mpr/libmpr.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-msacm/libmsacm32.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-msimg32/libmsimg32.@LIBEXT@: libntdll.@LIBEXT@
-msnet32/libmsnet32.@LIBEXT@: libntdll.@LIBEXT@
-msvcrt/libmsvcrt.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-msvideo/libmsvfw32.@LIBEXT@: libwinmm.@LIBEXT@ libcomctl32.@LIBEXT@ libversion.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-odbc32/libodbc32.@LIBEXT@: libntdll.@LIBEXT@
-ole32/libole32.@LIBEXT@: libadvapi32.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ librpcrt4.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-oleaut32/liboleaut32.@LIBEXT@: libole32.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-olecli/libolecli32.@LIBEXT@: libole32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-oledlg/liboledlg.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-olepro32/libolepro32.@LIBEXT@: liboleaut32.@LIBEXT@ libntdll.@LIBEXT@
-olesvr/libolesvr32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-opengl32/libopengl32.@LIBEXT@: libuser32.@LIBEXT@ libx11drv.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-psapi/libpsapi.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-quartz/libquartz.@LIBEXT@: liboleaut32.@LIBEXT@ libole32.@LIBEXT@ libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-rasapi32/librasapi32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-richedit/libriched32.@LIBEXT@: libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-rpcrt4/librpcrt4.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-serialui/libserialui.@LIBEXT@: libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-setupapi/libsetupapi.@LIBEXT@: libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-shdocvw/libshdocvw.@LIBEXT@: libole32.@LIBEXT@ libntdll.@LIBEXT@
-shell32/libshell32.@LIBEXT@: libole32.@LIBEXT@ libshlwapi.@LIBEXT@ libcomctl32.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-shfolder/libshfolder.@LIBEXT@: libshell32.@LIBEXT@
-shlwapi/libshlwapi.@LIBEXT@: libadvapi32.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-sti/libsti.@LIBEXT@: libntdll.@LIBEXT@
-tapi32/libtapi32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-ttydrv/libttydrv.@LIBEXT@: libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-url/liburl.@LIBEXT@: libntdll.@LIBEXT@
-urlmon/liburlmon.@LIBEXT@: libole32.@LIBEXT@ libntdll.@LIBEXT@
-user/libuser32.@LIBEXT@: libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-version/libversion.@LIBEXT@: liblz32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-win32s/libw32skrnl.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winaspi/libwnaspi32.@LIBEXT@: libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winedos/libwinedos.@LIBEXT@: libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-wineps/libwineps.@LIBEXT@: libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libwinspool.drv.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-wininet/libwininet.@LIBEXT@: libshlwapi.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/joystick/libjoystick.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/libwinmm.@LIBEXT@: libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/mcianim/libmcianim.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/mciavi/libmciavi.drv.@LIBEXT@: libmsvfw32.@LIBEXT@ libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/mcicda/libmcicda.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/mciseq/libmciseq.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/mciwave/libmciwave.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/midimap/libmidimap.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/wavemap/libmsacm.drv.@LIBEXT@: libmsacm32.@LIBEXT@ libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winmm/wineoss/libwineoss.drv.@LIBEXT@: libwinmm.@LIBEXT@ libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winnls/libwinnls32.@LIBEXT@: libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winsock/libws2_32.@LIBEXT@: libuser32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-winspool/libwinspool.drv.@LIBEXT@: libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-wintrust/libwintrust.@LIBEXT@: libntdll.@LIBEXT@
-wow32/libwow32.@LIBEXT@: libkernel32.@LIBEXT@
-wsock32/libwsock32.@LIBEXT@: libws2_32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
-x11drv/libx11drv.@LIBEXT@: libuser32.@LIBEXT@ libgdi32.@LIBEXT@ libadvapi32.@LIBEXT@ libkernel32.@LIBEXT@ libntdll.@LIBEXT@
+wow32/libwow32.$(LIBEXT): dummy libkernel32.$(LIBEXT)
+	@cd wow32 && $(MAKE) libwow32.$(LIBEXT)
 
-$(DLLFILES): dummy
-	@cd `dirname $@` && $(MAKE)
+wsock32/libwsock32.$(LIBEXT): dummy libws2_32.$(LIBEXT) libkernel32.$(LIBEXT) \
+  libntdll.$(LIBEXT)
+	@cd wsock32 && $(MAKE) libwsock32.$(LIBEXT)
 
-$(DLLFILES:%=%_install_): dummy
-	@cd `dirname $@` && $(MAKE) install
+x11drv/libx11drv.$(LIBEXT): dummy libuser32.$(LIBEXT) libgdi32.$(LIBEXT) \
+  libadvapi32.$(LIBEXT) libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd x11drv && $(MAKE) libx11drv.$(LIBEXT)
 
-$(DLLFILES:%=%_uninstall_): dummy
-	@cd `dirname $@` && $(MAKE) uninstall
+# Misc rules
 
-$(DLLFILES:%=%_checklink_): dummy
+$(SUBDIRS:%=%/__checklink__): dummy
 	@cd `dirname $@` && $(MAKE) checklink
 
-install:: $(DLLFILES:%=%_install_)
+$(SUBDIRS:%=%/__debug_channels__): dummy
+	@cd `dirname $@` && $(MAKE) debug_channels
 
-uninstall:: $(DLLFILES:%=%_uninstall_)
+install:: $(SUBDIRS:%=%/__install__)
 
-checklink:: $(DLLFILES:%=%_checklink_)
+uninstall:: $(SUBDIRS:%=%/__uninstall__)
+
+checklink:: $(SUBDIRS:%=%/__checklink__)
+
+debug_channels:: $(SUBDIRS:%=%/__debug_channels__)
diff --git a/dlls/make_dlls b/dlls/make_dlls
index 05dd5a2..5db5b3e 100755
--- a/dlls/make_dlls
+++ b/dlls/make_dlls
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -w
 #
 # Update the dll dependencies in the dlls main Makefile.in.
 # Must be run in the dlls/ directory of the Wine tree.
@@ -12,6 +12,15 @@
 %directories = ();
 %altnames = ();
 
+# list of special dlls that can be switched on or off by configure
+%special_dlls =
+(
+  "ddraw"    => "XFILES",
+  "glu32"    => "GLU32FILES",
+  "opengl32" => "OPENGLFILES",
+  "x11drv"   => "XFILES"
+);
+
 foreach $i (split(/\s/,$makefiles))
 {
     open MAKE,$i;
@@ -55,91 +64,153 @@
     }
 }
 
-open OLDMAKE,"Makefile.in" or die "cannot open Makefile.in";
 open NEWMAKE,">Makefile.in.new" or die "cannot create Makefile.in.new";
 
-while (<OLDMAKE>)
-{
-    last if (/^EXTRADLLNAMES/);
-    print NEWMAKE $_;
-}
-close OLDMAKE;
+################################################################
+# makefile header
 
-printf NEWMAKE "EXTRADLLNAMES =";
-foreach $extra (values %altnames) { push @extra, @$extra; }
-foreach $extra (sort @extra)
-{
-    printf NEWMAKE " \\\n\t%s", $extra;
-}
+print NEWMAKE <<EOF;
+# Automatically generated by make_dlls; DO NOT EDIT!!
 
-printf NEWMAKE "\n\nSUBDIRS =";
+TOPSRCDIR = \@top_srcdir\@
+TOPOBJDIR = ..
+SRCDIR    = \@srcdir\@
+VPATH     = \@srcdir\@
+LIBEXT    = \@LIBEXT\@
+
+EOF
+
+################################################################
+# output special dlls configure definitions
+
+printf NEWMAKE "# special configure-dependent targets\n\n";
+my %specials = ();
+foreach $mod (sort keys %special_dlls)
+{
+    $specials{$special_dlls{$mod}} .= " " . $mod;
+}
+foreach $i (sort keys %specials)
+{
+    printf NEWMAKE "%s =%s\n", $i, $specials{$i};
+}
+printf NEWMAKE "EXTRADIRS =";
+foreach $i (sort keys %specials) { printf NEWMAKE " \@%s\@", $i; }
+printf NEWMAKE "\n\n";
+
+
+################################################################
+# output the subdirs list
+
+print NEWMAKE <<EOF;
+# Subdir list
+
+SUBDIRS = \\
+EOF
+printf NEWMAKE "\t\$(EXTRADIRS)";
 foreach $dir (sort values %directories)
 {
+    next if defined($special_dlls{$dir});  # skip special dlls
     printf NEWMAKE " \\\n\t%s", $dir;
 }
 printf NEWMAKE "\n";
 
+
+################################################################
+# output the all: target
+
+my %targets = ();  # use a hash to get rid of duplicate target names
+foreach $mod (sort keys %directories)
+{
+    next if defined($special_dlls{$mod});  # skip special dlls
+    $targets{sprintf("lib%s.\$(LIBEXT)",$mod)} = 1;
+    next unless defined $altnames{$mod};
+    foreach $i (sort @{$altnames{$mod}})
+    {
+        $targets{sprintf("lib%s.\$(LIBEXT)",$i)} = 1;
+    }
+}
+print NEWMAKE <<EOF;
+
+# Main target
+
+all: \\
+	\$(EXTRADIRS:%=lib%.\$(LIBEXT)) \\
+EOF
+printf NEWMAKE "\t%s\n", join( " \\\n\t", sort keys %targets );
+
+
+################################################################
+# output the lib name -> directory rules
+
 print NEWMAKE <<EOF;
 
 \@MAKE_RULES\@
 
-all: \$(DLLS:%=lib%.\@LIBEXT\@) \$(EXTRADLLNAMES:%=lib%.\@LIBEXT\@)
-
 # Map library name to directory
 
 EOF
 
 foreach $mod (sort keys %directories)
 {
-    my $count = 0;
-    printf NEWMAKE "lib%s.\@LIBEXT\@", $mod;
-    foreach $i (sort @{$altnames{$mod}})
+    printf NEWMAKE "lib%s.\$(LIBEXT)", $mod;
+    if (defined $altnames{$mod})
     {
-        if ($count++ >= 3)
+        my $count = 1;
+        foreach $i (sort @{$altnames{$mod}})
         {
-            $count = 0;
-            printf NEWMAKE " \\\n ";
+            if (!($count++ % 3)) { printf NEWMAKE " \\\n "; }
+            printf NEWMAKE " lib%s.\$(LIBEXT)", $i;
         }
-        printf NEWMAKE " lib%s.\@LIBEXT\@", $i;
     }
-    printf NEWMAKE ": %s/lib%s.\@LIBEXT\@\n", $directories{$mod}, $mod;
-    printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/lib%s.\@LIBEXT\@ \$@\n\n", $directories{$mod}, $mod;
+    printf NEWMAKE ": %s/lib%s.\$(LIBEXT)\n", $directories{$mod}, $mod;
+    printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/lib%s.\$(LIBEXT) \$@\n\n", $directories{$mod}, $mod;
 }
 
-print NEWMAKE "# Inter-dll dependencies (only necessary for dynamic libs)\n\n";
+
+################################################################
+# output the inter-dll dependencies and rules
+
+print NEWMAKE "# Inter-dll dependencies\n\n";
 
 my @depends = ();
 foreach $mod (sort keys %imports)
 {
-    next unless $#{$imports{$mod}} >= 0;
-    my $dep = sprintf("%s/lib%s.\@LIBEXT\@:", $directories{$mod}, $mod);
+    my $count = 1;
+    my $dep = sprintf("%s/lib%s.\$(LIBEXT): dummy", $directories{$mod}, $mod);
     foreach $i (@{$imports{$mod}})
     {
-        $dep .= sprintf(" lib%s.\@LIBEXT\@", $i);
+        if ($count++ >= 3)
+        {
+            $count = 0;
+            $dep .= " \\\n ";
+        }
+        $dep .= sprintf(" lib%s.\$(LIBEXT)", $i);
     }
-    push @depends, $dep . "\n";
+    $dep .= sprintf("\n\t\@cd %s && \$(MAKE) lib%s.\$(LIBEXT)\n\n",$directories{$mod}, $mod);
+    push @depends, $dep;
 }
 print NEWMAKE sort @depends;
 
+
+################################################################
+# makefile trailer
+
 print NEWMAKE <<EOF;
+# Misc rules
 
-\$(DLLFILES): dummy
-	\@cd `dirname \$\@` && \$(MAKE)
-
-\$(DLLFILES:%=%_install_): dummy
-	\@cd `dirname \$\@` && \$(MAKE) install
-
-\$(DLLFILES:%=%_uninstall_): dummy
-	\@cd `dirname \$\@` && \$(MAKE) uninstall
-
-\$(DLLFILES:%=%_checklink_): dummy
+\$(SUBDIRS:%=%/__checklink__): dummy
 	\@cd `dirname \$\@` && \$(MAKE) checklink
 
-install:: \$(DLLFILES:%=%_install_)
+\$(SUBDIRS:%=%/__debug_channels__): dummy
+	\@cd `dirname \$\@` && \$(MAKE) debug_channels
 
-uninstall:: \$(DLLFILES:%=%_uninstall_)
+install:: \$(SUBDIRS:%=%/__install__)
 
-checklink:: \$(DLLFILES:%=%_checklink_)
+uninstall:: \$(SUBDIRS:%=%/__uninstall__)
+
+checklink:: \$(SUBDIRS:%=%/__checklink__)
+
+debug_channels:: \$(SUBDIRS:%=%/__debug_channels__)
 EOF
 
 close NEWMAKE;