blob: 8399e45ce97f105a7e4ebf5ece82f5a6c82a6053 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
dependency
This script get a library from a remote repository and stores it in a local cache.
The following properties are used by this script:
local.cache.dir - the absolute path to the local repository for the libraries
dependency.url : Url to a remote repository that will be used to download the library
dependency.file: Name of the library that is used. If the library is platform dependent
it must have suffixes such as: file.linux.gtk.x86
These suffixes are the same as those used by releng baseos,basews,base arch
baseos= linux or win32
basews= gtk or win32
base arch=x86 or ppc
dependency.name: A short user readable name for the library.
dependency.description: One line description for the library.
dependency.autodownload: [optional] default true. Set this to false if the file cannot be
downloaded automatically (i.e. requies license accept click through).
If autodownload is false, and the library is not avaialbe in the local
repository (cache). User must download the library and copy it into
the local repository.
dependency.releng.url: [optional] A mirror of the original repository. Useful for libraries
that can get deleted from their original URLs. Releng will use
the local cache, original url, releng.url in that order to get the
the dependency. If a releng.url is not provided, the library will
always be requested from itrs original site.
-->
<project
name="dependency"
default="default">
<description>
This script get a library from a remote repository and
stores it
in a local cache.
</description>
<property
name="installWorkingDirectory"
value="${buildDirectory}"/>
<!-- =================================
target: default
================================= -->
<target
name="default"
description="This script get a library from a remote repository and stores it in a local cache.">
<condition property="dependency.download.file">
<or>
<not>
<isset property="dependency.autodownload"/>
</not>
<and>
<isset property="dependency.autodownload"/>
<equals
arg1="${dependency.autodownload}"
arg2="true"/>
</and>
</or>
</condition>
<antcall target="get"/>
<antcall target="checkAutoDownload"/>
</target>
<!-- - - - - - - - - - - - - - - - - -
target: sub tasks
- - - - - - - - - - - - - - - - - -->
<target
name="get"
if="dependency.download.file">
<mkdir dir="${local.cache.dir}"/>
<available
file="${local.cache.dir}/${dependency.file}"
property="local.cache.file.exists"/>
<available
file="${local.cache.dir}/${dependency.repo}"
property="local.cache.repo.exists"/>
<antcall target="download"/>
<antcall target="downloadrepo"/>
</target>
<!--
touch prereq when used (but not fetched), so cleanup scripts that
look for "modified time" will know it is still being used. Modified times are sometimes
used instead of access times in scripts since even ls or find will change access times
-->
<target
name="touchDownload"
if="local.cache.file.exists">
<touch>
<fileset file="${local.cache.dir}/${dependency.file}"/>
</touch>
</target>
<!--
touch prereq when used (but not fetched), so cleanup scripts that
look for "modified time" will know it is still being used. Modified times are sometimes
used instead of access times in scripts since even ls or find will change access times
-->
<target
name="touchRepo"
if="local.cache.repo.exists">
<touch>
<fileset file="${local.cache.dir}/${dependency.repo}"/>
</touch>
</target>
<target
name="checkAutoDownload"
unless="dependency.download.file">
<fail
unless="local.cache.file.exists"
message="The dependent file ${dependency.name}, must be manually downloaded and placed in ${local.cache.dir}."/>
</target>
<target
name="download"
depends="touchDownload"
if="dependency.file"
unless="local.cache.file.exists">
<get
verbose="true"
src="${dependency.url}/${dependency.file}"
dest="${local.cache.dir}/${dependency.file}"
ignoreerrors="true"/>
<condition property="download.from.mirror">
<and>
<isset property="dependency.releng.url"/>
<not>
<available file="${local.cache.dir}/${dependency.file}"/>
</not>
</and>
</condition>
</target>
<target
name="downloadrepo"
depends="touchRepo"
if="dependency.repo"
unless="local.cache.repo.exists">
<get
verbose="true"
src="${dependency.url}/${dependency.repo}"
dest="${local.cache.dir}/${dependency.repo}"
ignoreerrors="true"/>
<condition property="download.from.mirror">
<and>
<isset property="dependency.releng.url"/>
<not>
<available file="${local.cache.dir}/${dependency.repo}"/>
</not>
</and>
</condition>
</target>
<target
name="downloadMirror"
if="download.from.mirror">
<echo message="Using mirror repository: ${main.url.file.exists}"/>
<echo message="Using mirror repository: ${dependency.releng.url}"/>
<get
verbose="true"
src="${dependency.releng.url}/${dependency.file}"
dest="${local.cache.dir}/${dependency.file}"/>
</target>
<!-- =================================
target: install
================================= -->
<target name="install">
<condition
property="file.type"
value="zip">
<isfileselected file="${dependency.file}">
<selector>
<filename name="**/*.zip"/>
</selector>
</isfileselected>
</condition>
<condition
property="file.type"
value="tgz">
<isfileselected file="${dependency.file}">
<selector>
<filename name="**/*.tar.gz"/>
</selector>
</isfileselected>
</condition>
<condition
property="file.type"
value="tgz">
<isfileselected file="${dependency.file}">
<selector>
<filename name="**/*.tgz"/>
</selector>
</isfileselected>
</condition>
<condition
property="file.type"
value="tar">
<isfileselected file="${dependency.file}">
<selector>
<filename name="**/*.tar"/>
</selector>
</isfileselected>
</condition>
<condition
property="file.type"
value="map">
<isfileselected file="${dependency.file}">
<selector>
<filename name="**/*.map"/>
</selector>
</isfileselected>
</condition>
<condition
property="file.type"
value="jar">
<isfileselected file="${dependency.file}">
<selector>
<filename name="**/*.jar"/>
</selector>
</isfileselected>
</condition>
<antcall target="install-${file.type}"/>
</target>
<target name="install-tar">
<untar
dest="${install.destination}"
src="${local.cache.dir}/${dependency.file}"
overwrite="true"/>
</target>
<target name="install-tgz">
<untar
dest="${install.destination}"
src="${local.cache.dir}/${dependency.file}"
compression="gzip"
overwrite="true"/>
</target>
<target name="install-zip">
<!--
We use the exec method for unzip, so we won't fail if a
prereq can not be unzipped for some reason. See
https://bugs.eclipse.org/bugs/show_bug.cgi?id=283968
-->
<mkdir dir="${install.destination}"/>
<exec
dir="."
executable="unzip">
<arg line="-o -qq ${local.cache.dir}/${dependency.file} -d ${install.destination}"/>
</exec>
<!--
<unzip
dest="${install.destination}"
src="${local.cache.dir}/${dependency.file}"
overwrite="true" />
-->
</target>
<target name="install-map">
<copy
todir="${install.destination}"
file="${local.cache.dir}/${dependency.file}"
overwrite="true"/>
</target>
<target name="install-jar">
<copy
todir="${install.destination}"
file="${local.cache.dir}/${dependency.file}"
overwrite="true"/>
</target>
<target name="checkDependency">
<dirname
file="${ant.file}"
property="dependency.dir"/>
<copy
tofile="${installWorkingDirectory}/dependency.${groupId}.xml"
overwrite="true">
<fileset dir="${dependency.dir}">
<include name="template.xml"/>
</fileset>
</copy>
<echo message="Creating dependency script: ${installWorkingDirectory}/dependency.${groupId}.xml "/>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${groupId}.">
<replacetoken>@dependencyGroupId@</replacetoken>
</replace>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${dependency.dir}">
<replacetoken>@dependencyDir@</replacetoken>
</replace>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${dependency.properties}">
<replacetoken>@dependencyProperties@</replacetoken>
</replace>
<ant
antfile="${installWorkingDirectory}/dependency.${groupId}.xml"
target="get"/>
</target>
<target name="installDependency">
<echo message="grouopId: ${groupId}"/>
<echo message="install.destination: ${install.destination}"/>
<dirname
file="${ant.file}"
property="dependency.dir"/>
<copy tofile="${installWorkingDirectory}/dependency.${groupId}.xml">
<fileset dir="${dependency.dir}">
<include name="template.xml"/>
</fileset>
</copy>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${groupId}.">
<replacetoken>@dependencyGroupId@</replacetoken>
</replace>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${dependency.dir}">
<replacetoken>@dependencyDir@</replacetoken>
</replace>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${dependency.properties}">
<replacetoken>@dependencyProperties@</replacetoken>
</replace>
<ant
antfile="${installWorkingDirectory}/dependency.${groupId}.xml"
target="install">
<property
name="install.destination"
value="${install.destination}"/>
</ant>
<!--
<delete failonerror="false">
<fileset dir=".">
<include name="${installWorkingDirectory}/dependency.${groupId}.xml" />
</fileset>
</delete>
-->
</target>
<target name="installRepo">
<dirname
file="${ant.file}"
property="dependency.dir"/>
<copy tofile="${installWorkingDirectory}/dependency.${groupId}.xml">
<fileset dir="${dependency.dir}">
<include name="template.xml"/>
</fileset>
</copy>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${groupId}.">
<replacetoken>@dependencyGroupId@</replacetoken>
</replace>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${dependency.dir}">
<replacetoken>@dependencyDir@</replacetoken>
</replace>
<replace
file="${installWorkingDirectory}/dependency.${groupId}.xml"
value="${dependency.properties}">
<replacetoken>@dependencyProperties@</replacetoken>
</replace>
<ant
antfile="${installWorkingDirectory}/dependency.${groupId}.xml"
target="installRepo">
<property
name="install.destination"
value="${install.destination}"/>
</ant>
</target>
</project>