Пример #1
0
        public static void Main(string[] args)
        {
            string path = CommandLineCompiler.Compile(args);

            if (path == null)
            {
                Environment.Exit(-1); // Error
            }
        }
Пример #2
0
        internal static string Compile(string[] args)
        {
            if (args == null)
            {
                return(CommandLineCompiler.PrintUsage());
            }

            bool   showCopyrightMessage         = true;
            bool   printParameters              = true;
            string classLibrary                 = null;
            bool   installMetaAnnotations       = false;
            NativeCompilerParameters parameters = new NativeCompilerParameters();

            parameters.Product      = "IronSmalltalk Application";
            parameters.ProductTitle = "IronSmalltalk Application";
            parameters.AssemblyType = NativeCompilerParameters.AssemblyTypeEnum.Exe;
            List <string> sourceFiles = new List <string>();
            string        option      = null;

            foreach (string arg in args)
            {
                if (arg == null)
                {
                    return(CommandLineCompiler.PrintUsage());
                }
                if (option != null)
                {
                    if ((option == "a") || (option == "assemblyname"))
                    {
                        parameters.AssemblyName = arg;
                    }
                    else if ((option == "n") || (option == "namespace"))
                    {
                        parameters.RootNamespace = arg;
                    }
                    else if ((option == "o") || (option == "out"))
                    {
                        parameters.OutputDirectory = Path.GetFullPath(arg);
                    }
                    else if ((option == "t") || (option == "target"))
                    {
                        option = arg.ToLower().Trim();
                        if (option == "dll")
                        {
                            parameters.AssemblyType = NativeCompilerParameters.AssemblyTypeEnum.Dll;
                        }
                        else if (option == "exe")
                        {
                            parameters.AssemblyType = NativeCompilerParameters.AssemblyTypeEnum.Exe;
                        }
                        else if (option == "exe32")
                        {
                            parameters.AssemblyType = NativeCompilerParameters.AssemblyTypeEnum.Exe32;
                        }
                        else if (option == "exe64")
                        {
                            parameters.AssemblyType = NativeCompilerParameters.AssemblyTypeEnum.Exe64;
                        }
                        else
                        {
                            return(CommandLineCompiler.PrintUsage());
                        }
                    }
                    else if ((option == "c") || (option == "classlibrary"))
                    {
                        string cl = arg.Trim();
                        if (String.IsNullOrWhiteSpace(cl))
                        {
                            return(CommandLineCompiler.PrintUsage());
                        }
                        classLibrary = Path.GetFullPath(cl);
                    }
                    else if ((option == "v") || (option == "version"))
                    {
                        parameters.AssemblyVersion = arg;
                        parameters.FileVersion     = arg;
                        parameters.ProductVersion  = arg;
                    }
                    else if (option == "company")
                    {
                        parameters.Company = arg;
                    }
                    else if (option == "copyright")
                    {
                        parameters.Copyright = arg;
                    }
                    else if (option == "product")
                    {
                        parameters.Product = arg;
                    }
                    else if (option == "assemblyversion")
                    {
                        parameters.AssemblyVersion = arg;
                    }
                    else if (option == "fileversion")
                    {
                        parameters.FileVersion = arg;
                    }
                    else if (option == "productversion")
                    {
                        parameters.ProductVersion = arg;
                    }
                    else if (option == "producttitle")
                    {
                        parameters.ProductTitle = arg;
                    }
                    else if (option == "productdescription")
                    {
                        parameters.ProductDescription = arg;
                    }
                    else if (option == "trademark")
                    {
                        parameters.Trademark = arg;
                    }
                    else
                    {
                        return(CommandLineCompiler.PrintUsage());
                    }
                    option = null;
                }
                else if (arg.StartsWith("-") || arg.StartsWith("/"))
                {
                    option = arg.Substring(1).ToLower().Trim();
                    if (option.Length == 0)
                    {
                        return(CommandLineCompiler.PrintUsage());
                    }
                    if (option[option.Length - 1] == ':')
                    {
                        option = option.Substring(0, option.Length - 1);
                    }
                    if (option.Length == 0)
                    {
                        return(CommandLineCompiler.PrintUsage());
                    }

                    if ((option == "d") || (option == "debug"))
                    {
                        parameters.EmitDebugSymbols = true;
                        option = null;
                    }
                    else if (option == "metaannotations")
                    {
                        parameters.EmitDebugSymbols = true;
                        option = null;
                    }
                    else if (option == "baselibrary")
                    {
                        parameters.IsBaseLibrary = true;
                        option = null;
                    }
                    else if (option == "noclasslibrary")
                    {
                        classLibrary = "";
                        option       = null;
                    }
                    else if (option == "nologo")
                    {
                        showCopyrightMessage = false;
                        option = null;
                    }
                    else if ((option == "q") || (option == "quiet"))
                    {
                        printParameters = false;
                        option          = null;
                    }
                    else if (option == "istscl")
                    {
                        // Undocumented parameter .... shortcut to set the parameters for compiling the
                        // IronSmalltalk Standard Class Library. Pats are relative to the .Net project.
                        parameters.AssemblyName    = "IronSmalltalk.ClassLibrary";
                        parameters.AssemblyName    = "IronSmalltalk.ClassLibrary";
                        parameters.OutputDirectory = Path.GetFullPath(".");
                        parameters.AssemblyType    = NativeCompilerParameters.AssemblyTypeEnum.Dll;
                        classLibrary = "";
                        parameters.AssemblyVersion    = typeof(CommandLineCompiler).Assembly.GetName().Version.ToString();
                        parameters.FileVersion        = parameters.AssemblyVersion;
                        parameters.ProductVersion     = parameters.AssemblyVersion;
                        parameters.IsBaseLibrary      = true;
                        parameters.Company            = "The IronSmalltalk Project";
                        parameters.Copyright          = "Copyright © The IronSmalltalk Project 2013";
                        parameters.Product            = "IronSmalltalk";
                        parameters.ProductTitle       = "IronSmalltalk Standard Class Library";
                        parameters.ProductDescription = "IronSmalltalk Standard Class Library";
#if DEBUG
                        parameters.EmitDebugSymbols = true;
#endif
                        option = null;
                        sourceFiles.Add(Path.GetFullPath(@"..\..\..\ClassLibraryBrowser\External\IronSmalltalk.ist"));
                    }
                }
                else
                {
                    sourceFiles.Add(Path.GetFullPath(arg));
                }
            }

            if (sourceFiles.Count == 0)
            {
                return(CommandLineCompiler.PrintUsage());
            }
            if (String.IsNullOrWhiteSpace(parameters.AssemblyName))
            {
                parameters.AssemblyName = Path.GetFileNameWithoutExtension(sourceFiles[0]);
            }
            if (String.IsNullOrWhiteSpace(parameters.RootNamespace))
            {
                parameters.RootNamespace = parameters.AssemblyName;
            }
            if (String.IsNullOrWhiteSpace(parameters.OutputDirectory))
            {
                parameters.OutputDirectory = Directory.GetCurrentDirectory();
            }
            if (parameters.IsBaseLibrary && (parameters.AssemblyType != NativeCompilerParameters.AssemblyTypeEnum.Dll))
            {
                return(CommandLineCompiler.PrintUsage());
            }

            if (classLibrary == null)
            {
                classLibrary = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "IronSmalltalk.ClassLibrary.dll");
            }

            try
            {
                if (showCopyrightMessage)
                {
                    CommandLineCompiler.PrintCopyrightMessage();
                }

                if (!CommandLineCompiler.GetStandardClassLibraryEntryPoint(parameters, classLibrary))
                {
                    return(null);
                }

                if (!Directory.Exists(parameters.OutputDirectory))
                {
                    Console.WriteLine();
                    Console.WriteLine("Output Directory does not exists.");
                    return(null);
                }

                if (printParameters)
                {
                    CommandLineCompiler.PrintParameters(parameters, installMetaAnnotations, sourceFiles);
                }

                string path = CommandLineCompiler.Compile(parameters, installMetaAnnotations, sourceFiles);
                if (path == null)
                {
                    return(null);
                }

                if (printParameters)
                {
                    Console.WriteLine("Assembly saved to:\n    {0}", path);
                }

                return(path);
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return(null);
            }
        }