summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-07-14 18:10:50 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-08-02 07:55:06 +0000
commitfb9e43ba444e15e76532f97e778d0149c4514340 (patch)
tree5b3406c2bf5f037fcce46531cc73075b898c1946
parente1cee308a98252d902a73db849646c8aadc864d2 (diff)
downloadqt-creator-fb9e43ba444e15e76532f97e778d0149c4514340.tar.gz
terminate when command called by system() got SIGINT or SIGQUIT
sync up with qmake - this doesn't actually do anything in qtc. Change-Id: I5e5df9f6d136601f0f36a8d645f90a1cab9995ad Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from qtbase/f8ef7e1d2619e6d394c57561bb275767f0517b24) Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r--src/shared/proparser/qmakebuiltins.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp
index 996a5afa39..d3fd28184c 100644
--- a/src/shared/proparser/qmakebuiltins.cpp
+++ b/src/shared/proparser/qmakebuiltins.cpp
@@ -54,6 +54,8 @@
#include <utime.h>
#include <errno.h>
#include <unistd.h>
+#include <signal.h>
+#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/utsname.h>
#else
@@ -1498,9 +1500,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
runProcess(&proc, args.at(0).toQString(m_tmp2));
return returnBool(proc.exitStatus() == QProcess::NormalExit && proc.exitCode() == 0);
#else
- return returnBool(system((QLatin1String("cd ")
- + IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
- + QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData()) == 0);
+ int ec = system((QLatin1String("cd ")
+ + IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
+ + QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData());
+# ifdef Q_OS_UNIX
+ if (ec != -1 && WIFSIGNALED(ec) && (WTERMSIG(ec) == SIGQUIT || WTERMSIG(ec) == SIGINT))
+ raise(WTERMSIG(ec));
+# endif
+ return returnBool(ec == 0);
#endif
#else
return ReturnTrue;