blob: 670338529b259eee2a1255c10bd77597249fe739 [file] [log] [blame]
<?xml version="1.0"?>
<!--
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="bldcommon"
xmlns:ivy="antlib:org.apache.ivy.ant">
<dirname property="common.dir" file="${ant.file.bldcommon}"/>
<property file="${common.dir}/sigil-defaults.properties" prefix="default."/>
<property file="${common.dir}/build.properties"/>
<!-- =====================================================
stuff intended to be over-ridden is prefixed with my.
=====================================================-->
<fileset id="my.projects" dir="${basedir}">
<include name="**/${build_xml}"/>
</fileset>
<path id="my.classpath">
<fileset dir="${basedir}" includes="lib/*.jar"/>
</path>
<path id="javac.classpath">
<path refid="my.classpath"/>
<fileset dir="${deps.dir}" />
</path>
<path id="sigil.classpath">
<path refid="javac.classpath" />
<path location="${classes.dir}" />
</path>
<!-- =================================
target: load-ivy
================================= -->
<target name="load-ivy" depends="ident,ivy-taskdefs">
<ivy:settings file="${common.dir}/ivysettings.xml" />
</target>
<!-- =================================
target: ivy-taskdefs
================================= -->
<target name="ivy-taskdefs" unless="ivy.loaded">
<property name="ivy.loaded" value="true"/>
<echo message="Loading Ivy ... common.dir=${common.dir}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant"
classpath="${ivy.jar}:${sigil-ivy-plugin.jar}"/>
<taskdef name="sigil.bundle"
classname="org.apache.felix.sigil.ant.BundleTask"
classpath="${sigil-ivy-plugin.jar}"/>
<taskdef name="sigil.bundle.info"
classname="org.apache.felix.sigil.ant.BundleInfoTask"
classpath="${sigil-ivy-plugin.jar}"/>
</target>
<!-- =================================
target: build (default target)
================================= -->
<target name="build" depends="publish-local, composites" />
<target name="ident">
<echo message="${ant.project.name}"/>
</target>
<!-- =================================
target: resolve
================================= -->
<target name="resolve" depends="common-init"
description="--> resolve and retrieve dependencies with ivy">
<mkdir dir="${deps.dir}"/>
<ivy:resolve file="${ivy.file}" log="${resolve.log}"/>
<ivy:retrieve pattern="${deps.dir}/[artifact].[ext]"
symlink="true" sync="true"/>
<!-- sync=true removes empty deps dir, so re-create it -->
<mkdir dir="${deps.dir}"/>
</target>
<!-- =================================
target: publish-local
================================= -->
<target name="publish-check" unless="bundle.modified">
<ivy:info file="${ivy.file}"/>
<condition property="bundle.modified">
<not>
<available file="${repository.dir}/local/${ivy.module}" type="dir"/>
</not>
</condition>
</target>
<target name="publish-local" depends="bundle, publish-check" if="bundle.modified"
description="--> publish project in the local repository">
<tstamp>
<format property="now" pattern="yyyyMMddHHmmss"/>
</tstamp>
<property name="local-version" value="${now}"/>
<antcall target="clean-local"/>
<ivy:publish artifactspattern="${build.lib.dir}/[artifact].[ext]"
resolver="local"
pubrevision="${local-version}"
pubdate="${now}"
forcedeliver="true"
status="integration"/>
<echo message="project ${ant.project.name} published locally with version ${local-version}" />
</target>
<!-- =================================
target: report
================================= -->
<target name="report" depends="resolve"
description="--> generates a report of dependencies">
<ivy:report todir="${build.dir}"/>
</target>
<!-- =================================
target: compile
================================= -->
<target name="compile" depends="resolve"
description="--> compile the project">
<!-- uncomment the following to debug classpath -->
<!--pathconvert property="cp" refid="javac.classpath"/>
<echo>Classpath - ${cp}</echo-->
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
classpathref="javac.classpath"
target="1.5"
debug="true" />
</target>
<!-- =================================
target: bundle
================================= -->
<target name="bundle" depends="compile"
description="--> build OSGi bundle(s) for this project">
<mkdir dir="${build.lib.dir}"/>
<sigil.bundle
classpathref="sigil.classpath"
destpattern="${build.lib.dir}/[name].[ext]"
force="${bundle.force}"
property="bundle.modified" />
</target>
<!-- =================================
target: composites
================================= -->
<available file="${composite.dir}" type="dir"
property="composite.dir.present"/>
<target name="composites" if="composite.dir.present"
description="--> filter xml composites replacing ${VERSION} etc.">
<mkdir dir="${build.etc.dir}"/>
<copy todir="${build.etc.dir}">
<fileset dir="${composite.dir}">
<exclude name="*-template.composite"/>
<include name="*.composite"/>
<include name="*.system"/>
</fileset>
<filterset begintoken="@" endtoken="@">
<filter token="VERSION" value="${bundle.version}"/>
<filter token="COMMUNITY_VERSION" value="${community.version}"/>
<filter token="JINI_VERSION" value="${jini.version}"/>
<filter token="PAREMUS_VERSION" value="${paremus.version}"/>
</filterset>
</copy>
</target>
<!-- =================================
target: install
install-bin, install-etc deprecated in favour of single
assemble/bin, assemble/etc dirs
================================= -->
<target name="install"
depends="install-lib, install-composites"/>
<available file="bin" type="dir"
property="bin.dir.present"/>
<available file="etc" type="dir"
property="etc.dir.present"/>
<target name="install-bin" if="bin.dir.present">
<mkdir dir="${install.dir}/bin"/>
<copy todir="${install.dir}/bin">
<fileset dir="bin" />
</copy>
<chmod dir="${install.dir}/bin" perm="755" excludes="*.bat"/>
</target>
<target name="install-etc" if="etc.dir.present">
<mkdir dir="${install.dir}/etc"/>
<copy todir="${install.dir}/etc">
<fileset dir="etc" />
</copy>
</target>
<target name="composites-available">
<available file="${build.etc.dir}" type="dir"
property="build.etc.dir.present"/>
</target>
<target name="install-composites"
depends="composites, composites-available"
if="build.etc.dir.present">
<copy todir="${install.dir}/etc">
<fileset dir="${build.etc.dir}" />
</copy>
</target>
<target name="libs-available">
<available file="${build.lib.dir}" type="dir"
property="build.lib.dir.present"/>
</target>
<target name="install-lib"
depends="publish-local, libs-available"
if="build.lib.dir.present">
<copy todir="${install.dir}/lib">
<fileset dir="${build.lib.dir}" />
<mapper type="glob" from="*.jar" to="*-${buildVersion}.jar"/>
</copy>
</target>
<!-- =================================
target: clean-local
================================= -->
<target name="clean-local" depends="load-ivy"
description="--> cleans the local repository for the current module">
<ivy:info file="${ivy.file}"/>
<delete dir="${repository.dir}/local/${ivy.module}"/>
</target>
<!-- =================================
target: clean-deps
================================= -->
<target name="clean-deps"
description="--> clean the project dependencies directory">
<delete includeemptydirs="true" dir="${deps.dir}"/>
</target>
<!-- =================================
target: clean-build
================================= -->
<target name="clean-build"
description="--> clean the project built files">
<delete includeemptydirs="true" dir="${build.dir}"/>
</target>
<!-- =================================
target: clean
================================= -->
<target name="clean" depends="ident, clean-build, clean-deps"
description="--> clean the project" />
<!-- =================================
target: common-init
================================= -->
<target name="common-init" depends="load-ivy,init">
</target>
<!-- =================================
target: init
================================= -->
<target name="init">
</target>
<!-- =================================
target: buildlist
================================= -->
<target name="buildlist" depends="common-init">
<ivy:buildlist reference="ordered-list"
onMissingDescriptor="skip">
<fileset refid="my.projects"/>
</ivy:buildlist>
</target>
<!-- =================================
target: build-list
================================= -->
<target name="build-list" depends="buildlist"
description="--> build all projects in the right order">
<property name="target" value="build"/>
<subant target="${target}" buildpathref="ordered-list">
<propertyset>
<propertyref name="ivy.loaded" />
</propertyset>
</subant>
</target>
<!-- =================================
target: install-list
================================= -->
<target name="install-list"
description="--> install all projects">
<antcall target="build-list">
<param name="target" value="install"/>
</antcall>
</target>
<!-- =================================
target: ident-list
================================= -->
<target name="ident-list"
description="--> identify projects">
<antcall target="build-list">
<param name="target" value="ident"/>
</antcall>
</target>
<!-- =================================
target: clean-list
================================= -->
<target name="clean-list"
description="--> clean all projects">
<antcall target="build-list">
<param name="target" value="clean"/>
</antcall>
</target>
<!-- =================================
target: clean-all
================================= -->
<target name="clean-all" depends="clean-list, clean"
description="--> clean repository, cache, and all projects">
<delete dir="${repository.dir}"/>
<delete dir="${cache.dir}"/>
<delete dir="${install.dir}"/>
<delete dir="${dist.dir}"/>
</target>
<target name="sigil.test" depends="ivy-taskdefs">
<mkdir dir="${dist.dir}/lib/sigil" />
<copy todir="${dist.dir}/lib/sigil" overwrite="true">
<fileset dir="${common.dir}/test/lib">
<include name="*.jar" />
</fileset>
</copy>
<mkdir dir="${dist.dir}/etc/sigil/boot" />
<copy todir="${dist.dir}/etc/sigil/boot" overwrite="true">
<fileset dir="${common.dir}/test/etc/boot">
<include name="*" />
</fileset>
</copy>
<property name="install.script" value="${dist.dir}/etc/sigil/boot/2-install-tests" />
<delete file="${install.script}" />
<for param="project">
<fileset refid="my.projects" />
<sequential>
<antcall target="sigil.test.setup">
<param name="project" value="@{project}"/>
</antcall>
</sequential>
</for>
<for param="project">
<fileset refid="my.projects" />
<sequential>
<antcall target="sigil.test.install">
<param name="project" value="@{project}"/>
</antcall>
</sequential>
</for>
<delete dir="${dist.dir}/../test-results" />
<exec executable="sh" osfamily="unix">
<arg line="${dist.dir}/bin/container equinox -verbose=true" />
<arg line="-bootScript=etc/sigil/boot" />
</exec>
</target>
<target name="sigil.test.setup">
<property name="dir" location="${project}/../" />
<path id="test.resources">
<fileset dir="${dir}">
<include name="build/lib/*.jar" />
<exclude name="**/*-dl.jar" />
</fileset>
<fileset dir="${dir}">
<include name="build/deps/*.jar" />
<exclude name="**/*!*.jar" />
</fileset>
</path>
<for param="jar">
<path refid="test.resources"/>
<sequential>
<antcall target="sigil.test.load">
<param name="jar" value="@{jar}" />
</antcall>
</sequential>
</for>
</target>
<target name="sigil.test.install">
<property name="dir" location="${project}/../" />
<path id="test.bundles">
<fileset dir="${dir}">
<include name="build/lib/*test.jar" />
</fileset>
</path>
<for param="jar">
<path refid="test.bundles"/>
<sequential>
<antcall target="sigil.test.start">
<param name="jar" value="@{jar}" />
</antcall>
</sequential>
</for>
</target>
<target name="sigil.test.load">
<sigil.bundle.info bundle="${jar}" header="Bundle-SymbolicName" property="test.bundle.symbolic.name"/>
<if>
<isset property="test.bundle.symbolic.name"/>
<then>
<echo file="${install.script}" append="true">cds load boot ${test.bundle.symbolic.name}.jar ${jar}
</echo>
</then>
</if>
</target>
<target name="sigil.test.start">
<sigil.bundle.info bundle="${jar}" header="Bundle-SymbolicName" property="test.bundle.symbolic.name"/>
<if>
<isset property="test.bundle.symbolic.name"/>
<then>
<sigil.bundle.info bundle="${jar}" header="Bundle-Version" property="test.bundle.version" defaultvalue="0"/>
<sigil.bundle.info bundle="${jar}" header="Fragment-Host" property="test.bundle.fragment"/>
<if>
<isset property="test.bundle.fragment" />
<then>
<propertyregex property="test.bundle.fragment.name"
input="${test.bundle.fragment}"
regexp="([^;]*).*"
select="\1"
casesensitive="false" />
<echo file="${install.script}" append="true">nim policy -a osgi.installed.bundle/${test.bundle.fragment.name} osgi.fragment.bundle/${test.bundle.symbolic.name}:${test.bundle.version}
</echo>
<echo file="${install.script}" append="true">nim add ${test.bundle.symbolic.name}:${test.bundle.version}@fragment
</echo>
</then>
<else>
<echo file="${install.script}" append="true">nim add ${test.bundle.symbolic.name}:${test.bundle.version}@installed
</echo>
</else>
</if>
</then>
</if>
</target>
</project>