forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.15'
Conflicts: src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp Change-Id: I722a94f37bdd1d78625cfae503ba6d02ff083c63
This commit is contained in:
@@ -38,8 +38,10 @@
|
||||
|
||||
#include <android/androidconstants.h>
|
||||
#include <ios/iosconstants.h>
|
||||
#include <webassembly/webassemblyconstants.h>
|
||||
|
||||
#include <coreplugin/find/itemviewfind.h>
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <projectexplorer/buildaspects.h>
|
||||
#include <projectexplorer/buildinfo.h>
|
||||
@@ -58,6 +60,7 @@
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/categorysortfiltermodel.h>
|
||||
#include <utils/checkablemessagebox.h>
|
||||
#include <utils/detailswidget.h>
|
||||
#include <utils/headerviewstretcher.h>
|
||||
#include <utils/infolabel.h>
|
||||
@@ -94,11 +97,15 @@ static Q_LOGGING_CATEGORY(cmakeBuildConfigurationLog, "qtc.cmake.bc", QtWarningM
|
||||
const char CONFIGURATION_KEY[] = "CMake.Configuration";
|
||||
const char DEVELOPMENT_TEAM_FLAG[] = "Ios:DevelopmentTeam:Flag";
|
||||
const char PROVISIONING_PROFILE_FLAG[] = "Ios:ProvisioningProfile:Flag";
|
||||
const char CMAKE_QT6_TOOLCHAIN_FILE_ARG[] =
|
||||
"-DCMAKE_TOOLCHAIN_FILE:PATH=%{Qt:QT_INSTALL_PREFIX}/lib/cmake/Qt6/qt.toolchain.cmake";
|
||||
|
||||
namespace Internal {
|
||||
|
||||
class CMakeBuildSettingsWidget : public NamedWidget
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(CMakeProjectManager::Internal::CMakeBuildSettingsWidget)
|
||||
|
||||
public:
|
||||
CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc);
|
||||
|
||||
@@ -178,6 +185,34 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
m_configModel->flush(); // clear out config cache...;
|
||||
});
|
||||
|
||||
auto clearCMakeConfiguration = new QPushButton(tr("Re-configure with Initial Parameters"));
|
||||
connect(clearCMakeConfiguration, &QPushButton::clicked, this, [bc]() {
|
||||
auto *settings = CMakeProjectPlugin::projectTypeSpecificSettings();
|
||||
bool doNotAsk{!settings->askBeforeReConfigureInitialParams()};
|
||||
if (!doNotAsk) {
|
||||
QDialogButtonBox::StandardButton reply = Utils::CheckableMessageBox::question(
|
||||
nullptr,
|
||||
tr("Re-configure with Initial Parameters"),
|
||||
tr("Clear CMake configuration and configure with initial parameters?"),
|
||||
tr("Do not ask again"),
|
||||
&doNotAsk,
|
||||
QDialogButtonBox::Yes | QDialogButtonBox::No,
|
||||
QDialogButtonBox::Yes);
|
||||
|
||||
settings->setAskBeforeReConfigureInitialParams(!doNotAsk);
|
||||
settings->toSettings(Core::ICore::settings());
|
||||
|
||||
if (reply != QDialogButtonBox::Yes) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
auto cbc = static_cast<CMakeBuildSystem*>(bc->buildSystem());
|
||||
cbc->clearCMakeCache();
|
||||
if (ProjectExplorerPlugin::saveModifiedFiles())
|
||||
cbc->runCMake();
|
||||
});
|
||||
|
||||
auto buildTypeAspect = bc->aspect<BuildTypeAspect>();
|
||||
connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildTypeAspect]() {
|
||||
if (!m_buildConfiguration->isMultiConfig()) {
|
||||
@@ -309,6 +344,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
buildDirAspect,
|
||||
bc->aspect<InitialCMakeArgumentsAspect>(),
|
||||
bc->aspect<BuildTypeAspect>(),
|
||||
QString(), clearCMakeConfiguration,
|
||||
qmlDebugAspect
|
||||
},
|
||||
Space(10),
|
||||
@@ -427,7 +463,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
this, &CMakeBuildSettingsWidget::updateFromKit);
|
||||
connect(m_buildConfiguration, &CMakeBuildConfiguration::enabledChanged,
|
||||
this, [this]() {
|
||||
setError(m_buildConfiguration->disabledReason());
|
||||
if (m_buildConfiguration->isEnabled())
|
||||
setError(QString());
|
||||
|
||||
m_batchEditButton->setEnabled(m_buildConfiguration->isEnabled());
|
||||
m_addButton->setEnabled(m_buildConfiguration->isEnabled());
|
||||
});
|
||||
|
||||
updateSelection();
|
||||
@@ -744,6 +784,11 @@ static bool isIos(const Kit *k)
|
||||
|| deviceType == Ios::Constants::IOS_SIMULATOR_TYPE;
|
||||
}
|
||||
|
||||
static bool isWebAssembly(const Kit *k)
|
||||
{
|
||||
return DeviceTypeKitAspect::deviceTypeId(k) == WebAssembly::Constants::WEBASSEMBLY_DEVICE_TYPE;
|
||||
}
|
||||
|
||||
static QStringList defaultInitialCMakeArguments(const Kit *k, const QString buildType)
|
||||
{
|
||||
// Generator:
|
||||
@@ -909,8 +954,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
||||
const QString sysroot = deviceType == Ios::Constants::IOS_DEVICE_TYPE
|
||||
? QLatin1String("iphoneos")
|
||||
: QLatin1String("iphonesimulator");
|
||||
initialArgs.append("-DCMAKE_TOOLCHAIN_FILE:PATH=%{Qt:QT_INSTALL_PREFIX}/lib/cmake/"
|
||||
"Qt6/qt.toolchain.cmake");
|
||||
initialArgs.append(CMAKE_QT6_TOOLCHAIN_FILE_ARG);
|
||||
initialArgs.append("-DCMAKE_OSX_ARCHITECTURES:STRING=" + architecture);
|
||||
initialArgs.append("-DCMAKE_OSX_SYSROOT:STRING=" + sysroot);
|
||||
initialArgs.append("%{" + QLatin1String(DEVELOPMENT_TEAM_FLAG) + "}");
|
||||
@@ -918,6 +962,12 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
||||
}
|
||||
}
|
||||
|
||||
if (isWebAssembly(k)) {
|
||||
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
|
||||
if (qt && qt->qtVersion().majorVersion >= 6)
|
||||
initialArgs.append(CMAKE_QT6_TOOLCHAIN_FILE_ARG);
|
||||
}
|
||||
|
||||
if (info.buildDirectory.isEmpty()) {
|
||||
setBuildDirectory(shadowBuildDirectory(target->project()->projectFilePath(),
|
||||
k,
|
||||
|
||||
@@ -541,13 +541,18 @@ void CMakeBuildSystem::clearCMakeCache()
|
||||
|
||||
stopParsingAndClearState();
|
||||
|
||||
const FilePath cmakeCache = m_parameters.workDirectory / "CMakeCache.txt";
|
||||
const FilePath cmakeFiles = m_parameters.workDirectory / "CMakeFiles";
|
||||
const QList<FilePath> pathsToDelete = {
|
||||
m_parameters.workDirectory / "CMakeCache.txt",
|
||||
m_parameters.workDirectory / "CMakeCache.txt.prev",
|
||||
m_parameters.workDirectory / "CMakeFiles",
|
||||
m_parameters.workDirectory / ".cmake/api/v1/reply",
|
||||
m_parameters.workDirectory / ".cmake/api/v1/reply.prev"
|
||||
};
|
||||
|
||||
if (cmakeCache.exists())
|
||||
Utils::FileUtils::removeRecursively(cmakeCache);
|
||||
if (cmakeFiles.exists())
|
||||
Utils::FileUtils::removeRecursively(cmakeFiles);
|
||||
for (const FilePath &path : pathsToDelete) {
|
||||
if (path.exists())
|
||||
Utils::FileUtils::removeRecursively(path);
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<CMakeProjectNode> CMakeBuildSystem::generateProjectTree(
|
||||
|
||||
@@ -35,6 +35,8 @@ namespace Internal {
|
||||
|
||||
class CMakeProjectImporter : public QtSupport::QtProjectImporter
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(CMakeProjectManager::Internal::CMakeProjectImporter)
|
||||
|
||||
public:
|
||||
CMakeProjectImporter(const Utils::FilePath &path);
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ static const char SETTINGS_KEY[] = "CMakeSpecificSettings";
|
||||
static const char AFTER_ADD_FILE_ACTION_KEY[] = "ProjectPopupSetting";
|
||||
static const char NINJA_PATH[] = "NinjaPath";
|
||||
static const char PACKAGE_MANAGER_AUTO_SETUP[] = "PackageManagerAutoSetup";
|
||||
static const char ASK_RECONFIGURE_INITIAL_PARAMS[] = "AskReConfigureInitialParams";
|
||||
}
|
||||
|
||||
void CMakeSpecificSettings::fromSettings(QSettings *settings)
|
||||
@@ -53,6 +54,7 @@ void CMakeSpecificSettings::toSettings(QSettings *settings) const
|
||||
settings->beginGroup(QString(SETTINGS_KEY));
|
||||
settings->setValue(QString(AFTER_ADD_FILE_ACTION_KEY), static_cast<int>(m_afterAddFileToProjectSetting));
|
||||
settings->setValue(QString(PACKAGE_MANAGER_AUTO_SETUP), m_packageManagerAutoSetup);
|
||||
settings->setValue(QString(ASK_RECONFIGURE_INITIAL_PARAMS), m_askBeforeReConfigureInitialParams);
|
||||
settings->endGroup();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,10 +53,13 @@ public:
|
||||
void setPackageManagerAutoSetup(bool checked) { m_packageManagerAutoSetup = checked; }
|
||||
bool packageManagerAutoSetup() const { return m_packageManagerAutoSetup; }
|
||||
|
||||
bool askBeforeReConfigureInitialParams() const { return m_askBeforeReConfigureInitialParams; }
|
||||
void setAskBeforeReConfigureInitialParams(bool doAsk) { m_askBeforeReConfigureInitialParams = doAsk; }
|
||||
private:
|
||||
AfterAddFileAction m_afterAddFileToProjectSetting;
|
||||
Utils::FilePath m_ninjaPath;
|
||||
bool m_packageManagerAutoSetup = true;
|
||||
bool m_askBeforeReConfigureInitialParams = true;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ CMakeSpecificSettingWidget::CMakeSpecificSettingWidget(CMakeSpecificSettings *se
|
||||
}
|
||||
|
||||
m_ui.packageManagerAutoSetup->setChecked(settings->packageManagerAutoSetup());
|
||||
m_ui.askBeforeReConfigureWithInitialParams->setChecked(settings->askBeforeReConfigureInitialParams());
|
||||
}
|
||||
|
||||
void CMakeSpecificSettingWidget::apply()
|
||||
@@ -80,6 +81,7 @@ void CMakeSpecificSettingWidget::apply()
|
||||
m_settings->setAfterAddFileSetting(popupSetting == -1 ? AfterAddFileAction::ASK_USER
|
||||
: static_cast<AfterAddFileAction>(popupSetting));
|
||||
m_settings->setPackageManagerAutoSetup(m_ui.packageManagerAutoSetup->isChecked());
|
||||
m_settings->setAskBeforeReConfigureInitialParams(m_ui.askBeforeReConfigureWithInitialParams->isChecked());
|
||||
m_settings->toSettings(Core::ICore::settings());
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="askBeforeReConfigureWithInitialParams">
|
||||
<property name="text">
|
||||
<string>Ask before re-configuring with initial parameters</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
||||
@@ -896,7 +896,21 @@ FileApiData FileApiParser::parseData(const QFileInfo &replyFileInfo, const QStri
|
||||
return QString::compare(cfg.name, cmakeBuildType, Qt::CaseInsensitive) == 0;
|
||||
});
|
||||
if (it == codeModels.cend()) {
|
||||
errorMessage = QString("No '%1' CMake configuration found!").arg(cmakeBuildType);
|
||||
QStringList buildTypes;
|
||||
for (const Configuration &cfg: codeModels)
|
||||
buildTypes << cfg.name;
|
||||
|
||||
if (result.replyFile.isMultiConfig) {
|
||||
errorMessage = tr("No \"%1\" CMake configuration found. Available configurations: \"%2\".\n"
|
||||
"Make sure that CMAKE_CONFIGURATION_TYPES variable contains the \"Build type\" field.")
|
||||
.arg(cmakeBuildType)
|
||||
.arg(buildTypes.join(", "));
|
||||
} else {
|
||||
errorMessage = tr("No \"%1\" CMake configuration found. Available configuration: \"%2\".\n"
|
||||
"Make sure that CMAKE_BUILD_TYPE variable matches the \"Build type\" field.")
|
||||
.arg(cmakeBuildType)
|
||||
.arg(buildTypes.join(", "));
|
||||
}
|
||||
qWarning() << errorMessage;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -245,6 +245,7 @@ public:
|
||||
|
||||
class FileApiParser
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(FileApiParser)
|
||||
public:
|
||||
static FileApiData parseData(const QFileInfo &replyFileInfo, const QString& cmakeBuildType,
|
||||
QString &errorMessage);
|
||||
|
||||
Reference in New Issue
Block a user