<?xml version="1.0" encoding="UTF-8"?>

<!-- Current runtime requirements are:
        - Java 1.8 (Level 8.0)
        - Android SDK API level 24 (Version 7.0 Nougat, released August 2016)

     Official production builds are performed _for_ Java 1.8.
        - Java 1.8 (Level 8.0)
        - Android SDK API level 24 (Version 7.0 Nougat, released August 2016)

     Official production builds are performed _on_ OpenJDK 11
     and a Java JDK 11 or greater is required!

     Android 7.0 Nougat, API level 24 supports Java 1.8, 
     see https://developer.android.com/studio/write/java8-support

     Target Java 8 baseline is chosen today, June 2019, 
     since OpenJDK 1.8 is well supported on desktop, 
     mobile support is given w/ OpenJDK 9 and 
     Android also support these language features for almost 3 years.
     
     For crosscompilation the following shall be set:
     - TARGET_PLATFORM_SYSROOT Crosscompiler and system specified 'sysroot' (as in gcc \-\-print-sysroot)
     - TARGET_PLATFORM_USRROOT Additional optional user headers and libraries for target
     - TARGET_PLATFORM_USRLIBS Actual location of target user libraries within TARGET_PLATFORM_USRROOT
     - TARGET_JAVA_LIBS Actual location of the Java libraries within TARGET_PLATFORM_USRROOT
  -->

<project name="jogamp-env" basedir=".">

  <target name="jogamp.env.validation">
    <echo message="ant.version                ${ant.version}"/>
    <echo message="ant.java.version           ${ant.java.version}"/>
    <echo message="java.version               ${java.version}"/>
    <echo message="java.home                  ${java.home}"/>

    <property name="jvmJava.exe" value="${java.home}/bin/java" /> <!-- the java jvm executable for unit tests -->
    <echo message="jvmJava.exe                ${jvmJava.exe}"/>

    <condition property="jvmJava8.exe" value="${env.JAVA8_EXE}">
        <not>
         <equals arg1="${env.JAVA8_EXE}" arg2="$${env.JAVA8_EXE}" casesensitive="true" />
        </not>
    </condition>
    <echo message="jvmJava8.exe               ${jvmJava8.exe}"/> <!-- optional extra Java8 JVM for unit tests -->

    <fail message="Please build using Ant 1.8.0 or higher.">
      <condition>
          <not>
              <antversion atleast="1.8.0"/>
          </not>
      </condition>
    </fail>

    <!-- Only for junit runtime tests Java [8-10] is allowed, for building Java 11 is required. -->
    <fail message="Unsupported Java version: ${ant.java.version}. Make sure that the version of Java is 1.8 or greater.">
        <condition>
            <not>
                <or>
                    <equals arg1="${ant.java.version}" arg2="1.8"/>
                    <equals arg1="${ant.java.version}" arg2="9"/>
                    <equals arg1="${ant.java.version}" arg2="10"/>
                    <equals arg1="${ant.java.version}" arg2="11"/>
                    <equals arg1="${ant.java.version}" arg2="12"/>
                    <equals arg1="${ant.java.version}" arg2="13"/>
                    <equals arg1="${ant.java.version}" arg2="14"/>
                </or>
            </not>
        </condition>
    </fail>

  </target>

  <target name="jogamp.env.init" depends="jogamp.env.validation">
    <property environment="env" />

    <tstamp>
        <format property="version.timestamp" pattern="yyyyMMdd"/>
    </tstamp>

    <condition property="javadoc.xarg1" value="-Xdoclint:none" else="-J-Ddummy=val">
        <or>
            <equals arg1="${ant.java.version}" arg2="1.8"/>
            <equals arg1="${ant.java.version}" arg2="9"/>
            <equals arg1="${ant.java.version}" arg2="10"/>
            <equals arg1="${ant.java.version}" arg2="11"/>
            <equals arg1="${ant.java.version}" arg2="12"/>
            <equals arg1="${ant.java.version}" arg2="13"/>
            <equals arg1="${ant.java.version}" arg2="14"/>
        </or>
    </condition>
    <echo message="javadoc.xarg1              ${javadoc.xarg1}"/>

    <condition property="jogamp.jar.codebase" value="${env.JOGAMP_JAR_CODEBASE}">
        <not>
         <equals arg1="${env.JOGAMP_JAR_CODEBASE}" arg2="$${env.JOGAMP_JAR_CODEBASE}" casesensitive="true" />
        </not>
    </condition>
    <property name="jogamp.jar.codebase"      value=""/> <!-- A jogamp build uses value "Codebase: *.jogamp.org" -->
    <echo message="jogamp.jar.codebase        ${jogamp.jar.codebase}"/>

    <property name="jogamp.version.major" value="2"/>
    <property name="jogamp.version.minor" value="4"/>
    <property name="jogamp.version.submi" value="0"/>
    <property name="jogamp.version.devel" value="-rc-${version.timestamp}"/> <!-- Devel RC Tag -->
    <!-- property name="jogamp.version.devel" value=""/ --> <!-- Release tag -->
    <property name="jogamp.version.base"  value="${jogamp.version.major}.${jogamp.version.minor}"/>
    <property name="jogamp.version"       value="${jogamp.version.base}.${jogamp.version.submi}${jogamp.version.devel}" />
    <echo message="jogamp.version             ${jogamp.version}"/>

    <!-- This is the Android version: xxyyzzz, xx=API yy screen-from-to zzz app-version-->
    <property name="jogamp.version.int"   value="2414020"/>
    <echo message="jogamp.version.int         ${jogamp.version.int}"/>

    <!-- only set 'junit.is.disabled' if set in environment as 'true' to disable JUNIT tests -->
    <condition property="junit.is.disabled" value="${env.JUNIT_DISABLED}">
        <istrue value="${env.JUNIT_DISABLED}"/>
    </condition>
    <echo message="junit.is.disabled          ${junit.is.disabled}"/>

    <condition property="junit.run.arg0" value="${env.JUNIT_RUN_ARG0}">
        <not>
         <equals arg1="${env.JUNIT_RUN_ARG0}" arg2="$${env.JUNIT_RUN_ARG0}" casesensitive="true" />
        </not>
    </condition>
    <property name="junit.run.arg0"       value="-Djunit.run.arg0=dummy" />      <!-- default dummy values -->
    <condition property="junit.run.arg1" value="${env.JUNIT_RUN_ARG1}">
        <not>
         <equals arg1="${env.JUNIT_RUN_ARG1}" arg2="$${env.JUNIT_RUN_ARG1}" casesensitive="true" />
        </not>
    </condition>
    <property name="junit.run.arg1"       value="-Djunit.run.arg1=dummy" />      <!-- default dummy values -->

    <!-- only set 'build.archiveon' if set in environment as 'true' to trigger archive creation -->
    <condition property="build.archiveon" value="${env.BUILD_ARCHIVE}">
        <istrue value="${env.BUILD_ARCHIVE}"/>
    </condition>

    <condition property="build.node.name" value="${env.NODE_NAME}" else="local">
        <not>
         <equals arg1="${env.NODE_NAME}" arg2="$${env.NODE_NAME}" casesensitive="true" />
        </not>
    </condition>

    <condition property="android.api.level" value="${env.ANDROID_API_LEVEL}" else="24">
        <not>
         <equals arg1="${env.ANDROID_API_LEVEL}" arg2="$${env.ANDROID_API_LEVEL}" casesensitive="true" />
        </not>
    </condition>

    <condition property="target.sourcelevel" value="${env.SOURCE_LEVEL}">
        <not>
         <equals arg1="${env.SOURCE_LEVEL}" arg2="$${env.SOURCE_LEVEL}" casesensitive="true" />
        </not>
    </condition>

    <condition property="target.targetlevel" value="${env.TARGET_LEVEL}">
        <not>
         <equals arg1="${env.TARGET_LEVEL}" arg2="$${env.TARGET_LEVEL}" casesensitive="true" />
        </not>
    </condition>

    <condition property="target.releaselevel" value="${env.RELEASE_LEVEL}">
        <not>
         <equals arg1="${env.RELEASE_LEVEL}" arg2="$${env.RELEASE_LEVEL}" casesensitive="true" />
        </not>
    </condition>

    <condition property="target.rt.jar" value="${env.TARGET_RT_JAR}">
        <not>
         <equals arg1="${env.TARGET_RT_JAR}" arg2="$${env.TARGET_RT_JAR}" casesensitive="true" />
        </not>
    </condition>

    <condition property="target.user.set" value="true">
          <and>
              <isset property="target.sourcelevel"/>
              <isset property="target.targetlevel"/>
              <!-- isset property="target.releaselevel"/ -->
              <isset property="target.rt.jar"/>
          </and>
    </condition>
    <echo message="target.user.set            ${target.user.set}"/>
    <echo message="target.sourcelevel         ${target.sourcelevel}"/>
    <echo message="target.targetlevel         ${target.targetlevel}"/>
    <echo message="target.releaselevel        ${target.releaselevel}"/>
    <echo message="target.rt.jar              ${target.rt.jar}"/>

    <fail message="You need to specify all properties 'target.sourcelevel', 'target.targetlevel' and 'target.rt.jar'.">
      <condition>
        <not>
          <istrue value="${target.user.set}"/> 
        </not>
      </condition>
    </fail>

    <fail message="Unsupported Target Java sourcelevel: ${target.sourcelevel}. Make sure that the sourcelevel is set to 1.8 (8.0).">
        <condition>
            <not>
                <or>
                    <contains string="${target.sourcelevel}" substring="1.8" casesensitive="false" />
                    <contains string="${target.sourcelevel}" substring="8" casesensitive="false" />
                </or>
            </not>
        </condition>
    </fail>
    <fail message="Unsupported Target Java targetlevel: ${target.targetlevel}. Make sure that the targetlevel is set to 1.8 (8.0).">
        <condition>
            <not>
                <or>
                    <contains string="${target.targetlevel}" substring="1.8" casesensitive="false" />
                    <contains string="${target.targetlevel}" substring="8" casesensitive="false" />
                </or>
            </not>
        </condition>
    </fail>
    <!-- fail message="Unsupported Target Java releaselevel: ${target.releaselevel}. Make sure that the releaselevel is set to 8.">
        <condition>
            <not>
                <or>
                    <contains string="${target.releaselevel}" substring="8" casesensitive="false" />
                </or>
            </not>
        </condition>
    </fail -->

    <property name="javacdebug"       value="true" /> 
    <property name="javacdebuglevel"  value="source,lines" /> 
    <!--property name="javacdebuglevel"  value="source,lines,vars" /--> 
    <!-- property name="javac.memorymax"  value="128m" /-->  <!-- I ran out of memory with these .. linux x86_64 6u14 -->
    <property name="javac.memorymax"  value="1024m" /> 

    <echo message="javacdebug                 ${javacdebug}"/>
    <echo message="javacdebuglevel            ${javacdebuglevel}"/>
    <echo message="javac.memorymax            ${javac.memorymax}"/>

    <echo message="build.archiveon            ${build.archiveon}"/>
    <echo message="build.node.name            ${build.node.name}"/>

    <echo message="android.api.level          ${android.api.level}"/>

    <echo message="junit.run.arg0             ${junit.run.arg0}"/>
    <echo message="junit.run.arg1             ${junit.run.arg1}"/>

    <condition property="macosx.sdkroot" value="${env.SDKROOT}">
        <not>
         <equals arg1="${env.SDKROOT}" arg2="$${env.SDKROOT}" casesensitive="true" />
        </not>
    </condition>
    <echo message="macosx.sdkroot             ${macosx.sdkroot}"/>

    <condition property="TARGET_PLATFORM_SYSROOT" value="${env.TARGET_PLATFORM_SYSROOT}">
        <not>
         <equals arg1="${env.TARGET_PLATFORM_SYSROOT}" arg2="$${env.TARGET_PLATFORM_SYSROOT}" casesensitive="true" />
        </not>
    </condition>
    <condition property="TARGET_PLATFORM_USRROOT" value="${env.TARGET_PLATFORM_USRROOT}">
        <not>
         <equals arg1="${env.TARGET_PLATFORM_USRROOT}" arg2="$${env.TARGET_PLATFORM_USRROOT}" casesensitive="true" />
        </not>
    </condition>
    <condition property="TARGET_PLATFORM_USRLIBS" value="${env.TARGET_PLATFORM_USRLIBS}">
        <not>
         <equals arg1="${env.TARGET_PLATFORM_USRLIBS}" arg2="$${env.TARGET_PLATFORM_USRLIBS}" casesensitive="true" />
        </not>
    </condition>
    <condition property="TARGET_JAVA_LIBS" value="${env.TARGET_JAVA_LIBS}">
        <not>
         <equals arg1="${env.TARGET_JAVA_LIBS}" arg2="$${env.TARGET_JAVA_LIBS}" casesensitive="true" />
        </not>
    </condition>
    <echo message='TARGET_PLATFORM_SYSROOT ${TARGET_PLATFORM_SYSROOT}'/>
    <echo message='TARGET_PLATFORM_USRROOT ${TARGET_PLATFORM_USRROOT}'/>
    <echo message='TARGET_PLATFORM_USRLIBS ${TARGET_PLATFORM_USRLIBS}'/>
    <echo message='TARGET_JAVA_LIBS ${TARGET_JAVA_LIBS}'/>
  </target>

</project>