blob: d94d40bc577347df41677e3d184a008a35f7e859 [file] [log] [blame]
<!--
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="edgent.platform.java7" default="all"
xmlns:jacoco="antlib:org.jacoco.ant"
>
<description>
Create Java 7 versions of selected jars in java8
by running retrolambda against them.
</description>
<property environment="env"/>
<property name="edgent" location="../.."/>
<property name="edgent8.target" location="${edgent}/target/java8"/>
<property name="edgent7.target" location="${edgent}/target/java7"/>
<property name="input.dir" location="classes.in"/>
<property name="output.dir" location="classes.out"/>
<property name="ext.dir" location="${edgent}/ext"/>
<property name="slf4j.version" value="1.7.12"/>
<property name="gson.version" value="2.2.4"/>
<property name="metrics.version" value="3.1.2"/>
<property name="retrolambda.version" value="2.1.0"/>
<property name="slf4j.ext.dir" value="slf4j-${slf4j.version}/"/>
<property name="gson.ext.dir" value="google-gson-${gson.version}/"/>
<property name="metrics.ext.dir" value="metrics-${metrics.version}/"/>
<property name="retrolambda.jar" location="ext/retrolambda-${retrolambda.version}.jar"/>
<property name="android.sdk.platform.jar" value=""/>
<!--
<condition property="android.sdk.platform.jar" value="env.ANDROID_SDK_PLATFORM_JAR">
<isset property="env.ANDROID_SDK_PLATFORM_JAR" />
</condition>
-->
<path id="edgent.classpath">
<pathelement location="${ext.dir}/${slf4j.ext.dir}slf4j-api-${slf4j.version}.jar"/>
<pathelement location="${ext.dir}/${gson.ext.dir}gson-${gson.version}.jar"/>
<pathelement location="${ext.dir}/${metrics.ext.dir}metrics-core-${metrics.version}.jar"/>
</path>
<property name="qcp" refid="edgent.classpath"/>
<target name="init">
<mkdir dir="${edgent7.target}"/>
</target>
<macrodef name="retro7">
<attribute name="qjar"/>
<attribute name="qdir" default="lib" />
<sequential>
<delete dir="${input.dir}"/>
<delete dir="${output.dir}"/>
<mkdir dir="${input.dir}"/>
<mkdir dir="${output.dir}"/>
<unzip dest="${input.dir}" src="${edgent8.target}/@{qdir}/@{qjar}"/>
<exec executable="java" failonerror="true">
<arg value="-Dretrolambda.inputDir=${input.dir}"/>
<arg value="-Dretrolambda.classpath=${edgent8.target}/@{qdir}/@{qjar}:${qcp}"/>
<arg value="-Dretrolambda.outputDir=${output.dir}"/>
<arg value="-Dretrolambda.defaultMethods=false"/>
<arg value="-jar"/>
<arg value="${retrolambda.jar}"/>
</exec>
<mkdir dir="${edgent7.target}/@{qdir}"/>
<jar destfile="${edgent7.target}/@{qdir}/@{qjar}"
filesonly="true"
manifest="${input.dir}/META-INF/MANIFEST.MF"
>
<fileset dir="${output.dir}"/>
</jar>
<delete dir="${input.dir}"/>
<delete dir="${output.dir}"/>
</sequential>
</macrodef>
<target name="all" depends="clean"
description="Compile Edgent and produce Java 7 jars using retrolambda. Must be run with a Java 8 virtual machine."
>
<ant dir="${edgent}" inheritAll="false">
<target name="clean"/>
<target name="all"/>
</ant>
<antcall target="retro7"/>
</target>
<target name="retro7" >
<antcall target="retro7.edgent"/>
<antcall target="retro7.edgent.android"/>
</target>
<!--
This contains the set of jars that are converted
to work on Java 7.
Matching tests must also be added to test7.setup
and test7.run
-->
<target name="retro7.edgent" >
<retro7 qjar="edgent.api.function.jar" />
<retro7 qjar="edgent.api.execution.jar" />
<retro7 qjar="edgent.api.graph.jar" />
<retro7 qjar="edgent.api.window.jar" />
<retro7 qjar="edgent.api.oplet.jar" />
<retro7 qjar="edgent.api.topology.jar" />
<retro7 qjar="edgent.spi.graph.jar" />
<retro7 qjar="edgent.spi.topology.jar" />
<retro7 qjar="edgent.runtime.etiao.jar" />
<retro7 qjar="edgent.runtime.appservice.jar" />
<retro7 qjar="edgent.runtime.jmxcontrol.jar" />
<retro7 qjar="edgent.runtime.jsoncontrol.jar" />
<retro7 qjar="edgent.runtime.jobregistry.jar" />
<retro7 qjar="edgent.utils.metrics.jar" qdir="utils/metrics/lib" />
<!-- utils/streamscope - why not java7? -->
<retro7 qjar="edgent.providers.direct.jar" />
<!-- providers/development - why not java7? -->
<retro7 qjar="edgent.connectors.common.jar" qdir="connectors/common/lib" />
<retro7 qjar="edgent.connectors.iot.jar" qdir="connectors/iot/lib" />
<retro7 qjar="edgent.connectors.iotp.jar" qdir="connectors/iotp/lib" />
<retro7 qjar="edgent.connectors.http.jar" qdir="connectors/http/lib" />
<retro7 qjar="edgent.connectors.pubsub.jar" qdir="connectors/pubsub/lib" />
<!-- connectors/command - why not java7? -->
<!-- connectors/csv - why not java7? -->
<!-- connectors/file - why not java7? -->
<!-- connectors/jdbc - why not java7? -->
<!-- connectors/mqtt - why not java7? -->
<!-- connectors/kafka - why not java7? -->
<!-- connectors/wsclient - why not java7? -->
<!-- connectors/javax.websocket-client - why not java7? -->
<retro7 qjar="edgent.apps.iot.jar" qdir="apps/iot/lib" />
<retro7 qjar="edgent.apps.runtime.jar" qdir="apps/runtime/lib" />
<!-- analytics/math3 - why not java7? -->
<retro7 qjar="edgent.providers.iot.jar" />
<retro7 qjar="edgent.analytics.sensors.jar" qdir="analytics/sensors/lib" />
<retro7 qjar="edgent.samples.apps.jar" qdir="samples/lib" />
<retro7 qjar="edgent.samples.connectors.jar" qdir="samples/lib" />
<retro7 qjar="edgent.samples.console.jar" qdir="samples/lib" />
<retro7 qjar="edgent.samples.scenarios.jar" qdir="samples/lib" />
<retro7 qjar="edgent.samples.topology.jar" qdir="samples/lib" />
<retro7 qjar="edgent.samples.utils.jar" qdir="samples/lib" />
<mkdir dir="${edgent7.target}/ext"/>
<copy todir="${edgent7.target}/ext">
<fileset dir="${edgent8.target}/ext"/>
</copy>
<mkdir dir="${edgent7.target}/connectors/iotp/ext"/>
<copy todir="${edgent7.target}/connectors/iotp/ext">
<fileset dir="${edgent8.target}/connectors/iotp/ext"/>
</copy>
<mkdir dir="${edgent7.target}/connectors/http/ext"/>
<copy todir="${edgent7.target}/connectors/http/ext">
<fileset dir="${edgent8.target}/connectors/http/ext"/>
</copy>
<!-- why mqtt/ext when connectors/mqtt not included above? -->
<mkdir dir="${edgent7.target}/connectors/mqtt/ext"/>
<copy todir="${edgent7.target}/connectors/mqtt/ext">
<fileset dir="${edgent8.target}/connectors/mqtt/ext"/>
</copy>
<!-- why math3/ext when analytics/math3 not included above? -->
<mkdir dir="${edgent7.target}/analytics/math3/ext"/>
<copy todir="${edgent7.target}/analytics/math3/ext">
<fileset dir="${edgent8.target}/analytics/math3/ext"/>
</copy>
</target>
<target name="retro7.edgent.android" if="android.sdk.platform.jar">
<retro7 qjar="edgent.android.topology.jar" qdir="android/topology/lib" />
<retro7 qjar="edgent.android.hardware.jar" qdir="android/hardware/lib" />
</target>
<path id="tc.classpath">
<dirset dir="${edgent}">
<include name="**/test.classes"/>
</dirset>
</path>
<property name="tccp" refid="tc.classpath"/>
<macrodef name="retro7.test.setup">
<attribute name="tdir"/>
<attribute name="ldir" default="lib"/>
<sequential>
<echo message="Testing Setup: @{tdir}"/>
<delete dir="${edgent}/@{tdir}/test7.classes"/>
<mkdir dir="${edgent}/@{tdir}/test7.classes"/>
<!-- <echo message="#### qcp7 ${qcp7}"/> -->
<!-- <echo message="#### qcp ${qcp}"/> -->
<!-- <echo message="#### tccp ${tccp}"/> -->
<exec executable="java" failonerror="true">
<arg value="-Dretrolambda.inputDir=${edgent}/@{tdir}/test.classes"/>
<arg value="-Dretrolambda.classpath=${qcp7}:${qcp}:${tccp}"/>
<arg value="-Dretrolambda.outputDir=${edgent}/@{tdir}/test7.classes"/>
<arg value="-Dretrolambda.defaultMethods=true"/>
<arg value="-jar"/>
<arg value="${retrolambda.jar}"/>
</exec>
<delete dir="${edgent}/@{tdir}/test.classes"/>
<move file="${edgent}/@{tdir}/test7.classes"
tofile="${edgent}/@{tdir}/test.classes"/>
</sequential>
</macrodef>
<macrodef name="retro7.test.run">
<attribute name="tdir"/>
<attribute name="ldir" default="lib"/>
<sequential>
<echo message="Testing: @{tdir}"/>
<ant dir="${edgent}/@{tdir}" target="test.run" inheritAll="false">
<property name="lib" location="${edgent7.target}/@{ldir}"/>
<property name="edgent.lib" location="${edgent7.target}/lib"/>
<property name="edgent.utils" location="${edgent7.target}/utils"/>
<property name="edgent.connectors" location="${edgent7.target}/connectors"/>
</ant>
</sequential>
</macrodef>
<target name="verify.java7.built">
<fail message="Java 7 jars not built!">
<condition>
<not>
<available file="${edgent7.target}/lib" type="dir"/>
</not>
</condition>
</fail>
</target>
<!--
This is the set of tests that are converted
to be used with Java 7
-->
<!-- Ensure previous separate build steps built the Java 7 jars -->
<target name="test7.setup" depends="verify.java7.built"
description="Setup Edgent tests for the Java 7.Must be run with Java 8 to run retrolambda."
>
<path id="edgent.java7.classpath">
<fileset dir="${edgent7.target}/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${edgent7.target}/connectors">
<include name="*/lib/*.jar"/>
</fileset>
<fileset dir="${edgent7.target}/utils">
<include name="*/lib/*.jar"/>
</fileset>
<fileset dir="${edgent7.target}/analytics">
<include name="*/lib/*.jar"/>
</fileset>
</path>
<property name="qcp7" refid="edgent.java7.classpath"/>
<retro7.test.setup tdir="api/function"/>
<retro7.test.setup tdir="api/execution"/>
<retro7.test.setup tdir="api/graph" />
<retro7.test.setup tdir="api/window" />
<retro7.test.setup tdir="api/oplet" />
<retro7.test.setup tdir="api/topology" />
<retro7.test.setup tdir="spi/graph" />
<retro7.test.setup tdir="spi/topology" />
<retro7.test.setup tdir="runtime/appservice" />
<retro7.test.setup tdir="runtime/etiao" />
<retro7.test.setup tdir="runtime/jmxcontrol" />
<retro7.test.setup tdir="runtime/jsoncontrol" />
<retro7.test.setup tdir="runtime/jobregistry" />
<retro7.test.setup tdir="utils/metrics" ldir="utils/metrics/lib"/>
<retro7.test.setup tdir="providers/direct" />
<retro7.test.setup tdir="connectors/common" ldir="connectors/common/lib"/>
<retro7.test.setup tdir="connectors/iot" ldir="connectors/iot/lib"/>
<retro7.test.setup tdir="connectors/iotp" ldir="connectors/iotp/lib"/>
<retro7.test.setup tdir="connectors/http" ldir="connectors/http/lib"/>
<retro7.test.setup tdir="connectors/pubsub" ldir="connectors/pubsub/lib"/>
<retro7.test.setup tdir="apps/iot" ldir="apps/iot/lib"/>
<retro7.test.setup tdir="apps/runtime" ldir="apps/runtime/lib"/>
<retro7.test.setup tdir="analytics/sensors" ldir="analytics/sensors/lib"/>
</target>
<!--
This is the set of tests that are converted
to be used with Java 7
-->
<!-- this must be preceeded by test7.setup (run with a Java 8 vm) -->
<target name="test7.run" depends="verify.java7.built"
description="Run Edgent tests for the Java 7. Should be run with JAVA_HOME pointing to a Java 7 virtual machine, though can also be run with Java 8"
>
<retro7.test.run tdir="api/function"/>
<retro7.test.run tdir="api/execution"/>
<retro7.test.run tdir="api/graph" />
<retro7.test.run tdir="api/window" />
<retro7.test.run tdir="api/oplet" />
<retro7.test.run tdir="api/topology" />
<retro7.test.run tdir="spi/graph" />
<retro7.test.run tdir="spi/topology" />
<retro7.test.run tdir="runtime/appservice" />
<retro7.test.run tdir="runtime/etiao" />
<retro7.test.run tdir="runtime/jmxcontrol" />
<retro7.test.run tdir="runtime/jsoncontrol" />
<retro7.test.run tdir="runtime/jobregistry" />
<retro7.test.run tdir="utils/metrics" ldir="utils/metrics/lib"/>
<retro7.test.run tdir="providers/direct" />
<retro7.test.run tdir="connectors/common" ldir="connectors/common/lib"/>
<retro7.test.run tdir="connectors/iot" ldir="connectors/iot/lib"/>
<retro7.test.run tdir="connectors/iotp" ldir="connectors/iotp/lib"/>
<retro7.test.run tdir="connectors/http" ldir="connectors/http/lib"/>
<retro7.test.run tdir="connectors/pubsub" ldir="connectors/pubsub/lib"/>
<retro7.test.run tdir="apps/iot" ldir="apps/iot/lib"/>
<retro7.test.run tdir="apps/runtime" ldir="apps/runtime/lib"/>
<retro7.test.run tdir="analytics/sensors" ldir="analytics/sensors/lib"/>
</target>
<target name="clean">
<delete dir="${input.dir}"/>
<delete dir="${output.dir}"/>
<delete dir="${edgent7.target}"/>
</target>
</project>