Build most dlls as separate shared libraries.

diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index a0a9cdb..2b9a8a1 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -1,62 +1,258 @@
-SUBDIRS = \
-	advapi32 \
-	avifil32 \
-	comctl32 \
-	commdlg \
-	crtdll \
-	dciman32 \
-	display \
-	dplayx \
-	dsound \
-	icmp \
-	imagehlp \
-	imm32 \
-	lzexpand \
-	mouse \
-	mpr \
-	msacm \
-	msacm32 \
-	msnet32 \
-	msvideo \
-	ntdll \
-	odbc32 \
-	ole32 \
-	oleaut32 \
-	olecli \
-	oledlg \
-	olesvr \
-	psapi \
-	setupx \
-	shell32 \
-	sound \
-	stress \
-	tapi32 \
-	version \
-	win32s \
-	win87em \
-	winaspi \
-	windebug \
-	wing \
-	winmm \
-	winsock \
-	winspool \
-	wnaspi32
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
 
-all: $(SUBDIRS)
+DLLFILES = \
+	avifil32/libavifil32.@LIBEXT@ \
+	comctl32/libcomctl32.@LIBEXT@ \
+	commdlg/libcomdlg32.@LIBEXT@ \
+	dciman32/libdciman32.@LIBEXT@ \
+	dplayx/libdplayx.@LIBEXT@ \
+	dsound/libdsound.@LIBEXT@ \
+	icmp/libicmp.@LIBEXT@ \
+	imagehlp/libimagehlp.@LIBEXT@ \
+	imm32/libimm32.@LIBEXT@ \
+	lzexpand/liblz32.@LIBEXT@ \
+	msacm/libmsacm.@LIBEXT@ \
+	msacm32/libmsacm32.@LIBEXT@ \
+	msnet32/libmsnet32.@LIBEXT@ \
+	msvideo/libmsvfw32.@LIBEXT@ \
+	odbc32/libodbc32.@LIBEXT@ \
+	ole32/libole32.@LIBEXT@ \
+	oleaut32/liboleaut32.@LIBEXT@ \
+	olecli/libolecli32.@LIBEXT@ \
+	oledlg/liboledlg.@LIBEXT@ \
+	olesvr/libolesvr32.@LIBEXT@ \
+	psapi/libpsapi.@LIBEXT@ \
+	rasapi32/librasapi32.@LIBEXT@ \
+	setupx/libsetupx.@LIBEXT@ \
+	shell32/libshell32.@LIBEXT@ \
+	sound/libsound.@LIBEXT@ \
+	stress/libstress.@LIBEXT@ \
+	tapi32/libtapi32.@LIBEXT@ \
+	version/libversion.@LIBEXT@ \
+	win32s/libwin32s.@LIBEXT@ \
+	win87em/libwin87em.@LIBEXT@ \
+	windebug/libwindebug.@LIBEXT@ \
+	wing/libwing.@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@ \
+	winsock/libwsock32.@LIBEXT@ \
+	winspool/libwinspool.@LIBEXT@ \
+	wnaspi32/libwnaspi32.@LIBEXT@
 
-$(SUBDIRS): dummy
-	@cd $@; $(MAKE)
+all: dlls
 
-depend:
-	for i in $(SUBDIRS); do (cd $$i && $(MAKE) depend) || exit 1; done
+@MAKE_RULES@
 
-install:
-	for i in $(SUBDIRS); do (cd $$i && $(MAKE) install) || exit 1; done
+dlls: $(DLLS:%=lib%.@LIBEXT@)
 
-uninstall:
-	for i in $(SUBDIRS); do (cd $$i && $(MAKE) uninstall) || exit 1; done
+# Map library name to directory
 
-clean:
-	for i in $(SUBDIRS); do (cd $$i && $(MAKE) clean) || exit 1; done
+libavifil32.@LIBEXT@: avifil32/libavifil32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) avifil32/libavifil32.@LIBEXT@ $@
 
-dummy:
+libcomctl32.@LIBEXT@: comctl32/libcomctl32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) comctl32/libcomctl32.@LIBEXT@ $@
+
+libcomdlg32.@LIBEXT@: commdlg/libcomdlg32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) commdlg/libcomdlg32.@LIBEXT@ $@
+
+libdciman32.@LIBEXT@: dciman32/libdciman32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) dciman32/libdciman32.@LIBEXT@ $@
+
+libdplayx.@LIBEXT@: dplayx/libdplayx.@LIBEXT@
+	$(RM) $@
+	$(LN_S) dplayx/libdplayx.@LIBEXT@ $@
+
+libdsound.@LIBEXT@: dsound/libdsound.@LIBEXT@
+	$(RM) $@
+	$(LN_S) dsound/libdsound.@LIBEXT@ $@
+
+libicmp.@LIBEXT@: icmp/libicmp.@LIBEXT@
+	$(RM) $@
+	$(LN_S) icmp/libicmp.@LIBEXT@ $@
+
+libimagehlp.@LIBEXT@: imagehlp/libimagehlp.@LIBEXT@
+	$(RM) $@
+	$(LN_S) imagehlp/libimagehlp.@LIBEXT@ $@
+
+libimm32.@LIBEXT@: imm32/libimm32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) imm32/libimm32.@LIBEXT@ $@
+
+liblz32.@LIBEXT@: lzexpand/liblz32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) lzexpand/liblz32.@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@ $@
+
+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@ $@
+
+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@ $@
+
+libmsacm.@LIBEXT@: msacm/libmsacm.@LIBEXT@
+	$(RM) $@
+	$(LN_S) msacm/libmsacm.@LIBEXT@ $@
+
+libmsacm.drv.@LIBEXT@: winmm/wavemap/libmsacm.drv.@LIBEXT@
+	$(RM) $@
+	$(LN_S) winmm/wavemap/libmsacm.drv.@LIBEXT@ $@
+
+libmsacm32.@LIBEXT@: msacm32/libmsacm32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) msacm32/libmsacm32.@LIBEXT@ $@
+
+libmsnet32.@LIBEXT@: msnet32/libmsnet32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) msnet32/libmsnet32.@LIBEXT@ $@
+
+libmsvfw32.@LIBEXT@: msvideo/libmsvfw32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) msvideo/libmsvfw32.@LIBEXT@ $@
+
+libodbc32.@LIBEXT@: odbc32/libodbc32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) odbc32/libodbc32.@LIBEXT@ $@
+
+libole32.@LIBEXT@: ole32/libole32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) ole32/libole32.@LIBEXT@ $@
+
+liboleaut32.@LIBEXT@: oleaut32/liboleaut32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) oleaut32/liboleaut32.@LIBEXT@ $@
+
+libolecli32.@LIBEXT@: olecli/libolecli32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) olecli/libolecli32.@LIBEXT@ $@
+
+liboledlg.@LIBEXT@: oledlg/liboledlg.@LIBEXT@
+	$(RM) $@
+	$(LN_S) oledlg/liboledlg.@LIBEXT@ $@
+
+libolesvr32.@LIBEXT@: olesvr/libolesvr32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) olesvr/libolesvr32.@LIBEXT@ $@
+
+libpsapi.@LIBEXT@: psapi/libpsapi.@LIBEXT@
+	$(RM) $@
+	$(LN_S) psapi/libpsapi.@LIBEXT@ $@
+
+librasapi32.@LIBEXT@: rasapi32/librasapi32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) rasapi32/librasapi32.@LIBEXT@ $@
+
+libsetupx.@LIBEXT@: setupx/libsetupx.@LIBEXT@
+	$(RM) $@
+	$(LN_S) setupx/libsetupx.@LIBEXT@ $@
+
+libshell32.@LIBEXT@: shell32/libshell32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) shell32/libshell32.@LIBEXT@ $@
+
+libsound.@LIBEXT@: sound/libsound.@LIBEXT@
+	$(RM) $@
+	$(LN_S) sound/libsound.@LIBEXT@ $@
+
+libstress.@LIBEXT@: stress/libstress.@LIBEXT@
+	$(RM) $@
+	$(LN_S) stress/libstress.@LIBEXT@ $@
+
+libtapi32.@LIBEXT@: tapi32/libtapi32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) tapi32/libtapi32.@LIBEXT@ $@
+
+libversion.@LIBEXT@: version/libversion.@LIBEXT@
+	$(RM) $@
+	$(LN_S) version/libversion.@LIBEXT@ $@
+
+libwin32s.@LIBEXT@: win32s/libwin32s.@LIBEXT@
+	$(RM) $@
+	$(LN_S) win32s/libwin32s.@LIBEXT@ $@
+
+libwin87em.@LIBEXT@: win87em/libwin87em.@LIBEXT@
+	$(RM) $@
+	$(LN_S) win87em/libwin87em.@LIBEXT@ $@
+
+libwindebug.@LIBEXT@: windebug/libwindebug.@LIBEXT@
+	$(RM) $@
+	$(LN_S) windebug/libwindebug.@LIBEXT@ $@
+
+libwineoss.drv.@LIBEXT@: winmm/wineoss/libwineoss.drv.@LIBEXT@
+	$(RM) $@
+	$(LN_S) winmm/wineoss/libwineoss.drv.@LIBEXT@ $@
+
+libwing.@LIBEXT@: wing/libwing.@LIBEXT@
+	$(RM) $@
+	$(LN_S) wing/libwing.@LIBEXT@ $@
+
+libwinspool.@LIBEXT@: winspool/libwinspool.@LIBEXT@
+	$(RM) $@
+	$(LN_S) winspool/libwinspool.@LIBEXT@ $@
+
+libwnaspi32.@LIBEXT@: wnaspi32/libwnaspi32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) wnaspi32/libwnaspi32.@LIBEXT@ $@
+
+libwsock32.@LIBEXT@: winsock/libwsock32.@LIBEXT@
+	$(RM) $@
+	$(LN_S) winsock/libwsock32.@LIBEXT@ $@
+
+$(DLLFILES): dummy
+	@cd `dirname $@` && $(MAKE)
+
+$(DLLFILES:%=%_depend_): dummy
+	@cd `dirname $@` && $(MAKE) depend
+
+$(DLLFILES:%=%_install_): dummy
+	@cd `dirname $@` && $(MAKE) install
+
+$(DLLFILES:%=%_uninstall_): dummy
+	@cd `dirname $@` && $(MAKE) uninstall
+
+$(DLLFILES:%=%_checklink_): dummy
+	@cd `dirname $@` && $(MAKE) checklink
+
+$(DLLFILES:%=%_clean_): dummy
+	@cd `dirname $@` && $(MAKE) clean
+
+depend:: $(DLLFILES:%=%_depend_)
+
+install:: $(DLLFILES:%=%_install_)
+
+uninstall:: $(DLLFILES:%=%_uninstall_)
+
+checklink:: $(DLLFILES:%=%_checklink_)
+
+clean:: $(DLLFILES:%=%_clean_)
+	$(RM) $(DLLLIBS)