| 58 | } |
| 59 | |
| 60 | void QMakeJob::start() |
| 61 | { |
| 62 | static const char* const BUILD_TYPES[] = { "debug", "build", "(don't specify)" }; |
| 63 | |
| 64 | m_model = new OutputModel; |
| 65 | setModel(m_model); |
| 66 | |
| 67 | startOutput(); |
| 68 | |
| 69 | QStringList args; |
| 70 | if (m_buildType < 2) |
| 71 | args << QLatin1String("CONFIG+=") + QLatin1String(BUILD_TYPES[m_buildType]); |
| 72 | if (!m_installPrefix.isEmpty()) |
| 73 | args << QLatin1String("target.path=") + m_installPrefix; |
| 74 | if (!m_extraArguments.isEmpty()) { |
| 75 | KShell::Errors err; |
| 76 | QStringList tmp = KShell::splitArgs(m_extraArguments, KShell::TildeExpand | KShell::AbortOnMeta, &err); |
| 77 | if (err == KShell::NoError) { |
| 78 | args += tmp; |
| 79 | } else { |
| 80 | qCWarning(KDEV_QMAKE) << "Ignoring qmake Extra arguments"; |
| 81 | if (err == KShell::BadQuoting) { |
| 82 | qCWarning(KDEV_QMAKE) << "QMake arguments badly quoted:" << m_extraArguments; |
| 83 | } else { |
| 84 | qCWarning(KDEV_QMAKE) << "QMake arguments had meta character:" << m_extraArguments; |
| 85 | } |
| 86 | } |
| 87 | } |
| 88 | args << QStringLiteral("-r") << m_srcDir; |
| 89 | |
| 90 | m_model->appendLine(m_buildDir + QLatin1String(": ") + args.join(QLatin1Char(' '))); |
| 91 | |
| 92 | QDir build(m_buildDir); |
| 93 | if (!build.exists()) { |
| 94 | build.mkpath(build.absolutePath()); |
| 95 | } |
| 96 | |
| 97 | m_process = new QProcess(this); |
| 98 | m_process->setWorkingDirectory(m_buildDir); |
| 99 | m_process->setProgram(m_qmakePath); |
| 100 | m_process->setArguments(args); |
| 101 | m_process->setProcessChannelMode(QProcess::MergedChannels); |
| 102 | auto lineMaker = new KDevelop::ProcessLineMaker(m_process, this); |
| 103 | |
| 104 | connect(lineMaker, &ProcessLineMaker::receivedStdoutLines, m_model, &OutputModel::appendLines); |
| 105 | connect(lineMaker, &ProcessLineMaker::receivedStderrLines, m_model, &OutputModel::appendLines); |
| 106 | connect(m_process, &QProcess::errorOccurred, this, &QMakeJob::processError); |
| 107 | connect(m_process, &QProcess::finished, this, &QMakeJob::processFinished); |
| 108 | |
| 109 | m_process->start(); |
| 110 | } |
| 111 | |
| 112 | bool QMakeJob::doKill() |
| 113 | { |
nothing calls this directly
no test coverage detected