void CodeBlocksProvider::writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, 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()) { writeFileListToProject(*node, projectFile, indentation + 1, duplicate, objPrefix + node->name + '_', filePrefix + node->name + '/'); } else { std::string name, ext; splitFilename(node->name, name, ext); if (ext == "rc") { projectFile << "\t\t<Unit filename=\"" << convertPathToWin(filePrefix + node->name) << "\">\n" "\t\t\t<Option compilerVar=\"WINDRES\" />\n" "\t\t</Unit>\n"; } else if (ext == "asm") { projectFile << "\t\t<Unit filename=\"" << convertPathToWin(filePrefix + node->name) << "\">\n" "\t\t\t<Option compiler=\"gcc\" use=\"1\" buildCommand=\"$(" << LIBS_DEFINE << ")bin/nasm.exe -f win32 -g $file -o $object\" />" "\t\t</Unit>\n"; } else { projectFile << "\t\t<Unit filename=\"" << convertPathToWin(filePrefix + node->name) << "\" />\n"; } } } }
void CMakeProvider::writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, 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()) { writeFileListToProject(*node, projectFile, indentation + 1, duplicate, objPrefix + node->name + '_', filePrefix + node->name + '/'); } else { std::string name, ext; splitFilename(node->name, name, ext); projectFile << "\t" << filePrefix + node->name << "\n"; } } }
void VisualStudioProvider::writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix) { const std::string indentString = getIndent(indentation + 2); if (indentation) projectFile << getIndent(indentation + 1) << "<Filter\tName=\"" << dir.name << "\">\n"; for (FileNode::NodeList::const_iterator i = dir.children.begin(); i != dir.children.end(); ++i) { const FileNode *node = *i; if (!node->children.empty()) { writeFileListToProject(*node, projectFile, indentation + 1, duplicate, objPrefix + node->name + '_', filePrefix + node->name + '/'); } else { if (producesObjectFile(node->name)) { std::string name, ext; splitFilename(node->name, name, ext); name += ".o"; std::transform(name.begin(), name.end(), name.begin(), tolower); const bool isDuplicate = (std::find(duplicate.begin(), duplicate.end(), name) != duplicate.end()); if (ext == "asm") { std::string objFileName = "$(IntDir)\\"; if (isDuplicate) objFileName += objPrefix; objFileName += "$(InputName).obj"; const std::string toolLine = indentString + "\t\t<Tool Name=\"VCCustomBuildTool\" CommandLine=\"nasm.exe -f win32 -g -o "" + objFileName + "" "$(InputPath)"
\" Outputs=\"" + objFileName + "\" />\n"; // NASM is not supported for x64, thus we do not need to add additional entries here :-). projectFile << indentString << "<File RelativePath=\"" << convertPathToWin(filePrefix + node->name) << "\">\n" << indentString << "\t<FileConfiguration Name=\"Debug|Win32\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Analysis|Win32\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Release|Win32\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "</File>\n"; } else { if (isDuplicate) { const std::string toolLine = indentString + "\t\t<Tool Name=\"VCCLCompilerTool\" ObjectFile=\"$(IntDir)\\" + objPrefix + "$(InputName).obj\" XMLDocumentationFileName=\"$(IntDir)\\" + objPrefix + "$(InputName).xdc\" />\n"; projectFile << indentString << "<File RelativePath=\"" << convertPathToWin(filePrefix + node->name) << "\">\n" << indentString << "\t<FileConfiguration Name=\"Debug|Win32\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Analysis|Win32\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Release|Win32\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Debug|x64\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Analysis|x64\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "\t<FileConfiguration Name=\"Release|x64\">\n" << toolLine << indentString << "\t</FileConfiguration>\n" << indentString << "</File>\n"; } else { projectFile << indentString << "<File RelativePath=\"" << convertPathToWin(filePrefix + node->name) << "\" />\n"; } } } else { projectFile << indentString << "<File RelativePath=\"" << convertPathToWin(filePrefix + node->name) << "\" />\n"; } } } if (indentation) projectFile << getIndent(indentation + 1) << "</Filter>\n"; }