Commit Graph

56 Commits

Author SHA1 Message Date
Alessandro Portale
d7ed48ac6f Add missing "emit"s
Change-Id: I88a7397c7689b1e72cdd0e52077f8097443963c0
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2021-11-11 14:10:42 +00:00
Jarek Kobus
a3ae60d729 Uniform ApplicationLauncher API: get rid of finished()
Use existing processExited() signal instead.

Change-Id: I1eecaa05fa8b3a97d8585fca4ca89e8e1acecec3
Reviewed-by: hjk <hjk@qt.io>
2021-11-10 14:07:29 +00:00
Jarek Kobus
94c70d1933 Uniform ApplicationLauncher API: get rid of reportError()
Use existing error() signal instead.
Implement errorString() and processError() in non-local case.

Change-Id: Ibdd6cec19ffa5efa0dad330515988da80e86e35b
Reviewed-by: hjk <hjk@qt.io>
2021-11-10 12:47:22 +00:00
Jarek Kobus
971b1b2269 Uniform ApplicationLauncher API: get rid of remoteProcessStarted()
Use existing processStarted() signal instead.
Replace isRemoteRunning() with isLocal().

Change-Id: I58d0204888116c00e793fa43f969707013db06eb
Reviewed-by: hjk <hjk@qt.io>
2021-11-10 11:38:48 +00:00
Jarek Kobus
d14e68eac2 Uniform ApplicationLauncher API: get rid of remoteStderr/out()
Use existing appendMessage() for this purpose either with
StdErrFormat for remoteStderr() or with StdOutFormat for remoteStdout().
In case when device process is used in ApplicationLauncher
no appendMessage() was emitted so far with StdErrFormat or StdOutFormat.

Change-Id: I2f6603aaf28113fea2a8bb6bd1738320cc39be75
Reviewed-by: hjk <hjk@qt.io>
2021-11-09 16:46:40 +00:00
Jarek Kobus
9739ded573 Uniform ApplicationLauncher API: get rid of reportProgress()
Use existing appendMessage() for this purpose with NormalMessageFormat.
In case when device process is used in ApplicationLauncher
no appendMessage() was emitted so far.

Change-Id: I96041ad19fe16066ea31d92f52253e0aa864f96d
Reviewed-by: hjk <hjk@qt.io>
2021-11-09 15:21:34 +00:00
Jarek Kobus
0556eec9b7 Use a new enum indicating various start failures
Before the m_startFailure flag was used to detect the case
when the process failed to start because of wrong filename.
As this flag was set on any possible error we have always
detected the wrong filename case. Replace this flag with a
new enum describing various start failures.

Don't report again the crashed message. Check if we have already
reported the stop and we don't report it again. The
processExited() handler is being called twice: directly from
localGuiProcessError() and through the delayed localProcessDone().

Fixes: QTCREATORBUG-26467
Change-Id: I3cc6aa0c0b702256cefd77ba95793cd31e82ae10
Reviewed-by: hjk <hjk@qt.io>
2021-10-27 07:53:53 +00:00
hjk
2292e3a7a6 ProjectExplorer: Always set a RunControl's macro expander
In some cases (e.g. "Attach to running application") there is no
proper RunConfiguration, so fall back to Target or Kit.

Amends e78f456083

Change-Id: I0093d5f573fc259fd2a72bbc1aaa22dcb8adbaee
Reviewed-by: David Schulz <david.schulz@qt.io>
2021-10-12 10:51:12 +00:00
Christian Kandeler
c045eb0cf9 ProjectExplorer: Prevent redundant output on process crash
... in run controls.

Fixes: QTCREATORBUG-26049
Change-Id: I51e560fb4674e2b8ac59cb1901d269d8179213d7
Reviewed-by: hjk <hjk@qt.io>
2021-08-16 12:26:14 +00:00
hjk
52e5023bcc ProjectExplorer: Use Utils::CommandLine in ProjectExplorer::Runnable
Change-Id: Id965f1f9047dcbc3ea5c9ddaa550d12668cf8ae6
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-08-13 15:04:30 +00:00
hjk
de6c7696d2 ProjectExplorer: Provide a way to extend RunWorkerFactory
In the light of docker support it would be nice to have a way
to tell existing RunWorkerFactories that they also work for
docker, or generally to increase the scope to which they apply
after construction time.

Small con: Some more boiler plate,
Small pros: Setup using the new method looks similar to what we use
in the other factories, and the Factories types are recognizable
when debugging.

Change-Id: Idb1757f519e7151b835326aa8b98aeaa4a372cc4
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-06-18 09:53:02 +00:00
hjk
4059c27d7a ProjectExplorer: Use manual loop in RunControl::canRun() implementation
I find the std::bind version much harder to debug.

Change-Id: I0badb4c29097a5432b110a815cb2206477091d98
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-04-19 05:09:04 +00:00
Sergey Levin
0c01ef9998 Expand RunControl displayName
Change-Id: I654ec71aeea945b59eb8a557254530dff97bed8c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-04-07 08:25:25 +00:00
hjk
c4b7da9ab2 ProjectExplorer/Debugger: Add a 'Run as root' option for Unix hosts
For local run and GDB debug, with or without terminal.

Task-number: QTCREATORBUG-2831
Task-number: QTCREATORBUG-25330
Change-Id: I9b5d2156bcffea4f358474ecdbcad580a4419917
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-02-22 13:38:25 +00:00
Alessandro Portale
afc2fda8a9 ProjectExplorer: Use qAsConst w/ non-const Qt containers in range-loops
Change-Id: I6422b3e40a6925504a231be2d47b3214d86c6e06
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-02-17 11:19:21 +00:00
hjk
2845427d46 ProjectExplorer: create provideAskPassEntry(Environment &) convenience
... to centrally set SUDO_ASKPASS unless present.

To be used for 'Run as root'

Change-Id: I85bac939e6a7fba0b2299fd17edfe73577bfa5ad
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-02-16 14:27:00 +00:00
hjk
cec468d78a Utils/ProjectExplorer: Move re-usabled bits of aspects to Utils
Classes involved are BaseAspect and some derived classes,
LayoutBuilder and VariableChooser.

This is mostly mechanical, with various include/using changes
to make it compile.

Change-Id: I624a457f3555f102e541c4c71e33a9423af32250
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2020-09-23 07:44:42 +00:00
Christian Kandeler
cba414d501 ProjectExplorer: Fix crash when setting up run control
Amends 215b284666.

Change-Id: I2d820113153fc1c3326de00f38a5d14d71a501c9
Reviewed-by: David Schulz <david.schulz@qt.io>
2020-09-08 08:52:39 +00:00
Christian Kandeler
215b284666 ProjectExplorer: Properly set up the output formatter
... for the app output window.

Fixes: QTCREATORBUG-24560
Change-Id: I199d7b16f445db498027094792c6cf344d920a88
Reviewed-by: André Hartmann <aha_1980@gmx.de>
2020-09-04 08:50:13 +00:00
hjk
e1c88116b3 Core/Utils: Migrate further to Utils::Id
The coreplugin/id.h header is kept for downstream for now.

Change-Id: I8c44590f7b988b3770ecdc177c40783e12353e66
(cherry picked from commit 430a33dcd9)
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2020-07-06 11:15:18 +00:00
Eike Ziller
5b364de168 Use dialogParent() instead of mainWindow()
There are very few reasons to use mainWindow() directly.
Especially for modal dialogs, using dialogParent() is important, since
that guarantees the stacking order in case of other dialogs currently
being open.

Change-Id: I7ad2c23c5034b43195eb35cfe405932a7ea003e6
Reviewed-by: hjk <hjk@qt.io>
2020-06-02 11:44:53 +00:00
Christian Kandeler
c563046145 ProjectExplorer: Fix possible crash in RunControl
There is not necessarily a run configuration.

Change-Id: I53e0a0ab322bcf1cbac2cbb6944602aeed933432
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2020-05-14 04:43:22 +00:00
Christian Kandeler
c15e09e0fe ProjectExplorer: Generalize the concept of custom output parsers
They can now be created independently of any toolchains, and we expose
them in the build and run configurations, so that users can easily get
tasks for output that comes from custom tools or is otherwise specific
to the user's environment.

Fixes: QTCREATORBUG-23993
Change-Id: I405753b9b68508ffe5deb4fcac08d6b213c7554d
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: hjk <hjk@qt.io>
2020-05-11 15:59:32 +00:00
Christian Kandeler
d3be54bcd1 QtSupport: Add QtTestParser to the list of output formatters
... when creating a run control for a Qt project. Now tasks will appear
in the issues pane for QtTest application output in the app output pane.

Task-number: QTCREATORBUG-22665
Change-Id: I2674f3d4f9aabc0a4db4178dcd5495b822f14022
Reviewed-by: hjk <hjk@qt.io>
2020-04-28 08:45:49 +00:00
Christian Kandeler
d42920d372 OutputFormatter: Take ownership of the line parsers
For symmetry with IOutputParser.

Task-number: QTCREATORBUG-22665
Change-Id: I92e93b32e87ff4f3fa163a2d2fe13768e56bfa24
Reviewed-by: hjk <hjk@qt.io>
2020-04-15 09:07:17 +00:00
Christian Kandeler
c0c2df203d Utils: Split up OutputFormatter class
An OutputFormatter takes some string and prints it into a text edit.
In addition, it can ask any number of registered OutputLineParsers
whether they think any special formatting should be applied to the
current line.
This mechanism is now properly modeled by our class design, rather than
being hidden in a monolithic class where everything had the same type,
no matter what its purpose was.
Prospective contributors can now simply be pointed to the
OutputLineParser class and will see at one glance what they have to do.

Change-Id: I9844499f062c94fb038ce73fd6f26576910148c2
Reviewed-by: hjk <hjk@qt.io>
2020-04-14 14:15:26 +00:00
Christian Kandeler
04a99c1de1 Remove the limitation that output formatters have to be exclusive
Introduce an aggregating output formatter that forwards its input to a
sub-formatter that feels responsible for it, or otherwise lets the base
class handle it.
Our output panes now use such an aggregating formatter.
In particular, this means that in the future, we won't have to stuff all
run control output formatting into the Qt output formatter anymore.

Change-Id: I5498f200a61db10ccff3ec8974c6825da7f7072d
Reviewed-by: hjk <hjk@qt.io>
2020-03-20 13:48:15 +00:00
Christian Kandeler
9348ac5fec Utils: Remove the *SameLine OutputFormat enums
Presumably, they were intended for output that shouldn't get an
automatic newline, but if there ever was such a thing as automatic
newlines, it must have evaporated over time. All users of
OutputFormatter provide a newline if they want one.

Change-Id: Ibd219b7305fd503ce075d6f77930d2b538d5e2e8
Reviewed-by: hjk <hjk@qt.io>
2020-03-18 13:52:17 +00:00
hjk
a68aee95a1 ProjectExplorer: Replace ProjectConfiguration::m_macroExpander
... by MacroExpanders in Build and RunConfiguration. Deploy didn't
use its own, BuildStep always composed an empty expander with
the BuildConfiguration's, uses now the BuildConfiguration's expander
directly.

Change-Id: I9de51bfc32aeb3d73f4974175e42a37807e49ac1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-02-19 09:31:02 +00:00
Alessandro Portale
9904464074 Make various Q_LOGGING_CATEGORY's static
Change-Id: I43d3a198b0863d85a7fb305c7cb768f68acbd139
Reviewed-by: hjk <hjk@qt.io>
2020-01-15 14:54:10 +00:00
hjk
2758682723 ProjectExplorer: Move BuildSystem owership to BuildConfiguration
... or Target.

This patch moves build system from conceptually "one per project"
to "one per target (i.e. per project-and-kit)" or "per
BuildConfigurations" for targets where the builds differ
significantly.

Building requires usually items from the kit (Qt version, compiler,
...) so a target-agnostic build is practically almost always wrong.

Moving the build system to the target also has the potential
to solve issues caused by switching targets while parsing, that
used Project::activeTarget() regularly, with potentially different
results before and after the switch.

This patch might create performance/size regressions when several
targets are set up per project as the build system implementation's
internal data are duplicated in this case.

The idea is to fix that by sharing per-project pieces again in
the project implementation once these problems occur.

Change-Id: I87f640ce418b93175b5029124eaa55f3b8721dca
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-11-19 11:05:52 +00:00
hjk
bcaeb73e68 ProjectExplorer: Store parts of active build config in runcontrol
... on runcontrol creation to prevent later access. Adapt some users.
There are more to come.

Change-Id: I2a3fe5eea0ada4eff7d08b79a6f49694e6962c8a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-09-24 11:20:51 +00:00
hjk
758986ea0e ProjectExplorer: Store some aspect data by value in the RunControl
Change-Id: Idb7e119b5b0b483ce91efeb21fb415b654cfed4f
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-09-05 13:45:25 +00:00
hjk
4028a41d2e ProjectExplorer: Use std::function for SimpleTargetRunner::start()
This spares us the typical r = runnable(); modify(r); setRunnable(r)
roundtrip and the m_runnable storage that might or might not
be the same as runControl->runnable. Similar for m_device.

Change-Id: I8300260dd8dd7cd395e40bcd3d2ae45089085008
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-09-04 11:08:34 +00:00
hjk
2e8f650044 ProjectExplorer: Store BuildTargetInfo in RunControl directly
Target might go away...

Change-Id: Icbe040b030148a75e84f89b1ea47867f7ab18519
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-28 11:49:56 +00:00
hjk
19580ab203 ProjectExplorer: Less use of stored RunConfiguration in RunControl
Change-Id: I501433dcbc3d40c6439f5ab003e06f5a72b9d83e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-27 10:44:49 +00:00
hjk
3844f59806 ProjectExplorer: Standardize RunWorker creation logic
This unifies the remaining paths of RunWorker creation to always
use RunWorkerFactories in the plugin pimpls.

There were, and are, still effectively three basic kinds of workers:
 - "toplevel" tools corresponding to the run modes, that are often all
    that's used for local runs and directly started via the fat buttons
    or e.g. entries in the analyze menu, with factories already previously
    located in the plugin pimpls
 -  core "tool helpers", providing tool specific functionality typically
    used in conjunction with a remote device specific run mechanism,
    set up via RunControl::registerWorkerCreator
 -  target/device specific runhelper like port gatherers contructed e.g.
    via *Device::workerCreator(Core::Id id)

Worse, these categories are partially overlapping, so it was not
clear how a "clean" setup would look like, instead some ad-hoc cobbling
"to make it work" happened.

In some cases, the runMode id was used throughout the whole ensemble
of run workers for a given run, and which worker exactly was created
depended on which of the mechanism above was used in which order.

With the new central setup, the top-level runmodes remain, but the
second kind gets new ids, so the implicit dependencies on order
of setup mechanism are avoided.

This also helps in the cases where there was previously unclarity of where
and how to set up worker factories: It's always and only the plugin
pimpl now.

Change-Id: Icd9a08e2d53e19abe8b21fe546f469fae353a69f
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2019-08-27 07:54:45 +00:00
hjk
ff277923d9 ProjectExplorer: Add a facility to dump supported run worker setups
Essentially walking the RunModes x RunConfigs x Devices cubes.

Information is just the factory pointer, or null, some name would be
nicer, but for now it turned out to be sufficient.

Change-Id: Ifdf92b2353cb5c0346ee4566beb7d78a00645aed
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-20 10:56:06 +00:00
hjk
fcffb5f2fc Utils/all: Create an OutputFormatterFactory
Essentially following the scheme used for the various project
configurations. This makes it possible to construct OutputFormatters
by Id only, potentially reducing hard plugin dependencies and
opening the road to have several output formatters per
RunConfiguration/Outputpane/...

Change-Id: I4b5fb6fb6be8b0d9a0859f178bb0effc3398b09e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-13 13:07:06 +00:00
hjk
86e9c42c90 Project: Push direct RunConfiguration use out of RunWorker factories
Change-Id: Ie5a5771bcaed7085494d5875b42668ee8d6dc157
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-08-13 12:34:46 +00:00
hjk
f9c221eb54 ProjectExplorer: Re-work setup runworker factories
This combines two of the previous three paths to create run workers,
and refers to RunConfigurations by id, not by type where possible
to decrease coupling between the classes.

Only allow "type of run configuration" and "type of device"
as the only possible kind of restriction and require a uniform
RunWorker constructor signature.

Adapt user code to fit that pattern.

Change-Id: I5a6d49c9a144785fd0235d7586f244b56f67b366
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-08-09 12:34:42 +00:00
Christian Kandeler
5edb390bac ProjectExplorer: Fix qbs build
Amends 399f8d2dff.

Change-Id: I1e2fc0c70843ce85d99e85f51d48dbde6b7165ae
Reviewed-by: hjk <hjk@qt.io>
2019-08-07 11:52:46 +00:00
hjk
a79957038a ProjectExplorer: Replace RunControl::buildTargetInfo
... by two accessors to the only used field. General idea here
is to make the presence of a RunConfiguration in a RunControl
less prominent to be able to remove it at some time completely,
as the configuration's data might change while the control is
running.

Change-Id: I752540fadd135d6904fc9bf4e3506be074b0c003
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-07 11:51:04 +00:00
hjk
399f8d2dff WebAssembly: Drop run config inheritance from CustomExecutable
Also, auto-detect free port.

Change-Id: I377956ef20a928f1877d702162792e7cae75a202
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
2019-08-07 10:53:21 +00:00
hjk
251287f0d3 Avoid warning on empty expressions
For some reason, Q_UNUSED includes already a semicolon, adding one
on the user side creates an additional empty statement.

Change-Id: I9c5e8fac381345a60792cb75e2938fd53958d3b0
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-07-23 11:55:59 +00:00
hjk
1396c6e8e9 ProjectExplorer: Use Utils::FileName for Runnable::executable
Change-Id: I584bc18aa19a4c9886af7b13e95052dfd4350b34
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-06-21 10:32:31 +00:00
hjk
611e1ea837 Utils: Encourage marking of raw command line parameters
Change-Id: Id66ac07732c66ab8c1232fe1f58042de8a61abb0
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-06-06 12:22:47 +00:00
hjk
d1fef0ea51 ProjectExplorer: Add a Runnable::setCommandLine()
Change-Id: I9b6a782e143dca8519cdc57171557bd3893df921
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-06-03 11:31:53 +00:00
hjk
4098be05b2 Utils: Extract a CommandLine structure from a QtcProcess
We regularly pass around strings or filenames or pairs of strings
or filenames and stringlist etc the in the end will be used
as a kind of "command line", with quite a bit of ad-hoc user
code and QtcProcess::addArg etc to set them up and manipulate them.

Let's have a class for that concept.

Change-Id: I288ab939d853b32c717135a65242c584c2beab50
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-05-29 14:36:46 +00:00
hjk
c3d0d2d97b ProjectExplorer: Make it easier to use RunConfiguration ids
... in RunWorkerFactory. The semantics is the same as in the other
{RunConfiguration,BuildConfiguration,...}Factory::addSupportedFoo
cases: As long as none is specified, there's no constraint, if
there are any, it's a whitelist.

Change-Id: Ia05afd9afe6886e4bacc58ac786f2548f03e5ca8
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-04-05 05:32:43 +00:00