示例#1
0
 protected override void OnDestroyed()
 {
     isDestroyed = true;
     MessageService.PopupDialog -= HandlePopupDialog;
     base.OnDestroyed();
     if (bitmap != null)
     {
         bitmap.Dispose();
         bitmap = null;
     }
     if (monitor != null)
     {
         monitor.Dispose();
         monitor = null;
     }
 }
        public int Run(string [] arguments)
        {
            Console.WriteLine("MonoDevelop Makefile generator");
            if (arguments.Length == 0)
            {
                ShowUsage();
                return(0);
            }

            // Parse arguments
            foreach (string s in arguments)
            {
                if (s == "--simple-makefiles" || s == "-s")
                {
                    generateAutotools = false;
                }
                else if (s.StartsWith("-d:"))
                {
                    if (s.Length > 3)
                    {
                        defaultConfig = s.Substring(3);
                    }
                }
                else if (s [0] == '-')
                {
                    Console.WriteLine(GettextCatalog.GetString("Error: Unknown option {0}", s));
                    return(1);
                }
                else
                {
                    if (filename != null)
                    {
                        Console.WriteLine(GettextCatalog.GetString("Error: Filename already specified - {0}, another filename '{1}' cannot be specified.", filename, s));
                        return(1);
                    }

                    filename = s;
                }
            }

            if (filename == null)
            {
                Console.WriteLine(GettextCatalog.GetString("Error: Solution file not specified."));
                ShowUsage();
                return(1);
            }

            Console.WriteLine(GettextCatalog.GetString("Loading solution file {0}", filename));
            ConsoleProgressMonitor monitor = new ConsoleProgressMonitor();

            Solution solution = Services.ProjectService.ReadWorkspaceItem(monitor, filename) as Solution;

            if (solution == null)
            {
                Console.WriteLine(GettextCatalog.GetString("Error: Makefile generation supported only for solutions.\n"));
                return(1);
            }

            if (defaultConfig == null || !CheckValidConfig(solution, defaultConfig))
            {
                Console.WriteLine(GettextCatalog.GetString("\nInvalid configuration {0}. Valid configurations : ", defaultConfig));
                for (int i = 0; i < solution.Configurations.Count; i++)
                {
                    SolutionConfiguration cc = (SolutionConfiguration)solution.Configurations [i];
                    Console.WriteLine("\t{0}. {1}", i + 1, cc.Id);
                }

                int configCount = solution.Configurations.Count;
                int op          = 0;
                do
                {
                    Console.Write(GettextCatalog.GetString("Select configuration : "));
                    string s = Console.ReadLine();
                    if (s.Length == 0)
                    {
                        return(1);
                    }
                    if (int.TryParse(s, out op))
                    {
                        if (op > 0 && op <= configCount)
                        {
                            break;
                        }
                    }
                } while (true);

                defaultConfig = solution.Configurations [op - 1].Id;
            }

            SolutionDeployer deployer = new SolutionDeployer(generateAutotools);

            if (deployer.HasGeneratedFiles(solution))
            {
                string msg = GettextCatalog.GetString("{0} already exist for this solution.  Would you like to overwrite them? (Y/N)",
                                                      generateAutotools ? "Autotools files" : "Makefiles");
                bool op = false;
                do
                {
                    Console.Write(msg);
                    string line = Console.ReadLine();
                    if (line.Length == 0)
                    {
                        return(1);
                    }

                    if (line.Length == 1)
                    {
                        if (line [0] == 'Y' || line [0] == 'y')
                        {
                            op = true;
                        }
                        else if (line [0] == 'N' || line [0] == 'n')
                        {
                            op = false;
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (String.Compare(line, "YES", true) == 0)
                        {
                            op = true;
                        }
                        else if (String.Compare(line, "NO", true) == 0)
                        {
                            op = false;
                        }
                        else
                        {
                            continue;
                        }
                    }
                    break;
                } while (true);
                if (!op)
                {
                    return(0);
                }
            }

            DeployContext ctx = new DeployContext(new TarballDeployTarget(), "Linux", null);

            try {
                deployer.GenerateFiles(ctx, solution, defaultConfig, monitor);
            }
            finally {
                ctx.Dispose();
                monitor.Dispose();
            }

            return(0);
        }