void TargetExecutor::apply(Makefile* mkfile, const QStringList& targets) { m_bAborted = false; m_allCommandsSuccessfullyExecuted = true; m_makefile = mkfile; m_jobAcquisitionCount = 0; m_nextTarget = 0; if (!m_jobClient) { m_jobClient = new JobClient(&m_environment, this); if (!m_jobClient->start()) { const QString msg = QLatin1String("Can't connect to job server: %1"); throw Exception(msg.arg(m_jobClient->errorString())); } connect(m_jobClient, &JobClient::acquired, this, &TargetExecutor::buildNextTarget); } DescriptionBlock* descblock; if (targets.isEmpty()) { if (mkfile->targets().isEmpty()) { finishBuild(0); return; } descblock = mkfile->firstTarget(); } else { const QString targetName = targets.first(); descblock = mkfile->target(targetName); if (!descblock) { QString msg = QLatin1String("Target %1 does not exist in %2."); throw Exception(msg.arg(targetName, mkfile->fileName())); } for (int i=1; i < targets.count(); ++i) { m_pendingTargets.append( mkfile->target(targets.at(i)) ); } } m_depgraph->build(descblock); if (m_makefile->options()->dumpDependencyGraph) { if (m_makefile->options()->dumpDependencyGraphDot) m_depgraph->dotDump(); else m_depgraph->dump(); finishBuild(0); return; } QMetaObject::invokeMethod(this, "startProcesses", Qt::QueuedConnection); }
void TextureShowShader::build() { initBuild(); //TODO //assert(0&&"TextureShowShader::build(): implement me"); //build vert and frag shader generateShaderStage(VERTEX_SHADER_STAGE,mTemplateEngine,*mTemplateContextMap); generateShaderStage(FRAGMENT_SHADER_STAGE,mTemplateEngine,*mTemplateContextMap); finishBuild(); }
void TargetExecutor::startProcesses() { if (m_bAborted || m_jobClient->isAcquiring() || m_availableProcesses.isEmpty()) return; try { if (!m_nextTarget) findNextTarget(); if (m_nextTarget) { if (numberOfRunningProcesses() == 0) { // Use up the internal job token. buildNextTarget(); } else { // Acquire a job token from the server. Will call buildNextTarget() when done. m_jobAcquisitionCount++; m_jobClient->asyncAcquire(); } } else { if (numberOfRunningProcesses() == 0) { if (m_pendingTargets.isEmpty()) { finishBuild(0); } else { m_depgraph->clear(); m_makefile->invalidateTimeStamps(); m_depgraph->build(m_pendingTargets.takeFirst()); QMetaObject::invokeMethod(this, "startProcesses", Qt::QueuedConnection); } } } } catch (Exception &e) { m_bAborted = true; fprintf(stderr, "Error: %s\n", qPrintable(e.message())); finishBuild(1); } }
bool Commander::checkDamagedBuildings() { Agentset agents = AgentManager::getInstance()->getAgents(); for (auto &a : agents) { if (a->isAlive() && a->isBuilding() && a->isDamaged()) { Unit builder = a->getUnit()->getBuildUnit(); if (builder == NULL || !builder->isConstructing()) { finishBuild(a); } } } return false; }
void TargetExecutor::buildNextTarget() { Q_ASSERT(m_nextTarget); if (m_bAborted) return; try { CommandExecutor *executor = m_availableProcesses.takeFirst(); executor->start(m_nextTarget); m_nextTarget = 0; QMetaObject::invokeMethod(this, "startProcesses", Qt::QueuedConnection); } catch (const Exception &e) { m_bAborted = true; fprintf(stderr, "Error: %s\n", qPrintable(e.message())); finishBuild(1); } }
bool Commander::checkUnfinishedBuildings() { vector<BaseAgent*> agents = AgentManager::getInstance()->getAgents(); for (int i = 0; i < (int)agents.size(); i++) { BaseAgent* agent = agents.at(i); // Double check so we don't get a dead agent. This could cause null pointers. if (agent != NULL && agent->isAlive() && agent->isBuilding() && agent->isDamaged()) { Unit* builder = agent->getUnit()->getBuildUnit(); if (builder == NULL || !builder->isConstructing()) { finishBuild(agent); } } } return false; }