Commit Graph

117 Commits

Author SHA1 Message Date
hjk
6de05306d6 Utils: Use a structure to specify several QtcProcess device hooks
... and add a QtcProcess::systemEnvironmentForBinary(filePath)
redirecting to IDevice::systemEnvironment() of the device implicitly
given by filePath. A device implied by e.g. a qmake binary or a compiler
binary is a common scenario.

Change-Id: Ieb2c724ae66f1a1752132e4e4648a604390ca369
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-05-27 09:33:18 +00:00
hjk
770d87709e Utils: Join SynchronousProcess::run and runBlocking implementations
Make functionality dependent on an (intentionally ugly)
setProcessUserEventWhileRunning call.

Also, back-paddle a bit on API combination of QtcProcess and
SynchronousPrceoss for now and prevent the QtcProcess-and-
runBlocking and SynchronousProcess-and-start combinations.

Goal is still to have all in QtcProcess in the end, but this
may take a while.

Change-Id: Ic146ec5db0ab8dc9613e5b2af5f4dc90bc7465ca
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-25 06:40:01 +00:00
hjk
2be8061930 Utils: Fix QtcProcess::exitCode for non-SynchronousProcess
Change-Id: I18706e55db3fd31a69161be69e1cbec1a4fca975
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2021-05-21 15:06:53 +00:00
Cristian Adam
de9be2bb9d Only define CALLBACK when PCH is used
The PCH header is undefining CALLBACK after loading Windows headers,
but we need to add it back when using Windows headers that need it.

The new definition needs only to be done when the PCH is used,
otherwise it could lead to re-definition warnings.

Amends 7880950eca

Change-Id: Iae57ac4bbbfdd45b5f9b50a2242103bec6eea5bc
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2021-05-19 14:51:59 +00:00
hjk
90ad902486 Utils: Remove CommandLine argument from QtcProcess::run{,Blocking}
Makes run() more similar to what start() looks like.

Also add some asserts to make sure run() and related functions are
only called on SyncronousProcesses, as these are currently the only
ones where this works.

Change-Id: Idee6076c3f40a484db5c17f5bb348698cc83d220
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-19 13:01:51 +00:00
hjk
6830328ecf Utils: Drop SynchronousProcessResponse
Move the remnaining two members into QtcProcessPrivate, its
only user.

Change-Id: I8e0c23e1a56b36b750b5b4bd4e88d762260e42a1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-17 11:49:11 +00:00
hjk
31dc479fa5 Utils: Avoid extra output copy for SynchronousProcess
The data was present in the ChannelBuffer

Change-Id: Ica645ba58bb2e86d0ef4cf5387f0a228f132e07d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-17 11:24:15 +00:00
hjk
49864a8155 Utils: Remove ChannelBuffer's QObject base
Not used anymore.

Change-Id: If149abbced43b0b476715073cafa5ad4fe918c24
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-05-17 10:35:57 +00:00
hjk
79e02202d3 Utils: Use a setter for QtcProcess::run(.... writeData)
Change-Id: Ic56f8ecc158374251f89bb62c4b3d62168ae8409
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-17 09:42:00 +00:00
hjk
b2dc771d80 Utils: Simplify QtcProcess::exitMessage() interface
This was requiring parameters the process object already knows.

This is a slight behavior change in most cases, it now includes
always the command line arguments, which previously only happened
in gcctoolchain.cpp and iarewtoolchain.cpp.

Change-Id: Id25a68c397e2f1d8bf52ab29210e215b1de46c6d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-05-17 08:59:48 +00:00
hjk
55f768e1b0 Utils: Make process results accessible through QtcProcess object
The result is fully stored in the object anyway. Using the extra
SynchronousProcessResponse structure only causes copies of
the data and complicates access on the user side in
a lot of cases.

The result bits are now also accessible individually.

There's obvious room for follow-up changes on the topic, e.g.
ShellCommand::runCommand's parameter list could shrink to
just a SynchronousProcess parameter.

Change-Id: I45aa7eb23832340be06905929280c012e1217263
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2021-05-14 13:19:01 +00:00
hjk
edf6178896 Utils: Simplify QtcProcess::run{,Blocking} for remote processes
No need to wrap another QtcProcess.

Change-Id: I27e8bf454605f70e99d9c37de09e0332337eb739
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-12 12:25:21 +00:00
Eike Ziller
1ea3d707c6 Fix build with Qt 6
Amends e9abd60732

Change-Id: Ifae84785683343467672b52f29d560aae9757bfd
Reviewed-by: hjk <hjk@qt.io>
2021-05-11 14:13:25 +00:00
Eike Ziller
f18ac508e8 Move CommandLine out of fileutils.h
to ProcessArgs and rename the files to commandline.*.
fileutils was a strange place for CommandLine, and this
reduces the dependencies needed for sdktool.

Change-Id: I9d7e8ffe8a3560f5d12934457b086f9446976883
Reviewed-by: hjk <hjk@qt.io>
2021-05-11 13:27:23 +00:00
hjk
0c8d8c6b2a Utils: Don't expose Utils::defaultExitCodeInterpreter
Instead, make its behavior implicit if none is given.

Change-Id: I3c1a054751a0afe22d0f40a2fed6dd00b5aef205
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-11 13:15:25 +00:00
hjk
ad5b34ab3e Utils: Remove QtcProcess::{is,set}Synchronous
This reverts a bit of fe8fbf1a4a which was over-shooting API-wise.

Change-Id: Iac4c2b9fa550f7ec0b0aa8deea8c3fc6b6ddcfba
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-11 12:49:08 +00:00
hjk
9877460dd6 Utils: Move ProcessArgs class into filepair of its own
There's not much interaction between ProcessArgs and QtcProcess
and both .cpp are still quite big, with non-trivial bits.

Change-Id: Id84202f6c34057bf87cc8f27fbb45f78f105e9a5
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2021-05-11 12:14:52 +00:00
hjk
f2f40efa03 Utils: Move process arguments class out of QtcProcess
The main QtcProcess interface is nowadays a CommandLine, with no
explicit references left to QtcProcess::Arguments and related static
helper functions, so it only clutters the QtcProcess class interface

So move these items out of QtcProcess, later potentially to a separate
file pair.

Change-Id: I45c300b656f5b30e2e2717232c855fdd97c2d1d7
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-11 09:45:24 +00:00
hjk
8aafe36d01 Utils: Inline QtcProcessPrivate::processStd{Out,Err}
Less indirection.

Change-Id: Iff05c36b20d046a08725ebcb3c03931b6fd8aeab
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-11 07:40:47 +00:00
hjk
cad7671da0 Utils: Move most of SynchronousProcess to QtcProcess
Merge the pimpls, move the remaining functions to the base.

This leaves SynchronousProcess as a QtcProcess with an internal
special setup. Plan is still to unify this completely.

Change-Id: Ie95d35ace23a1b7e078174ea37b9fd70a3ebe178
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2021-05-11 07:33:54 +00:00
hjk
a4b5479695 Utils: Base SynchronousProcess on QtcProcess
This is the last intermediate step before unification to keep the
merge small.

Change-Id: I5b320f9db4c467c49a384f665cea5e16bfef4f60
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-11 06:34:17 +00:00
hjk
771f1ef6d6 Utils: Rename SychronousProcess::terminate to stopProcess
To align with QtcProcess.

Change-Id: I02e739b55ec95d5f516037de38b4f6228859809f
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-10 11:47:40 +00:00
hjk
d825805c39 Utils: Use std::function instead of signal SynchronousProcess callback
Simpler interface and use.

Change-Id: I8db448b7ccd12927b8f8fd347b0a92c3f76f7114
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2021-05-10 11:40:25 +00:00
hjk
c23cdd9262 Utils: Merge {synchronous,qtc}process.{h,cpp} file pairs
Mechanical to prepare merging the actual classes.
Adapting #includes.

Change-Id: I77a2c28129287778bc870c30cb890cd26bc2e62b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-10 09:47:51 +00:00
hjk
e9abd60732 Utils: Pimpl QtcProcess
Change-Id: I51d68ad760c181bfcedcd73d216a0535479ba39f
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-10 07:38:53 +00:00
hjk
6f53022a11 Utils: Merge TerminalControllingProcess into QtcProcess
Effectively only a single flag controlling a call to setsid().

Change-Id: I6a2be35df1bddc81702575678ee3a065a71cecf5
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-10 07:38:42 +00:00
hjk
2c70ad63d1 Utils: Move SynchronousProcess::locateBinary to QtcProcess
Change-Id: I1df5008f8f33d25f208ab8be13b4a6e72c901be2
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-07 12:47:38 +00:00
hjk
e10b5a4dbb Utils: Remove SynchronousProcess::readDataFromProcess helper
QtcProcess can do that nowadays.

Change-Id: Ic3b08146263da2eb189f043eb743c621c18b82c8
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-07 12:42:18 +00:00
hjk
dec9169efe Utils: Move SynchronousProcess::normalizeNewlines to QtcProcess
Change-Id: I5ba8ba1061b04b032aafd08382d34ccb62272829
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-05-04 07:19:55 +00:00
hjk
ecc5c042ab Utils: Shift more code from SynchronousProcess to QtcProcess
Copy for now, original will vanish once all is ported.

Idea is still to reduce the number of process related classes.

To avoid a new dependency for qmlpuppet, handle questions to
the user only inside #ifdef.

Change-Id: Ib1354fc0370a87052b4f9c8460dfcf5d762a6c4e
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2021-05-03 11:47:34 +00:00
Cristian Adam
7880950eca PCH build fix when building with Clang 12
Clang 12 has added a template parameter as "CALLBACK",
which conflicts with the Windows "CALLBACK" define.

Change-Id: I773899d103dcb1a852b555a1900b2de4acb6d96f
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
2021-05-02 11:38:01 +00:00
hjk
dcba96d16e Utils: Copy some SynchronousProcess function to QtcProcess
Start using it in Utils::Archive.

The idea is to merge SynchronousProcess into QtcProcess (or avoid its
use) to have fewer classes to make "remote-aware".

Change-Id: Ieb08f6f66eab63fd058b75e3bafa79bfbf140387
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-04-30 09:16:28 +00:00
hjk
fe8fbf1a4a Utils: Add a synchronous property to QtcProcess interface
Use it to avoid IDevice interface clutter.

Change-Id: I4a04f04e2c343593d937a402060e56ef94fcabf1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-04-30 09:16:12 +00:00
hjk
fa23183460 QtcProcess: Prepare for implementation some remote functions
Change-Id: I3c3d7d2288b5b607a2c3e933806e2e922c04610f
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2021-04-28 10:45:25 +00:00
Eike Ziller
8527cbedcc Fix more compilation issues with Qt6
Various Windows related issues and issues with additional QML designer
components.
Don't use very generic template definitions if the type has to provide
not so generic base functionality (in this case providing a stream
operator for QDataStream).

Task-number: QTCREATORBUG-24098
Change-Id: Id0729c249d1b81e4e939fdaeb2e02b8a64e7e8f9
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-11-04 12:52:17 +00:00
Eike Ziller
430a9a03b7 Utils: Add workaround for sdktool
Which is compiled against an older Qt version to keep it more
compatible.

Change-Id: Ifee61a524055ca383c83da9f237e50536a3fd0cb
Reviewed-by: hjk <hjk@qt.io>
2020-10-06 06:14:53 +00:00
Eike Ziller
3433b8c24f Qt6: Adapt to removal of QProcess::setupChildProcess
And use QProcess::setChildProcessModifier when compiling against Qt6.

Task-number: QTCREATORBUG-24098
Change-Id: I4166a8e27f8f63dd661df119413cd2eb2ae1dc2e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-10-02 07:25:10 +00:00
hjk
361b5e3530 Utils: Determine shell from $SHELL instead of hard-coding /bin/sh
Fixes: QTCREATORBUG-24659
Change-Id: Icafc001b681cc76af76b8759a4de84db51146fd4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-09-23 15:55:55 +00:00
Eike Ziller
7e8c3e91a1 Utils: Fix build with Qt6
Do not use QStringRef related API, replace with QStringView where
appropriate.

Adapt to removal of QAbstractItemView::viewOptions().

Task-number: QTCREATORBUG-24098
Change-Id: I5a7a9821984583222083733f91b46df39c21d592
Reviewed-by: hjk <hjk@qt.io>
2020-09-07 09:07:57 +00:00
Orgad Shaneh
51453936cc Utils: Replace foreach with range-based for
Change-Id: I9aeea9c029ffc56cbadc04edd20e9b35b154f986
Reviewed-by: hjk <hjk@qt.io>
2020-06-16 04:43:29 +00:00
hjk
cbac89b0fd QtcProcess: Port to QRegularExpression
Task-number: QTCREATORBUG-24098
Change-Id: I9784989786ff65ceac6c9921f7f9f09d4e0f0a49
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-06-15 05:27:59 +00:00
hjk
f2e06d2764 Revert "Port to Qt 6's absence of QProcess::setupChildProcess"
This reverts commit 6a66ced594.

The patch that will introduce the alternative to setupChildProcess
(QProcess::setChildProcessModifier()) has not yet found its
way to qtbase and current Qt dev already identifies itself as
version 6.0.0, rendering the code here uncompilable.

Change-Id: I570b01598005070f0c17604226d245a3a381250e
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2020-06-11 13:17:00 +00:00
Thiago Macieira
6a66ced594 Port to Qt 6's absence of QProcess::setupChildProcess
Change-Id: I9709abb1c3734e10a7defffd1607e5b3fd46af0e
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-04-30 15:38:41 +00:00
Thiago Macieira
86fae567fa TerminalControllingProcess: don't use qWarning in the child process
qWarning() and all of QMessageLogger will get to qFormatLogMessage(),
which locks a mutex. Additionally, qWarning may call a number of
different backends that, in turn, may have mutexes of their own. Locking
mutexes in child processes between fork() and execve() is a big no-no:
it may have been locked by another thread before fork(), so it's still
locked in the child process and will never get unlocked. Result:
deadlock.

Plus, qWarning reacts to QT_FATAL_WARNINGS, which I guess was not
intended for this class.

So just use a plain perror(), which is guaranteed by POSIX to be
"MT-Safe race:stderr".

Change-Id: I4e559af2a9a1455ab770fffd15f4a37a3fd113ca
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2020-02-20 12:53:00 +00:00
Alessandro Portale
24a25eed14 Use isEmpty() instead of count() or size()
Change-Id: I0a89d2808c6d041da0dc41ea5aea58e6e8759bb4
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2020-01-20 20:56:57 +00:00
Orgad Shaneh
e38361b5a8 Lower priority on build
This should prevent slowdown of the IDE (and the rest of the system) while
building with all the CPU cores.

Fixes: QTCREATORBUG-5155
Change-Id: Icaadc53958f2d8e918035463e3c9344c91235615
Reviewed-by: hjk <hjk@qt.io>
2019-09-18 09:35:39 +00:00
Christian Kandeler
6d3f236aab Utils::Environment: Use expanded values
The Environment class is supposed to support values with references to
other variables, but we failed to actually expand them in most places.

Fixes: QTCREATORBUG-22687
Change-Id: I108cb59d3b4571471423455240f6f4f1cf64bf05
Reviewed-by: hjk <hjk@qt.io>
2019-08-20 12:39:16 +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
Christian Kandeler
acfe45c434 SSH: Fix running remote process in terminal
ConsoleProcess stumbles over the special characters in the remote
command and as a result silently runs the command locally instead.
Prevent that. We can (and should) simply leave these characters alone,
as they have no special meaning on the local machine.

Change-Id: I31b3afe1cf170e51d431372b15f4df3656006959
Reviewed-by: hjk <hjk@qt.io>
2019-06-14 12:18:48 +00:00
hjk
959fec76dc Utils: Move CommandLine to fileutils.{cpp,h}
Causes less #include hassle when using downstream instead of
command/argument pairs.

Change-Id: I0fa0d016374df0b8e0a22f3786623652af684d36
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-06-03 12:32:07 +00:00