<?xml version="1.0" ?>
<!--

  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.

-->
<project name="compiler.jx" default="main" basedir=".">

    <pathconvert property="basedir_clean" dirsep="/">
		<path location="${basedir}" />
    </pathconvert>
	
	<property name="src" value="${basedir_clean}/src" />
	<property name="lib" value="${basedir_clean}/lib" />
	
	<property name="falcon.basedir" value="${basedir_clean}/../compiler" />
	
    <property name="build.output" value="${basedir_clean}/build" />
	<property name="build.lib.dir" value="${build.output}/lib" />
	
	<property name="classes.dir" value="${build.output}/classes" />
	
	<property name="mxmlc.jar" value="${build.lib.dir}/mxmlc.jar" />
    <property name="externc.jar" value="${build.lib.dir}/externc.jar" />
	<property name="compc.jar" value="${build.lib.dir}/compc.jar" />
	<property name="jsc.jar" value="${build.lib.dir}/jsc.jar" />

	<path id="classpath">
		<filelist dir="${build.lib.dir}">
			<file name="commons-io.jar" />
            <file name="guava.jar" />
            <file name="antlr.jar" />
			<file name="flex-tool-api.jar" />
        </filelist>
		<filelist dir="${build.lib.dir}/google/closure-compiler">
            <file name="compiler.jar" />
        </filelist>
	</path>

	<target name="copyFiles">
		<copy todir="${build.lib.dir}">
			<filelist dir="${falcon.basedir}/lib">
				<file name="commons-io.jar" />
				<file name="guava.jar" />
				<file name="antlr.jar" />
				<file name="flex-tool-api.jar"/>
			</filelist>
		</copy>
		<copy todir="${build.lib.dir}/google/closure-compiler">
			<filelist dir="${lib}/google/closure-compiler">
				<file name="compiler.jar" />
			</filelist>
		</copy>
		<!-- Copy the config file for the flex-tool-api. -->
		<copy todir="${classes.dir}/META-INF/services"
			  file="src/META-INF/services/org.apache.flex.tools.FlexToolGroup"/>
    </target>

	<target name="compile">
		<javac debug="true" deprecation="false"
            includes="**/*.java"
            excludes=""
            destdir="${classes.dir}"
            classpathref="classpath">
			<src path="${src}" />
			<classpath>
				<pathelement path="${falcon.basedir}/generated/classes" />
			</classpath>
		</javac>
	</target>

    <target name="prebuild">
		<mkdir dir="${classes.dir}" />
        <mkdir dir="${classes.dir}/META-INF" />
        <mkdir dir="${lib}/google/closure-compiler" />
        <ant antfile="${basedir}/downloads.xml" dir="${basedir}" />
    </target>
	
	<target name="main" depends="prebuild,copyFiles,compile">
        
        <property name="jar.classpath" value="commons-io.jar ../../lib/external/guava.jar  ../../lib/external/antlr.jar ../../lib/external/flex-tool-api.jar google/closure-compiler/compiler.jar ../../compiler/generated/dist/sdk/lib/compiler.jar ../../lib/compiler.jar" />

        <copy file="${basedir}/../LICENSE.base" tofile="${classes.dir}/META-INF/LICENSE"/>
        <copy file="${basedir}/../NOTICE.base" tofile="${classes.dir}/META-INF/NOTICE"/>
        
		<echo message="Building ${jsc.jar}" />
		<jar file="${jsc.jar}" basedir="${classes.dir}"
            includes="**/*.properties,org/apache/**/*,com/google/**/*,META-INF/**/*"
			excludes="**/JSDriver*,**/IASNodeAdapter*,org/apache/flex/compiler/internal/parsing/abc/*" >
            <include name="META-INF/LICENSE"/>
            <include name="META-INF/NOTICE"/>
            <manifest>
                <attribute name="Class-Path" value="${jar.classpath}" />
            </manifest>
        </jar>

		<echo message="Building ${mxmlc.jar}" />
		<jar file="${mxmlc.jar}" basedir="${classes.dir}">
            <include name="META-INF/LICENSE"/>
            <include name="META-INF/NOTICE"/>
			<manifest>
				<attribute name="Main-Class" value="org.apache.flex.compiler.clients.MXMLJSC" />
                <attribute name="Class-Path" value="args4j.jar org.json.jar jsc.jar" />
			</manifest>
		</jar>

		<echo message="Building ${compc.jar}" />
		<jar file="${compc.jar}" basedir="${classes.dir}">
            <include name="META-INF/LICENSE"/>
            <include name="META-INF/NOTICE"/>
			<manifest>
				<attribute name="Main-Class" value="org.apache.flex.compiler.clients.COMPJSC" />
                <attribute name="Class-Path" value="jsc.jar" />
			</manifest>
		</jar>

        <echo message="Building ${externc.jar}" />
        <jar file="${externc.jar}" basedir="${classes.dir}">
            <include name="META-INF/LICENSE"/>
            <include name="META-INF/NOTICE"/>
            <manifest>
                <attribute name="Main-Class" value="org.apache.flex.compiler.clients.EXTERNC" />
                <attribute name="Class-Path" value="jsc.jar" />
            </manifest>
        </jar>

		<echo message="Copying jars to ${lib}" />
        <copy todir="${lib}">
			<filelist dir="${build.lib.dir}">
				<file name="compc.jar" />
                <file name="externc.jar" />
				<file name="mxmlc.jar" />
				<file name="jsc.jar" />
			</filelist>
		</copy>

        <chmod dir="${basedir}/bin" excludes="**/*.bat" perm="+x" />

		<antcall target="clean" />
	</target>

    <!--
		Cleanup
	-->
	
    <target name="super-clean" depends="thirdparty-clean,clean" />

    <target name="thirdparty-clean">
        <ant antfile="${basedir}/downloads.xml" dir="${basedir}" target="clean" />
        <delete failonerror="false" includeemptydirs="true">
            <fileset dir="${lib}" />
        </delete>
    </target>

    <target name="clean" >
        <delete failonerror="false" includeemptydirs="true">
            <fileset dir="${build.output}" />
		</delete>
    </target>

</project>
