<!DOCTYPE project [
    <!ENTITY jni-build SYSTEM "hyperic_jni/jni-build.xml">
]>

<project name="Sigar" default="build" basedir=".">

  <property name="sigar.version" value="1.1.10-dev"/>

  <property file="${user.home}/.sigar-build.properties"/>
  <property name="project.name" value="sigar"/>
  <property name="jni.define.name" value="SIGAR"/>
  <property name="sigar-bin" location="sigar-bin"/>
  <property name="jni.bin" location="${sigar-bin}"/>
  <property name="jni.source.dir" location="../.."/>
  <property name="jni.src.java" value="hyperic_jni/src"/>
  <property name="jni.libprefix" value=""/> <!-- drop "java" prefix -->
  <property name="jni.werror" value="true"/>
  <property name="cpptasks.jar"
            location="hyperic_jni/lib/cpptasks.jar"/>

  &jni-build;

  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="build.javadoc" value="${build}/javadoc"/>
  <property name="dist.name" value="hyperic-sigar-${sigar.version}"/>
  <property name="dist" location="${build}/${dist.name}"/>
  <property name="perl" value="perl"/>
  <!-- trick TestFQDN into passing with: ant test -Dsigar.fdqn=foo.bar -->
  <property name="sigar.fqdn" value=""/>

  <path id="libjars">
     <fileset dir="lib" includes="*.jar"/>
  </path>

  <path id="alljars">
     <path refid="libjars"/>
     <fileset dir="${sigar-bin}/lib" includes="sigar.jar"/>
  </path>

  <target name="javadoc_check">
    <uptodate property="javadoc.notrequired"
              targetfile="${build.javadoc}/packages.html" >
        <srcfiles dir="src" includes="**/*.java"/>
    </uptodate>
  </target>

  <path id="javadoc.path">
    <pathelement path="src"/>
    <pathelement path="${build}/src"/>
    <pathelement path="${jni.src.java}"/>
  </path>

  <target name="javadoc" depends="javadoc_check">
    <mkdir dir="${build.javadoc}"/>
    <javadoc packagenames="net.hyperic.sigar.*"
             excludepackagenames="net.hyperic.sigar.test.*,net.hyperic.jni.*,net.hyperic.sigar.pager.*,net.hyperic.sigar.jmx.*"
             useexternalfile="yes"
             sourcepathref="javadoc.path"
             destdir="${build.javadoc}"
             author="false"
             version="false"
             windowtitle="Sigar API"
             doctitle="Sigar">
      <group title="Sigar" packages="net.hyperic.sigar" />
      <classpath refid="libjars"/>
      <classpath><path path="${env.ANT_HOME}/lib/ant.jar"/></classpath> 
     <bottom>Copyright &#169; 2004 Hyperic, LLC. All Rights Reserved.</bottom>
    </javadoc>
  </target>

  <target name="compile">
    <mkdir dir="${build}/classes"/>
    <javac destdir="${build}/classes"
           debug="true"
           classpathref="libjars">
      <src path="${src}"/>
      <src path="${build}/src"/>
      <src path="${jni.src.java}"/>
      <include name="**/*.java"/>
    </javac>
  </target>

  <target name="sigar-version">
    <tstamp>
      <format property="BUILD_DATE" pattern="MM/dd/yyyy hh:mm aa"/>
    </tstamp>

    <property name="version.file"
              value="src/net/hyperic/sigar/SigarVersion.java"/>

    <copy file="${version.file}.in"
          tofile="${build}/${version.file}"/>

    <replace file="${build}/${version.file}">
      <replacefilter token="@@BUILD_DATE@@" value="${BUILD_DATE}"/>
      <replacefilter token="@@VERSION_STRING@@" value="${sigar.version}"/>
    </replace>
  </target>

  <target name="prepare-src" depends="sigar-version">
    <mkdir dir="${build}/src"/>

    <exec executable="${perl}" dir=".">
      <arg value="src/jni/generate.pl"/>
      <arg value="${build}/src"/>
    </exec>

    <!-- include sigar *.c files rather than link against libsigar -->
    <patternset id="jni.source.files">
      <include name="src/*.c"/>
      <include name="src/os/${jni.src}/*.c"/>
      <include name="bindings/java/src/jni/javasigar.c"/>
    </patternset>

    <path id="jni.include.dirs">
      <path location="../../include"/>
      <path location="../../src/os/${jni.src}"/>
      <path location="${build}/src"/>
    </path>

    <!-- extra solaris libs -->
    <condition property="jni.libset.dir" value="/usr/lib">
      <isset property="solaris"/>
    </condition>

    <condition property="jni.libset.libs" value="kstat">
      <isset property="solaris"/>
    </condition>

    <!-- extra aix libs -->
    <condition property="jni.libset.dir" value="/usr/lib">
      <isset property="aix"/>
    </condition>

    <condition property="jni.libset.libs" value="odm,cfg">
      <isset property="aix"/>
    </condition>
  </target>

  <target name="copy-includes">
   <mkdir dir="${sigar-bin}/include"/>
   <copy toDir="${sigar-bin}/include" overwrite="true">
     <fileset dir="../../include">
         <include name="sigar.h"/>
         <include name="sigar_fileinfo.h"/>
     </fileset>
   </copy>
  </target>

  <target name="build-jni"
          depends="jni-init,prepare-src,jni-compile,jni-lib-copy,copy-includes"
          if="jni.libarch"/>

  <target name="build-perfstat" depends="jni-init" if="aix">
    <ant dir="../../src/os/aix/perfstat"/>
    <copy toDir="${sigar-bin}/lib" overwrite="true">
      <fileset dir="${build}">
        <include name="libsigar_aixperfstat.so"/>
      </fileset>
    </copy>
  </target>

  <target name="pack-jar">
    <jar jarfile="${sigar-bin}/lib/sigar.jar"
         basedir="${build}/classes">

      <manifest>
        <attribute name="Main-Class"
                   value="net.hyperic.sigar.cmd.Runner"/>
      </manifest>
    </jar>
  </target>

  <target name="build" depends="build-jni,build-perfstat,compile,pack-jar"/>

  <target name="clean">
    <delete dir="${build}"/>
    <delete dir="${sigar-bin}"/>
    <delete dir="testresults"/>
  </target>

 <target name="xtest">
   <mkdir dir="testresults"/>

   <junit printsummary="yes" fork="yes"
          haltonfailure="yes" showoutput="true">
     <jvmarg value="-Dsigar.fqdn=${sigar.fqdn}"/>

     <classpath refid="alljars"/>
     <formatter type="plain"/>

     <batchtest fork="yes" todir="testresults">
       <fileset dir="${src}">
         <include name="**/Test*.java"/>
         <!-- slow; run by hand with bin/run_tests.sh Threads -->
         <exclude name="**/TestThreads*.java"/>
       </fileset>
     </batchtest>
   </junit>
 </target>

 <target name="test" depends="build,xtest"/>

 <target name="dist-pack">
   <zip destfile="${dist}.zip"
        basedir="${build}"
        includes="${dist.name}/**/*"/>

    <!-- Stupid ant tar task, doesn't preserve file permissions
         without making you jump through some hoops -->
   <tar tarfile="${dist}.tar.gz"
        longfile="gnu"
        compression="gzip">
      <tarfileset dir="${dist}/.." mode="755">
        <include name="${dist.name}/**/bin/*"/>
        <include name="${dist.name}/**/*.sh"/>
        <include name="${dist.name}/**/*.bat"/>
        <include name="${dist.name}/**/*.cmd"/>
        <include name="${dist.name}/**/*.sl"/>
      </tarfileset>
      <tarfileset dir="${dist}/..">
        <exclude name="${dist.name}/**/bin/*"/>
        <exclude name="${dist.name}/**/*.sh"/>
        <exclude name="${dist.name}/**/*.bat"/>
        <exclude name="${dist.name}/**/*.cmd"/>
        <exclude name="${dist.name}/**/*.sl"/>
        <include name="${dist.name}/**"/>
      </tarfileset>
   </tar>
 </target>

 <target name="dist-bin">
   <!-- binaries -->
   <mkdir dir="${dist}/sigar-bin"/>
   <copy toDir="${dist}/sigar-bin" overwrite="true">
     <fileset dir="${sigar-bin}">
       <include name="lib/*.jar"/>
       <include name="lib/*.dll"/>
       <include name="lib/*.sl"/>
       <include name="lib/*.so"/>
       <include name="lib/*.dylib"/>
     </fileset>
     <fileset dir=".">
       <include name="lib/*.jar"/>
     </fileset>
   </copy>
 </target>

 <target name="dist-support" depends="javadoc">
   <copy toDir="${dist}" overwrite="true">
     <fileset dir="../..">
       <include name="README"/>
     </fileset>
   </copy>

   <!-- bindings -->
   <mkdir dir="${dist}/bindings/perl"/>
   <copy toDir="${dist}/bindings/perl" overwrite="true">
     <fileset dir="../perl">
       <include name="Makefile.PL"/>
       <include name="typemap"/>
       <include name="*.xs"/>
       <include name="*.pm"/>
       <include name="lib/*.pm"/>
       <include name="lib/Sigar/*.pm"/>
     </fileset>
     <fileset dir="${build}/src">
       <include name="Sigar_generated.xs"/>
     </fileset>
   </copy>

   <mkdir dir="${dist}/bindings/csharp"/>
   <copy toDir="${dist}/bindings/csharp" overwrite="true">
     <fileset dir="../dotnet">
       <include name="default.build"/>
       <include name="src/Sigar.cs"/>
     </fileset>
   </copy>

   <!-- docs -->
   <mkdir dir="${dist}/docs"/>
   <copy toDir="${dist}/docs" overwrite="true">
     <fileset dir="${build}">
       <include name="javadoc/**"/>
     </fileset>
   </copy>

   <!-- examples -->
   <mkdir dir="${dist}/examples/java"/>
   <mkdir dir="${dist}/examples/perl"/>
   <mkdir dir="${dist}/examples/csharp"/>

   <copy toDir="${dist}/examples/java" overwrite="true">
     <fileset dir="src/net/hyperic/sigar/cmd">
       <include name="*.java"/>
     </fileset>
   </copy>

   <copy toDir="${dist}/examples/perl" overwrite="true">
     <fileset dir="../perl/examples">
       <include name="*.pl"/>
     </fileset>
   </copy>

   <copy toDir="${dist}/examples/csharp" overwrite="true">
     <fileset dir="../dotnet/examples">
       <include name="*.cs"/>
       <include name="default.build"/>
     </fileset>
   </copy>

   <!-- header files -->
   <copy toDir="${dist}/sigar-bin" overwrite="true">
     <fileset dir="${sigar-bin}">
       <include name="include/*.h"/>
     </fileset>
   </copy>

   <copy toDir="${dist}/sigar-bin/lib" overwrite="true">
     <fileset dir=".">
       <include name=".sigar_shellrc"/>
     </fileset>
   </copy>
 </target>

 <target name="dist" depends="dist-bin,dist-support,dist-pack"/>

</project>