[doxygen] - bz#629286, apply patch to fix broken thread handling - bz#627553, #define in included file in diff

Than Ngo than at fedoraproject.org
Wed Sep 8 12:50:08 UTC 2010


commit 633de6631603e0a6b791e7d7289ff49cb5f15fee
Author: Than Ngo <than at redhat.com>
Date:   Wed Sep 8 15:00:43 2010 +0200

    - bz#629286, apply patch to fix broken thread handling
    - bz#627553, #define in included file in different directory not handled properly
    - Inherited documentation doesn't work in case of multiple inheritance

 doxygen-1.7.1-bz#627553.patch      |   14 +++++++++
 doxygen-1.7.1-dot-crash.patch      |   54 ++++++++++++++++++++++++++++++++++++
 doxygen-1.7.1-doxygen#625531.patch |   29 +++++++++++++++++++
 doxygen.spec                       |   14 ++++++++-
 4 files changed, 110 insertions(+), 1 deletions(-)
---
diff --git a/doxygen-1.7.1-bz#627553.patch b/doxygen-1.7.1-bz#627553.patch
new file mode 100644
index 0000000..fb61758
--- /dev/null
+++ b/doxygen-1.7.1-bz#627553.patch
@@ -0,0 +1,14 @@
+--- doxygen-1.7.1/src/pre.l	2010-06-18 12:04:30.000000000 +0200
++++ doxygen-1.7.1/src/pre.l.include	2010-08-26 12:36:27.000000000 +0200
+@@ -128,6 +128,11 @@ static void setFileName(const char *name
+   QFileInfo fi(name);
+   g_yyFileName=convertToQCString(fi.absFilePath());
+   g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig);
++  if (g_yyFileDef==0) // if this is not an input file check if it is an
++                      // include file
++  {
++    g_yyFileDef=findFileDef(Doxygen::includeNameDict,g_yyFileName,ambig);
++  }
+   //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n",
+   //    name,g_yyFileName.data(),g_yyFileDef);
+   if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
diff --git a/doxygen-1.7.1-dot-crash.patch b/doxygen-1.7.1-dot-crash.patch
new file mode 100644
index 0000000..a146fe8
--- /dev/null
+++ b/doxygen-1.7.1-dot-crash.patch
@@ -0,0 +1,54 @@
+--- a/src/dot.cpp
++++ b/src/dot.cpp
+@@ -734,6 +734,8 @@
+ 
+ //--------------------------------------------------------------------
+ 
++#define DIRECT_DOT_RUN 1
++
+ DotManager *DotManager::m_theInstance = 0;
+ 
+ DotManager *DotManager::instance()
+@@ -750,6 +752,7 @@
+   m_dotRuns.setAutoDelete(TRUE);
+   m_dotMaps.setAutoDelete(TRUE);
+   m_queue = new DotRunnerQueue;
++#ifndef DIRECT_DOT_RUN  
+   int i;
+   int numThreads = QMIN(32,Config_getInt("DOT_NUM_THREADS"));
+   if (numThreads==0) numThreads = QMAX(1,QThread::idealThreadCount()+1);
+@@ -767,6 +770,7 @@
+     }
+   }
+   ASSERT(m_workers.count()>0);
++#endif  
+ }
+ 
+ DotManager::~DotManager()
+@@ -834,11 +838,17 @@
+   portable_sysTimerStart();
+   // fill work queue with dot operations
+   DotRunner *dr;
++  int prev=1;
+   for (li.toFirst();(dr=li.current());++li)
+   {
++#ifdef DIRECT_DOT_RUN  
++    msg("Running dot for graph %d/%d\n",prev,numDotRuns);
++    if(!dr->run()) return FALSE;
++    prev++;
++  };  
++#else  
+     m_queue->enqueue(dr);
+   }
+-  int prev=1;
+   // wait for the queue to become empty
+   while ((i=m_queue->count())>0)
+   {
+@@ -865,6 +875,7 @@
+   {
+     m_workers.at(i)->wait();
+   }
++#endif  
+   portable_sysTimerStop();
+   if (setPath)
+   {
diff --git a/doxygen-1.7.1-doxygen#625531.patch b/doxygen-1.7.1-doxygen#625531.patch
new file mode 100644
index 0000000..af16c33
--- /dev/null
+++ b/doxygen-1.7.1-doxygen#625531.patch
@@ -0,0 +1,29 @@
+diff -up doxygen-1.7.1/src/classdef.cpp.me doxygen-1.7.1/src/classdef.cpp
+--- doxygen-1.7.1/src/classdef.cpp.me	2010-09-08 14:55:33.000000000 +0200
++++ doxygen-1.7.1/src/classdef.cpp	2010-09-08 14:58:02.000000000 +0200
+@@ -2162,20 +2162,18 @@ bool ClassDef::isBaseClass(ClassDef *bcd
+   }
+   if (baseClasses())
+   {
+-    //BaseClassListIterator bcli(*baseClasses());
+-    //for ( ; bcli.current() && !found ; ++bcli)
+-    BaseClassDef *bcdi = baseClasses()->first();
+-    while (bcdi)
++    // Beware: trying to optimise the iterator away using ->first() & ->next()
++    // causes bug 625531
++    BaseClassListIterator bcli(*baseClasses());
++    for ( ; bcli.current() && !found ; ++bcli)
+     {
+-      //ClassDef *ccd=bcli.current()->classDef;
+-      ClassDef *ccd=bcdi->classDef;
++      ClassDef *ccd=bcli.current()->classDef;
+       if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster();
+       //printf("isBaseClass() baseclass %s\n",ccd->name().data());
+       if (ccd==bcd) 
+         found=TRUE;
+       else 
+         found=ccd->isBaseClass(bcd,followInstances,level+1);
+-      bcdi = baseClasses()->next();
+     }
+   }
+   return found;
diff --git a/doxygen.spec b/doxygen.spec
index 1a0867e..7375667 100644
--- a/doxygen.spec
+++ b/doxygen.spec
@@ -1,12 +1,16 @@
 Summary: A documentation system for C/C++
 Name: doxygen
 Version: 1.7.1
-Release: 1%{?dist}
+Release: 2%{?dist}
 Epoch: 1
 Url: http://www.stack.nl/~dimitri/doxygen/index.html
 Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
 Patch1: doxygen-1.7.1-config.patch
 Patch2: doxygen-1.6.2-timestamp.patch
+# debian patch
+Patch3: doxygen-dot-crash.patch
+Patch4: doxygen-1.7.1-bz#627553.patch
+Patch5: doxygen-1.7.1-doxygen#625531.patch
 
 Group: Development/Tools
 # No version is specified.
@@ -45,6 +49,9 @@ are used by doxygen.
 
 %patch1 -p1 -b .config
 %patch2 -p1 -b .timestamp
+%patch3 -p1 -b .crash
+%patch4 -p1 -b .bz#627553
+%patch5 -p1 -b .doxygen#625531
 
 %build
 unset QTDIR
@@ -97,6 +104,11 @@ rm -rf %{buildroot}
 %{_mandir}/man1/doxywizard*
 
 %changelog
+* Wed Sep 08 2010 Than Ngo <than at redhat.com> - 1:1.7.1-2
+- bz#629286, apply patch to fix broken thread handling
+- bz#627553, #define in included file in different directory not handled properly
+- Inherited documentation doesn't work in case of multiple inheritance
+
 * Mon Jul 19 2010 Than Ngo <than at redhat.com> - 1.7.1-1
 - 1.7.1
 


More information about the scm-commits mailing list