From 1dd3cc8c0227960c12d1e7b332a6242eca9a749b Mon Sep 17 00:00:00 2001 From: "Paul M. Rodriguez" Date: Mon, 28 Nov 2022 08:30:40 -0600 Subject: [PATCH] Sort includes in multi-file compilation --- src/synthesiser/GenDb.cpp | 8 ++++---- src/synthesiser/GenDb.h | 28 +++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/synthesiser/GenDb.cpp b/src/synthesiser/GenDb.cpp index a8f6831d667..eb03c058aa7 100644 --- a/src/synthesiser/GenDb.cpp +++ b/src/synthesiser/GenDb.cpp @@ -254,16 +254,16 @@ std::string GenDb::emitMultipleFilesInDir(fs::path dir, std::vector& t auto genHeader = [&](std::ofstream& hpp, std::ofstream& cpp, GenFile& gen) { hpp << "#pragma once\n"; globalHeader(hpp); - for (const std::string& inc : gen.getDeclIncludes()) { + for (const std::string& inc : gen.getSortedDeclIncludes()) { hpp << "#include " << inc << "\n"; } - for (GenFile* dep : gen.getDeclDependencies()) { + for (GenFile* dep : gen.getSortedDeclDependencies()) { hpp << "#include " << dep->getHeader() << "\n"; } - for (const std::string& inc : gen.getIncludes()) { + for (const std::string& inc : gen.getSortedIncludes()) { cpp << "#include " << inc << "\n"; } - for (GenFile* dep : gen.getDependencies()) { + for (GenFile* dep : gen.getSortedDependencies()) { cpp << "#include " << dep->getHeader() << "\n"; } cpp << "#include " << gen.getHeader() << "\n"; diff --git a/src/synthesiser/GenDb.h b/src/synthesiser/GenDb.h index 67af750011a..7558207ea09 100644 --- a/src/synthesiser/GenDb.h +++ b/src/synthesiser/GenDb.h @@ -18,6 +18,7 @@ #pragma once #include "souffle/utility/Types.h" +#include #include #include #include @@ -47,7 +48,7 @@ class GenFile { return basename; }; - fs::path getHeader() { + fs::path getHeader() const { fs::path header = basename; return header.concat(".hpp"); } @@ -70,15 +71,40 @@ class GenFile { std::set& getDeclIncludes() { return decl_includes; } + std::vector getSortedDeclIncludes() { + std::vector v{decl_includes.begin(), decl_includes.end()}; + std::sort(v.begin(), v.end()); + return v; + } + std::set& getIncludes() { return includes; } + std::vector getSortedIncludes() { + std::vector v{includes.begin(), includes.end()}; + std::sort(v.begin(), v.end()); + return v; + } + std::set& getDeclDependencies() { return decl_dependencies; } + std::vector getSortedDeclDependencies() { + std::vector v{decl_dependencies.begin(), decl_dependencies.end()}; + std::sort(v.begin(), v.end(), + [](const GenFile* a, const GenFile* b) { return a->getHeader() < b->getHeader(); }); + return v; + } + std::set& getDependencies() { return dependencies; } + std::vector getSortedDependencies() { + std::vector v{dependencies.begin(), dependencies.end()}; + std::sort(v.begin(), v.end(), + [](const GenFile* a, const GenFile* b) { return a->getHeader() < b->getHeader(); }); + return v; + } private: fs::path basename;