Ejemplo 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";
    }
}
Ejemplo n.º 2
0
void MSBuildProvider::computeFileList(const FileNode &dir, const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix) {
	for (FileNode::NodeList::const_iterator i = dir.children.begin(); i != dir.children.end(); ++i) {
		const FileNode *node = *i;

		if (!node->children.empty()) {
			// Update filter
			std::string _currentFilter = _filters.back();
			_filters.back().append((_filters.back() == "" ? "" : "\\") + node->name);

			computeFileList(*node, duplicate, objPrefix + node->name + '_', filePrefix + node->name + '/');

			// Reset filter
			_filters.push_back(_currentFilter);
		} else {
			// Filter files by extension
			std::string name, ext;
			splitFilename(node->name, name, ext);

			FileEntry entry;
			entry.name = name;
			entry.path = convertPathToWin(filePrefix + node->name);
			entry.filter = _filters.back();
			entry.prefix = objPrefix;

			if (ext == "cpp" || ext == "c")
				_compileFiles.push_back(entry);
			else if (ext == "h")
				_includeFiles.push_back(entry);
			else if (ext == "rc")
				_resourceFiles.push_back(entry);
			else if (ext == "asm")
				_asmFiles.push_back(entry);
			else
				_otherFiles.push_back(entry);
		}
	}
}
Ejemplo n.º 3
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";

				if (hasEnding((*entry).path, "base\\version.cpp"))
					projectFile <<  "\t\t\t<PreprocessorDefinitions Condition=\"'$(Configuration)'=='Debug'\">SCUMMVM_SVN_REVISION#&quot; $(SCUMMVM_REVISION_STRING)&quot;;%(PreprocessorDefinitions)</PreprocessorDefinitions>\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
	OUPUT_FILES_MSBUILD(_includeFiles, "ClInclude")
	OUPUT_FILES_MSBUILD(_otherFiles, "None")
	OUPUT_FILES_MSBUILD(_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";

			OUTPUT_NASM_COMMAND_MSBUILD("Debug")
			OUTPUT_NASM_COMMAND_MSBUILD("Analysis")
			OUTPUT_NASM_COMMAND_MSBUILD("Release")

			projectFile << "\t\t</CustomBuild>\n";
		}
		projectFile << "\t</ItemGroup>\n";
	}
}