Created a small static library in ole/libuuid.a that contains all the
UUID definitions (with the help of Francois Gouget).

diff --git a/Make.rules.in b/Make.rules.in
index f53cba8..2830551 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -65,6 +65,7 @@
 LIBWINE   = -L$(TOPOBJDIR)/library -lwine
 LIBTSX11  = -L$(TOPOBJDIR)/tsx11 -lwine_tsx11
 LIBUNICODE= -L$(TOPOBJDIR)/unicode -lwine_unicode
+LIBUUID   = -L$(TOPOBJDIR)/ole -luuid
 
 @SET_MAKE@
 
diff --git a/Makefile.in b/Makefile.in
index e6c5c63..a409f77 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -33,6 +33,7 @@
 # Libraries (not dlls) to build
 LIBRARIES = \
 	library/libwine.$(LIBEXT) \
+	ole/libuuid.a \
 	tsx11/libwine_tsx11.$(LIBEXT) \
 	unicode/libwine_unicode.$(LIBEXT)
 
@@ -44,18 +45,10 @@
 
 # Sub-directories to run make depend/clean into
 SUBDIRS = \
-	debugger \
-	dlls \
-	documentation \
-	include \
-	library \
+	$(INSTALLSUBDIRS) \
 	libtest \
 	miscemu \
-	programs \
-	server \
-	tools \
-	tsx11 \
-	unicode
+	programs
 
 # Sub-directories to run make install into
 INSTALLSUBDIRS = \
@@ -64,6 +57,7 @@
 	documentation \
 	include \
 	library \
+	ole \
 	server \
 	tools \
 	tsx11 \
diff --git a/dlls/avifil32/Makefile.in b/dlls/avifil32/Makefile.in
index 4a97b8a..e303b87 100644
--- a/dlls/avifil32/Makefile.in
+++ b/dlls/avifil32/Makefile.in
@@ -4,6 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = avifil32
 ALTNAMES  = avifile
+EXTRALIBS = $(LIBUUID)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index a7d838d..f38334e 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -9,10 +9,8 @@
 #include "winnls.h"
 #include "mmsystem.h"
 #include "winerror.h"
-#include "debugtools.h"
-
-#include "initguid.h"
 #include "vfw.h"
+#include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(avifile);
 
diff --git a/dlls/commdlg/Makefile.in b/dlls/commdlg/Makefile.in
index b88f518..56442f3 100644
--- a/dlls/commdlg/Makefile.in
+++ b/dlls/commdlg/Makefile.in
@@ -4,6 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = comdlg32
 ALTNAMES  = commdlg
+EXTRALIBS = $(LIBUUID)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/commdlg/filedlgbrowser.c b/dlls/commdlg/filedlgbrowser.c
index b3a4653..f93d4a5 100644
--- a/dlls/commdlg/filedlgbrowser.c
+++ b/dlls/commdlg/filedlgbrowser.c
@@ -13,9 +13,6 @@
 #include "heap.h"
 #include "debugtools.h"
 
-#define INITGUID
-#include "initguid.h"
-#include "unknwn.h"
 #include "filedlgbrowser.h"
 #include "cdlg.h"
 #include "shlguid.h"
diff --git a/dlls/ddraw/Makefile.in b/dlls/ddraw/Makefile.in
index 3e5a53e..fcdc594 100644
--- a/dlls/ddraw/Makefile.in
+++ b/dlls/ddraw/Makefile.in
@@ -3,6 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = ddraw
+EXTRALIBS = $(LIBUUID)
 SOVERSION = 1.0
 IMPORTS   = user32 x11drv gdi32 kernel32
 
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index 24b37f7..d00a145 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -18,10 +18,6 @@
 #include "wine/exception.h"
 #include "debugtools.h"
 
-#include "initguid.h"
-#include "ddraw.h"
-#include "d3d.h"
-
 /* This for all the enumeration and creation of D3D-related objects */
 #include "ddraw_private.h"
 
diff --git a/dlls/dinput/Makefile.in b/dlls/dinput/Makefile.in
index 322e02a..71d264d 100644
--- a/dlls/dinput/Makefile.in
+++ b/dlls/dinput/Makefile.in
@@ -3,6 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dinput
+EXTRALIBS = $(LIBUUID)
 SOVERSION = 1.0
 IMPORTS   = user32 kernel32 ntdll
 
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 7a49625..6f43804 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -25,9 +25,6 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "windef.h"
-
-#include "initguid.h"
-#include "dinput.h"
 #include "dinput_private.h"
 
 DEFAULT_DEBUG_CHANNEL(dinput);
diff --git a/dlls/dplayx/Makefile.in b/dlls/dplayx/Makefile.in
index 951860f..08fd7d5 100644
--- a/dlls/dplayx/Makefile.in
+++ b/dlls/dplayx/Makefile.in
@@ -3,6 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dplayx
+EXTRALIBS = $(LIBUUID)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/dplayx/dplayx_main.c b/dlls/dplayx/dplayx_main.c
index 77c0da7..7e3e1ff 100644
--- a/dlls/dplayx/dplayx_main.c
+++ b/dlls/dplayx/dplayx_main.c
@@ -8,15 +8,10 @@
 #include "winerror.h"
 #include "winbase.h"
 #include "debugtools.h"
-
-#include "initguid.h"  /* To define the GUIDs */
-#include "dplaysp.h"
 #include "dplayx_global.h"
 
 DEFAULT_DEBUG_CHANNEL(dplay);
 
-DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
-
 static DWORD DPLAYX_dwProcessesAttached = 0;
 
 /* This is a globally exported variable at ordinal 6 of DPLAYX.DLL */
diff --git a/dlls/dsound/Makefile.in b/dlls/dsound/Makefile.in
index d9cc4ab..6aef5d8 100644
--- a/dlls/dsound/Makefile.in
+++ b/dlls/dsound/Makefile.in
@@ -3,6 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dsound
+EXTRALIBS = $(LIBUUID)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
index 115f019..39b98c0 100644
--- a/dlls/dsound/dsound_main.c
+++ b/dlls/dsound/dsound_main.c
@@ -40,8 +40,6 @@
 #include "mmsystem.h"
 #include "wine/windef16.h"
 #include "debugtools.h"
-
-#include "initguid.h"
 #include "dsound.h"
 #include "dsdriver.h"
 
diff --git a/dlls/ole32/Makefile.in b/dlls/ole32/Makefile.in
index b0234a5..5bfef5a 100644
--- a/dlls/ole32/Makefile.in
+++ b/dlls/ole32/Makefile.in
@@ -4,6 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = ole32
 ALTNAMES  = ole2 ole2nls ole2conv ole2prox ole2thk storage compobj
+EXTRALIBS = $(LIBUUID)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/ole32/oleobj.c b/dlls/ole32/oleobj.c
index 4c0838b..da02cf6 100644
--- a/dlls/ole32/oleobj.c
+++ b/dlls/ole32/oleobj.c
@@ -10,8 +10,6 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "debugtools.h"
-
-#include "initguid.h"
 #include "oleidl.h"
 
 DEFAULT_DEBUG_CHANNEL(ole);
diff --git a/dlls/oleaut32/Makefile.in b/dlls/oleaut32/Makefile.in
index 3f815a8..ca43a2d 100644
--- a/dlls/oleaut32/Makefile.in
+++ b/dlls/oleaut32/Makefile.in
@@ -4,6 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = oleaut32
 ALTNAMES  = ole2disp typelib
+EXTRALIBS = $(LIBUUID)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/oleaut32/oleaut.c b/dlls/oleaut32/oleaut.c
index e31e2ee..50e8b78 100644
--- a/dlls/oleaut32/oleaut.c
+++ b/dlls/oleaut32/oleaut.c
@@ -8,15 +8,11 @@
 #include "winuser.h"
 #include "winerror.h"
 
+#include "ole2.h"
 #include "heap.h"
 #include "ldt.h"
 #include "debugtools.h"
 
-#include "initguid.h"
-#include "oleauto.h"
-#include "ole2.h"
-#include "olectl.h"
-
 DEFAULT_DEBUG_CHANNEL(ole);
 
 static WCHAR	_delimiter[2] = {'!',0}; /* default delimiter apparently */
diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in
index 5dc905a..ef80323 100644
--- a/dlls/shell32/Makefile.in
+++ b/dlls/shell32/Makefile.in
@@ -4,7 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = shell32
 ALTNAMES  = shell
-EXTRALIBS = $(LIBUNICODE)
+EXTRALIBS = $(LIBUUID) $(LIBUNICODE)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
@@ -23,7 +23,6 @@
 	pidl.c \
 	shell32_main.c \
 	shell.c \
-	shellguid.c \
 	shelllink.c \
 	shlmenu.c \
 	shellole.c \
diff --git a/dlls/shell32/shellguid.c b/dlls/shell32/shellguid.c
deleted file mode 100644
index bad0aa0..0000000
--- a/dlls/shell32/shellguid.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- *  Shell UID
- *
- *  1998 Juergen Schmied (jsch)  *  <juergen.schmied@metronet.de>
- *
- *  this in in a single file due to interfering definitions
- *
- */
-#include "winbase.h"
-
-#include "initguid.h"
-
-#include "shlwapi.h"
-#include "shlguid.h"
-#include "shlobj.h"
-#include "docobj.h"
diff --git a/dlls/shell32/shlfolder.c b/dlls/shell32/shlfolder.c
index 113a34d..1f1afb6 100644
--- a/dlls/shell32/shlfolder.c
+++ b/dlls/shell32/shlfolder.c
@@ -27,11 +27,7 @@
 #include "shell32_main.h"
 #include "shresdef.h"
 #include "shlwapi.h"
-
-#define INITGUID
-#include "initguid.h"
 #include "shellfolder.h"
-#include "wine/obj_queryassociations.h"
 
 DEFAULT_DEBUG_CHANNEL(shell);
 
diff --git a/dlls/shlwapi/Makefile.in b/dlls/shlwapi/Makefile.in
index 2f484ad..0ed6fd8 100644
--- a/dlls/shlwapi/Makefile.in
+++ b/dlls/shlwapi/Makefile.in
@@ -3,7 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = shlwapi
-EXTRALIBS = $(LIBUNICODE)
+EXTRALIBS = $(LIBUUID) $(LIBUNICODE)
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/shlwapi/shlwapi_main.c b/dlls/shlwapi/shlwapi_main.c
index 05fa3e7..3ffea70 100644
--- a/dlls/shlwapi/shlwapi_main.c
+++ b/dlls/shlwapi/shlwapi_main.c
@@ -8,10 +8,6 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "debugtools.h"
-
-#include "initguid.h"
-#include "wine/obj_base.h"
-#include "wine/obj_storage.h"
 #include "shlwapi.h"
 
 DEFAULT_DEBUG_CHANNEL(shell);
diff --git a/include/dplay.h b/include/dplay.h
index 1d409aa..e22da01 100644
--- a/include/dplay.h
+++ b/include/dplay.h
@@ -352,7 +352,10 @@
     DWORD       dwMinorVersion, /* Minor # of driver spec in lpguidSP */ 
     LPVOID      lpContext);     /* User given */
 
-typedef const GUID   *LPCGUID;
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
 
 typedef const DPNAME *LPCDPNAME;
 
diff --git a/ole/Makefile.in b/ole/Makefile.in
index 64f114c..6e63d43 100644
--- a/ole/Makefile.in
+++ b/ole/Makefile.in
@@ -6,13 +6,26 @@
 MODULE    = ole
 
 C_SRCS = \
-	ole2nls.c 
+	ole2nls.c \
+	uuid.c
 
-all: $(MODULE).o
+all: $(MODULE).o libuuid.a
 
 @MAKE_RULES@
 
-$(MODULE).o: $(OBJS) Makefile.in $(TOPSRCDIR)/Make.rules.in
-	$(LDCOMBINE) $(OBJS) -o $@
+$(MODULE).o: ole2nls.o Makefile.in $(TOPSRCDIR)/Make.rules.in
+	$(LDCOMBINE) ole2nls.o -o $@
+
+libuuid.a: uuid.o
+	$(RM) $@
+	$(AR) $@ uuid.o
+	$(RANLIB) $@
+
+install: libuuid.a
+	[ -d $(libdir) ] || $(MKDIR) $(libdir)
+	$(INSTALL_DATA) libuuid.a $(libdir)/libuuid.a
+
+uninstall::
+	cd $(libdir) && $(RM) libuuid.a
 
 ### Dependencies:
diff --git a/ole/uuid.c b/ole/uuid.c
new file mode 100644
index 0000000..b7c1c9c
--- /dev/null
+++ b/ole/uuid.c
@@ -0,0 +1,51 @@
+/*
+ * GUID definitions
+ */
+
+#include "initguid.h"
+
+/* GUIDs defined in uuids.lib */
+
+DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+
+#include "windef.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
+
+#include "objbase.h"
+#include "servprov.h"
+
+#include "oleauto.h"
+#include "oleidl.h"
+#include "objidl.h"
+#include "olectl.h"
+
+#include "ocidl.h"
+
+#include "docobj.h"
+
+#include "shlguid.h"
+#include "shlobj.h"
+#include "wine/obj_queryassociations.h"
+
+/* FIXME: cguids declares GUIDs but does not define their values */
+
+
+
+/* GUIDs defined in dxguid.lib */
+
+#include "d3d.h"
+#include "ddraw.h"
+#include "dsound.h"
+#include "dplay.h"
+#include "dplobby.h"
+#include "dinput.h"
+
+/* other GUIDs */
+
+#include "vfw.h"
+
+/* GUIDs not declared in an exported header file */
+DEFINE_GUID(IID_IDirectPlaySP,0xc9f6360,0xcc61,0x11cf,0xac,0xec,0x00,0xaa,0x00,0x68,0x86,0xe3);
+DEFINE_GUID(IID_ISFHelper,0x1fe68efb,0x1874,0x9812,0x56,0xdc,0x00,0x00,0x00,0x00,0x00,0x00);