/// <summary> /// Call to ParseVsproj for all vcproj files in sln: main and main's depended projects /// </summary> private void iSendToParseVcprojFiles() { VcProjInfo vcProjInfo; // parse main project file.vcproj foreach (string projectName in m_ProjPathCollection) { if (projectName.Equals(m_MainProjectName)) { if (!(m_ProjMakFilePath[projectName].Equals(""))) { if (Path.GetDirectoryName(m_SlnFullPath).Equals("")) { vcProjInfo = new VcProjInfo(m_ProjNamePath[projectName], m_ProjMakFilePath[projectName], m_ProjDependencies[projectName]); vcProjInfo.ParseVcproj(); } else { vcProjInfo = new VcProjInfo(Path.GetDirectoryName(m_SlnFullPath).Replace("\\", "/") + "\\" + m_ProjNamePath[projectName], m_ProjMakFilePath[projectName], m_ProjDependencies[projectName]); vcProjInfo.ParseVcproj(); } } } } // parse depended project files foreach (string projectName in m_ProjPathCollection) { for (int d = 0; d < m_ProjDependencies[m_MainProjectName].Length; d++) { if ((!(m_MainProjectName.Equals(projectName))) && (projectName.Equals(m_ProjDependencies[m_MainProjectName][d]))) { if (!(m_ProjMakFilePath[projectName].Equals(""))) { if (Path.GetDirectoryName(m_SlnFullPath).Equals("")) { vcProjInfo = new VcProjInfo(m_ProjNamePath[projectName], m_ProjMakFilePath[projectName], m_ProjDependencies[projectName] /*dependencies*/); vcProjInfo.ParseVcproj(); } else { vcProjInfo = new VcProjInfo(Path.GetDirectoryName(m_SlnFullPath).Replace("\\", "/") + "/" + m_ProjNamePath[projectName], m_ProjMakFilePath[projectName], m_ProjDependencies[projectName] /*dependencies*/); vcProjInfo.ParseVcproj(); } } } } } }
static void Main(string[] args) { String m_ProjectName; String m_InFileName = ""; Console.WriteLine("sln2mak.exe - Generates a Makefile from a .sln/.vcproj file .\n \u00a9 Maria Adamsky (www.EFC.CO.IL)\n"); if (args.Length < 1) { Program.Usage(); Environment.Exit(1); } #region ARG_FORMAT -l proj_name project.sln /****************************************************************/ else if (args[0] == "-l") //format: -l main-project-name workspace-name.sln { if (args.Length < 3) { m_ErrorWriter.WriteLine("Wrong arguments format!\n"); Environment.Exit(1); } else { m_ProjectName = args[1]; //args[2] is main-project-name m_InFileName = args[2]; //args[3] is workspace-name.sln if (Parser.SlnExtentionRegex.Match(m_InFileName).Success) { Parser.ParseSln(m_ProjectName, m_InFileName); } else { Program.Usage(); Environment.Exit(1); } } } /****************************************************************/ #endregion /*ARG_FORMAT -l proj_name project.sln*/ #region ARG_FORMAT project.sln /****************************************************************/ else if (Parser.SlnExtentionRegex.Match(args[0]).Success) //format: workspace-name.sln { m_InFileName = args[0]; //args[0] is workspace-name.vcproj m_ProjectName = Path.GetFileNameWithoutExtension(m_InFileName); //main-project-name taken from workspace-name.sln Parser.ParseSln(m_ProjectName, m_InFileName); } /****************************************************************/ #endregion /*ARG_FORMAT project.sln*/ #region ARG_FORMAT list of .vcproj files -d additional_dependencies /****************************************************************/ else if (Parser.VcprojExtentionRegex.Match(args[0]).Success) // format: list of project-name.vcproj { //int numOfProjects = 0; List <string> mainProjectDependencies = new List <string>(); List <string> projectsList = new List <string>(); //Read all .vcproj list into projectsList and if '-d' exists init mainProjectDependencies list too for (int i = 0; i < args.Length; i++) { if (Parser.VcprojExtentionRegex.Match(args[i]).Success) { projectsList.Add(args[i]); } if (args[i].Equals("-d")) { for (int d = i + 1; d < args.Length; d++) { mainProjectDependencies.Add(args[d]); } break; } } for (int p = 0; p < projectsList.Count; p++) { string[] dependencies; string makefilePath = projectsList[p].Replace(".vcproj", ".mak"); //The first project in list is main one, that's why all dependencies after '-d' relies to it if (0 == p) { //dependencies = new string[mainProjectDependencies.Count]; dependencies = mainProjectDependencies.ToArray(); } else { dependencies = new string[0]; } //Create VcProjInfo object and call ParseVcproj, that generates projectsList[p].mak file VcProjInfo vcProjInfo = new VcProjInfo(projectsList[p], makefilePath, dependencies); vcProjInfo.ParseVcproj(); } //create makefile for all projects in list passed as arguments Parser.CreateMakefile(projectsList, mainProjectDependencies.ToArray()); } /****************************************************************/ #endregion /* ARG_FORMAT list of .vcproj files -d additional_dependencies */ else { Program.Usage(); Environment.Exit(1); } }