blob: f444c8b9b7f2fbc17a3ddfb53cc3f4d426ecbc2d [file] [log] [blame]
/*
*
* 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 utils;
import java.io.File;
import java.util.ArrayList;
import java.util.Vector;
import java.util.List;
import java.util.StringTokenizer;
/**
* User: dschaffer
* Date: Mar 22, 2005
* Time: 3:28:38 PM
*/
public class CompileMxmlUtils {
private String swf;
private String linkReport;
private String fileBasedArgs;
private String mxmlc;
private String dir;
private long lastRunTime;
private RuntimeExecHelper reh;
private String execArgs[];
boolean printOut=false;
public void compile(String mxml) throws Exception {
compile(mxml,new ArrayList());
}
public void compile(String mxml,ArrayList optionalArgs) throws Exception {
boolean debug=false;
debug=System.getProperty("debug")!=null && System.getProperty("debug").equals("true");
String mxmlcdir=System.getProperty("mxmlcdir");
String mxmlcexe=System.getProperty("mxmlcexe");
mxmlc=FileUtils.normalizeDirOS(mxmlcdir+"/"+mxmlcexe);
if (debug) {
System.out.println("mxmlcdir="+mxmlcdir);
System.out.println("mxmlcexe="+mxmlcexe);
System.out.println("mxmlc="+mxmlc);
}
if (mxmlc==null || new File(mxmlc).isFile()==false) {
throw new Exception("mxml compiler not set correctly, mxmlc="+mxmlc);
}
String frameworks=System.getProperty("frameworks");
if (frameworks==null || new File(frameworks).isDirectory()==false) {
throw new Exception("frameworks not set correctly, frameworks="+frameworks);
}
if (debug) {
System.out.println("frameworks="+frameworks);
}
if (dir==null || new File(dir).isDirectory()==false) {
throw new Exception("working dir not set correctly, dir="+dir);
}
swf=mxml.substring(0,mxml.length()-4)+"swf";
linkReport=mxml.substring(0,mxml.length()-4)+"lnk.xml";
String newArgs=null;
//if cmdLineArgs property exists used it for mxmlc args
String sysPropArgs=System.getProperty("cmdLineArgs");
if (sysPropArgs!=null && !sysPropArgs.equals("") ){
newArgs=sysPropArgs;
if (debug) {
System.out.println("sysPropArgs="+newArgs + " exists. Reading args.");
System.out.println("sysPropArgs="+newArgs);
}
}
//see if there is a .args file in the folder with the same name as the folder
String folderpath= new File(mxml).getParent();
String foldername=new File(folderpath).getName();
String folderBasedArgs=folderpath + File.separator + foldername + ".args";
//if file with same name as mxml, but extension=args exists used it for mxmlc args
fileBasedArgs=mxml.substring(0,mxml.length()-4)+"args";
if (new File(fileBasedArgs).exists()==true) {
if (debug) {
System.out.println("fileBasedArgs="+fileBasedArgs + " exists. Reading args.");
}
//read file and create string[] of args
String tmp=FileUtils.readFile(fileBasedArgs);
if (tmp !=null && !tmp.equals("") ){
newArgs=tmp;
}
if (debug) {
System.out.println("fileBasedArgs="+newArgs);
}
} else if (new File(folderBasedArgs).exists()==true) {
if (debug) {
System.out.println("folderBasedArgs="+folderBasedArgs + " exists. Reading args.");
}
//read file and create string[] of args
String tmp=FileUtils.readFile(folderBasedArgs);
if (tmp !=null && !tmp.equals("") ){
newArgs=tmp;
}
if (debug) {
System.out.println("folderBasedArgs="+newArgs);
}
}
if( newArgs != null ) {
ArgumentParser parser = new ArgumentParser(newArgs);
optionalArgs = parser.parseArguments();
}
//String mxmldir=FileUtils.getDirectory(mxml);
// mxunit setup?
String mxunit=System.getProperty("mxunit");
if (mxunit!=null) {
if (new File(mxunit).isDirectory()==false) {
throw new Exception("mxunit directory not set correctly, mxunit="+mxunit);
}
if (debug) {
System.out.println("mxunit="+mxunit);
}
mxunit=FileUtils.normalizeDir(mxunit);
}
String basedir=System.getProperty("basedir");
if (basedir!=null) {
if (new File(basedir).isDirectory()==false) {
throw new Exception("basedir directory not set correctly, basedir="+basedir);
}
if (debug) {
System.out.println("basedir="+basedir);
}
basedir=FileUtils.normalizeDir(basedir);
}
boolean hasLinkReport = false;
optionalArgs.add(0, mxmlc);
for (int i=0; i < optionalArgs.size(); i++) {
String a = (String)optionalArgs.get(i);
if( a.indexOf("-link-report") != -1 ) hasLinkReport = true;
}
if( !hasLinkReport ) {
optionalArgs.add("-link-report=" + linkReport);
}
optionalArgs.add(mxml);
execArgs = ArgumentParser.toArray(optionalArgs);
if (debug) {
System.out.println("cd "+dir);
System.out.println("CompileMxmlUtils.compile: "+StringUtils.arrayToString(execArgs));
}
int timeout=300;
try { timeout=Integer.parseInt(System.getProperty("mxunit.compiler.timeout")); } catch (Exception e) {}
//String java_home = System.getProperty("JAVA_HOME");
//String [] env = new String[]{"JAVA_HOME=" + java_home};
reh=new RuntimeExecHelper(execArgs,dir);
reh.setPrintOutput(printOut);
reh.setTimeout(timeout);
long startTime=System.currentTimeMillis();
reh.run();
lastRunTime=System.currentTimeMillis()-startTime;
}
public String getSwf() { return swf; }
public long getLastRunTime() { return lastRunTime; }
public RuntimeExecHelper getRuntimeExecHelper() { return reh; }
public String[] getExecArgs() { return execArgs; }
public void setDir(String dir) { this.dir=dir; }
public String getDir() { return dir; }
public void setPrintOut(boolean b) { printOut=b; }
}