Commit e487b3bd authored by Eike Ziller's avatar Eike Ziller

Merge remote-tracking branch 'origin/4.2'

Change-Id: I575f1cf98f2a4740577cdd94da21687d3392cdb7
parents a00ee753 ac2ceb36
......@@ -6,9 +6,9 @@ Qt Creator is a cross-platform IDE for development with the Qt framework.
The standalone binary packages support the following platforms:
Windows 7 or later
(K)Ubuntu Linux 14.04 (64-bit) or later
macOS 10.8 or later
* Windows 7 or later
* (K)Ubuntu Linux 14.04 (64-bit) or later
* macOS 10.8 or later
## Compiling Qt Creator
......@@ -20,12 +20,11 @@ Prerequisites:
* ActiveState Active Perl
* MinGW with g++ 4.8 or Visual Studio 2015 or later
* jom
The optional Clang code model requires LLVM. A manual build of it requires in addition:
* cmake
* On Mac OS X: latest Xcode
* On Linux: g++ 4.8 or later
* LLVM 3.9.0 or later (optional, needed for the Clang Code Model)
* LLVM/Clang 3.9.0 or later (optional, needed for the Clang Code Model, see the
section "Get LLVM/Clang for the Clang Code Model")
* CMake (only for manual builds of LLVM/Clang)
* Qbs 1.7.x (optional, sources also contain Qbs itself)
The installed toolchains have to match the one Qt was compiled with.
......@@ -58,7 +57,7 @@ For detailed information on the supported compilers, see
plan to contribute to Qt Creator, you should compile your changes with
both compilers.
2. Install msysGit from <https://msysgit.github.io/>. If you plan to
2. Install Git for Windows from <https://git-for-windows.github.io/>. If you plan to
use the MinGW compiler suite, do not choose to put git in the
default path of Windows command prompts. For more information, see
step 9.
......@@ -125,34 +124,16 @@ For detailed information on the supported compilers, see
command...` error. If a `sh.exe` is found, the compile process will fail.
You have to remove it from the path.
10. As of Qt Creator 4.2, a complete build of LLVM and Clang is required
to enable the Clang-based code model (recommmended: 3.9). For 32bit,
a pre-built package can be downloaded from:
https://download.qt.io/development_releases/prebuilt/libclang/.
The environment variable LLVM_INSTALL_DIR needs to be set to point to the
installation location.
It is also possible to build Clang manually, roughly following the
instructions at http://llvm.org/docs/GettingStarted.html#git-mirror .
* Clone LLVM
git clone http://llvm.org/git/llvm.git
* Switch to a suitable branch, for example, release_39
cd llvm
git checkout -b release_39
* Clone Clang under llvm\tools
cd tools
git clone http://llvm.org/git/clang.git
* Switch Clang to a suitable branch
cd clang
git checkout -b release_39
* Create a shadow build directory and build
cd ..\..\..
mkdir build
cd build
cmake -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<installation location> -DLLVM_ENABLE_RTTI=ON ..\llvm
jom install
11. You are now ready to configure and build Qt and Qt Creator.
10. To make use of the Clang Code Model:
* Install LLVM/Clang - see the section "Get LLVM/Clang for the Clang
Code Model".
* Set the environment variable LLVM_INSTALL_DIR to the LLVM/Clang
installation directory.
* When you launch Qt Creator, activate the Clang Code Model plugin as
described in doc/src/editors/creator-clang-codemodel.qdoc.
11. You are now ready to configure and build Qt and Qt Creator.
Please see <https://wiki.qt.io/Building_Qt_5_from_Git> for
recommended configure-options for Qt 5.
To use MinGW, open the the shell prompt and enter:
......@@ -219,6 +200,58 @@ separate build of it. We recommend using a separate, release-built version
of Qt and Qt Creator to work on a debug-built version of Qt and Qt Creator
or using shadow builds.
## Get LLVM/Clang for the Clang Code Model
The Clang Code Model depends on the LLVM/Clang libraries. The currently
supported LLVM/Clang version is 3.9.
### Prebuilt LLVM/Clang packages
Prebuilt packages of LLVM/Clang can be downloaded from
https://download.qt.io/development_releases/prebuilt/libclang/
This should be your preferred option because you will use the version that is
shipped together with Qt Creator. In addition, the packages for Windows are
faster due to profile-guided optimization. If the prebuilt packages do not
match your configuration, you need to build LLVM/Clang manually.
### Building LLVM/Clang manually
You need to install CMake in order to build LLVM/Clang.
Build LLVM/Clang by roughly following the instructions at
http://llvm.org/docs/GettingStarted.html#git-mirror:
1. Clone LLVM and switch to a suitable branch
git clone http://llvm.org/git/llvm.git
cd llvm
git checkout release_39
2. Clone Clang into llvm/tools/clang and switch to a suitable branch
cd tools
git clone http://llvm.org/git/clang.git
cd clang
git checkout release_39
3. Build and install LLVM/Clang
cd ../../..
mkdir build
cd build
For Linux/macOS:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<installation location> -DLLVM_ENABLE_RTTI=ON ..\llvm
make install
For Windows:
cmake -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<installation location> -DLLVM_ENABLE_RTTI=ON ..\llvm
jom install
## Third-party Components
Qt Creator includes the following third-party components,
......
......@@ -80,8 +80,8 @@ C++ Support
Debugging
* Added pretty printing of `QRegExp` captures, `QStaticStringData`, and
`std::pair`
* Added pretty printing of `QRegExp` captures, `QStaticStringData`,
`QStandardItem`, and `std::pair`
* Improved pretty printing of QV4 types
* Made display of maps more compact
* Fixed pretty printing of `QFixed`
......@@ -163,6 +163,10 @@ iOS
* Fixed that Qt Creator was blocked until simulator finished starting
Remote Linux
* Fixed crash when creating SSH key pair (QTCREATORBUG-17349)
Credits for these changes go to:
Aaron Barany
Alessandro Portale
......
......@@ -37,7 +37,7 @@
\title Comparing Files
You can use a diff editor to display unsaved changed in the current file or
You can use a diff editor to display unsaved changes in the current file or
all open files or to compare any two text files that can be either versions
of the same file or arbitrary files.
......
......@@ -31,14 +31,15 @@
\title Editing PathView Properties
A \l{PathView} lays out data provided by data models on a \l{Path}.
A \l{PathView}{Path View} lays out data provided by data models on a
\l{Path}.
A graphical spline editor enables you to specify PathView paths, which
A graphical spline editor enables you to specify path view paths, which
is a non-trivial task to do in the code editor.
\image qmldesigner-pathview-editor.png "PathView editor"
To start editing the Path, double-click the PathView on the canvas. The
To start editing the path, double-click the path view on the canvas. The
editor composes the path of PathCubic path objects. They are cubic Bezier
curves to a given position with two control points. Drag and drop the
control points to construct the curve.
......@@ -47,7 +48,7 @@
To make a curve segment linear, select \uicontrol {Make Curve Segment Straight} in
the context menu.
By default, the Path is closed, which means that its start and end points
By default, the path is closed, which means that its start and end points
are identical. To create separate start and end points for it, right-click
an edit point to open a context menu, and deselect \uicontrol {Closed Path}.
......@@ -55,7 +56,7 @@
in the context menu.
In the \uicontrol Properties pane, you can specify other properties for
the PathView. For example, what is the maximum distance from the path that
the path view. For example, what is the maximum distance from the path that
initiates mouse dragging and what is the rate at which a flick will
decelerate.
......
......@@ -79,18 +79,19 @@
\list
\li GridView provides a grid vizualization of a model.
\li \l{GridView}{Grid View} provides a grid vizualization of a model.
\li ListView provides a list vizualization of a model.
\li \l{ListView}{List View} provides a list vizualization of a model.
\li PathView visualizes the contents of a model along a path.
\li \l{PathView}{Path View} visualizes the contents of a model along a
path.
\endlist
When you add a GridView, ListView, or PathView, the ListModel and the
delegate component that creates an instance for each item in the model are
added automatically. You can edit item properties
in the \uicontrol Properties pane or
When you add a \l{GridView}{Grid View}, \l{ListView}{List View}, or
\l{PathView}{Path View}, the ListModel and the delegate component that
creates an instance for each item in the model are added automatically.
You can edit item properties in the \uicontrol Properties pane or
in the code editor. You can also replace the default model and
delegate with other, more complex models and delegates in the code editor.
......@@ -231,9 +232,9 @@
\endlist
To lay out several items in a Column, Row, Grid, or Flow, select
the items on the canvas, and then select \uicontrol Layout in the context
menu.
To lay out several items in a \uicontrol Column, \uicontrol Row,
\uicontrol Grid, or \uicontrol Flow, select the items on the canvas, and
then select \uicontrol Layout in the context menu.
\section2 Using Layouts
......@@ -249,12 +250,13 @@
\li \l{Layout} provides attached properties for items pushed onto a
\uicontrol {Column Layout}, \uicontrol {Row Layout}, or \uicontrol {Grid Layout}.
\li ColumnLayout provides a grid layout with only one column.
\li \l{ColumnLayout}{Column Layout} provides a grid layout with only one
column.
\li RowLayout provides a grid layout with only one row.
\li \l{RowLayout}{Row Layout} provides a grid layout with only one row.
\li GridLayout provides a way of dynamically arranging items in a
grid.
\li \l{GridLayout}{Grid Layout} provides a way of dynamically arranging
items in a grid.
\endlist
......@@ -372,7 +374,7 @@
\li \l{Flickable}
items can be flicked horizontally or vertically.
\li FocusScope
\li \l{FocusScope}{Focus Scope}
assists in keyboard focus handling when building reusable QML
components.
......
......@@ -43,7 +43,7 @@
You can use the \l{http://code.google.com/p/gerrit/}{Gerrit} code review
tool for projects that use Git.
\section1 Using msysGit on Windows
\section1 Using Git for Windows
If you configure Git for use with \c {git bash}, only, and use SSH
authorization, Git looks for the SSH keys in the directory where the
......
......@@ -97,8 +97,8 @@
that everything works (for example, use the status command). If no issues
arise, you should be ready to use the system also from \QC.
For more information on using msysGit on Windows, see
\l {Using msysGit on Windows}.
For more information on using Git for Windows, see
\l {Using Git for Windows}.
\section1 Setting Up General Options
......
......@@ -1304,6 +1304,7 @@ class DumperBase:
#warn('RAW')
self.putType(typeName)
self.putValue('0x%x' % pointer)
self.putNumChild(1)
if self.currentIName in self.expandedINames:
with Children(self):
with SubItem(self, '*'):
......
......@@ -204,17 +204,16 @@ def qdump__std__list(d, value):
p = d.extractPointer(p)
def qdump__std__list__QNX(d, value):
node = value["_Myhead"]
size = value["_Mysize"].integer()
(proxy, head, size) = value.split("ppp")
d.putItemCount(size, 1000)
if d.isExpanded():
p = node["_Next"]
with Children(d, size, maxNumChild=1000, childType=value.type[0]):
p = d.extractPointer(head)
innerType = value.type[0]
with Children(d, size, maxNumChild=1000, childType=innerType):
for i in d.childRange():
d.putSubItem(i, p['_Myval'])
p = p["_Next"]
d.putSubItem(i, d.createValue(p + 2 * d.ptrSize(), innerType))
p = d.extractPointer(p)
def qdump__std____debug__list(d, value):
qdump__std__list(d, value)
......@@ -652,6 +651,13 @@ def qdump__std____1__wstring(d, value):
d.putType("std::wstring")
def qdump__std____weak_ptr(d, value):
return qdump__std__shared_ptr(d, value)
def qdump__std__weak_ptr(d, value):
return qdump__std__shared_ptr(d, value)
def qdump__std__shared_ptr(d, value):
if d.isMsvcTarget():
i = value["_Ptr"]
......@@ -909,39 +915,26 @@ def qdumpHelper__std__vector__QNX(d, value):
innerType = value.type[0]
isBool = innerType.name == 'bool'
if isBool:
try:
impl = value['_Myvec']['_Mypair']['_Myval2']
except:
impl = value['_Myvec']
start = impl['_Myfirst'].pointer()
last = impl['_Mylast'].pointer()
end = impl['_Myend'].pointer()
size = value['_Mysize'].integer()
storagesize = start.dereference().type.size() * 8
(proxy1, proxy2, start, last, end, size) = value.split("pppppi")
else:
try:
impl = value['_Mypair']['_Myval2']
except:
impl = value
start = impl['_Myfirst'].pointer()
last = impl['_Mylast'].pointer()
end = impl['_Myend'].pointer()
(proxy, start, last, end) = value.split("pppp")
size = (last - start) // innerType.size()
d.check(0 <= size and size <= 1000 * 1000 * 1000)
d.check(last <= end)
d.checkPointer(start)
d.checkPointer(last)
d.checkPointer(end)
if size > 0:
d.checkPointer(start)
d.checkPointer(last)
d.checkPointer(end)
d.putItemCount(size)
if d.isExpanded():
if isBool:
with Children(d, size, maxNumChild=10000, childType=innerType):
for i in d.childRange():
q = start + int(i / storagesize)
q = start + int(i / 8)
with SubItem(d, i):
d.putValue((q.dereference().pointer() >> (i % storagesize)) & 1)
d.putValue((d.extractPointer(q) >> (i % 8)) & 1)
d.putType("bool")
d.putNumChild(0)
else:
......
......@@ -20546,7 +20546,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
<message>
<source>Qt versions for %1 architectures are missing.
To add the Qt versions, select Options &gt; Build &amp; Run &gt; Qt Versions.</source>
<translation>Für die Architekturen %1 fehlen die Qt-Versionen.
<translation>Für %1 Architekturen fehlen die Qt-Versionen.
Wählen Sie Einstellungen &gt; Erstellung und Ausführung &gt; Qt Versionen, um Qt-Versionen hinzuzufügen.</translation>
</message>
<message numerus="yes">
......@@ -282,6 +282,15 @@ protected:
{
BestSplit result;
while (possibleSplits.count() > 12) {
QList<Split> newPossibleSplits;
for (int i = 0; i < possibleSplits.count(); i++) {
if (!(i % 2))
newPossibleSplits.push_back(possibleSplits.at(i));
}
possibleSplits = newPossibleSplits;
}
result.badnessFromSplits = 0;
result.lines = QStringList(line);
......
......@@ -115,7 +115,7 @@ void SshKeyGenerator::generatePkcs8KeyString(const KeyPtr &key, bool privateKey,
keyData = &m_publicKey;
}
pipe.end_msg();
keyData->resize(static_cast<int>(pipe.remaining(pipe.message_count()) - 1));
keyData->resize(static_cast<int>(pipe.remaining(pipe.message_count() - 1)));
pipe.read(convertByteArray(*keyData), keyData->size(),
pipe.message_count() - 1);
}
......
......@@ -126,7 +126,8 @@ const int MIN_SOCKET_HANDSHAKE_PORT = 20001;
const int MAX_SOCKET_HANDSHAKE_PORT = 20999;
static const QString pidScript = QStringLiteral("for p in /proc/[0-9]*; "
"do cat <$p/cmdline && echo :${p##*/}; done");
static const QString pidPollingScript = QStringLiteral("while true; do sleep 1; kill -0 %1; done");
static const QString pidPollingScript = QStringLiteral("while true; do sleep 1; "
"cat /proc/%1/cmdline > /dev/null; done");
static int APP_START_TIMEOUT = 45000;
static bool isTimedOut(const chrono::high_resolution_clock::time_point &start,
......
......@@ -521,7 +521,7 @@ sourceLocationsToExtraSelections(const std::vector<SourceLocationContainer> &sou
const auto textCharFormat = occurrencesTextCharFormat();
QList<QTextEdit::ExtraSelection> selections;
selections.reserve(sourceLocations.size());
selections.reserve(int(sourceLocations.size()));
auto sourceLocationToExtraSelection = [&] (const SourceLocationContainer &sourceLocation) {
QTextEdit::ExtraSelection selection;
......
......@@ -1254,8 +1254,6 @@ void CdbEngine::doUpdateLocals(const UpdateParameters &updateParameters)
runCommand(cmd);
} else {
typedef QHash<QString, int> WatcherHash;
const bool partialUpdate = !updateParameters.partialVariable.isEmpty();
const bool isWatch = isWatchIName(updateParameters.partialVariable);
......@@ -1325,10 +1323,9 @@ void CdbEngine::doUpdateLocals(const UpdateParameters &updateParameters)
if (!partialUpdate)
str << blankSeparator << "-W";
if (!partialUpdate || isWatch) {
const WatcherHash watcherHash = WatchHandler::watcherNames();
if (!watcherHash.isEmpty()) {
const WatcherHash::const_iterator cend = watcherHash.constEnd();
for (WatcherHash::const_iterator it = watcherHash.constBegin(); it != cend; ++it) {
const QMap<QString, int> watchers = WatchHandler::watcherNames();
if (!watchers.isEmpty()) {
for (auto it = watchers.constBegin(), cend = watchers.constEnd(); it != cend; ++it) {
str << blankSeparator << "-w " << "watch." + QString::number(it.value())
<< " \"" << it.key() << '"';
}
......
......@@ -84,6 +84,7 @@ public:
QString remoteChannel;
QSsh::SshConnectionParameters connParams;
bool remoteSetupNeeded = false;
bool useExtendedRemote = false; // Whether to use GDB's target extended-remote or not.
QString symbolFile;
// Used by Mer plugin (3rd party)
......
......@@ -4136,7 +4136,9 @@ void GdbEngine::handleGdbError(QProcess::ProcessError error)
// This should be handled by the code trying to start the process.
break;
case QProcess::Crashed:
// This will get a processExited() as well.
// This does not seem to get processFinished() in all cases.
m_gdbProc.disconnect();
handleGdbFinished(m_gdbProc.exitCode(), QProcess::CrashExit);
break;
case QProcess::ReadError:
case QProcess::WriteError:
......
......@@ -262,7 +262,7 @@ void GdbRemoteServerEngine::callTargetRemote()
if (m_isQnxGdb)
runCommand({"target qnx " + channel, NoFlags, CB(handleTargetQnx)});
else if (runParameters().multiProcess)
else if (runParameters().useExtendedRemote)
runCommand({"target extended-remote " + channel, NoFlags, CB(handleTargetExtendedRemote)});
else
runCommand({"target remote " + channel, NoFlags, CB(handleTargetRemote)});
......@@ -467,7 +467,7 @@ void GdbRemoteServerEngine::notifyEngineRemoteServerRunning
// Currently only used by Android support.
runParameters().attachPID = inferiorPid;
runParameters().remoteChannel = serverChannel;
runParameters().multiProcess = true;
runParameters().useExtendedRemote = true;
showMessage("NOTE: REMOTE SERVER RUNNING IN MULTIMODE");
m_startAttempted = true;
startGdb();
......
......@@ -88,7 +88,7 @@ enum { debugModel = 0 };
#define MODEL_DEBUG(s) do { if (debugModel) qDebug() << s; } while (0)
static QHash<QString, int> theWatcherNames;
static QMap<QString, int> theWatcherNames; // Keep order, QTCREATORBUG-12308.
static int theWatcherCount = 0;
static QHash<QString, int> theTypeFormats;
static QHash<QString, int> theIndividualFormats;
......@@ -428,8 +428,6 @@ public:
QString editorContents(const QModelIndexList &list = QModelIndexList());
void clearWatches();
void removeWatchItem(WatchItem *item);
void watchExpression(const QString &exp);
void watchExpression(const QString &exp, const QString &name);
void inputNewExpression();
public:
......@@ -1095,7 +1093,7 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role
if (item && kev->key() == Qt::Key_Return
&& kev->modifiers() == Qt::ControlModifier
&& item->isLocal()) {
watchExpression(item->expression());
m_handler->watchExpression(item->expression(), QString());
return true;
}
}
......@@ -1531,16 +1529,6 @@ static QString removeWatchActionText(QString exp)
.arg(exp.replace('&', "&&"));
}
void WatchModel::watchExpression(const QString &exp)
{
watchExpression(exp, QString());
}
void WatchModel::watchExpression(const QString &exp, const QString &name)
{
currentEngine()->watchHandler()->watchExpression(exp, name);
}
static void copyToClipboard(const QString &clipboardText)
{
QClipboard *clipboard = QApplication::clipboard();
......@@ -1582,11 +1570,8 @@ void WatchModel::inputNewExpression()
connect(hint, &QLabel::linkActivated, [](const QString &link) {
HelpManager::handleHelpRequest(link); });
if (dlg.exec() == QDialog::Accepted) {
const QString exp = lineEdit->text().trimmed();
if (!exp.isEmpty())
m_handler->watchExpression(exp, exp);
}
if (dlg.exec() == QDialog::Accepted)
m_handler->watchExpression(lineEdit->text().trimmed());
}
bool WatchModel::contextMenuEvent(const ItemViewEvent &ev)
......@@ -2096,6 +2081,7 @@ QString WatchHandler::watcherName(const QString &exp)
return "watch." + QString::number(theWatcherNames[exp]);
}
// If \a name is empty, \a exp will be used as name.
void WatchHandler::watchExpression(const QString &exp, const QString &name)
{
// Do not insert the same entry more then once.
......@@ -2137,7 +2123,7 @@ void WatchHandler::updateWatchExpression(WatchItem *item, const QString &newExp)
item->setValue(QString(QLatin1Char(' ')));
item->update();
} else {
m_model->m_engine->updateItem(item->iname);
m_model->m_engine->updateWatchData(item->iname);
}
updateWatchersWindow();
}
......@@ -2259,7 +2245,7 @@ void WatchModel::showEditValue(const WatchItem *item)
else if (innerType == "float") {
if (innerSize == 4)
reader = &readOne<float>;
else if (innerSize == 4)
else if (innerSize == 8)
reader = &readOne<double>;
}
QTC_ASSERT(reader, return);
......@@ -2313,7 +2299,7 @@ QStringList WatchHandler::watchedExpressions()
{
// Filter out invalid watchers.
QStringList watcherNames;
QHashIterator<QString, int> it(theWatcherNames);
QMapIterator<QString, int> it(theWatcherNames);
while (it.hasNext()) {
it.next();
const QString &watcherName = it.key();
......@@ -2517,7 +2503,7 @@ void WatchHandler::appendWatchersAndTooltipRequests(DebuggerCommand *cmd)
foreach (const DebuggerToolTipContext &p, toolTips)
watchers.append(watcher(p.iname, p.expression));
QHashIterator<QString, int> it(WatchHandler::watcherNames());
QMapIterator<QString, int> it(WatchHandler::watcherNames());
while (it.hasNext()) {
it.next();
watchers.append(watcher("watch." + QString::number(it.value()), it.key()));
......@@ -2576,7 +2562,7 @@ void WatchHandler::setCurrentItem(const QString &iname)
}
}
QHash<QString, int> WatchHandler::watcherNames()
QMap<QString, int> WatchHandler::watcherNames()
{
return theWatcherNames;
}
......
......@@ -82,7 +82,7 @@ public:
QSet<QString> expandedINames() const;
static QStringList watchedExpressions();
static QHash<QString, int> watcherNames();
static QMap<QString, int> watcherNames();
void appendFormatRequests(DebuggerCommand *cmd);
void appendWatchersAndTooltipRequests(DebuggerCommand *cmd);
......
......@@ -1137,7 +1137,7 @@ QList<FileData> DiffUtils::readPatch(const QString &patch, bool *ok)
QList<FileData> fileDataList;
QString croppedPatch = patch;
// Crop e.g. "-- \n1.9.4.msysgit.0\n\n" at end of file
// Crop e.g. "-- \n2.10.2.windows.1\n\n" at end of file
const QRegExp formatPatchEndingRegExp(QLatin1String("(\\n-- \\n\\S*\\n\\n$)"));
const int pos = formatPatchEndingRegExp.indexIn(patch);
if (pos != -1)
......
......@@ -2234,7 +2234,7 @@ FileName GitClient::gitBinDirectory()
// Is 'git\cmd' in the path (folder containing .bats)?
QString path = QFileInfo(git).absolutePath();
// Git for Windows (msysGit) has git and gitk redirect executables in {setup dir}/cmd
// Git for Windows has git and gitk redirect executables in {setup dir}/cmd
// and the real binaries are in {setup dir}/bin. If cmd is configured in PATH
// or in Git settings, return bin instead.
if (HostOsInfo::isWindowsHost()
......@@ -2997,7 +2997,7 @@ QString GitClient::readGitVar(const QString &workingDirectory, const QString &co
QString GitClient::readOneLine(const QString &workingDirectory, const QStringList &arguments) const
{
// msysGit always uses UTF-8 for configuration:
// Git for Windows always uses UTF-8 for configuration:
// https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support#convert-config-files
static QTextCodec *codec = HostOsInfo::isWindowsHost()
? QTextCodec::codecForName("UTF-8")
......
......@@ -122,7 +122,7 @@ RunControl *RemoteLinuxRunControlFactory::create(RunConfiguration *runConfig, Co
params.qmlServer.port = Utils::Port(); // port is selected later on
}
if (aspect->useCppDebugger()) {
aspect->setUseMultiProcess(true);
params.useExtendedRemote = true;
params.inferior.executable = stdRunnable.executable;
params.inferior.commandLineArguments = stdRunnable.commandLineArguments;
if (aspect->useQmlDebugger()) {
......
......@@ -4391,7 +4391,11 @@ void tst_Dumpers::dumper_data()
"#include <string>\n" + fooData,
"std::shared_ptr<int> pi(new int(32)); unused(&pi);\n"
"std::shared_ptr<Foo> pf(new Foo); unused(&pf);\n"
"std::shared_ptr<std::string> ps(new std::string(\"ABC\")); unused(&ps);\n")
"std::shared_ptr<std::string> ps(new std::string(\"ABC\")); "
"unused(&ps);\n"
"std::weak_ptr<int> wi = pi; unused(&wi);\n"
"std::weak_ptr<Foo> wf = pf; unused(&wf);\n"
"std::weak_ptr<std::string> ws = ps; unused(&ws);\n")
+ Cxx11Profile()
+ MacLibCppProfile()
......@@ -4401,7 +4405,13 @@ void tst_Dumpers::dumper_data()
+ Check("pf", Pointer(), "std::shared_ptr<Foo>")
+ CheckType("pf.data", "Foo"