Beispiel #1
0
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);
}
Beispiel #2
0
	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();

	}
Beispiel #3
0
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);
    }
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
    }
}
Beispiel #6
0
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;
}