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