cmake-gui: Add options to control warning messages

Create a new dialog window for the cmake-gui that provides controls for
setting the state of suppression of developer and deprecated warning
messages.  This replaces the previous single checkbox for setting the
state of suppression of developer warnings.

Added a note for the new functionality to the release notes.
This commit is contained in:
Michael Scott 2015-12-06 12:33:13 +00:00 committed by Brad King
parent 128d569af0
commit 67211011d9
11 changed files with 292 additions and 14 deletions

View File

@ -10,3 +10,6 @@ cmake-W-options
* Warnings about deprecated functionality are now enabled by default. * Warnings about deprecated functionality are now enabled by default.
They may be suppressed with ``-Wno-deprecated`` or by setting the They may be suppressed with ``-Wno-deprecated`` or by setting the
:variable:`CMAKE_WARN_DEPRECATED` variable to false. :variable:`CMAKE_WARN_DEPRECATED` variable to false.
* Warnings about deprecated functionality can now be controlled in the
:manual:`cmake-gui(1)` application.

View File

@ -115,6 +115,8 @@ set(SRCS
QCMakeWidgets.h QCMakeWidgets.h
RegexExplorer.cxx RegexExplorer.cxx
RegexExplorer.h RegexExplorer.h
WarningMessagesDialog.cxx
WarningMessagesDialog.h
) )
QT4_WRAP_UI(UI_SRCS QT4_WRAP_UI(UI_SRCS
CMakeSetupDialog.ui CMakeSetupDialog.ui
@ -122,6 +124,7 @@ QT4_WRAP_UI(UI_SRCS
CrossCompiler.ui CrossCompiler.ui
AddCacheEntry.ui AddCacheEntry.ui
RegexExplorer.ui RegexExplorer.ui
WarningMessagesDialog.ui
) )
QT4_WRAP_CPP(MOC_SRCS QT4_WRAP_CPP(MOC_SRCS
AddCacheEntry.h AddCacheEntry.h
@ -132,6 +135,7 @@ QT4_WRAP_CPP(MOC_SRCS
QCMakeCacheView.h QCMakeCacheView.h
QCMakeWidgets.h QCMakeWidgets.h
RegexExplorer.h RegexExplorer.h
WarningMessagesDialog.h
) )
QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc) QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc)

View File

@ -34,6 +34,7 @@
#include "AddCacheEntry.h" #include "AddCacheEntry.h"
#include "FirstConfigure.h" #include "FirstConfigure.h"
#include "RegexExplorer.h" #include "RegexExplorer.h"
#include "WarningMessagesDialog.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmVersion.h" #include "cmVersion.h"
@ -145,9 +146,8 @@ CMakeSetupDialog::CMakeSetupDialog()
this, SLOT(doOutputErrorNext())); // in Eclipse this, SLOT(doOutputErrorNext())); // in Eclipse
QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options")); QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
this->SuppressDevWarningsAction = OptionsMenu->addAction(tr("Warning Messages..."),
OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)")); this, SLOT(doWarningMessagesDialog()));
this->SuppressDevWarningsAction->setCheckable(true);
this->WarnUninitializedAction = this->WarnUninitializedAction =
OptionsMenu->addAction(tr("&Warn Uninitialized (--warn-uninitialized)")); OptionsMenu->addAction(tr("&Warn Uninitialized (--warn-uninitialized)"));
this->WarnUninitializedAction->setCheckable(true); this->WarnUninitializedAction->setCheckable(true);
@ -278,9 +278,6 @@ void CMakeSetupDialog::initialize()
QObject::connect(this->AddEntry, SIGNAL(clicked(bool)), QObject::connect(this->AddEntry, SIGNAL(clicked(bool)),
this, SLOT(addCacheEntry())); this, SLOT(addCacheEntry()));
QObject::connect(this->SuppressDevWarningsAction, SIGNAL(triggered(bool)),
this->CMakeThread->cmakeInstance(), SLOT(setSuppressDevWarnings(bool)));
QObject::connect(this->WarnUninitializedAction, SIGNAL(triggered(bool)), QObject::connect(this->WarnUninitializedAction, SIGNAL(triggered(bool)),
this->CMakeThread->cmakeInstance(), this->CMakeThread->cmakeInstance(),
SLOT(setWarnUninitializedMode(bool))); SLOT(setWarnUninitializedMode(bool)));
@ -1369,3 +1366,9 @@ void CMakeSetupDialog::doOutputErrorNext()
this->Output->setTextCursor(textCursor); this->Output->setTextCursor(textCursor);
} }
} }
void CMakeSetupDialog::doWarningMessagesDialog()
{
WarningMessagesDialog dialog(this, this->CMakeThread->cmakeInstance());
dialog.exec();
}

View File

@ -83,6 +83,8 @@ protected slots:
void doOutputFindPrev(); void doOutputFindPrev();
void doOutputErrorNext(); void doOutputErrorNext();
void doRegexExplorerDialog(); void doRegexExplorerDialog();
/// display the modal warning messages dialog window
void doWarningMessagesDialog();
protected: protected:
@ -102,7 +104,6 @@ protected:
QAction* ExitAction; QAction* ExitAction;
QAction* ConfigureAction; QAction* ConfigureAction;
QAction* GenerateAction; QAction* GenerateAction;
QAction* SuppressDevWarningsAction;
QAction* WarnUninitializedAction; QAction* WarnUninitializedAction;
QAction* WarnUnusedAction; QAction* WarnUnusedAction;
QAction* InstallForCommandLineAction; QAction* InstallForCommandLineAction;

View File

@ -26,7 +26,6 @@
QCMake::QCMake(QObject* p) QCMake::QCMake(QObject* p)
: QObject(p) : QObject(p)
{ {
this->SuppressDevWarnings = false;
this->WarnUninitializedMode = false; this->WarnUninitializedMode = false;
this->WarnUnusedMode = false; this->WarnUnusedMode = false;
qRegisterMetaType<QCMakeProperty>(); qRegisterMetaType<QCMakeProperty>();
@ -167,7 +166,6 @@ void QCMake::configure()
this->CMakeInstance->SetGeneratorPlatform(""); this->CMakeInstance->SetGeneratorPlatform("");
this->CMakeInstance->SetGeneratorToolset(this->Toolset.toLocal8Bit().data()); this->CMakeInstance->SetGeneratorToolset(this->Toolset.toLocal8Bit().data());
this->CMakeInstance->LoadCache(); this->CMakeInstance->LoadCache();
this->CMakeInstance->SetSuppressDevWarnings(this->SuppressDevWarnings);
this->CMakeInstance->SetWarnUninitialized(this->WarnUninitializedMode); this->CMakeInstance->SetWarnUninitialized(this->WarnUninitializedMode);
this->CMakeInstance->SetWarnUnused(this->WarnUnusedMode); this->CMakeInstance->SetWarnUnused(this->WarnUnusedMode);
this->CMakeInstance->PreLoadCMakeFiles(); this->CMakeInstance->PreLoadCMakeFiles();
@ -457,10 +455,24 @@ bool QCMake::getDebugOutput() const
return this->CMakeInstance->GetDebugOutput(); return this->CMakeInstance->GetDebugOutput();
} }
bool QCMake::getSuppressDevWarnings()
{
return this->CMakeInstance->GetSuppressDevWarnings();
}
void QCMake::setSuppressDevWarnings(bool value) void QCMake::setSuppressDevWarnings(bool value)
{ {
this->SuppressDevWarnings = value; this->CMakeInstance->SetSuppressDevWarnings(value);
}
bool QCMake::getSuppressDeprecatedWarnings()
{
return this->CMakeInstance->GetSuppressDeprecatedWarnings();
}
void QCMake::setSuppressDeprecatedWarnings(bool value)
{
this->CMakeInstance->SetSuppressDeprecatedWarnings(value);
} }
void QCMake::setWarnUninitializedMode(bool value) void QCMake::setWarnUninitializedMode(bool value)

View File

@ -91,8 +91,14 @@ public slots:
void reloadCache(); void reloadCache();
/// set whether to do debug output /// set whether to do debug output
void setDebugOutput(bool); void setDebugOutput(bool);
/// get whether to do suppress dev warnings
bool getSuppressDevWarnings();
/// set whether to do suppress dev warnings /// set whether to do suppress dev warnings
void setSuppressDevWarnings(bool value); void setSuppressDevWarnings(bool value);
/// get whether to do suppress deprecated warnings
bool getSuppressDeprecatedWarnings();
/// set whether to do suppress deprecated warnings
void setSuppressDeprecatedWarnings(bool value);
/// set whether to run cmake with warnings about uninitialized variables /// set whether to run cmake with warnings about uninitialized variables
void setWarnUninitializedMode(bool value); void setWarnUninitializedMode(bool value);
/// set whether to run cmake with warnings about unused variables /// set whether to run cmake with warnings about unused variables
@ -146,7 +152,6 @@ protected:
bool&, void* cd); bool&, void* cd);
static void stdoutCallback(const char* msg, size_t len, void* cd); static void stdoutCallback(const char* msg, size_t len, void* cd);
static void stderrCallback(const char* msg, size_t len, void* cd); static void stderrCallback(const char* msg, size_t len, void* cd);
bool SuppressDevWarnings;
bool WarnUninitializedMode; bool WarnUninitializedMode;
bool WarnUnusedMode; bool WarnUnusedMode;
bool WarnUnusedAllMode; bool WarnUnusedAllMode;

View File

@ -0,0 +1,43 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2015 Kitware, Inc., Gregor Jasny
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "WarningMessagesDialog.h"
WarningMessagesDialog::WarningMessagesDialog(QWidget* prnt, QCMake* instance)
: QDialog(prnt), cmakeInstance(instance)
{
this->setupUi(this);
this->setInitialValues();
this->setupSignals();
}
void WarningMessagesDialog::setInitialValues()
{
this->suppressDeveloperWarnings->setChecked(
this->cmakeInstance->getSuppressDevWarnings());
this->suppressDeprecatedWarnings->setChecked(
this->cmakeInstance->getSuppressDeprecatedWarnings());
}
void WarningMessagesDialog::setupSignals()
{
QObject::connect(this->buttonBox, SIGNAL(accepted()),
this, SLOT(doAccept()));
}
void WarningMessagesDialog::doAccept()
{
this->cmakeInstance->setSuppressDevWarnings(
this->suppressDeveloperWarnings->isChecked());
this->cmakeInstance->setSuppressDeprecatedWarnings(
this->suppressDeprecatedWarnings->isChecked());
}

View File

@ -0,0 +1,53 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2015 Kitware, Inc., Gregor Jasny
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef WarningMessagesDialog_h
#define WarningMessagesDialog_h
#include <QDialog>
#include <QWidget>
#include "ui_WarningMessagesDialog.h"
#include "QCMake.h"
/**
* Dialog window for setting the warning message related options.
*/
class WarningMessagesDialog : public QDialog, public Ui_MessagesDialog
{
Q_OBJECT
public:
WarningMessagesDialog(QWidget* prnt, QCMake* instance);
private slots:
/**
* Handler for the accept event of the ok/cancel button box.
*/
void doAccept();
private:
QCMake* cmakeInstance;
/**
* Set the initial values of the widgets on this dialog window, using the
* current state of the cache.
*/
void setInitialValues();
/**
* Setup the signals for the widgets on this dialog window.
*/
void setupSignals();
};
#endif /* MessageDialog_h */

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MessagesDialog</class>
<widget class="QDialog" name="MessagesDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>250</width>
<height>150</height>
</rect>
</property>
<property name="windowTitle">
<string>Warning Messages</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Suppress Warnings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="suppressDeveloperWarnings">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Developer Warnings</string>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="suppressDeprecatedWarnings">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Deprecated Warnings</string>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>MessagesDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>MessagesDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -2883,17 +2883,23 @@ void cmake::RunCheckForUnusedVariables()
void cmake::SetSuppressDevWarnings(bool b) void cmake::SetSuppressDevWarnings(bool b)
{ {
std::string value;
// equivalent to -Wno-dev // equivalent to -Wno-dev
if (b) if (b)
{ {
this->DiagLevels["dev"] = DIAG_IGNORE; value = "TRUE";
} }
// equivalent to -Wdev // equivalent to -Wdev
else else
{ {
this->DiagLevels["dev"] = std::max(this->DiagLevels["dev"], value = "FALSE";
DIAG_WARN);
} }
this->AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", value.c_str(),
"Suppress Warnings that are meant for"
" the author of the CMakeLists.txt files.",
cmState::INTERNAL);
} }
bool cmake::GetSuppressDevWarnings(cmMakefile const* mf) bool cmake::GetSuppressDevWarnings(cmMakefile const* mf)
@ -2932,3 +2938,24 @@ bool cmake::GetSuppressDeprecatedWarnings(cmMakefile const* mf)
return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue); return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
} }
} }
void cmake::SetSuppressDeprecatedWarnings(bool b)
{
std::string value;
// equivalent to -Wno-deprecated
if (b)
{
value = "FALSE";
}
// equivalent to -Wdeprecated
else
{
value = "TRUE";
}
this->AddCacheEntry("CMAKE_WARN_DEPRECATED", value.c_str(),
"Whether to issue warnings for deprecated "
"functionality.",
cmState::INTERNAL);
}

View File

@ -308,6 +308,9 @@ class cmake
std::string const& GetCMakeEditCommand() const std::string const& GetCMakeEditCommand() const
{ return this->CMakeEditCommand; } { return this->CMakeEditCommand; }
/*
* Set the state of the suppression of developer (author) warnings.
*/
void SetSuppressDevWarnings(bool v); void SetSuppressDevWarnings(bool v);
/* /*
* Get the state of the suppression of developer (author) warnings. * Get the state of the suppression of developer (author) warnings.
@ -316,6 +319,10 @@ class cmake
*/ */
bool GetSuppressDevWarnings(cmMakefile const* mf = NULL); bool GetSuppressDevWarnings(cmMakefile const* mf = NULL);
/*
* Set the state of the suppression of deprecated warnings.
*/
void SetSuppressDeprecatedWarnings(bool v);
/* /*
* Get the state of the suppression of deprecated warnings. * Get the state of the suppression of deprecated warnings.
* Returns false, by default, if deprecated warnings should be shown, true * Returns false, by default, if deprecated warnings should be shown, true