*** groovy-2.1.0-rc-1/src/main/groovy/ui/GroovyMain.java	2013-01-10 10:05:06.000000000 +0900
--- /tool/groovy-2.1.0-rc-1/src/main/groovy/ui/GroovyMain.java	2013-01-17 19:37:10.000000000 +0900
***************
*** 15,20 ****
--- 15,21 ----
   */
  package groovy.ui;
  
+ import groovy.lang.Binding;
  import groovy.lang.GroovyRuntimeException;
  import groovy.lang.GroovyShell;
  import groovy.lang.GroovySystem;
***************
*** 29,34 ****
--- 30,36 ----
  import org.apache.commons.cli.ParseException;
  import org.codehaus.groovy.control.CompilationFailedException;
  import org.codehaus.groovy.control.CompilerConfiguration;
+ import org.codehaus.groovy.control.customizers.ImportCustomizer;
  import org.codehaus.groovy.runtime.InvokerHelper;
  import org.codehaus.groovy.runtime.InvokerInvocationException;
  import org.codehaus.groovy.runtime.ResourceGroovyMethods;
***************
*** 122,127 ****
--- 124,131 ----
          } catch (ParseException pe) {
              out.println("error: " + pe.getMessage());
              printHelp(out, options);
+         } catch (IOException ioe) {
+             out.println("error: " + ioe.getMessage());
          }
      }
  
***************
*** 236,242 ****
              OptionBuilder.withLongOpt("indy")
              .withDescription("enables compilation using invokedynamic")
              .create());
! 
          return options;
      }
  
--- 240,249 ----
              OptionBuilder.withLongOpt("indy")
              .withDescription("enables compilation using invokedynamic")
              .create());
!         options.addOption(
!             OptionBuilder.withLongOpt("configscript")
!             .hasArg().withDescription("A script for tweaking the configuration options")
!             .create());
          return options;
      }
  
***************
*** 265,271 ****
       * @param line the parsed command line.
       * @throws ParseException if invalid options are chosen
       */
!     private static boolean process(CommandLine line) throws ParseException {
          List args = line.getArgList();
          
          if (line.hasOption('D')) {
--- 272,278 ----
       * @param line the parsed command line.
       * @throws ParseException if invalid options are chosen
       */
!      private static boolean process(CommandLine line) throws ParseException, IOException {
          List args = line.getArgList();
          
          if (line.hasOption('D')) {
***************
*** 325,330 ****
--- 332,351 ----
              main.conf.getOptimizationOptions().put("indy", true);
          }
          
+         if (line.hasOption("configscript")) {
+             String path = line.getOptionValue("configscript");
+             File groovyConfigurator = new File(path);
+             Binding binding = new Binding();
+             binding.setVariable("configuration", main.conf);
+ 
+             CompilerConfiguration configuratorConfig = new CompilerConfiguration();
+             ImportCustomizer customizer = new ImportCustomizer();
+             customizer.addStaticStars("org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder");
+             configuratorConfig.addCompilationCustomizers(customizer);
+ 
+             GroovyShell shell = new GroovyShell(binding, configuratorConfig);
+             shell.evaluate(groovyConfigurator);
+         }
          main.args = args;
  
          return main.run();
