public bool GenerateFiles(DeployContext ctx, Solution solution, string defaultConf, IProgressMonitor monitor)
        {
            string filesString = generateAutotools ? "Autotools files" : "Makefiles";

            monitor.BeginTask(GettextCatalog.GetString("Generating {0} for Solution {1}", filesString, solution.Name), 1);

            try
            {
                solution_dir = Path.GetDirectoryName(solution.FileName);

                string[] configs = new string [solution.Configurations.Count];
                for (int ii = 0; ii < configs.Length; ii++)
                {
                    configs [ii] = solution.Configurations[ii].Id;
                }

                MakefileType mt = generateAutotools ? MakefileType.AutotoolsMakefile : MakefileType.SimpleMakefile;

                context = new AutotoolsContext(ctx, solution_dir, configs, mt);
                context.TargetSolution = solution;
                context.Switches       = switchs;

                IMakefileHandler handler = AutotoolsContext.GetMakefileHandler(solution.RootFolder, mt);
                if (handler == null)
                {
                    throw new Exception(GettextCatalog.GetString("MonoDevelop does not currently support generating {0} for one (or more) child projects.", filesString));
                }

                solution_name    = solution.Name;
                solution_version = AutotoolsContext.EscapeStringForAutoconf(solution.Version, true);
                if (string.IsNullOrEmpty(solution_version))
                {
                    solution_version = "0.1";
                }

                Makefile makefile = handler.Deploy(context, solution.RootFolder, monitor);
                string   path     = Path.Combine(solution_dir, "Makefile");
                if (generateAutotools)
                {
                    context.AddAutoconfFile(path);
                    CreateAutoGenDotSH(context, monitor);
                    CreateConfigureDotAC(solution, defaultConf, monitor, context);
                    CreateMacros();
                }
                else
                {
                    CreateConfigureScript(solution, defaultConf, context, monitor);

                    monitor.Log.WriteLine(GettextCatalog.GetString("Creating rules.make"));
                    string rules_make_path = Path.Combine(solution_dir, "rules.make");
                    File.Copy(Path.Combine(context.TemplateDir, "rules.make"), rules_make_path, true);
                    context.AddGeneratedFile(rules_make_path);
                }

                CreateMakefileInclude(context, monitor);
                AddTopLevelMakefileVars(makefile, monitor);

                if (generateAutotools)
                {
                    path = path + ".am";
                }
                StreamWriter writer = new StreamWriter(path);
                makefile.Write(writer);
                writer.Close();

                context.AddGeneratedFile(path);

                monitor.ReportSuccess(GettextCatalog.GetString("{0} were successfully generated.", filesString));
                monitor.Step(1);
            }
            catch (Exception e)
            {
                monitor.ReportError(GettextCatalog.GetString("{0} could not be generated: ", filesString), e);
                LoggingService.LogError(GettextCatalog.GetString("{0} could not be generated: ", filesString), e);
                DeleteGeneratedFiles(context);
                return(false);
            }
            finally
            {
                monitor.EndTask();
            }
            return(true);
        }