public static void Main(string[] args) { string path = CommandLineCompiler.Compile(args); if (path == null) { Environment.Exit(-1); // Error } }
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); } }