Every other package these days seems to come with its own MD5
implementation. Try to trim this insanity, where we can...

	-mi

diff -ruN src/definition.cpp src/definition.cpp
--- src/definition.cpp	Sat Sep  1 13:11:48 2007
+++ src/definition.cpp	Mon Dec  3 01:25:59 2007
@@ -18,6 +18,7 @@
 #include "qtbc.h"
 #include <ctype.h>
 #include <qregexp.h>
+#include <sys/types.h>
 #include <md5.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -352,10 +353,8 @@
 
 bool Definition::_docsAlreadyAdded(const QString &doc)
 {
-  uchar md5_sig[16];
   QCString sigStr(33);
-  MD5Buffer((const unsigned char *)doc.data(),doc.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5Data((const unsigned char*)doc.data(),doc.length(),sigStr.data());
   if (m_impl->docSignatures.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
   {
     m_impl->docSignatures+=":"+sigStr;
diff -ruN src/dirdef.cpp src/dirdef.cpp
--- src/dirdef.cpp	Sun Jan 28 13:28:50 2007
+++ src/dirdef.cpp	Mon Jun 11 18:32:26 2007
@@ -1,3 +1,4 @@
+#include <sys/types.h>
 #include <md5.h>
 
 #include "dirdef.h"
@@ -73,10 +74,8 @@
   QCString result;
 
   // convert to md5 hash
-  uchar md5_sig[16];
   QCString sigStr(33);
-  MD5Buffer((const unsigned char *)anchor.data(),anchor.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5Data((const unsigned char *)anchor.data(),anchor.length(),sigStr.data());
   return sigStr;
 
   // old algorithm
diff -ruN src/dot.cpp src/dot.cpp
--- src/dot.cpp	Wed Mar 21 22:35:06 2007
+++ src/dot.cpp	Mon Jun 11 18:33:40 2007
@@ -38,6 +38,7 @@
 #include <qdir.h>
 #include <qfile.h>
 #include <qtextstream.h>
+#include <sys/types.h>
 #include <md5.h>
 
 #define MAP_CMD "cmap"
@@ -1204,10 +1205,8 @@
     }
     writeGraphFooter(md5stream);
     resetReNumbering();
-    uchar md5_sig[16];
     QCString sigStr(33);
-    MD5Buffer((const unsigned char *)theGraph.ascii(),theGraph.length(),md5_sig);
-    MD5SigToString(md5_sig,sigStr.data(),33);
+    MD5Data((const unsigned char *)theGraph.ascii(),theGraph.length(),sigStr.data());
     if (checkAndUpdateMd5Signature(baseName,sigStr) || 
         !QFileInfo(mapName).exists())
     { 
@@ -1833,10 +1832,8 @@
     }
   }
   writeGraphFooter(md5stream);
-  uchar md5_sig[16];
   QCString sigStr(33);
-  MD5Buffer((const unsigned char *)buf.ascii(),buf.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5Data((const unsigned char *)buf.ascii(),buf.length(),sigStr.data());
   if (reNumber)
   {
     resetReNumbering();
diff -ruN src/doxygen.pro.in src/doxygen.pro.in
--- src/doxygen.pro.in	Tue Feb 20 19:27:35 2007
+++ src/doxygen.pro.in	Mon Jun 11 18:34:03 2007
@@ -18,7 +18,7 @@
 CONFIG       =	console warn_on $extraopts
 HEADERS      =	doxygen.h 
 SOURCES      =	main.cpp 
-unix:LIBS                  += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 
+unix:LIBS                  += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd 
 win32:INCLUDEPATH          += .
 win32-mingw:LIBS           += -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 
 win32-msvc:LIBS            += qtools.lib png.lib md5.lib doxygen.lib doxycfg.lib shell32.lib 
@@ -28,7 +28,7 @@
 win32:TMAKE_CXXFLAGS       += -DQT_NODLL
 win32-g++:LIBS             = -L../lib -ldoxygen -ldoxycfg -lqtools -lpng -lmd5 
 win32-g++:TMAKE_CXXFLAGS   += -fno-exceptions -fno-rtti
-INCLUDEPATH                += ../qtools ../libpng ../libmd5 .
+INCLUDEPATH                += ../qtools .
 #win32-g++:INCLUDEPATH      -= ../libpng
 DESTDIR                    =  ../bin
 TARGET                     =  doxygen
diff -ruN src/memberdef.cpp src/memberdef.cpp
--- src/memberdef.cpp	Wed Mar 14 15:49:45 2007
+++ src/memberdef.cpp	Mon Jun 11 18:32:26 2007
@@ -17,6 +17,7 @@
 
 #include <stdio.h>
 #include <qregexp.h>
+#include <sys/types.h>
 #include <assert.h>
 #include <md5.h>
 #include "memberdef.h"
@@ -2361,10 +2362,8 @@
   memAnchor.prepend(definition());
   
   // convert to md5 hash
-  uchar md5_sig[16];
   QCString sigStr(33);
-  MD5Buffer((const unsigned char *)memAnchor.data(),memAnchor.length(),md5_sig);
-  MD5SigToString(md5_sig,sigStr.data(),33);
+  MD5Data((const unsigned char *)memAnchor.data(),memAnchor.length(),sigStr.data());
   m_impl->anc = sigStr;
 }
 
diff -ruN src/util.cpp src/util.cpp
--- src/util.cpp	Wed Mar 14 13:36:26 2007
+++ src/util.cpp	Mon Jun 11 18:32:26 2007
@@ -19,6 +19,7 @@
 #include <ctype.h>
 #include <errno.h>
 
+#include <sys/types.h>
 #include <md5.h>
 
 #include "qtbc.h"
@@ -4561,16 +4562,16 @@
     if (resultLen>=128) // prevent names that cannot be created!
     {
       // third algorithm based on MD5 hash
-      uchar md5_sig[16];
       QCString sigStr(33);
-      MD5Buffer((const unsigned char *)result.data(),resultLen,md5_sig);
-      MD5SigToString(md5_sig,sigStr.data(),33);
+      MD5Data((const unsigned char *)result.data(),resultLen,sigStr.data());
       result=result.left(128-32)+sigStr; 
     }
   }
   if (createSubdirs)
   {
+#if MAP_ALGO==ALGO_COUNT || MAP_ALGO==ALGO_CRC16
     int l1Dir=0,l2Dir=0;
+#endif
 
 #if MAP_ALGO==ALGO_COUNT 
     // old algorithm, has the problem that after regeneration the
@@ -4601,12 +4602,13 @@
     l2Dir = (dirNum>>4)&0xff;
 #elif MAP_ALGO==ALGO_MD5
     // third algorithm based on MD5 hash
-    uchar md5_sig[16];
-    MD5Buffer((const unsigned char *)result.data(),result.length(),md5_sig);
-    l1Dir = md5_sig[14]&0xf;
-    l2Dir = md5_sig[15];
+    char md5[33];
+    MD5Data((const unsigned char *)result.data(),result.length(),md5);
+    result.prepend(QCString().sprintf("d%c/d%c%c/",md5[29],md5[30],md5[31]));
 #endif
+#if MAP_ALGO==ALGO_COUNT || MAP_ALGO==ALGO_CRC16
     result.prepend(QCString().sprintf("d%x/d%02x/",l1Dir,l2Dir));
+#endif
   }
   return result;
 }
