blob: 915f6b48851beaf36a047a928d46f9274c7c860e [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="init-sigil">
<echo message="Loading Ivy ... common.dir=${common.dir}"/>
<ivy:settings file="${common.dir}/ivysettings.xml" />
</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="boot"
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: boot
================================= -->
<target name="boot" depends="load-ivy">
</target>
<!-- =================================
target: common-init
================================= -->
<target name="common-init" depends="ident,boot,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>
<condition property="ivy.home" value="${env.SIGIL_HOME}">
<isset property="env.SIGIL_HOME" />
</condition>
<property name="sigil.home" value="${common.dir}/../cache/ant" />
<property name="sigil.jar.dir" value="${sigil.home}/lib" />
<property name="ivy.jar.file" value="${sigil.jar.dir}/ivy.jar" />
<property name="sigil.jar.file" value="${sigil.jar.dir}/sigil-ivy-plugin.jar" />
<property name="bnd.jar.file" value="${sigil.jar.dir}/bndlib.jar" />
<property name="equinox.common.jar.file" value="${sigil.jar.dir}/equinox.common.jar" />
<target name="download-deps" unless="offline">
<property name="deps.loaded" value="true"/>
<mkdir dir="${sigil.jar.dir}"/>
<!-- ivy -->
<get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true" verbose="true"/>
<!-- sigil -->
<get src="http://people.apache.org/~dsavage/sigil/sigil-ivy-plugin.jar"
dest="${sigil.jar.file}" usetimestamp="true" verbose="true"/>
<!-- bnd -->
<get src="http://www.aQute.biz/repo/biz/aQute/bndlib/${bnd.install.version}/bndlib-${bnd.install.version}.jar"
dest="${bnd.jar.file}" usetimestamp="true" verbose="true"/>
<!-- equinox.common -->
<get src=" http://download.eclipse.org/releases/${equinox.release}/plugins/org.eclipse.equinox.common_${equinox.install.version}.jar"
dest="${equinox.common.jar.file}" usetimestamp="true" verbose="true"/>
</target>
<target name="check-sigil">
<condition property="sigil.loaded">
<typefound name="sigil.bundle" />
</condition>
</target>
<target name="init-sigil" depends="check-sigil" unless="sigil.loaded">
<antcall target="download-deps" />
<!-- try to load ivy here from ivy home, in case the user has not already dropped
it into ant's lib dir (note that the latter copy will always take precedence).
We will not fail as long as local lib dir exists (it may be empty) and
ivy is in at least one of ant's lib dir or the local lib dir. -->
<path id="sigil.lib.path">
<fileset dir="${sigil.jar.dir}" includes="*.jar"/>
</path>
<echo>Initialising sigil with ${sigil.jar.dir}</echo>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant" classpathref="sigil.lib.path"/>
<taskdef name="sigil.bundle"
classname="org.apache.felix.sigil.ant.BundleTask" classpathref="sigil.lib.path"/>
<taskdef name="sigil.bundle.info"
classname="org.apache.felix.sigil.ant.BundleInfoTask" classpathref="sigil.lib.path"/>
</target>
</project>