build: ship clang compiler header within Sourcetrail package on macOS and Linux
* replace path to local compiler headers with packaged ones in include path detection * added app settings migration to replace local compiler header path with path to packaged headers
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
#include "utility/UserPaths.h"
|
||||
#include "utility/utility.h"
|
||||
#include "utility/utilityApp.h"
|
||||
#include "utility/utilityCxx.h"
|
||||
#include "utility/utilityPathDetection.h"
|
||||
#include "utility/Version.h"
|
||||
#include "version.h"
|
||||
@@ -126,6 +127,12 @@ void prefillCxxHeaderPaths()
|
||||
{
|
||||
std::shared_ptr<CombinedPathDetector> cxxHeaderDetector = utility::getCxxHeaderPathDetector();
|
||||
std::vector<FilePath> paths = cxxHeaderDetector->getPaths();
|
||||
|
||||
if (utility::getOsType() != OS_WINDOWS)
|
||||
{
|
||||
paths = utility::replaceOrAddCxxCompilerHeaderPath(paths);
|
||||
}
|
||||
|
||||
if (!paths.empty())
|
||||
{
|
||||
MessageStatus(L"Ran C/C++ header path detection, found " + std::to_wstring(paths.size()) + L" path" +
|
||||
|
||||
@@ -529,7 +529,7 @@ add_files(
|
||||
utility/scheduling/TaskScheduler.cpp
|
||||
utility/scheduling/TaskScheduler.h
|
||||
utility/scheduling/TaskSetValue.h
|
||||
|
||||
|
||||
utility/sonargraph/SonargraphProject.cpp
|
||||
utility/sonargraph/SonargraphProject.h
|
||||
utility/sonargraph/SonargraphSoftwareSystem.cpp
|
||||
@@ -594,6 +594,8 @@ add_files(
|
||||
utility/UserPaths.h
|
||||
utility/utility.cpp
|
||||
utility/utility.h
|
||||
utility/utilityCxx.cpp
|
||||
utility/utilityCxx.h
|
||||
utility/utilityFile.cpp
|
||||
utility/utilityFile.h
|
||||
utility/utilityLibrary.h
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
#include "utility/Status.h"
|
||||
#include "utility/TimeStamp.h"
|
||||
#include "utility/utility.h"
|
||||
#include "utility/utilityCxx.h"
|
||||
#include "utility/UserPaths.h"
|
||||
#include "utility/Version.h"
|
||||
|
||||
const size_t ApplicationSettings::VERSION = 4;
|
||||
const size_t ApplicationSettings::VERSION = 5;
|
||||
|
||||
std::shared_ptr<ApplicationSettings> ApplicationSettings::s_instance;
|
||||
|
||||
@@ -34,9 +35,9 @@ ApplicationSettings::~ApplicationSettings()
|
||||
{
|
||||
}
|
||||
|
||||
bool ApplicationSettings::load(const FilePath& filePath)
|
||||
bool ApplicationSettings::load(const FilePath& filePath, bool readOnly)
|
||||
{
|
||||
bool loaded = Settings::load(filePath);
|
||||
bool loaded = Settings::load(filePath, readOnly);
|
||||
if (!loaded)
|
||||
{
|
||||
return false;
|
||||
@@ -85,9 +86,19 @@ bool ApplicationSettings::load(const FilePath& filePath)
|
||||
}
|
||||
}
|
||||
));
|
||||
migrator.addMigration(5, std::make_shared<SettingsMigrationLambda>(
|
||||
[](const SettingsMigration* migration, Settings* settings)
|
||||
{
|
||||
std::vector<FilePath> cxxHeaderSearchPaths = migration->getValuesFromSettings(
|
||||
settings, "indexing/cxx/header_search_paths/header_search_path", std::vector<FilePath>());
|
||||
|
||||
cxxHeaderSearchPaths = utility::replaceOrAddCxxCompilerHeaderPath(cxxHeaderSearchPaths);
|
||||
|
||||
migration->setValuesInSettings(settings, "indexing/cxx/header_search_paths/header_search_path", cxxHeaderSearchPaths);
|
||||
}
|
||||
));
|
||||
|
||||
bool migrated = migrator.migrate(this, ApplicationSettings::VERSION);
|
||||
|
||||
if (migrated)
|
||||
{
|
||||
save();
|
||||
|
||||
@@ -20,7 +20,7 @@ public:
|
||||
ApplicationSettings();
|
||||
~ApplicationSettings();
|
||||
|
||||
bool load(const FilePath& filePath);
|
||||
bool load(const FilePath& filePath, bool readOnly = false);
|
||||
|
||||
bool operator==(const ApplicationSettings& other) const;
|
||||
|
||||
|
||||
@@ -25,8 +25,10 @@ Settings::~Settings()
|
||||
{
|
||||
}
|
||||
|
||||
bool Settings::load(const FilePath& filePath)
|
||||
bool Settings::load(const FilePath& filePath, bool readOnly)
|
||||
{
|
||||
m_readOnly = readOnly;
|
||||
|
||||
if (filePath.exists())
|
||||
{
|
||||
m_config = ConfigManager::createAndLoad(TextAccess::createFromFile(filePath));
|
||||
@@ -44,6 +46,11 @@ bool Settings::load(const FilePath& filePath)
|
||||
|
||||
void Settings::save()
|
||||
{
|
||||
if (m_readOnly)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_config.get() && !m_filePath.empty())
|
||||
{
|
||||
m_config->save(m_filePath.str());
|
||||
|
||||
@@ -17,7 +17,7 @@ public:
|
||||
Settings& operator=(const Settings& other);
|
||||
virtual ~Settings();
|
||||
|
||||
bool load(const FilePath& filePath);
|
||||
bool load(const FilePath& filePath, bool readOnly = false);
|
||||
void save();
|
||||
void save(const FilePath& filePath);
|
||||
|
||||
@@ -63,6 +63,7 @@ protected:
|
||||
|
||||
private:
|
||||
FilePath m_filePath;
|
||||
bool m_readOnly = false;
|
||||
|
||||
friend SettingsMigration;
|
||||
};
|
||||
|
||||
@@ -26,3 +26,8 @@ FilePath ResourcePaths::getJavaPath()
|
||||
{
|
||||
return AppPath::getAppPath().concatenate(L"data/java/");
|
||||
}
|
||||
|
||||
FilePath ResourcePaths::getCxxCompilerHeaderPath()
|
||||
{
|
||||
return AppPath::getAppPath().concatenate(L"data/cxx/include/");
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ public:
|
||||
static FilePath getFontsPath();
|
||||
static FilePath getGuiPath();
|
||||
static FilePath getJavaPath();
|
||||
static FilePath getCxxCompilerHeaderPath();
|
||||
};
|
||||
|
||||
#endif // RESOURCE_PATHS_H
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#include "utility/utilityCxx.h"
|
||||
|
||||
#include "utility/ResourcePaths.h"
|
||||
#include "utility/utilityApp.h"
|
||||
|
||||
namespace utility
|
||||
{
|
||||
std::vector<FilePath> replaceOrAddCxxCompilerHeaderPath(const std::vector<FilePath>& headerSearchPaths)
|
||||
{
|
||||
if (utility::getOsType() == OS_WINDOWS)
|
||||
{
|
||||
return headerSearchPaths;
|
||||
}
|
||||
|
||||
std::vector<FilePath> newHeaderSearchPaths;
|
||||
|
||||
for (const FilePath& path : headerSearchPaths)
|
||||
{
|
||||
if (!path.getConcatenated(L"/stdarg.h").exists())
|
||||
{
|
||||
newHeaderSearchPaths.push_back(path);
|
||||
}
|
||||
}
|
||||
|
||||
newHeaderSearchPaths.push_back(ResourcePaths::getCxxCompilerHeaderPath().getCanonical());
|
||||
return newHeaderSearchPaths;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef UTILITY_CXX_H
|
||||
#define UTILITY_CXX_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <utility/file/FilePath.h>
|
||||
|
||||
namespace utility
|
||||
{
|
||||
std::vector<FilePath> replaceOrAddCxxCompilerHeaderPath(const std::vector<FilePath>& headerSearchPaths);
|
||||
}
|
||||
|
||||
#endif // UTILITY_CXX_H
|
||||
@@ -20,7 +20,7 @@ void setupPlatform(int argc, char *argv[])
|
||||
|
||||
// Set QT screen scaling factor
|
||||
ApplicationSettings appSettings;
|
||||
appSettings.load(UserPaths::getAppSettingsPath());
|
||||
appSettings.load(UserPaths::getAppSettingsPath(), true);
|
||||
|
||||
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR_SOURCETRAIL", qgetenv("QT_AUTO_SCREEN_SCALE_FACTOR"));
|
||||
qputenv("QT_SCALE_FACTOR_SOURCETRAIL", qgetenv("QT_SCALE_FACTOR"));
|
||||
@@ -44,10 +44,7 @@ void setupPlatform(int argc, char *argv[])
|
||||
|
||||
void setupApp(int argc, char *argv[])
|
||||
{
|
||||
if (AppPath::getAppPath().empty())
|
||||
{
|
||||
AppPath::setAppPath(FilePath(QCoreApplication::applicationDirPath().toStdWString() + L"/"));
|
||||
}
|
||||
AppPath::setAppPath(FilePath(QCoreApplication::applicationDirPath().toStdWString() + L"/").getAbsolute());
|
||||
|
||||
std::string userdir(std::getenv("HOME"));
|
||||
QDir coatiDir((userdir + "/.config/coati").c_str());
|
||||
|
||||
@@ -89,8 +89,8 @@ QtProjectWizzard::QtProjectWizzard(QWidget* parent)
|
||||
: QtProjectWizzardWindow(parent, false)
|
||||
, m_windowStack(this)
|
||||
, m_editing(false)
|
||||
, m_contentWidget(nullptr)
|
||||
, m_previouslySelectedIndex(-1)
|
||||
, m_contentWidget(nullptr)
|
||||
{
|
||||
setScrollAble(true);
|
||||
|
||||
@@ -831,7 +831,7 @@ void QtProjectWizzard::emptySourceGroup()
|
||||
contentGroup->addContent(new QtProjectWizzardContentJavaStandard(settingsJavaEmpty, this));
|
||||
}
|
||||
|
||||
if (std::shared_ptr<SourceGroupSettingsWithCxxCrossCompilationOptions> settingsCrossCompile =
|
||||
if (std::shared_ptr<SourceGroupSettingsWithCxxCrossCompilationOptions> settingsCrossCompile =
|
||||
std::dynamic_pointer_cast<SourceGroupSettingsWithCxxCrossCompilationOptions>(m_newSourceGroupSettings))
|
||||
{
|
||||
contentGroup->addContent(new QtProjectWizzardContentCrossCompilationOptions(settingsCrossCompile, window));
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "utility/IncludeProcessing.h"
|
||||
#include "utility/ScopedFunctor.h"
|
||||
#include "utility/utility.h"
|
||||
#include "utility/utilityCxx.h"
|
||||
#include "utility/utilityFile.h"
|
||||
#include "utility/utilityPathDetection.h"
|
||||
#include "utility/utilityString.h"
|
||||
@@ -198,7 +199,11 @@ void QtProjectWizzardContentPaths::detectionClicked()
|
||||
{
|
||||
std::vector<FilePath> paths = m_pathDetector->getPaths(m_detectorBox->currentText().toStdString());
|
||||
std::vector<FilePath> oldPaths = m_list->getPathsAsDisplayed();
|
||||
m_list->setPaths(utility::unique(utility::concat(oldPaths, paths)));
|
||||
|
||||
paths = utility::unique(utility::concat(oldPaths, paths));
|
||||
paths = utility::replaceOrAddCxxCompilerHeaderPath(paths);
|
||||
|
||||
m_list->setPaths(paths);
|
||||
}
|
||||
|
||||
|
||||
@@ -418,7 +423,7 @@ void QtProjectWizzardContentIndexedHeaderPaths::populate(QGridLayout* layout, in
|
||||
|
||||
void QtProjectWizzardContentIndexedHeaderPaths::load()
|
||||
{
|
||||
if (std::shared_ptr<SourceGroupSettingsWithIndexedHeaderPaths> cdbSettings =
|
||||
if (std::shared_ptr<SourceGroupSettingsWithIndexedHeaderPaths> cdbSettings =
|
||||
std::dynamic_pointer_cast<SourceGroupSettingsWithIndexedHeaderPaths>(m_settings))
|
||||
{
|
||||
m_list->setPaths(cdbSettings->getIndexedHeaderPaths());
|
||||
@@ -427,7 +432,7 @@ void QtProjectWizzardContentIndexedHeaderPaths::load()
|
||||
|
||||
void QtProjectWizzardContentIndexedHeaderPaths::save()
|
||||
{
|
||||
if (std::shared_ptr<SourceGroupSettingsWithIndexedHeaderPaths> cdbSettings =
|
||||
if (std::shared_ptr<SourceGroupSettingsWithIndexedHeaderPaths> cdbSettings =
|
||||
std::dynamic_pointer_cast<SourceGroupSettingsWithIndexedHeaderPaths>(m_settings))
|
||||
{
|
||||
cdbSettings->setIndexedHeaderPaths(m_list->getPathsAsDisplayed());
|
||||
@@ -441,7 +446,7 @@ bool QtProjectWizzardContentIndexedHeaderPaths::check()
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("You didn't specify any Header Files & Directories to Index.");
|
||||
msgBox.setInformativeText(QString::fromStdString(
|
||||
"Sourcetrail will only index the source files listed in the " + m_projectKindName +
|
||||
"Sourcetrail will only index the source files listed in the " + m_projectKindName +
|
||||
" file and none of the included header files."
|
||||
));
|
||||
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
|
||||
@@ -714,7 +719,7 @@ void QtProjectWizzardContentPathsHeaderSearch::validateIncludesButtonClicked()
|
||||
{
|
||||
// TODO: regard Force Includes here, too!
|
||||
m_window->saveContent();
|
||||
|
||||
|
||||
std::thread([&]()
|
||||
{
|
||||
std::shared_ptr<SourceGroupSettingsWithSourceExtensions> extensionSettings = std::dynamic_pointer_cast<SourceGroupSettingsWithSourceExtensions>(m_settings);
|
||||
@@ -786,7 +791,7 @@ void QtProjectWizzardContentPathsHeaderSearch::finishedSelectDetectIncludesRootP
|
||||
// TODO: regard Force Includes here, too!
|
||||
const std::vector<FilePath> searchedPaths = m_settings->makePathsExpandedAndAbsolute(m_pathsDialog->getPaths());
|
||||
closedPathsDialog();
|
||||
|
||||
|
||||
std::thread([=]()
|
||||
{
|
||||
std::shared_ptr<SourceGroupSettingsWithSourceExtensions> extensionSettings = std::dynamic_pointer_cast<SourceGroupSettingsWithSourceExtensions>(m_settings);
|
||||
|
||||
@@ -41,7 +41,7 @@ add_files(
|
||||
UtilityStringTestSuite.h
|
||||
UtilityTestSuite.h
|
||||
Vector2TestSuite.h
|
||||
|
||||
|
||||
# Java tests need to be executed last because of some linux related issues.
|
||||
JavaParserTestSuite.h
|
||||
JavaIndexSampleProjectsTestSuite.h
|
||||
|
||||
Reference in New Issue
Block a user