Merge topic 'cmake-W-options'

29127534 cmake: Deduplicate warning message control code
67211011 cmake-gui: Add options to control warning messages
This commit is contained in:
Brad King 2015-12-11 09:43:42 -05:00 committed by CMake Topic Stage
commit 05d8aed844
11 changed files with 311 additions and 51 deletions

View File

@ -10,3 +10,6 @@ cmake-W-options
* Warnings about deprecated functionality are now enabled by default.
They may be suppressed with ``-Wno-deprecated`` or by setting the
: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
RegexExplorer.cxx
RegexExplorer.h
WarningMessagesDialog.cxx
WarningMessagesDialog.h
)
QT4_WRAP_UI(UI_SRCS
CMakeSetupDialog.ui
@ -122,6 +124,7 @@ QT4_WRAP_UI(UI_SRCS
CrossCompiler.ui
AddCacheEntry.ui
RegexExplorer.ui
WarningMessagesDialog.ui
)
QT4_WRAP_CPP(MOC_SRCS
AddCacheEntry.h
@ -132,6 +135,7 @@ QT4_WRAP_CPP(MOC_SRCS
QCMakeCacheView.h
QCMakeWidgets.h
RegexExplorer.h
WarningMessagesDialog.h
)
QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc)

View File

@ -34,6 +34,7 @@
#include "AddCacheEntry.h"
#include "FirstConfigure.h"
#include "RegexExplorer.h"
#include "WarningMessagesDialog.h"
#include "cmSystemTools.h"
#include "cmVersion.h"
@ -145,9 +146,8 @@ CMakeSetupDialog::CMakeSetupDialog()
this, SLOT(doOutputErrorNext())); // in Eclipse
QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
this->SuppressDevWarningsAction =
OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)"));
this->SuppressDevWarningsAction->setCheckable(true);
OptionsMenu->addAction(tr("Warning Messages..."),
this, SLOT(doWarningMessagesDialog()));
this->WarnUninitializedAction =
OptionsMenu->addAction(tr("&Warn Uninitialized (--warn-uninitialized)"));
this->WarnUninitializedAction->setCheckable(true);
@ -278,9 +278,6 @@ void CMakeSetupDialog::initialize()
QObject::connect(this->AddEntry, SIGNAL(clicked(bool)),
this, SLOT(addCacheEntry()));
QObject::connect(this->SuppressDevWarningsAction, SIGNAL(triggered(bool)),
this->CMakeThread->cmakeInstance(), SLOT(setSuppressDevWarnings(bool)));
QObject::connect(this->WarnUninitializedAction, SIGNAL(triggered(bool)),
this->CMakeThread->cmakeInstance(),
SLOT(setWarnUninitializedMode(bool)));
@ -1369,3 +1366,9 @@ void CMakeSetupDialog::doOutputErrorNext()
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 doOutputErrorNext();
void doRegexExplorerDialog();
/// display the modal warning messages dialog window
void doWarningMessagesDialog();
protected:
@ -102,7 +104,6 @@ protected:
QAction* ExitAction;
QAction* ConfigureAction;
QAction* GenerateAction;
QAction* SuppressDevWarningsAction;
QAction* WarnUninitializedAction;
QAction* WarnUnusedAction;
QAction* InstallForCommandLineAction;

View File

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

View File

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

@ -1269,17 +1269,11 @@ int cmake::Configure()
diagLevel = this->DiagLevels["deprecated"];
if (diagLevel == DIAG_IGNORE)
{
this->AddCacheEntry("CMAKE_WARN_DEPRECATED", "FALSE",
"Whether to issue warnings for deprecated "
"functionality.",
cmState::INTERNAL);
this->SetSuppressDeprecatedWarnings(true);
}
else if (diagLevel == DIAG_WARN)
{
this->AddCacheEntry("CMAKE_WARN_DEPRECATED", "TRUE",
"Whether to issue warnings for deprecated "
"functionality.",
cmState::INTERNAL);
this->SetSuppressDeprecatedWarnings(false);
}
}
@ -1299,32 +1293,20 @@ int cmake::Configure()
diagLevel = this->DiagLevels["dev"];
if (diagLevel == DIAG_IGNORE)
{
this->AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", "TRUE",
"Suppress Warnings that are meant for"
" the author of the CMakeLists.txt files.",
cmState::INTERNAL);
this->SetSuppressDevWarnings(true);
if (setDeprecatedVariables)
{
this->AddCacheEntry("CMAKE_WARN_DEPRECATED", "FALSE",
"Whether to issue warnings for deprecated "
"functionality.",
cmState::INTERNAL);
this->SetSuppressDeprecatedWarnings(true);
}
}
else if (diagLevel == DIAG_WARN)
{
this->AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", "FALSE",
"Suppress Warnings that are meant for"
" the author of the CMakeLists.txt files.",
cmState::INTERNAL);
this->SetSuppressDevWarnings(false);
if (setDeprecatedVariables)
{
this->AddCacheEntry("CMAKE_WARN_DEPRECATED", "TRUE",
"Whether to issue warnings for deprecated "
"functionality.",
cmState::INTERNAL);
this->SetSuppressDeprecatedWarnings(false);
}
}
}
@ -2881,21 +2863,6 @@ void cmake::RunCheckForUnusedVariables()
#endif
}
void cmake::SetSuppressDevWarnings(bool b)
{
// equivalent to -Wno-dev
if (b)
{
this->DiagLevels["dev"] = DIAG_IGNORE;
}
// equivalent to -Wdev
else
{
this->DiagLevels["dev"] = std::max(this->DiagLevels["dev"],
DIAG_WARN);
}
}
bool cmake::GetSuppressDevWarnings(cmMakefile const* mf)
{
/*
@ -2914,6 +2881,27 @@ bool cmake::GetSuppressDevWarnings(cmMakefile const* mf)
}
}
void cmake::SetSuppressDevWarnings(bool b)
{
std::string value;
// equivalent to -Wno-dev
if (b)
{
value = "TRUE";
}
// equivalent to -Wdev
else
{
value = "FALSE";
}
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::GetSuppressDeprecatedWarnings(cmMakefile const* mf)
{
/*
@ -2932,3 +2920,24 @@ bool cmake::GetSuppressDeprecatedWarnings(cmMakefile const* mf)
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,13 +308,16 @@ class cmake
std::string const& GetCMakeEditCommand() const
{ return this->CMakeEditCommand; }
void SetSuppressDevWarnings(bool v);
/*
* Get the state of the suppression of developer (author) warnings.
* Returns false, by default, if developer warnings should be shown, true
* otherwise.
*/
bool GetSuppressDevWarnings(cmMakefile const* mf = NULL);
/*
* Set the state of the suppression of developer (author) warnings.
*/
void SetSuppressDevWarnings(bool v);
/*
* Get the state of the suppression of deprecated warnings.
@ -322,6 +325,10 @@ class cmake
* otherwise.
*/
bool GetSuppressDeprecatedWarnings(cmMakefile const* mf = NULL);
/*
* Set the state of the suppression of deprecated warnings.
*/
void SetSuppressDeprecatedWarnings(bool v);
/** Display a message to the user. */
void IssueMessage(cmake::MessageType t, std::string const& text,