<!--***********************************************************
 * 
 * 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="Scipting Framework" default="all" basedir=".">

  <!-- =================== Environmental Properties ======================= -->

  <property name="prj" value=".."/>
  <property name="build.compiler"   value="classic"/>
  <property name="optimize"   value="off"/>
  <property name="debug"   value="on"/>
  <property name="jardir" value="${out}/class"/>
  <property name="bindir" value="${out}/bin"/>
  <property name="idesupport.dir" value="org/openoffice/idesupport"/>
  <property name="netbeans.dir" value="org/openoffice/netbeans/modules/office"/>
  <property name="framework.dir" value="Framework/com/sun/star/script/framework/security"/>

  <!-- Change this property if you are building NetBeans editor support jar.
       Not needed in default build -->
  <property name="netbeans.install.path" value="/export/home/netbeans"/>

  <property environment="env"/>
  <property name="env.BSH_JAR" value="${solar.jar}/bsh.jar"/>

  <target name="eval_environment">
    <condition property="with_rhino">
      <equals arg1="${env.ENABLE_JAVASCRIPT}" arg2="YES" />
    </condition>
    <condition property="with_beanshell">
      <equals arg1="${env.ENABLE_BEANSHELL}" arg2="YES" />
    </condition>
  </target>

  <!-- ==================== classpath setting ============================ -->
  <path id="idlclasspath">
    <pathelement location="${solar.jar}/jurt.jar"/>
    <pathelement location="${solar.jar}/unoil.jar"/>
    <pathelement location="${solar.jar}/juh.jar"/>
    <pathelement location="${solar.jar}/java_uno.jar"/>
    <pathelement location="${solar.jar}/ridl.jar"/>
    <pathelement location="${env.BSH_JAR}"/>
    <pathelement location="${solar.jar}/js.jar"/>
    <pathelement location="${jardir}"/>
  </path> 

  <path id="idesupport.class.path">
    <pathelement path="${jardir}"/>
  </path>

  <path id="openide.class.path">
    <pathelement path="${jardir}"/>
    <pathelement path="${solar.jar}/openide.jar"/>
  </path>
    
  <path id="netbeans.editor.support.classpath">
    <pathelement path="${jardir}"/>
    <pathelement path="${netbeans.install.path}/modules/ext/nb-editor.jar"/>
  </path>

  <condition property="boot_refID" value="macPath" else="nonMacPath">
    <and>
      <os family="mac"/>
      <os family="unix"/>
    </and>
  </condition>
  <path id="macPath" location="${java.home}/../Classes/classes.jar"/>
  <!-- rhino.jar from OpenJDK breaks build -->
  <path id="nonMacPath">
    <fileset dir="${java.home}/">
       <include name="jre/lib/*.jar"/>
       <include name="lib/*.jar"/>
       <exclude name="jre/lib/rhino.jar"/>
       <exclude name="lib/rhino.jar"/>
     </fileset>
  </path>
  <path id="my.bootstrap.classpath" refID="${boot_refID}"/>
    
  <!-- ===================== Prepare Directories ========================= -->
  <target name="prepare">
    <mkdir dir="${jardir}"/>
  </target>

  <!-- ======================== Compile Classes ========================== -->
  <target name="compile" depends="prepare, eval_environment">
    <javac srcdir="com" destdir="${jardir}"
         includes="**/*.java" classpathref="idlclasspath" includeantruntime="false"
         debug="${debug}" optimize="${optimize}" deprecation="off">
      <exclude name="**/provider/javascript/*.java" unless="with_rhino" />
      <exclude name="**/provider/beanshell/*.java" unless="with_beanshell" />
      <compilerarg value="-Xbootclasspath:${toString:my.bootstrap.classpath}"/>
    </javac>
    <javac srcdir="Framework/" destdir="${jardir}"
         includes="**/*.java" classpathref="idlclasspath" debug="${debug}" 
         optimize="${optimize}" deprecation="off" includeantruntime="false">
     <compilerarg value="-Xbootclasspath:${toString:my.bootstrap.classpath}"/>
    </javac>
  </target>

  <target name="idesupport.compile" depends="compile, prepare">
    <javac srcdir="." destdir="${jardir}"
           debug="${debug}" deprecation="on">
      <classpath refid="idesupport.class.path"/>
      <exclude name="${idesupport.dir}/**/.*/*"/>
      <exclude name="${idesupport.dir}/localoffice/**/*"/>
      <exclude name="${idesupport.dir}/LocalOffice.java"/>
      <include name="${idesupport.dir}/*.java"/>
      <include name="${idesupport.dir}/*/*.java"/>
    </javac>
  </target>

  <target name="localoffice.compile" depends="prepare">
    <javac srcdir="." destdir="${jardir}"
           debug="${debug}" deprecation="on">
      <classpath refid="idlclasspath"/>
      <exclude name="${idesupport.dir}/localoffice/.*/*"/>
      <include name="${idesupport.dir}/localoffice/*.java"/>
    </javac>
  </target>

  <target name="netbeans.compile" depends="idesupport.compile, prepare">
    <javac srcdir="." destdir="${jardir}"
           debug="${debug}" deprecation="on">
      <classpath refid="openide.class.path"/>
      <exclude name="${netbeans.dir}/**/.*/*"/>
      <include name="${netbeans.dir}/**/*.java"/>
    </javac>
  </target>

  <target name="netbeans.editor.support" depends="prepare">
    <javac srcdir="." destdir="${jardir}"
           debug="${debug}" deprecation="on">
      <classpath refid="netbeans.editor.support.classpath"/>
      <include name="org/openoffice/netbeans/editor/*.java"/>
    </javac>
    <jar jarfile="${jardir}/nb-editorsupport.jar">
      <fileset dir="${jardir}">
          <include name="org/openoffice/netbeans/editor/*.class"/>
      </fileset>
      <fileset dir=".">
        <include name="org/openoffice/netbeans/editor/OOo.jcs"/>
        <include name="org/openoffice/netbeans/editor/OOo.jcb"/>
      </fileset>
    </jar>
  </target>

  <!-- ===================== jar ========================= -->
  <target name="jar.provider.java" depends="compile">
    <jar jarfile="${jardir}/ScriptProviderForJava.jar"
         basedir="${jardir}">
        <manifest>
            <attribute name="Built-By" value="Sun Microsystems"/>
            <attribute name="RegistrationClassName"
                       value="com.sun.star.script.framework.provider.java.ScriptProviderForJava"/>
            <attribute name="Class-Path" value="ScriptFramework.jar"/>
            <attribute name="UNO-Type-Path" value=""/>
        </manifest>
        <include name="**/provider/java/*.class"/>
    </jar>
  </target>

  <target name="jar.provider.beanshell" depends="compile" if="with_beanshell">
    <jar jarfile="${jardir}/ScriptProviderForBeanShell.jar"
         basedir="${jardir}">
        <manifest>
            <attribute name="Built-By" value="Sun Microsystems"/>
            <attribute name="RegistrationClassName"
                       value="com.sun.star.script.framework.provider.beanshell.ScriptProviderForBeanShell"/>
            <attribute name="Class-Path" value="ScriptFramework.jar bsh.jar"/>
            <attribute name="UNO-Type-Path" value=""/>
        </manifest>
        <include name="**/provider/beanshell/*.class"/>
        <fileset dir=".">
          <include name="**/provider/beanshell/*.bsh"/>
        </fileset>
    </jar>
  </target>

  <target name="jar.provider.javascript" depends="compile" if="with_rhino">
    <jar jarfile="${jardir}/ScriptProviderForJavaScript.jar"
         basedir="${jardir}">
        <manifest>
            <attribute name="Built-By" value="Sun Microsystems"/>
            <attribute name="RegistrationClassName"
                       value="com.sun.star.script.framework.provider.javascript.ScriptProviderForJavaScript"/>
            <attribute name="Class-Path" value="ScriptFramework.jar js.jar"/>
            <attribute name="UNO-Type-Path" value=""/>
        </manifest>
        <include name="**/provider/javascript/*.class"/>
        <fileset dir=".">
          <include name="**/provider/javascript/*.js"/>
        </fileset>
    </jar>
  </target>

  <target name="jar.scriptframework" depends="compile">
    <jar jarfile="${jardir}/ScriptFramework.jar"
         basedir="${jardir}">
        <manifest>
            <attribute name="Built-By" value="Sun Microsystems"/>
            <attribute name="RegistrationClassName"
                       value="com.sun.star.script.framework.security.SecurityDialog"/>
            <attribute name="UNO-Type-Path" value=""/>
        </manifest>
        <include name="**/security/*"/>
        <include name="**/log/*.class"/>
        <include name="**/provider/*.class"/>
        <include name="**/browse/*.class"/>
        <include name="**/container/*.class"/>
        <include name="**/io/*.class"/>
    </jar>
  </target>

  <target name="jar" depends="jar.provider.java,jar.provider.beanshell,jar.provider.javascript,jar.scriptframework">
  </target>

  <target name="idesupport.jar" depends="idesupport.compile">
    <jar jarfile="${jardir}/idesupport.jar">
      <fileset dir="${jardir}">
          <include name="${idesupport.dir}/**/*.class"/>
          <include name="CommandLineTools*"/>
          <exclude name="${idesupport.dir}/localoffice/*.class"/>
      </fileset>
      <fileset dir=".">
        <include name="${idesupport.dir}/ui/add.gif"/>
      </fileset>
    </jar>
  </target>

  <target name="localoffice.jar" depends="localoffice.compile">
    <unjar
      src="${solar.jar}/unoil.jar"
      dest="${jardir}"/>
    <jar jarfile="${jardir}/localoffice.jar">
      <fileset dir="${jardir}">
        <include name="${idesupport.dir}/localoffice/*.class"/>
        <include name="drafts/com/sun/star/script/framework/storage/*.class"/>
      </fileset>
    </jar>
  </target>

  <target name="netbeans.jar" depends="netbeans.compile">
    <jar jarfile="${jardir}/office.jar" manifest="manifest.mf">
      <fileset dir="${jardir}">
        <include name="${netbeans.dir}/**/*.class"/>
        <exclude name="${netbeans.dir}/**/ParcelDescriptorChildren.class"/>
        <exclude name="${netbeans.dir}/**/ScriptNode.class"/>
        <include name="${idesupport.dir}/**/*.class"/>
        <include name="CommandLineTools*"/>
      </fileset>
      <fileset dir=".">
        <include name="${idesupport.dir}/ui/add.gif"/>
        <include name="${netbeans.dir}/resources/*"/>
        <include name="${netbeans.dir}/resources/templates/*"/>
        <include name="${netbeans.dir}/**/Bundle*"/>
      </fileset>
    </jar>
  </target>

  <!-- Uncomment this target when building within NetBeans to reinstall the
       module.
  <target name="netbeans.install" depends="netbeans.package">
    <copy file="${jardir}/localoffice.jar"
          tofile="${netbeans.home}/modules/ext/localoffice.jar"/>
    <nbinstaller action="reinstall" module="${jardir}/office.jar"/>
  </target>
  -->

  <!-- ====================== Clean Generated Files ===================== -->
  <target name="clean">
    <delete file="${jardir}/ScriptProviderForJava.jar"/>
    <delete file="${jardir}/ScriptProviderForJavaScript.jar"/>
    <delete file="${jardir}/ScriptProviderForBeanShell.jar"/>
    <delete file="${jardir}/ScriptFramework.jar"/>
    <delete file="${jardir}/office.jar"/>
    <delete file="${jardir}/localoffice.jar"/>
    <delete file="${jardir}/idesupport.jar"/>
  </target>

  <!-- ========================= All In One Build ======================= -->
  <target name="all" depends="jar"/>
</project>