Exemplo n.º 1
0
void MSBuildProvider::writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int, const StringList &duplicate,
        const std::string &objPrefix, const std::string &filePrefix) {
    // Reset lists
    _filters.clear();
    _compileFiles.clear();
    _includeFiles.clear();
    _otherFiles.clear();
    _resourceFiles.clear();
    _asmFiles.clear();

    // Compute the list of files
    _filters.push_back(""); // init filters
    computeFileList(dir, duplicate, objPrefix, filePrefix);
    _filters.pop_back();    // remove last empty filter

    // Output compile files
    if (!_compileFiles.empty()) {
        projectFile << "\t<ItemGroup>\n";
        for (std::list<FileEntry>::const_iterator entry = _compileFiles.begin(); entry != _compileFiles.end(); ++entry) {
            const bool isDuplicate = (std::find(duplicate.begin(), duplicate.end(), (*entry).name + ".o") != duplicate.end());

            // Deal with duplicated file names
            if (isDuplicate) {
                projectFile << "\t\t<ClCompile Include=\"" << (*entry).path << "\">\n"
                            "\t\t\t<ObjectFileName>$(IntDir)" << (*entry).prefix << "%(Filename).obj</ObjectFileName>\n";

                projectFile << "\t\t</ClCompile>\n";
            } else {
                projectFile << "\t\t<ClCompile Include=\"" << (*entry).path << "\" />\n";
            }
        }
        projectFile << "\t</ItemGroup>\n";
    }

    // Output include, other and resource files
    outputFiles(projectFile, _includeFiles, "ClInclude");
    outputFiles(projectFile, _otherFiles, "None");
    outputFiles(projectFile, _resourceFiles, "ResourceCompile");

    // Output asm files
    if (!_asmFiles.empty()) {
        projectFile << "\t<ItemGroup>\n";
        for (std::list<FileEntry>::const_iterator entry = _asmFiles.begin(); entry != _asmFiles.end(); ++entry) {

            const bool isDuplicate = (std::find(duplicate.begin(), duplicate.end(), (*entry).name + ".o") != duplicate.end());

            projectFile << "\t\t<CustomBuild Include=\"" << (*entry).path << "\">\n"
                        "\t\t\t<FileType>Document</FileType>\n";

            outputNasmCommand(projectFile, "Debug", (isDuplicate ? (*entry).prefix : ""));
            outputNasmCommand(projectFile, "Analysis", (isDuplicate ? (*entry).prefix : ""));
            outputNasmCommand(projectFile, "Release", (isDuplicate ? (*entry).prefix : ""));
            outputNasmCommand(projectFile, "LLVM", (isDuplicate ? (*entry).prefix : ""));

            projectFile << "\t\t</CustomBuild>\n";
        }
        projectFile << "\t</ItemGroup>\n";
    }
}
Exemplo n.º 2
0
void
Grammar::process( void )
{
	RuleTable::get()->findPrecedences();

	/// Compute the lambda-nonterminals and the first-sets for every
    /// nonterminal
	findFirstSets();

	// Compute all LR(0) states.  Also record follow-set propagation
	// links so that the follow-set can be computed later
	findStates();

	// Tie up loose ends on the propagation links
	findLinks();

	// Compute the follow set of every reducible configuration
	findFollowSets();

	// Compute the action tables
	findActions();

	// Compress the action tables
	if ( isCompressActions() )
		compressTables();

	// Generate a report of the parser generated.  (the "y.output" file) */
	if ( ! isQuiet() )
		reportOutput();

	// Generate the source code for the parser
	outputFiles();
}
Exemplo n.º 3
0
/*!
  \internal

  Returns true if file names for \a input and \a output are the same.
 */
bool SpdrImportPrivate::areFilesTheSame(const QString &input, const QString &output) const
{
    Q_Q(const SpdrImport);

    QFileInfo outputInfo(output);
    if (!outputInfo.exists()) {

        if (q->isSuffixCaseSensitive()) {
            return false;
        } else {
            SpdrFileData inputData(input, q->inputPath(), SpdrFileData::ShallowSearch, q);

            QDir outputDir(output);
            outputDir.cdUp();
            QFileInfoList outputFiles(outputDir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot));

            foreach (const QFileInfo &file, outputFiles) {
                if (file.baseName() != outputInfo.baseName()) {
                    continue;
                }

                SpdrFileData outputData(file.absoluteFilePath(), "", SpdrFileData::ShallowSearch, q);

                if (inputData.isEqual(outputData, q->isSuffixCaseSensitive())) {
                    return true;
                } else {
                    continue;
                }
            }
        }

        return false;
    }

    SpdrFileData inputData(input, q->inputPath(), SpdrFileData::ShallowSearch, q);
    SpdrFileData outputData(output, q->inputPath(), SpdrFileData::ShallowSearch, q);

    if (inputData.isEqual(outputData, q->isSuffixCaseSensitive())) {
        return true;
    }

    return false;
}