File build.xml of Package postgresql-jdbc

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

  Copyright (c) 2004-2011, PostgreSQL Global Development Group

  Build file to allow ant (http://ant.apache.org/) to be used
  to build the PostgreSQL JDBC Driver.

  This file now requires Ant 1.4.1.  2002-04-18


-->

<!DOCTYPE project [
  <!ENTITY jarfiles "postgresql.jar">
]>

<project name="postgresqlJDBC" default="all" basedir=".">

  <!-- set global properties for this build -->
  <property name="srcdir"  value="." />
  <property name="jardir"  value="jars" />
  <property name="builddir" value="build" />
  <property name="package" value="org/postgresql" />
  <property name="debug" value="on" />

  <!-- default build parameters are in build.properties, these may be
       overridden by local configuration settings in build.local.properties
  -->
  <property file="build.local.properties" />
  <property file="build.properties"/>

  <target name="check_versions">
    <condition property="jdbc2">
      <or>
        <equals arg1="${java.specification.version}" arg2="1.2"/>
        <equals arg1="${java.specification.version}" arg2="1.3"/>
      </or>
    </condition>
    <condition property="jdbc3">
        <equals arg1="${java.specification.version}" arg2="1.4"/>
    </condition>
    <condition property="jdbc3g">
	<equals arg1="${java.specification.version}" arg2="1.5"/>
    </condition>
    <condition property="jdbc4">
        <equals arg1="${java.specification.version}" arg2="1.6"/>
    </condition>
    <condition property="jdbc41">
      <or>
	<equals arg1="${java.specification.version}" arg2="1.7"/>
        <equals arg1="${java.specification.version}" arg2="1.8"/>
        <equals arg1="${java.specification.version}" arg2="1.9"/>
        <equals arg1="${java.specification.version}" arg2="9"/>
      </or>
    </condition>
    <condition property="jdbc4any">
      <or>
        <isset property="jdbc4" />
	<isset property="jdbc41" />
      </or>
    </condition>
    <condition property="jdbc3any">
      <or>
        <isset property="jdbc3" />
	<isset property="jdbc3g" />
      </or>
    </condition>
    <condition property="jdbc3plus">
      <or>
        <isset property="jdbc3any" />
	<isset property="jdbc4any" />
      </or>
    </condition>

    <condition property="unknownjvm">
      <not>
        <or>
          <isset property="jdbc2" />
          <isset property="jdbc3any" />
          <isset property="jdbc4any" />
        </or>
      </not>
    </condition>

    <fail if="jdbc2" message="1.4 or higher JDK is required to build the JDBC driver." />
    <fail if="unknownjvm" message="Unknown JDK version." />

    <available property="junit" classname="junit.framework.Test"/>
    <available property="junit.task" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>

    <condition property="jdbc4tests">
      <and>
        <isset property="jdbc4any" />
        <isset property="junit" />
      </and>
    </condition>
  </target>


  <!-- default target -->
  <target name="all">
    <antcall target="jar" />
  </target>


  <!-- create the jar file -->
  <target name="jar" depends="compile">
    <jar jarfile="${jardir}/postgresql.jar">
      <fileset dir="${builddir}">
        <include name="${package}/**/*.class" />
      </fileset>

      <fileset dir="${srcdir}">
        <include name="${package}/translation/*.class" />
      </fileset>

      <metainf dir="META-INF">
      </metainf>
    </jar>
  </target>


  <target name="compile" depends="prepare,check_versions,driver">

    <available classname="org.postgresql.Driver" property="old.driver.present" />
    <fail message="Old driver was detected on classpath or in jre/lib/ext, please remove and try again." if="old.driver.present" />

    <javac classpath="${srcdir}" srcdir="${srcdir}" destdir="${builddir}" debug="${debug}" source="${java.specification.version}">
      <!-- This is the core of the driver.  It is common for all versions. -->
       <include name="${package}/*.java" />
       <include name="${package}/core/**" />
       <include name="${package}/copy/**" />
       <include name="${package}/fastpath/**" />
       <include name="${package}/geometric/**" />
       <include name="${package}/largeobject/**" />
       <include name="${package}/util/**" />

       <!--      
       Each jdbcN subpackage is used only if the driver supports *at least* that
       revision of JDBC. That is, a JDBC2 build uses only jdbc2, a JDBC3 build
       uses both jdbc2 and jdbc3, etc.
  
       Within those subpackages, classes beginning with "JdbcN" are assumed to be
       the concrete implementations for JDBC version N and are built only if the
       driver supports *exactly* that version. For example, jdbc2/Jdbc2Statement.java
       is built only if the driver build is a JDBC2 build.
       -->
 
       <!-- jdbc2 subpackage -->
       <include name="${package}/jdbc2/**"/>
 
       <!-- jdbc3 subpackage -->
       <include name="${package}/jdbc3/Abstract*.java" />
       <include name="${package}/jdbc3/PSQLSavepoint.java" />

       <include name="${package}/jdbc3/Jdbc3Array.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3Blob.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3CallableStatement.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3Clob.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3Connection.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3DatabaseMetaData.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3PreparedStatement.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3ResultSet.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3ResultSetMetaData.java.java" if="jdbc3"/>
       <include name="${package}/jdbc3/Jdbc3Statement.java" if="jdbc3"/>

       <!-- jdbc3g subpackage -->
       <include name="${package}/jdbc3g/*.java" if="jdbc3g" />
       <exclude name="${package}/jdbc3g/Jdbc3g*.java" unless="jdbc3g" />

       <!-- jdbc4 subpackage -->
       <include name="${package}/jdbc4/*.java" if="jdbc4any" />
       <exclude name="${package}/jdcb4/Jdbc4*.java" unless="jdbc4any" />

       <!-- ssl -->
       <include name="${package}/ssl/SingleCertValidatingFactory.java" if="jdbc4any"/>
       <include name="${package}/ssl/jdbc4/*.java" if="jdbc4any"/>
       <include name="${package}/ssl/jdbc3/*.java" if="jdbc3any"/>
       <include name="${package}/ssl/*.java" if="jdbc3any"/>

       <!-- gss -->
       <include name="${package}/gss/*.java" />

       <!-- datasource stuff -->
       <include name="${package}/jdbc3/Jdbc3ConnectionPool.java" if="jdbc3any" />
       <include name="${package}/jdbc3/Jdbc3PoolingDataSource.java" if="jdbc3any" />
       <include name="${package}/jdbc3/Jdbc3SimpleDataSource.java" if="jdbc3any" />

       <include name="${package}/ds/*.java" />
       <include name="${package}/ds/common/*.java" />
       <include name="${package}/ds/jdbc23/*.java" />
       <include name="${package}/ds/jdbc4/*.java" if="jdbc4any" />

       <!-- XA stuff -->
       <include name="${package}/xa/*.java" />
       <include name="${package}/xa/jdbc3/*.java" />
       <include name="${package}/xa/jdbc4/*.java" if="jdbc4any" />

    </javac>
  </target>

  <target name="check_driver">
    <uptodate targetfile="${package}/Driver.java" property="driver.uptodate">
      <srcfiles dir=".">
      <include name="${package}/Driver.java.in"/>
      <include name="${package}/ds/PGSimpleDataSource.java.in"/>
      <include name="${package}/ds/PGPoolingDataSource.java.in"/>
      <include name="${package}/ds/PGPooledConnection.java.in"/>
      <include name="${package}/ds/PGConnectionPoolDataSource.java.in" />
      <include name="${package}/xa/PGXADataSource.java.in" />
      <include name="build.properties"/>
      <include name="build.local.properties" />
      </srcfiles>
    </uptodate>
  </target>

  <!--
    This generates Driver.java from Driver.java.in
    It's required for importing the driver version properties
  -->
  <target name="driver" depends="prepare,check_versions,check_driver"
          unless="driver.uptodate">
    <!-- determine the edition text -->
    <condition property="edition" value="JDBC3">
        <equals arg1="${jdbc3}" arg2="true"/>
    </condition>
    <condition property="edition" value="JDBC3g">
    	<equals arg1="${jdbc3g}" arg2="true" />
    </condition>
    <condition property="edition" value="JDBC4">
	<equals arg1="${jdbc4}" arg2="true" />
    </condition>
    <condition property="edition" value="JDBC4.1">
	<equals arg1="${jdbc41}" arg2="true" />
    </condition>

    <!-- determine the connection class -->
    <condition property="connectclass" value="org.postgresql.jdbc3.Jdbc3Connection">
        <equals arg1="${jdbc3}" arg2="true"/>
    </condition>
    <condition property="connectclass" value="org.postgresql.jdbc3g.Jdbc3gConnection">
        <equals arg1="${jdbc3g}" arg2="true"/>
    </condition>
    <condition property="connectclass" value="org.postgresql.jdbc4.Jdbc4Connection">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>

    <condition property="notimplementedexception" value="java.sql.SQLException">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="notimplementedexception" value="java.sql.SQLFeatureNotSupportedException">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>

    <condition property="simpledsclass" value="org.postgresql.ds.jdbc23.AbstractJdbc23SimpleDataSource">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="simpledsclass" value="org.postgresql.ds.jdbc4.AbstractJdbc4SimpleDataSource">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>

    <condition property="poolingdsclass" value="org.postgresql.ds.jdbc23.AbstractJdbc23PoolingDataSource">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="poolingdsclass" value="org.postgresql.ds.jdbc4.AbstractJdbc4PoolingDataSource">
        <equals arg1="${jdbc4any}" arg2="true" />
</condition>

    <condition property="pooledconnclass" value="org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="pooledconnclass" value="org.postgresql.ds.jdbc4.AbstractJdbc4PooledConnection">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>

    <condition property="connpooldsclass" value="org.postgresql.ds.jdbc23.AbstractJdbc23ConnectionPoolDataSource">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="connpooldsclass" value="org.postgresql.ds.jdbc4.AbstractJdbc4ConnectionPoolDataSource">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>

    <condition property="xadsclass" value="org.postgresql.xa.jdbc3.AbstractJdbc3XADataSource">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="xadsclass" value="org.postgresql.xa.jdbc4.AbstractJdbc4XADataSource">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>
    <condition property="makesslclass" value="org.postgresql.ssl.jdbc3.AbstractJdbc3MakeSSL">
        <equals arg1="${jdbc3any}" arg2="true" />
    </condition>
    <condition property="makesslclass" value="org.postgresql.ssl.jdbc4.AbstractJdbc4MakeSSL">
        <equals arg1="${jdbc4any}" arg2="true" />
    </condition>
	
    <!-- Some defaults -->
    <filter token="MAJORVERSION" value="${major}" />
    <filter token="MINORVERSION" value="${minor}" />
    <filter token="VERSION" value="PostgreSQL ${fullversion} ${edition}" />
    <filter token="JDBCCONNECTCLASS" value="${connectclass}" />
    <filter token="NOTIMPLEMENTEDEXCEPTION" value="${notimplementedexception}" />
    <filter token="XA_DS_CLASS" value="${xadsclass}" />
    <filter token="POOLING_DS_CLASS" value="${poolingdsclass}" />
    <filter token="SIMPLE_DS_CLASS" value="${simpledsclass}" />
    <filter token="POOLED_CONN_CLASS" value="${pooledconnclass}" />
    <filter token="CONN_POOL_DS_CLASS" value="${connpooldsclass}" />
    <filter token="DEF_PGPORT" value="${def_pgport}" />
    <filter token="MAKE_SSL_CLASS" value="${makesslclass}"/>

     <fail unless="major" message="'major' undefined. Please follow the directions in README."/>
     <fail unless="minor" message="'minor' undefined. Please follow the directions in README."/>
     <fail unless="fullversion" message="'fullversion' undefined. Please follow the directions in README."/>
     <fail unless="def_pgport" message="'def_pgport' undefined. Please follow the directions in README."/>
     <fail unless="enable_debug" message="'enable_debug' undefined. Please follow the directions in README."/>
 
    <!-- Put a check for the current version here -->

    <!-- now copy and filter the file -->
    <copy file="${package}/Driver.java.in"
          overwrite="true"
          tofile="${package}/Driver.java"
          filtering="yes" />
    <copy file="${package}/ds/PGPoolingDataSource.java.in"
          overwrite="true"
          tofile="${package}/ds/PGPoolingDataSource.java"
          filtering="yes" />
    <copy file="${package}/ds/PGSimpleDataSource.java.in"
          overwrite="true"
          tofile="${package}/ds/PGSimpleDataSource.java"
          filtering="yes" />
    <copy file="${package}/ds/PGPooledConnection.java.in"
          overwrite="true"
          tofile="${package}/ds/PGPooledConnection.java"
          filtering="yes" />
    <copy file="${package}/ds/PGConnectionPoolDataSource.java.in"
          overwrite="true"
          tofile="${package}/ds/PGConnectionPoolDataSource.java"
          filtering="yes" />
    <copy file="${package}/xa/PGXADataSource.java.in"
          overwrite="true"
          tofile="${package}/xa/PGXADataSource.java"
          filtering="yes" />
    <copy file="${package}/ssl/MakeSSL.java.in"
          overwrite="true"
          tofile="${package}/ssl/MakeSSL.java"
          filtering="yes" />

  <echo message="Configured build for the ${edition} edition driver." />
  </target>


  <!-- Prepares the build directory -->
  <target name="prepare">
    <!-- use the enable_debug option from configure -->
    <condition property="debug" value="on">
      <and>
        <equals arg1="${enable_debug}" arg2="yes" />
      </and>
    </condition>
    <mkdir dir="${builddir}" />
    <mkdir dir="${jardir}" />
  </target>


  <!-- This target removes any class files from the build directory -->
  <target name="clean">
    <delete quiet="true" dir="${builddir}" />
    <delete quiet="true" dir="${jardir}" />
    <delete quiet="true" file="${package}/Driver.java" />
    <delete quiet="true" file="${package}/ds/PGPoolingDataSource.java" />
    <delete quiet="true" file="${package}/ds/PGSimpleDataSource.java" />
    <delete quiet="true" file="${package}/ds/PGPooledConnection.java" />
    <delete quiet="true" file="${package}/ds/PGConnectionPoolDataSource.java" />
    <delete quiet="true" file="${package}/xa/PGXADataSource.java" />
    <delete quiet="true" file="${package}/ssl/MakeSSL.java" />
  </target>

  <!-- This compiles and executes the JUnit tests -->

  <!-- defaults for the tests - override these if required -->
  <property name="server" value="localhost" />
  <property name="port" value="${def_pgport}" />
  <property name="database" value="test" />
  <property name="username" value="test" />
  <!-- Password must be something.  Doesn't matter if trust is used! -->
  <property name="password" value="password" />
  <property name="preparethreshold" value="5" />
  <property name="loglevel" value="0" />
  <property name="protocolVersion" value="0" />
  <property name="binarytransfer" value="true" />
  <property name="forcebinary" value="true" />
  <property name="ssltest.properties" value="ssltest.properties" />

  <!-- The tests now build to a separate directory and jarfile from the
       driver build, to ensure we're really testing against the jar we just
       built, and not whatever happens to be in builddir. -->

  <!-- This compiles and builds the test jarfile. -->  
  <target name="testjar" depends="jar">
    <fail message="JUnit could not be found in your classpath.  You must download and install it from http://junit.org to build and run the test suite." unless="junit" />
    <mkdir dir="${builddir}/tests"/>
    <javac srcdir="${srcdir}" destdir="${builddir}/tests" debug="${debug}" source="${java.specification.version}">
      <include name="${package}/test/**" />

      <exclude name="${package}/test/jdbc4/**" unless="jdbc4tests" />
      <exclude name="${package}/test/ssl/**" unless="jdbc4tests" />

      <classpath>
        <pathelement location="${jardir}/postgresql.jar"/>
      </classpath>
    </javac>
    <jar jarfile="${jardir}/postgresql-tests.jar" basedir="${builddir}/tests"/>
  </target>
    
  <!-- This actually runs the tests -->
  <target name="runtest" depends="testjar">
    <fail message="Your version of ant doesn't seem to have the junit task available.  I looked for org.apache.tools.ant.taskdefs.optional.junit.JUnitTask, but I couldn't find it." unless="junit.task" />

    <delete file="postgresql-jdbc-tests.debug.txt"/>

    <property name="testResultsDir" value="${builddir}/testresults" />
    <mkdir dir="${testResultsDir}" />
 
    <junit>
      <formatter type="brief" usefile="false"/>
      <formatter type="xml" usefile="true" />

      <sysproperty key="server" value="${server}" />
      <sysproperty key="port" value="${port}" />
      <sysproperty key="database" value="${database}" />
      <sysproperty key="username" value="${username}" />
      <sysproperty key="password" value="${password}" />
      <sysproperty key="preparethreshold" value="${preparethreshold}" />
      <sysproperty key="loglevel" value="${loglevel}" />
      <sysproperty key="protocolVersion" value="${protocolVersion}" />
      <sysproperty key="binaryTransfer" value="${binarytransfer}" />
      <sysproperty key="org.postgresql.forcebinary" value="${forcebinary}" />
      <sysproperty key="ssltest.properties" value="${ssltest.properties}" />

      <classpath>
        <pathelement location="${jardir}/postgresql.jar" />
        <pathelement location="${jardir}/postgresql-tests.jar" />
        <pathelement path="${java.class.path}" />
      </classpath>
      <test name="org.postgresql.test.jdbc2.Jdbc2TestSuite" outfile="${testResultsDir}/jdbc2"/>
      <test name="org.postgresql.test.jdbc2.optional.OptionalTestSuite" outfile="${testResultsDir}/jdbc2optional"/>
      <test name="org.postgresql.test.jdbc3.Jdbc3TestSuite" outfile="${testResultsDir}/jdbc3"/>
      <test name="org.postgresql.test.xa.XATestSuite" outfile="${testResultsDir}/xa"/>
      <test name="org.postgresql.test.extensions.ExtensionsSuite" outfile="${testResultsDir}/extensions"/>
      <test name="org.postgresql.test.jdbc4.Jdbc4TestSuite" if="jdbc4tests" outfile="${testResultsDir}/jdbc4"/>
      <test name="org.postgresql.test.ssl.SslTestSuite" if="jdbc4tests" outfile="${testResultsDir}/ssl"/>
    </junit>
  </target>
  
  <!-- Build and run the tests. -->
  <target name="test" depends="testjar,runtest"/>

  <!-- Build public javadoc -->
  <target name="publicapi" depends="compile">
    <mkdir dir="${builddir}/publicapi" />
    <javadoc destdir="${builddir}/publicapi">
      <classpath>
        <pathelement path="${builddir}" />
        <pathelement path="${java.class.path}" />
      </classpath>
      <fileset dir="${package}">
        <include name="copy/*.java" />
        <include name="geometric/*.java" />
        <include name="largeobject/*.java" />
        <include name="fastpath/*.java" />
        <include name="PG*.java" />
        <include name="util/PGobject.java" />
        <include name="util/PGmoney.java" />
        <include name="util/PGInterval.java" />
        <include name="util/ServerErrorMessage.java" />
	<include name="ssl/WrappedFactory.java" />
	<include name="ssl/NonValidatingFactory.java" />
	<include name="ds/PG*.java" />
	<include name="ds/common/BaseDataSource.java" />
	<include name="xa/PGXADataSource.java" />
      </fileset>
    </javadoc>
  </target>

  <!-- Build driver-internal javadoc. NB: needs Ant 1.6 & JDK 1.4 for 'breakiterator'. -->
  <target name="privateapi" depends="compile">
    <javadoc destdir="${builddir}/privateapi" breakiterator="yes">
      <classpath>
        <pathelement path="${builddir}" />
        <pathelement path="${java.class.path}" />
      </classpath>
      <fileset dir="${package}">
        <include name="**/*.java"/>
	<exclude name="jdbc3/Jdbc3*.java" unless="jdbc3" />
	<exclude name="jdbc3g/Jdbc3g*.java" unless="jdbc3g" />
	<exclude name="jdbc4/*.java" unless="jdbc4any" />
	<exclude name="ds/jdbc4/*.java" unless="jdbc4any" />
        <exclude name="test/**/*.java"/>
      </fileset>
    </javadoc>
  </target>

  <!-- Build the documentation -->
  <target name="doc" depends="prepare">
   <mkdir dir="${builddir}/doc"/>
   <xslt basedir="doc" destdir="${builddir}/doc" includes="*.xml" force="yes" style="${docbook.stylesheet}">
     <param name="base.dir" expression="${builddir}/doc/"/>
     <param name="use.id.as.filename" expression="1" />
   </xslt>
  </target>

  <!-- Blah. Can't reference an external XML catalog until Ant 1.6.
       So instead we copy the contents of ${docbook.dtd}/catalog.xml
       here, in the form that Ant's xmlcatalog element wants. -->
  <xmlcatalog id="docbook-catalog">  
    <dtd publicId="-//OASIS//DTD DocBook XML V4.2//EN"
      location="${docbook.dtd}/docbookx.dtd"/>
    <entity publicId="-//OASIS//DTD DocBook CALS Table Model V4.2//EN"
      location="${docbook.dtd}/calstblx.dtd"/>
    <entity publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN"
      location="${docbook.dtd}/soextblx.dtd"/>
    <entity publicId="-//OASIS//ELEMENTS DocBook Information Pool V4.2//EN"
      location="${docbook.dtd}/dbpoolx.mod"/>    
    <entity publicId="-//OASIS//ELEMENTS DocBook Document Hierarchy V4.2//EN"
      location="${docbook.dtd}/dbhierx.mod"/>    
    <entity publicId="-//OASIS//ENTITIES DocBook Additional General Entities V4.2//EN"
      location="${docbook.dtd}/dbgenent.mod"/>    
    <entity publicId="-//OASIS//ENTITIES DocBook Notations V4.2//EN"
      location="${docbook.dtd}/dbnotnx.mod"/>
    <entity publicId="-//OASIS//ENTITIES DocBook Character Entities V4.2//EN"
      location="${docbook.dtd}/dbcentx.mod"/>
  </xmlcatalog>

  <!-- Validate but don't process the documentation.
       This target expects the DocBook XML DTDs, available at
       http://www.docbook.org/xml/4.2/docbook-xml-4.2.zip, to be
       present in ${docbook.dtd}. If they're not present, they will
       be fetched on each validation from www.oasis-open.org.

       Note that if the DTD fetch fails, validation fails with a fairly
       useless error message. Run ant with -verbose to get a more useful
       error. You'll need to set the java properties http.proxyHost and
       http.proxyPort if you need to go via a proxy to fetch the DTDs.
  -->
       
  <target name="validate-doc" depends="prepare">
    <xmlvalidate warn="true">
      <fileset dir="doc" includes="*.xml"/>
      <xmlcatalog refid="docbook-catalog"/>
    </xmlvalidate>
  </target>

</project>
openSUSE Build Service is sponsored by