doxygen/predictable-and-reproducibl...

113 lines
3.8 KiB
Diff

diff -ur doxygen-1.9.2.orig/src/dirdef.cpp doxygen-1.9.2/src/dirdef.cpp
--- doxygen-1.9.2.orig/src/dirdef.cpp 2021-08-17 19:10:43.000000000 +0200
+++ doxygen-1.9.2/src/dirdef.cpp 2021-09-12 21:25:51.878853938 +0200
@@ -47,7 +47,7 @@
virtual bool isLinkableInProject() const;
virtual bool isLinkable() const;
virtual QCString displayName(bool=TRUE) const { return m_dispName; }
- virtual const QCString &shortName() const { return m_shortName; }
+ virtual const QCString shortName() const { return m_shortName; }
virtual void addSubDir(DirDef *subdir);
virtual const FileList &getFiles() const { return m_fileList; }
virtual void addFile(const FileDef *fd);
@@ -66,6 +66,7 @@
virtual void setDiskName(const QCString &name) { m_diskName = name; }
virtual void sort();
virtual void setParent(DirDef *parent);
+ virtual void setDirCount(int count);
virtual void setLevel();
virtual void addUsesDependency(const DirDef *usedDir,const FileDef *srcFd,
const FileDef *dstFd,bool inherited);
@@ -92,7 +93,7 @@
QCString m_shortName;
QCString m_diskName;
FileList m_fileList; // list of files in the group
- int m_dirCount;
+ int m_dirCount = -1;
int m_level;
DirDef *m_parent;
UsedDirLinkedMap m_usedDirs;
@@ -107,8 +108,6 @@
//----------------------------------------------------------------------
// method implementation
-static int g_dirCount=0;
-
DirDefImpl::DirDefImpl(const QCString &path) : DefinitionMixin(path,1,1,path)
{
bool fullPathNames = Config_getBool(FULL_PATH_NAMES);
@@ -132,7 +131,6 @@
m_dispName = m_dispName.left(m_dispName.length()-1);
}
- m_dirCount = g_dirCount++;
m_level=-1;
m_parent=0;
}
@@ -163,6 +161,11 @@
m_parent=p;
}
+void DirDefImpl::setDirCount(int count)
+{
+ m_dirCount=count;
+}
+
void DirDefImpl::addFile(const FileDef *fd)
{
m_fileList.push_back(fd);
@@ -993,7 +996,6 @@
{
for (const auto &fd : *fn)
{
- //printf("buildDirectories %s\n",qPrint(fd->name()));
if (fd->getReference().isEmpty())
{
DirDef *dir;
@@ -1038,7 +1040,24 @@
std::sort(Doxygen::dirLinkedMap->begin(),
Doxygen::dirLinkedMap->end(),
[](const auto &d1,const auto &d2)
- { return qstricmp(d1->shortName(),d2->shortName()) < 0; });
+ {
+ QCString s1 = d1->shortName(), s2 = d2->shortName();
+ int i = qstricmp(s1,s2);
+ if (i==0) // if sort name are equal, sort on full path
+ {
+ QCString n1 = d1->name(), n2 = d2->name();
+ int n = qstricmp(n1,n2);
+ return n < 0;
+ }
+ return i < 0;
+ });
+
+ // set the directory count identifier
+ int dirCount=0;
+ for (const auto &dir : *Doxygen::dirLinkedMap)
+ {
+ dir->setDirCount(dirCount++);
+ }
computeCommonDirPrefix();
}
diff -ur doxygen-1.9.2.orig/src/dirdef.h doxygen-1.9.2/src/dirdef.h
--- doxygen-1.9.2.orig/src/dirdef.h 2021-05-12 20:51:20.000000000 +0200
+++ doxygen-1.9.2/src/dirdef.h 2021-09-12 21:25:42.394830066 +0200
@@ -95,7 +95,7 @@
virtual bool isLinkableInProject() const = 0;
virtual bool isLinkable() const = 0;
virtual QCString displayName(bool=TRUE) const = 0;
- virtual const QCString &shortName() const = 0;
+ virtual const QCString shortName() const = 0;
virtual void addSubDir(DirDef *subdir) = 0;
virtual const FileList &getFiles() const = 0;
virtual void addFile(const FileDef *fd) = 0;
@@ -115,6 +115,7 @@
virtual void writeTagFile(TextStream &t) = 0;
virtual void setDiskName(const QCString &name) = 0;
+ virtual void setDirCount(int count) = 0;
virtual void sort() = 0;
virtual void setParent(DirDef *parent) = 0;
virtual void setLevel() = 0;