| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| package org.apache.royale.compiler.internal.clients; |
| |
| import org.apache.commons.cli.Option; |
| import org.apache.commons.cli.OptionBuilder; |
| import org.apache.commons.cli.Options; |
| |
| /** |
| * Factory class for command-line interpreters of various compilation tasks. |
| */ |
| public class CLIFactory |
| { |
| |
| // TODO: Remove this hard-coded info from ASC |
| private static final int MIN_VERSION = 660; |
| private static final int MAX_VERSION = 670; |
| |
| /** |
| * Hide constructor. |
| */ |
| private CLIFactory() |
| { |
| } |
| |
| // Singleton of ASC options. |
| private static Options ascOptions = null; |
| |
| /** |
| * Create CLI options for ASC command-line. |
| * |
| * @return Apache Common CLI options |
| */ |
| @SuppressWarnings({ "static-access" }) |
| public static Options getOptionsForASC() |
| { |
| if (ascOptions != null) |
| return ascOptions; |
| |
| ascOptions = new Options(); |
| |
| //------------------------- |
| // Options as Boolean Flags |
| //------------------------- |
| ascOptions.addOption("AS3", false, "use the AS3 class based object model for greater performance and better error reporting"); |
| ascOptions.addOption("abcfuture", false, "future abc"); |
| ascOptions.addOption("b", false, "show bytes"); |
| ascOptions.addOption("coach", false, "warn on common actionscript mistakes (deprecated)"); |
| ascOptions.addOption("d", false, "emit debug info into the bytecode"); |
| ascOptions.addOption("doc", false, "emit asdoc info"); |
| ascOptions.addOption("ES", false, "use the ECMAScript edition 3 prototype based object model to allow dynamic overriding of prototype properties"); |
| ascOptions.addOption("ES4", false, "use ECMAScript 4 dialect"); |
| ascOptions.addOption("f", false, "print the flow graph to standard out"); |
| ascOptions.addOption("h", "help", false, "print this help message"); |
| ascOptions.addOption("i", false, "write intermediate code to the .il file"); |
| ascOptions.addOption("l", false, "show line numbers"); |
| ascOptions.addOption("log", false, "redirect all error output to a logfile"); |
| ascOptions.addOption("m", false, "write the avm+ assembly code to the .il file"); |
| ascOptions.addOption("merge", false, "merge the compiled source into a single output file"); |
| ascOptions.addOption("movieclip", false, "make movieclip"); |
| ascOptions.addOption("md", false, "emit metadata information into the bytecode"); |
| ascOptions.addOption("o", "O", false, "produce an optimized abc file"); |
| ascOptions.addOption("optimize", false, "produce an optimized abc file"); |
| ascOptions.addOption("p", false, "write parse tree to the .p file"); |
| ascOptions.addOption("sanity", false, "system-independent error/warning output -- appropriate for sanity testing"); |
| ascOptions.addOption("static", false, "use static semantics"); |
| ascOptions.addOption("strict", "!", false, "treat undeclared variable and method access as errors"); |
| ascOptions.addOption("warnings", false, "warn on common actionscript mistakes"); |
| ascOptions.addOption("parallel", false, "turn on 'paralle generation of method bodies' feature for Alchemy"); |
| ascOptions.addOption("inline", false, "turn on the inlining of functions"); |
| ascOptions.addOption("removedeadcode", false, "remove dead code when -optimize is set"); |
| |
| //----------------------- |
| // Options with Arguments |
| //----------------------- |
| |
| // -api <version> |
| Option apiOpt = OptionBuilder.withArgName("version") |
| .hasArg() |
| .withDescription("compile program as a specfic version between " + MIN_VERSION + " and " + MAX_VERSION) |
| .create("api"); |
| ascOptions.addOption(apiOpt); |
| |
| // -avmtarget <version> |
| Option avmOpt = OptionBuilder.withArgName("vm version number") |
| .hasArg() |
| .withDescription("emit bytecode for a target virtual machine version, 1 is AVM1, 2 is AVM2") |
| .create("avmtarget"); |
| ascOptions.addOption(avmOpt); |
| |
| // -config <ns::name=value> |
| Option configOpt = OptionBuilder.withArgName("ns::name=value") |
| .hasArgs(2) |
| .withValueSeparator('=') |
| .withDescription("define a configuration value in the namespace ns") |
| .create("config"); |
| ascOptions.addOption(configOpt); |
| |
| // -exe <avmplus path> |
| Option exeOpt = OptionBuilder.withArgName("avmplus path") |
| .hasArg() |
| .withDescription("emit an exe file (projector)") |
| .create("exe"); |
| ascOptions.addOption(exeOpt); |
| |
| // -in <filename> |
| Option includeOpt = OptionBuilder.withArgName("filename") |
| .hasArg() |
| .withDescription("include the specified source file") |
| .create("in"); |
| ascOptions.addOption(includeOpt); |
| |
| // -import <filename> |
| Option importOpt = OptionBuilder.withArgName("filename") |
| .hasArg() |
| .withDescription("make the packages in the abc file available for import") |
| .create("import"); |
| ascOptions.addOption(importOpt); |
| |
| // -language <lang> |
| Option langOpt = OptionBuilder.withArgName("lang") |
| .hasArg() |
| .withDescription("set the language for output strings {EN|FR|DE|IT|ES|JP|KR|CN|TW}") |
| .create("language"); |
| ascOptions.addOption(langOpt); |
| |
| // --library <filename> |
| ascOptions.addOption(OptionBuilder.withArgName("swc file") |
| .hasArg() |
| .withDescription("import a swc library") |
| .withLongOpt("library") |
| .create("li")); |
| |
| // --libraryext <filename> |
| ascOptions.addOption(OptionBuilder.withArgName("swc file") |
| .hasArg() |
| .withDescription("import a swc as external library") |
| .withLongOpt("libraryext") |
| .create("le")); |
| |
| // -o2 <name=value> |
| Option o2Opt = OptionBuilder.withArgName("name=value") |
| .hasArgs() |
| .withDescription("optimizer configuration") |
| .withLongOpt("O2") |
| .create("o2"); |
| ascOptions.addOption(o2Opt); |
| |
| // -outdir <output directory name> |
| Option outdir = OptionBuilder.withArgName("output directory name") |
| .hasArg() |
| .withDescription("Change the directory of the output files") |
| .create("outdir"); |
| ascOptions.addOption(outdir); |
| |
| // -out <out basename> |
| Option out = OptionBuilder.withArgName("basename") |
| .hasArg() |
| .withDescription("Change the basename of the output file") |
| .create("out"); |
| ascOptions.addOption(out); |
| |
| // -swf <classname,width,height,fps> |
| // An Option can't have both required arguments and optional arguments |
| // so tell the Option we have just one argument and later parse the |
| // value into multiple arguments. |
| Option swfOpt = OptionBuilder.withArgName("classname,width,height[,fps]") |
| .hasArg() |
| .withValueSeparator(',') |
| .withDescription("emit a SWF file") |
| .create("swf"); |
| ascOptions.addOption(swfOpt); |
| |
| // -use <namespace> |
| Option useOpt = OptionBuilder.withArgName("namespace") |
| .hasArg() |
| .withDescription("automatically use a namespace when compiling this code") |
| .create("use"); |
| ascOptions.addOption(useOpt); |
| |
| return ascOptions; |
| } |
| |
| /** |
| * Create CLI options for MXMLC command-line. |
| * |
| * @return Apache Common CLI options |
| */ |
| protected Options getOptionsForMXMLC() |
| { |
| return null; |
| } |
| |
| /** |
| * Create CLI options for COMPC command-line. |
| * |
| * @return Apache Common CLI options |
| */ |
| protected Options getOptionsForCOMPC() |
| { |
| return null; |
| } |
| } |