summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/configure.json7
-rw-r--r--src/corelib/io/qprocess.cpp6
-rw-r--r--src/corelib/io/qprocess.h8
-rw-r--r--src/corelib/io/qprocess_p.h12
-rw-r--r--src/corelib/io/qprocess_unix.cpp73
-rw-r--r--src/corelib/io/qprocess_win.cpp57
-rw-r--r--tests/auto/corelib/io/io.pro4
7 files changed, 99 insertions, 68 deletions
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index f4162956d3..6faedb6051 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -445,6 +445,13 @@
"condition": "!config.winrt && !config.uikit && !config.integrity && !config.vxworks",
"output": [ "publicFeature", "feature" ]
},
+ "processenvironment": {
+ "label": "QProcessEnvironment",
+ "purpose": "Provides a higher-level abstraction of environment variables.",
+ "section": "File I/O",
+ "condition": "!config.winrt && !config.uikit && !config.integrity && !config.vxworks",
+ "output": [ "publicFeature" ]
+ },
"temporaryfile": {
"label": "QTemporaryFile",
"purpose": "Provides an I/O device that operates on temporary files.",
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index 45f0a0e8c0..f2c2ba4476 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -99,7 +99,7 @@ QT_END_NAMESPACE
#include <private/qcore_unix_p.h>
#endif
-#ifndef QT_NO_PROCESS
+#if QT_CONFIG(processenvironment)
QT_BEGIN_NAMESPACE
@@ -430,6 +430,10 @@ void QProcessEnvironment::insert(const QProcessEnvironment &e)
d->insert(*e.d);
}
+#endif // QT_CONFIG(processenvironment)
+
+#if QT_CONFIG(process)
+
void QProcessPrivate::Channel::clear()
{
switch (type) {
diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h
index 75a0bac2ed..37e71aef5d 100644
--- a/src/corelib/io/qprocess.h
+++ b/src/corelib/io/qprocess.h
@@ -48,8 +48,9 @@
QT_BEGIN_NAMESPACE
+class QProcessPrivate;
-#ifndef QT_NO_PROCESS
+#if QT_CONFIG(processenvironment)
#if !defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
typedef qint64 Q_PID;
@@ -61,7 +62,6 @@ typedef struct _STARTUPINFOW Q_STARTUPINFO;
QT_BEGIN_NAMESPACE
#endif
-class QProcessPrivate;
class QProcessEnvironmentPrivate;
class Q_CORE_EXPORT QProcessEnvironment
@@ -105,6 +105,10 @@ private:
Q_DECLARE_SHARED(QProcessEnvironment)
+#endif // QT_CONFIG(processenvironment)
+
+#if QT_CONFIG(process)
+
class Q_CORE_EXPORT QProcess : public QIODevice
{
Q_OBJECT
diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h
index ae236c8c60..92b747f6ba 100644
--- a/src/corelib/io/qprocess_p.h
+++ b/src/corelib/io/qprocess_p.h
@@ -70,8 +70,6 @@ typedef int Q_PIPE;
#define INVALID_Q_PIPE -1
#endif
-#ifndef QT_NO_PROCESS
-
QT_BEGIN_NAMESPACE
class QSocketNotifier;
@@ -80,6 +78,8 @@ class QWindowsPipeWriter;
class QWinEventNotifier;
class QTimer;
+#if QT_CONFIG(processenvironment)
+
#ifdef Q_OS_WIN
class QProcEnvKey : public QString
{
@@ -233,6 +233,10 @@ template<> Q_INLINE_TEMPLATE void QSharedDataPointer<QProcessEnvironmentPrivate>
d = x;
}
+#endif // QT_CONFIG(processenvironment)
+
+#if QT_CONFIG(process)
+
class QProcessPrivate : public QIODevicePrivate
{
public:
@@ -386,8 +390,8 @@ public:
void setErrorAndEmit(QProcess::ProcessError error, const QString &description = QString());
};
-QT_END_NAMESPACE
-
#endif // QT_NO_PROCESS
+QT_END_NAMESPACE
+
#endif // QPROCESS_P_H
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index b39816dd7d..39ec370d9c 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -41,9 +41,7 @@
//#define QPROCESS_DEBUG
#include "qdebug.h"
-#ifndef QT_NO_PROCESS
-
-#if defined QPROCESS_DEBUG
+#if QT_CONFIG(process) && defined(QPROCESS_DEBUG)
#include "private/qtools_p.h"
#include <ctype.h>
@@ -114,10 +112,47 @@ QT_END_NAMESPACE
#include <errno.h>
#include <stdlib.h>
#include <string.h>
+
+#if QT_CONFIG(process)
#include <forkfd.h>
+#endif
QT_BEGIN_NAMESPACE
+#if QT_CONFIG(processenvironment)
+
+QT_BEGIN_INCLUDE_NAMESPACE
+#if defined(Q_OS_MACOS)
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#else
+extern char **environ;
+#endif
+QT_END_INCLUDE_NAMESPACE
+
+QProcessEnvironment QProcessEnvironment::systemEnvironment()
+{
+ QProcessEnvironment env;
+#if !defined(QT_PLATFORM_UIKIT)
+ const char *entry;
+ for (int count = 0; (entry = environ[count]); ++count) {
+ const char *equal = strchr(entry, '=');
+ if (!equal)
+ continue;
+
+ QByteArray name(entry, equal - entry);
+ QByteArray value(equal + 1);
+ env.d->hash.insert(QProcessEnvironmentPrivate::Key(name),
+ QProcessEnvironmentPrivate::Value(value));
+ }
+#endif
+ return env;
+}
+
+#endif // QT_CONFIG(processenvironment)
+
+#if QT_CONFIG(process)
+
// POSIX requires PIPE_BUF to be 512 or larger
// so we will use 512
static const int errorBufferMax = 512;
@@ -310,34 +345,6 @@ bool QProcessPrivate::openChannel(Channel &channel)
}
}
-QT_BEGIN_INCLUDE_NAMESPACE
-#if defined(Q_OS_MACX)
-# include <crt_externs.h>
-# define environ (*_NSGetEnviron())
-#else
- extern char **environ;
-#endif
-QT_END_INCLUDE_NAMESPACE
-
-QProcessEnvironment QProcessEnvironment::systemEnvironment()
-{
- QProcessEnvironment env;
-#if !defined(QT_PLATFORM_UIKIT)
- const char *entry;
- for (int count = 0; (entry = environ[count]); ++count) {
- const char *equal = strchr(entry, '=');
- if (!equal)
- continue;
-
- QByteArray name(entry, equal - entry);
- QByteArray value(equal + 1);
- env.d->hash.insert(QProcessEnvironmentPrivate::Key(name),
- QProcessEnvironmentPrivate::Value(value));
- }
-#endif
- return env;
-}
-
static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environment, int *envc)
{
*envc = 0;
@@ -1044,6 +1051,6 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a
return success;
}
-QT_END_NAMESPACE
-
#endif // QT_NO_PROCESS
+
+QT_END_NAMESPACE
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp
index 8579db1694..fcdf13fddb 100644
--- a/src/corelib/io/qprocess_win.cpp
+++ b/src/corelib/io/qprocess_win.cpp
@@ -38,6 +38,7 @@
**
****************************************************************************/
+//#define QPROCESS_DEBUG
#include "qprocess.h"
#include "qprocess_p.h"
#include "qwindowspipereader_p.h"
@@ -59,11 +60,35 @@
#define PIPE_REJECT_REMOTE_CLIENTS 0x08
#endif
-#ifndef QT_NO_PROCESS
-
QT_BEGIN_NAMESPACE
-//#define QPROCESS_DEBUG
+#if QT_CONFIG(processenvironment)
+
+QProcessEnvironment QProcessEnvironment::systemEnvironment()
+{
+ QProcessEnvironment env;
+ // Calls to setenv() affect the low-level environment as well.
+ // This is not the case the other way round.
+ if (wchar_t *envStrings = GetEnvironmentStringsW()) {
+ for (const wchar_t *entry = envStrings; *entry; ) {
+ const int entryLen = int(wcslen(entry));
+ // + 1 to permit magic cmd variable names starting with =
+ if (const wchar_t *equal = wcschr(entry + 1, L'=')) {
+ int nameLen = equal - entry;
+ QString name = QString::fromWCharArray(entry, nameLen);
+ QString value = QString::fromWCharArray(equal + 1, entryLen - nameLen - 1);
+ env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), value);
+ }
+ entry += entryLen + 1;
+ }
+ FreeEnvironmentStringsW(envStrings);
+ }
+ return env;
+}
+
+#endif // QT_CONFIG(processenvironment)
+
+#if QT_CONFIG(process)
static void qt_create_pipe(Q_PIPE *pipe, bool isInputPipe)
{
@@ -369,28 +394,6 @@ static QString qt_create_commandline(const QString &program, const QStringList &
return args;
}
-QProcessEnvironment QProcessEnvironment::systemEnvironment()
-{
- QProcessEnvironment env;
- // Calls to setenv() affect the low-level environment as well.
- // This is not the case the other way round.
- if (wchar_t *envStrings = GetEnvironmentStringsW()) {
- for (const wchar_t *entry = envStrings; *entry; ) {
- const int entryLen = int(wcslen(entry));
- // + 1 to permit magic cmd variable names starting with =
- if (const wchar_t *equal = wcschr(entry + 1, L'=')) {
- int nameLen = equal - entry;
- QString name = QString::fromWCharArray(entry, nameLen);
- QString value = QString::fromWCharArray(equal + 1, entryLen - nameLen - 1);
- env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), value);
- }
- entry += entryLen + 1;
- }
- FreeEnvironmentStringsW(envStrings);
- }
- return env;
-}
-
static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Hash &environment)
{
QByteArray envlist;
@@ -891,6 +894,6 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a
return success;
}
-QT_END_NAMESPACE
-
#endif // QT_NO_PROCESS
+
+QT_END_NAMESPACE
diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro
index 0542833456..2e7b987e02 100644
--- a/tests/auto/corelib/io/io.pro
+++ b/tests/auto/corelib/io/io.pro
@@ -59,9 +59,11 @@ SUBDIRS=\
win32:!qtConfig(private_tests): SUBDIRS -= \
qfilesystementry
+!qtConfig(processenvironment): SUBDIRS -= \
+ qprocessenvironment
+
winrt: SUBDIRS -= \
qprocess \
qprocess-noapplication \
- qprocessenvironment \
qstorageinfo \
qwinoverlappedionotifier