You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jitsi/resources/install/build.xml

1008 lines
43 KiB

<?xml version="1.0"?>
<!--
Installation procedure.
The install scripts are located inside the resources/install directory . The
files are separated in subdirectories according to distribution - generic,
linux, windows, macosx.
1. For building any of the distributions you must fill in the
path to the installation of IzPack. For instructions on how to install
izPack please referer to http://www.izforge.com/izpack/. And uncomment the
taskdef of izpack in this file.
2. When building the linux installation package you must set the
linux.jre.path variable to point to a location containing an extracted jre
so that it could be bundled inside the installation package.
3. When building the windows installation package you must set the
windows.jre.file variable. This is the path to an installation file of a
jre (online or offline one). The 7zip software package
(http://www.7-zip.org) must also be installed.
4. When changing the application version things you must do:
- generic
- there is app-version variable in the izpack installer xml
- linux
- there is app-version variable in the izpack installer xml
- windows
- there is app-version variable in the izpack installer xml
- you must change the installer jar name in the launcher.ini file
-->
<project name="sip-communicator-installer" basedir="." default="ant-usage">
<import file="../../build.xml"/>
<property file="${inst.resrc}/ant-build-config.properties"/>
<!-- Load installer properties -->
<!-- USERS NEED TO UPDATE THIS FILE -->
<property file="${inst.resrc}/installers.properties"/>
<!-- define the izpack task in a separate target so that we don't get an
error when izpack properties are not set-->
<target name="define-izpack-task">
<taskdef name="izpack" classpath="${izpack.dir}/lib/compiler.jar"
classname="com.izforge.izpack.ant.IzPackTask"/>
</target>
<!-- if application.home.dirname is set we are going to change application
home directory so we will generate new exe file, so we must define
jmsooth task
-->
<target name="define-jsmooth-task" if="application.home.dirname">
<taskdef name="jsmoothgen"
classname="net.charabia.jsmoothgen.ant.JSmoothGen"
classpath="${inst.resrc}/windows/jsmoothgen-ant.jar"/>
</target>
<target name="windows-generate-exe" depends="define-jsmooth-task">
<copy file="${inst.resrc}/windows/run.exe.jsmooth"
tofile="${inst.resrc}/windows/tmp.run.exe.jsmooth"/>
<replace file="${inst.resrc}/windows/tmp.run.exe.jsmooth">
<replacetoken><![CDATA[<name>felix.config.properties</name>]]></replacetoken>
<replacevalue><![CDATA[<name>net.java.sip.communicator.SC_HOME_DIR_NAME</name>
<value>_APP_NAME_</value>
</javaProperties>
<javaProperties>
<name>felix.config.properties</name>]]></replacevalue>
</replace>
<replace file="${inst.resrc}/windows/tmp.run.exe.jsmooth"
token="_APP_NAME_" value="${application.name}"/>
<jsmoothgen project="${inst.resrc}/windows/run.exe.jsmooth"
skeletonroot="${inst.resrc}/windows/skeletons"/>
<delete file="${inst.resrc}/windows/tmp.run.exe.jsmooth"/>
</target>
<target name="-prepare-debian-sh"
depends="-prepare-debian-sh-copy,-prepare-debian-sh-homedir"/>
<target name="-prepare-debian-sh-copy">
<!-- Put correct version in the sip-communicator executable file -->
<copy file="${inst.resrc}/debian/sip-communicator.sh.tmpl"
tofile="${inst.resrc}/debian/sip-communicator.sh"
overwrite="true"/>
<replace file="${inst.resrc}/debian/sip-communicator.sh"
token="_SC_VERSION_"
value="${sip-communicator.version}"/>
</target>
<target name="-prepare-debian-sh-homedir" if="application.home.dirname">
<replace file="${inst.resrc}/debian/sip-communicator.sh"
token="net.java.sip.communicator.launcher.SIPCommunicator"
value="-Dnet.java.sip.communicator.SC_HOME_DIR_NAME=${application.home.dirname} net.java.sip.communicator.launcher.SIPCommunicator"/>
</target>
<!-- Put here the Windows release directory -->
<property name="windows.app.dir" value="${sc.basedir}/${release}/windows"/>
<!-- Put here the Linux release directory -->
<property name="linux.app.dir" value="${sc.basedir}/${release}/linux"/>
<!-- Put here the Generic release directory -->
<property name="generic.app.dir" value="${sc.basedir}/${release}/generic"/>
<!-- The path to the dpkg-scanpackages tool -->
<property name="dpkg-scanpackages" value="/usr/bin/dpkg-scanpackages"/>
<!-- The path to the dpkg-buildpackage tool -->
<property name="dpkg-buildpackage" value="/usr/bin/dpkg-buildpackage"/>
<!-- The path to the dh_testdir tool -->
<property name="dh_testdir" value="/usr/bin/dh_testdir"/>
<!-- change the 7zip executable corresponding the OS
7-zip is used to create windows self-extract installer binary
In order to work 7-zip must be installed and tobe in the path
For Debian linux use : apt-get install p7zip
For other go to : http://www.7-zip.org/
-->
<condition property="7zip.executable" value="7z">
<os family="windows"/>
</condition>
<condition property="7zip.executable" value="7z">
<equals arg1="${os.name}" arg2="linux"
casesensitive="false" trim="true"/>
</condition>
<!-- Put here the release directory -->
<property name="macosx.app.dir" value="${release}/macosx"/>
<!-- Put here the resource directory -->
<property name="macosx.resrc.dir" value="${inst.resrc}/macosx"/>
<!-- The release directory for Debian packages -->
<property name="debian.dir" value="${release}/debian"/>
<property name="debian.binary.dir" value="${debian.dir}/binary"/>
<!-- Can we build debian packages? -->
<condition property="dpkg.build.present">
<and>
<available file="${dpkg-buildpackage}"/>
<available file="${dh_testdir}"/>
</and>
</condition>
<!-- Can we deploy debian packages? -->
<condition property="dpkg.scan.present">
<available file="${dpkg-scanpackages}"/>
</condition>
<!-- default Ant target does nothing except print helpful options -->
<target name="ant-usage"
description="simply execute 'ant' to discover the most useful targets.">
<echo message="Useful ant commands for the SIP Communicator Build Installer..." />
<echo message="'ant build-installation-generic' for building generic installator jar" />
<echo message="'ant build-installation-linux' for building linux instalation file" />
<echo message="'ant build-installation-windows' for building windows instalation file" />
<echo message="'ant build-installation-wix' for building Windows MSI instalation file using WiX and mt.exe" />
</target>
<target name="clean-install-generic">
<delete dir="${generic.app.dir}"/>
<mkdir dir="${generic.app.dir}"/>
</target>
<target name="build-installation-generic"
depends="clean-install-generic,define-izpack-task,version">
<propertyfile file="${generic.app.dir}/versionupdate.properties"
comment="Last Build Version">
<entry key="last_version" value="${sip-communicator.version}"/>
<entry key="download_link"
value="http://download.sip-communicator.org/nightly/generic/${package.name}-${sip-communicator.version}.jar"/>
</propertyfile>
<filter token="VERSION" value="${sip-communicator.version}" />
<filter token="BUILDDATE" value="${build.date}" />
<filter token="PKG_NAME" value="${package.name}" />
<filter token="APP_NAME" value="${application.name}" />
<filter token="APP_EMAIL" value="${application.email}" />
<filter token="APP_WEB" value="${application.web}" />
<filter token="DEST_DIR" value="${release}" />
<filter token="WelcomeText1" value="${installer.welcome.wtext1}" />
<filter token="WelcomeText2" value="${installer.welcome.wtext2}" />
<filter token="WelcomeText3" value="${installer.welcome.wtext3}" />
<copy
tofile="${generic.app.dir}/tmp-installer-generic.xml"
file="${inst.resrc}/generic/installer-generic.xml"
filtering="yes"
/>
<copy
tofile="${generic.app.dir}/tmp-windows_shortcut_specification.xml"
file="${inst.resrc}/windows/windows_shortcut_specification.xml"
filtering="yes"
/>
<copy
tofile="${generic.app.dir}/tmp-linux_shortcut_specification.xml"
file="${inst.resrc}/linux/linux_shortcut_specification.xml"
filtering="yes"
/>
<izpack
input="${generic.app.dir}/tmp-installer-generic.xml"
output="${generic.app.dir}/${package.name}-${sip-communicator.version}.jar"
installerType="standard"
izPackDir="${izpack.dir}/"
basedir="${sc.basedir}"/>
<delete quiet="yes" failonerror="false">
<fileset dir="${generic.app.dir}">
<include name="tmp-*"/>
</fileset>
</delete>
</target>
<target name="clean-install-linux">
<delete dir="${linux.app.dir}"/>
<mkdir dir="${linux.app.dir}"/>
<mkdir dir="${linux.app.dir}/tmp"/>
</target>
<target name="build-installation-linux"
depends="clean-install-linux,define-izpack-task,version">
<propertyfile file="${linux.app.dir}/versionupdate.properties"
comment="Last Build Version">
<entry key="last_version" value="${sip-communicator.version}"/>
<entry key="download_link"
value="http://download.sip-communicator.org/nightly/linux/${package.name}-${sip-communicator.version}-linux.bin"/>
</propertyfile>
<filter token="VERSION" value="${sip-communicator.version}" />
<filter token="BUILDDATE" value="${build.date}" />
<filter token="PKG_NAME" value="${package.name}" />
<filter token="APP_NAME" value="${application.name}" />
<filter token="APP_EMAIL" value="${application.email}" />
<filter token="APP_WEB" value="${application.web}" />
<filter token="DEST_DIR" value="${release}" />
<filter token="WelcomeText1" value="${installer.welcome.wtext1}" />
<filter token="WelcomeText2" value="${installer.welcome.wtext2}" />
<filter token="WelcomeText3" value="${installer.welcome.wtext3}" />
<copy todir="${linux.app.dir}/tmp" filtering="yes" >
<fileset dir="${inst.resrc}/linux">
<include name="setup.sh"/>
<include name="inst_path"/>
</fileset>
</copy>
<!-- copy the jre -->
<copy todir="${linux.app.dir}/tmp/jre">
<fileset dir="${linux.jre.path}">
<include name="**/*"/>
</fileset>
</copy>
<copy
tofile="${linux.app.dir}/tmp/tmp-installer-linux.xml"
file="${inst.resrc}/linux/installer-linux.xml"
filtering="yes"
/>
<copy
tofile="${linux.app.dir}/tmp-linux_shortcut_specification.xml"
file="${inst.resrc}/linux/linux_shortcut_specification.xml"
filtering="yes"
/>
<!-- create izpack installer jar file -->
<izpack input="${linux.app.dir}/tmp/tmp-installer-linux.xml"
output="${linux.app.dir}/tmp/${package.name}-${sip-communicator.version}-linux.jar"
installerType="standard"
basedir="${sc.basedir}"
izPackDir="${izpack.dir}/"/>
<!-- Create self extract linux binary-->
<tar tarfile="${linux.app.dir}/tmp/install.tar"
basedir="${linux.app.dir}/tmp"/>
<gzip zipfile="${linux.app.dir}/tmp/install.tar.gz"
src="${linux.app.dir}/tmp/install.tar"/>
<concat destfile="${linux.app.dir}/${package.name}-${sip-communicator.version}-linux.bin"
binary="true">
<fileset dir="${inst.resrc}/linux/">
<include name="sfx-header"/>
</fileset>
<fileset dir="${linux.app.dir}/tmp">
<include name="install.tar.gz"/>
</fileset>
</concat>
<chmod file="${linux.app.dir}/${package.name}-${sip-communicator.version}-linux.bin" perm="+x"/>
<!-- Delete the temp directory-->
<delete dir="${linux.app.dir}/tmp"/>
<delete quiet="yes" failonerror="false">
<fileset dir="${linux.app.dir}">
<include name="tmp-*"/>
</fileset>
</delete>
</target>
<target name="clean-install-windows">
<delete dir="${windows.app.dir}"/>
<mkdir dir="${windows.app.dir}"/>
<mkdir dir="${windows.app.dir}/tmp"/>
<mkdir dir="${windows.app.dir}/tmp/jre"/>
</target>
<target name="build-installation-windows"
depends="clean-install-windows,define-izpack-task,version">
<propertyfile file="${windows.app.dir}/versionupdate.properties"
comment="Last Build Version">
<entry key="last_version" value="${sip-communicator.version}"/>
<entry key="download_link"
value="http://download.sip-communicator.org/nightly/windows/${package.name}-${sip-communicator.version}.exe"/>
</propertyfile>
<filter token="VERSION" value="${sip-communicator.version}" />
<filter token="BUILDDATE" value="${build.date}" />
<filter token="PKG_NAME" value="${package.name}" />
<filter token="APP_NAME" value="${application.name}" />
<filter token="APP_EMAIL" value="${application.email}" />
<filter token="APP_WEB" value="${application.web}" />
<filter token="DEST_DIR" value="${release}" />
<filter token="WelcomeText1" value="${installer.welcome.wtext1}" />
<filter token="WelcomeText2" value="${installer.welcome.wtext2}" />
<filter token="WelcomeText3" value="${installer.welcome.wtext3}" />
<copy
tofile="${windows.app.dir}/tmp-windows_shortcut_specification.xml"
file="${inst.resrc}/windows/windows_shortcut_specification.xml"
filtering="yes"
/>
<!-- Copy with replacing some parameters in text files -->
<copy todir="${windows.app.dir}/tmp" filtering="yes">
<fileset dir="${inst.resrc}/windows">
<include name="launcher.ini"/>
</fileset>
</copy>
<!-- Copy other needed files to tmp folder -->
<copy todir="${windows.app.dir}/tmp">
<fileset dir="${inst.resrc}/windows">
<include name="setup-sip-communicator.exe"/>
</fileset>
</copy>
<!-- copy the windows jre file -->
<copy file="${windows.jre.file}"
tofile="${windows.app.dir}/tmp/jre/jre-windows.exe"/>
<copy
tofile="${windows.app.dir}/tmp/tmp-installer-windows.xml"
file="${inst.resrc}/windows/installer-windows.xml"
filtering="yes"
/>
<izpack
input="${windows.app.dir}/tmp/tmp-installer-windows.xml"
output="${windows.app.dir}/tmp/sip-communicator-windows.jar"
installerType="standard"
basedir="${sc.basedir}"
izPackDir="${izpack.dir}/"/>
<zip destfile="${windows.app.dir}/${package.name}-${sip-communicator.version}-windows.zip"
basedir="${windows.app.dir}/tmp"/>
<exec dir="${windows.app.dir}/tmp" executable="${7zip.executable}" failifexecutionfails="false">
<arg line="a -y data.7z *"/>
</exec>
<copy
tofile="${windows.app.dir}/tmp/7zip.conf"
file="${inst.resrc}/windows/7zip.conf"
filtering="yes"
/>
<concat destfile="${windows.app.dir}/${package.name}-${sip-communicator.version}.exe"
binary="true">
<fileset dir="${inst.resrc}/windows">
<include name="7zS.sfx"/>
</fileset>
<fileset dir="${windows.app.dir}/tmp">
<include name="7zip.conf"/>
</fileset>
<fileset dir="${windows.app.dir}/tmp">
<include name="data.7z"/>
</fileset>
</concat>
<!-- Delete the temp directory-->
<delete dir="${windows.app.dir}/tmp"/>
<delete quiet="yes" failonerror="false">
<fileset dir="${windows.app.dir}">
<include name="tmp-*"/>
</fileset>
</delete>
</target>
<target name="build-installation-wix"
depends="clean-install-windows,version,windows-generate-exe">
<!--
This versionupdate.properties file isn't of interest to the MSI but
is necessary for the site.
-->
<propertyfile file="${windows.app.dir}/versionupdate.properties">
<entry key="last_version" value="${sip-communicator.version}" />
<entry key="download_link"
value="http://download.sip-communicator.org/nightly/windows/${package.name}-${sip-communicator.version}.exe" />
<entry key="changes_html" value="changes.html" />
</propertyfile>
<!--
Prepare for the execution of heat.exe (which is part of the
preparation for the execution of candle.exe).
-->
<property name="light.dir" value="${windows.app.dir}/tmp/light" />
<mkdir dir="${light.dir}" />
<copy todir="${light.dir}" overwrite="true">
<fileset dir="${inst.resrc}/windows">
<include name="run.bat" />
<include name="run.exe" />
<include name="sc-logo.ico" />
<include name="up2date.exe" />
</fileset>
</copy>
<mkdir dir="${light.dir}/lib" />
<copy todir="${light.dir}/lib" overwrite="true">
<fileset dir="${sc.basedir}/lib">
<include name="*.jar" />
</fileset>
<fileset dir="${sc.basedir}/lib/os-specific/windows">
<include name="*.jar" />
<exclude name="jmf.jar"/>
<exclude name="sound.jar"/>
</fileset>
<fileset dir="${sc.basedir}/lib">
<include name="felix.client.run.properties" />
</fileset>
<fileset dir="${sc.basedir}/resources/install">
<include name="logging.properties" />
</fileset>
</copy>
<mkdir dir="${light.dir}/lib/bundle" />
<copy todir="${light.dir}/lib/bundle" overwrite="true">
<fileset dir="${sc.basedir}/lib/bundle">
<include name="*.jar" />
<exclude name="junit.jar" />
</fileset>
</copy>
<mkdir dir="${light.dir}/native" />
<copy todir="${light.dir}/native" overwrite="true">
<fileset dir="${sc.basedir}/lib/native/windows">
<include name="*" />
</fileset>
</copy>
<mkdir dir="${light.dir}/sc-bundles" />
<copy todir="${light.dir}/sc-bundles" overwrite="true">
<fileset dir="${sc.basedir}/sc-bundles">
<include name="*.jar" />
<exclude name="*slick.jar" />
</fileset>
<fileset dir="${sc.basedir}/sc-bundles/os-specific/windows">
<include name="*.jar" />
<exclude name="*slick.jar" />
</fileset>
</copy>
<!--
This versionupdate.properties file is the only of interest to the
MSI i.e. it gets installed on the user machine.
-->
<copy
file="${inst.resrc}/windows/versionupdate.properties"
todir="${light.dir}"
overwrite="true" />
<!-- Execute heat.exe -->
<exec
executable="C:\Program Files\WiX\heat.exe"
dir="${light.dir}"
failonerror="true">
<arg value="dir" />
<arg value="." />
<arg value="-nologo" />
<arg value="-ag" />
<arg value="-ke" />
<arg value="-out" />
<arg value="${windows.app.dir}\tmp\heat.wxs" />
<arg value="-sfrag" />
</exec>
<xslt
in="${windows.app.dir}/tmp/heat.wxs"
out="${windows.app.dir}/tmp/component-defines.wxi"
style="${inst.resrc}/windows/heat-component-defines.xsl" />
<xslt
in="${windows.app.dir}/tmp/heat.wxs"
out="${windows.app.dir}/tmp/component-refs.wxi"
style="${inst.resrc}/windows/heat-component-refs.xsl" />
<!-- Finish the preparation for the execution of candle.exe -->
<filter token="APP_EMAIL" value="${application.email}" />
<filter token="APP_NAME" value="${application.name}" />
<filter token="APP_WEB" value="${application.web}" />
<filter token="WelcomeText1" value="${installer.welcome.wtext1}" />
<filter token="WelcomeText2" value="${installer.welcome.wtext2}" />
<filter token="WelcomeText3" value="${installer.welcome.wtext3}" />
<filter token="WINDOWS_JRE_FILE" value="${windows.jre.file}" />
<filter token="WIX_PRODUCT_ID" value="${wix.product.id}" />
<filter token="WIX_UPGRADE_CODE" value="${wix.upgrade.code}" />
<copy
todir="${windows.app.dir}/tmp"
overwrite="true"
filtering="yes">
<fileset dir="${inst.resrc}/windows">
<include name="en-us.wxl" />
<include name="installer-windows.wxs" />
<include name="SCRegistrySpec.wxi" />
<include name="windows_shortcut_specification.wxi" />
</fileset>
</copy>
<!-- Execute candle.exe -->
<exec
executable="C:\Program Files\WiX\candle.exe"
dir="${windows.app.dir}/tmp"
failonerror="true">
<arg value="-nologo" />
<arg value="-ext" />
<arg value="WixUIExtension" />
<arg value="-ext" />
<arg value="WixUtilExtension" />
<arg value="installer-windows.wxs" />
</exec>
<!-- Finish the preparation for the execution of light.exe -->
<copy todir="${light.dir}" overwrite="true">
<fileset dir="${inst.resrc}/doc">
<include name="License.rtf" />
</fileset>
<fileset dir="${inst.resrc}/windows">
<include name="wix-*.jpg" />
</fileset>
</copy>
<!-- Execute light.exe -->
<exec
executable="C:\Program Files\WiX\light.exe"
dir="${light.dir}"
failonerror="true">
<arg value="-nologo" />
<arg value="-ext" />
<arg value="WixUIExtension" />
<arg value="-ext" />
<arg value="WixUtilExtension" />
<arg value="-cultures:en-us" />
<arg value="-loc" />
<arg value="${windows.app.dir}\tmp\en-us.wxl" />
<arg value="-out" />
<arg value="${windows.app.dir}\tmp\setup.msi" />
<arg value="${windows.app.dir}\tmp\installer-windows.wixobj" />
</exec>
<!-- Bootstrap the MSI into an EXE -->
<copy
file="${inst.resrc}/windows/setup.exe"
todir="${windows.app.dir}/tmp"
overwrite="true" />
<exec
executable="msistuff.exe"
dir="${windows.app.dir}/tmp"
failonerror="true">
<arg value="setup.exe" />
<arg value="/v" />
<arg value="200" />
<arg value="/n" />
<arg value="${application.name}" />
<arg value="/o" />
<arg value="INSTALL" />
<arg value="/d" />
<arg value="setup.msi" />
<arg value="/b" />
<arg value="setup.msi" />
</exec>
<copy
file="${windows.app.dir}/tmp/setup.exe"
tofile="${windows.app.dir}/${package.name}-${sip-communicator.version}.exe"
overwrite="true" />
<!--exec
executable="C:\Program Files\WiX\setupbld.exe"
dir="${light.dir}"
failonerror="true">
<arg value="-out" />
<arg value="${windows.app.dir}\${package.name}-${sip-communicator.version}.exe" />
<arg value="-mps" />
<arg value="${windows.app.dir}\tmp\setup.msi" />
<arg value="-setup" />
<arg value="C:\Program Files\WiX\setup.exe" />
</exec-->
<exec executable="mt.exe" dir="${windows.app.dir}" failonerror="true">
<arg value="-manifest" />
<arg value="${inst.resrc}\windows\setup.exe.manifest" />
<arg value="-outputresource:${package.name}-${sip-communicator.version}.exe;#1" />
</exec>
<delete dir="${light.dir}" />
<delete dir="${windows.app.dir}/tmp" />
</target>
<!-- - - - - - - - - - - BUILDING RELEASE PACKAGES - - - - - - - - - - - -->
<target name="macosx" depends="version"
description="Create an .app package for MACOSX">
<taskdef name="jarbundler"
classname="net.sourceforge.jarbundler.JarBundler"/>
<mkdir dir="${macosx.app.dir}"/>
<property name="macosx.stubfile"
value="${macosx.resrc.dir}/JavaApplicationStub"/>
<condition property="macosx.stubfile"
value="/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub">
<equals arg1="${os.name}"
arg2="Mac OS X"
casesensitive="false"
trim="true"/>
</condition>
<!-- Prepare the logging.properties file for macosx -->
<copy file="${inst.resrc}/logging.properties"
tofile="${macosx.resrc.dir}/logging.properties"
overwrite="true"/>
<replace file="${macosx.resrc.dir}/logging.properties"
token="java.util.logging.FileHandler.pattern = %h/.sip-communicator/log"
value="java.util.logging.FileHandler.pattern = log"/>
<!-- Prepare the felix.client.run.properties file for macosx -->
<copy file="${lib}/felix.client.run.properties"
tofile="${macosx.resrc.dir}/felix.client.run.properties"
overwrite="true"/>
<replace file="${macosx.resrc.dir}/felix.client.run.properties"
token="org.osgi.framework.system.packages.extra="
value="org.osgi.framework.system.packages.extra= com.growl;"/>
<replaceregexp file="${macosx.resrc.dir}/felix.client.run.properties"
match="^org.osgi.framework.storage=\$\{user.home\}/.sip-communicator/sip-communicator.bin"
replace="org.osgi.framework.storage=$\{user.home\}/Library/Application Support/${application.name}/sip-communicator.bin"
flags="m"/>
<echo file="${macosx.resrc.dir}/felix.client.run.properties"
append="true">felix.auto.start.80= reference:file:sc-bundles/growlnotification.jar
</echo>
<!-- We copy macosx-specific bundles from
sc-bundles/os-specific/macosx to sc-bundles -->
<copy todir="${bundles.dest}">
<fileset dir="${bundles.dest.mac}">
<include name="**/*.jar"/>
</fileset>
</copy>
<!-- Delete the old .app if it exists -->
<delete dir="${macosx.app.dir}/${application.name}.app"
quiet="yes" failonerror="false"/>
<!-- Sparkle needs the build number. If it is not
available, we use the normal build label -->
<condition property="sparkle.build"
value="${sparkle}"
else="${build.label}">
<isset property="sparkle"/>
</condition>
<!-- This creates the .app for MacOSX -->
<jarbundler dir="${macosx.app.dir}"
name="${application.name}"
shortname="${application.name}"
signature="sipc"
mainclass="net.java.sip.communicator.launcher.SIPCommunicator"
icon="resources/images/logo/sc_logo_128x128.icns"
jvmversion="1.5+"
version="${sip-communicator.version}"
build="${sparkle.build}"
infostring="SIP Communicator"
bundleid="org.sip-communicator"
stubfile="${macosx.stubfile}"
extraclasspath="/System/Library/Java"
workingdirectory="$APP_PACKAGE/Contents/Resources/Java"
vmoptions="-agentlib:AEGetURLEventHandlerAgent">
<javaproperty name="apple.laf.useScreenMenuBar" value="true"/>
<javaproperty name="apple.awt.brushMetalRounded" value="true"/>
<javaproperty name="apple.awt.showGrowBox" value="true"/>
<javaproperty name="java.library.path"
value="$JAVAROOT/lib/native/mac:${system.DYLD_LIBRARY_PATH}"/>
<javaproperty name="jna.library.path"
value="$JAVAROOT/lib/native/mac:${system.DYLD_LIBRARY_PATH}"/>
<javaproperty name="net.java.sip.communicator.SC_HOME_DIR_NAME"
value="${application.name}"/>
<!-- Tell felix to run sip-communicator -->
<javaproperty name="felix.config.properties"
value="file:felix.client.run.properties"/>
<!-- Tell java.util.logging about our logging preferences -->
<javaproperty name="java.util.logging.config.file"
value="logging.properties"/>
<jarfileset dir=".">
<include name="lib/*.jar" />
<include name="lib/os-specific/mac/*.jar" />
<include name="lib/bundle/*.jar" />
<exclude name="lib/bundle/junit.jar" />
<include name="lib/native/mac/*.jnilib" />
<include name="lib/native/mac/*.dylib" />
<exclude name="lib/native/mac/libsparkle_init.dylib" />
<include name="${bundles.dest}/*.jar" />
<exclude name="${bundles.dest}/*-slick.jar" />
<exclude name="${bundles.dest}/sparkle.jar" />
<include name="resources/images/logo/sc_logo_128x128.icns" />
</jarfileset>
<javafilelist dir="${macosx.resrc.dir}"
files="logging.properties"/>
<javafilelist dir="${macosx.resrc.dir}"
files="felix.client.run.properties"/>
<javafilelist dir="${macosx.resrc.dir}"
files="versionupdate.properties"/>
</jarbundler>
<!-- Add the url types in the Info.plist file -->
<replace file="${macosx.app.dir}/${application.name}.app/Contents/Info.plist">
<replacetoken><![CDATA[<key>CFBundleName</key>]]></replacetoken>
<replacevalue><![CDATA[<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>sip</string>
<string>feed</string>
<string>xmpp</string>
</array>
</dict>
</array>
<key>CFBundleName</key>]]></replacevalue>
</replace>
<symlink resource="lib/native/mac/libAEGetURLEventHandlerAgent.jnilib" link="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/libAEGetURLEventHandlerAgent.jnilib"/>
</target>
<!-- Create a MacOSX application package with Sparkle support.
Executed only if the sparkle label property is set, i.e. if the
package is built from CruiseControl -->
<target name="macosx-sparkle" depends="macosx"
if="sparkle"
description="Create an .app package for MACOSX with Sparkle support">
<!-- Add the sparkle bundle path in the felix.client.run.properties file -->
<echo file="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/felix.client.run.properties"
append="true">felix.auto.start.71= reference:file:sc-bundles/sparkle.jar
</echo>
<!-- Remove the path to the updatechecker bundle in the felix.client.run.properties file -->
<replace file="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/felix.client.run.properties"
token="reference:file:sc-bundles/updatechecker.jar"
value=""/>
<delete file="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/sc-bundles/updatechecker.jar"
failonerror="false" />
<!-- Add the Sparkle bundle and JNI to the application package -->
<copy file="${bundles.dest}/sparkle.jar"
todir="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/sc-bundles/"/>
<copy file="lib/native/mac/libsparkle_init.dylib"
todir="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/lib/native/mac/"/>
<!-- Add the Sparkle properties in the Info.plist file -->
<replace file="${macosx.app.dir}/${application.name}.app/Contents/Info.plist">
<replacetoken><![CDATA[<key>CFBundleName</key>]]></replacetoken>
<replacevalue><![CDATA[<key>SUCheckAtStartup</key>
<string>false</string>
<key>SUFeedURL</key>
<string>http://download.sip-communicator.org/nightly/macosx/sparkle/updates.xml</string>
<key>SUShowReleaseNotes</key>
<string>true</string>
<key>CFBundleName</key>]]></replacevalue>
</replace>
<!-- Install the Sparkle Framework in the application package -->
<mkdir dir="${macosx.app.dir}/${application.name}.app/Contents/Frameworks"/>
<unzip src="${macosx.resrc.dir}/Sparkle.framework.zip"
dest="${macosx.app.dir}/${application.name}.app/Contents/Frameworks"/>
<!-- Ant unzip tasks does not preserve symlinks, so we recreate them -->
<symlink link="${macosx.app.dir}/${application.name}.app/Contents/Frameworks/Sparkle.framework/Versions/Current"
resource="./A"/>
<symlink link="${macosx.app.dir}/${application.name}.app/Contents/Frameworks/Sparkle.framework/Headers"
resource="./Versions/Current/Headers"/>
<symlink link="${macosx.app.dir}/${application.name}.app/Contents/Frameworks/Sparkle.framework/Resources"
resource="./Versions/Current/Resources"/>
<symlink link="${macosx.app.dir}/${application.name}.app/Contents/Frameworks/Sparkle.framework/Sparkle"
resource="./Versions/Current/Sparkle"/>
</target>
<!-- Create the DMG - This only works on MacOSX (need hdiutil) -->
<target name="dmg" depends="macosx-sparkle"
if="is.running.macos"
description="Create a .dmg package for MACOSX (only works on MACOSX)">
<!--propertyfile file="${macosx.app.dir}/versionupdate.properties"
comment="Last Build Version">
<entry key="last_version" value="${sip-communicator.version}"/>
<entry key="download_link"
value="http://download.sip-communicator.org/nightly/macosx/${package.name}-${sip-communicator.version}.dmg"/>
</propertyfile-->
<property name="macosx.dmg.name"
value="${package.name}-${sip-communicator.version}.dmg"/>
<property name="macosx.dmg.tmpname"
value="${package.name}-tmp.dmg"/>
<delete file="${macosx.app.dir}/${macosx.dmg.name}"
quiet="yes" failonerror="false"/>
<!-- Create a temporary Disk Image -->
<exec executable="/usr/bin/hdiutil" os="Mac OS X" failonerror="true">
<arg value="create"/>
<arg value="-srcfolder"/>
<arg value="${macosx.app.dir}/${application.name}.app"/>
<arg value="-volname"/>
<arg value="${application.name}"/>
<arg value="-ov"/>
<arg value="${macosx.app.dir}/${macosx.dmg.tmpname}"/>
<arg value="-format"/>
<arg value="UDRW"/>
</exec>
<!-- Attach the temporary image -->
<exec executable="/usr/bin/hdiutil" os="Mac OS X" failonerror="true">
<arg value="attach"/>
<arg value="${macosx.app.dir}/${macosx.dmg.tmpname}"/>
<arg value="-mountroot"/>
<arg value="${release}/"/>
</exec>
<!-- Copy the background, icon and DS_Store files -->
<mkdir dir="${release}/${application.name}/.background"/>
<copy file="${macosx.resrc.dir}/dmg-background.png"
tofile="${release}/${application.name}/.background/background.png"
overwrite="true"/>
<copy file="${macosx.resrc.dir}/dmg-VolumeIcon.icns"
tofile="${release}/${application.name}/.VolumeIcon.icns"
overwrite="true"/>
<copy file="${macosx.resrc.dir}/dmg-DS_Store"
tofile="${release}/${application.name}/.DS_Store"
overwrite="true"/>
<exec executable="/Developer/Tools/SetFile" os="Mac OS X">
<arg value="-a"/>
<arg value="C"/>
<arg value="${release}/${application.name}"/>
</exec>
<!-- Add a symbolic link to the Applications directory -->
<symlink link="${release}/${application.name}" resource="/Applications"/>
<!-- Detach the temporary image -->
<exec executable="/usr/bin/hdiutil" os="Mac OS X" failonerror="true">
<arg value="detach"/>
<arg value="${release}/${application.name}"/>
</exec>
<!-- Compress it to a new image -->
<exec executable="/usr/bin/hdiutil" os="Mac OS X" failonerror="true">
<arg value="convert"/>
<arg value="${macosx.app.dir}/${macosx.dmg.tmpname}"/>
<arg value="-format"/>
<arg value="UDZO"/>
<arg value="-o"/>
<arg value="${macosx.app.dir}/${macosx.dmg.name}"/>
</exec>
<!-- Delete the temporary image -->
<delete file="${macosx.app.dir}/${macosx.dmg.tmpname}"
quiet="yes" failonerror="false"/>
</target>
<!-- Outputs a warning notifying the user that a dpkg tool is missing. -->
<target name="dpkg-build-warning" unless="dpkg.build.present">
<echo message="Either the ${dpkg-buildpackage} tool or the debhelper tools was not found on your system."/>
<echo message="Try installing the 'dpkg-dev' and 'debhelper' packages"/>
</target>
<!-- Create a Debian package - This needs dpkg utilities -->
<target name="deb" depends="version,dpkg-build-warning,-prepare-debian-sh"
if="dpkg.build.present"
description="Create a .deb package for Debian (needs dpkg utilities)">
<!-- Prepare the changelog file -->
<copy file="${inst.resrc}/debian/changelog.tmpl"
tofile="${inst.resrc}/debian/changelog"
overwrite="true"/>
<replace file="${inst.resrc}/debian/changelog"
token="_VERSION_"
value="${sip-communicator.version}"/>
<replace file="${inst.resrc}/debian/changelog"
token="_PACKAGE_NAME_"
value="${package.name}"/>
<!-- Prepare the control file -->
<copy file="${inst.resrc}/debian/control.tmpl"
tofile="${inst.resrc}/debian/control"
overwrite="true"/>
<replace file="${inst.resrc}/debian/control"
token="_PACKAGE_NAME_"
value="${package.name}"/>
<!-- Prepare the rules file -->
<copy file="${inst.resrc}/debian/rules.tmpl"
tofile="${inst.resrc}/debian/rules"
overwrite="true"/>
<replace file="${inst.resrc}/debian/rules"
token="_PACKAGE_NAME_"
value="${package.name}"/>
<chmod file="${inst.resrc}/debian/rules" perm="+x"/>
<!-- Put the current date in the changelog -->
<tstamp>
<format property="date"
pattern="EEE, d MMM yyyy HH:mm:ss Z"
locale="en,US"/>
</tstamp>
<replace file="${inst.resrc}/debian/changelog"
token="_DATE_"
value="${date}"/>
<!-- Build i386 binary package -->
<exec executable="${dpkg-buildpackage}" dir="${inst.resrc}">
<arg value="-rfakeroot"/>
<arg value="-tc"/>
<arg value="-us"/>
<arg value="-uc"/>
<arg value="-b"/>
<arg value="-d"/>
<arg value="-ai386"/>
</exec>
<!-- Build amd64 binary package -->
<exec executable="${dpkg-buildpackage}" dir="${inst.resrc}">
<arg value="-rfakeroot"/>
<arg value="-tc"/>
<arg value="-us"/>
<arg value="-uc"/>
<arg value="-b"/>
<arg value="-d"/>
<arg value="-aamd64"/>
</exec>
<mkdir dir="${debian.dir}"/>
<move todir="${debian.dir}">
<fileset dir="${sc.basedir}/resources">
<include name="${package.name}*"/>
</fileset>
</move>
<!-- Only i386 for now -->
<propertyfile file="${debian.dir}/versionupdate.properties"
comment="Last Build Version">
<entry key="last_version" value="${sip-communicator.version}"/>
<entry key="download_link"
value="http://download.sip-communicator.org/nightly/debian/${package.name}_${sip-communicator.version}_i386.deb"/>
</propertyfile>
<!-- Delete the temporary files -->
<delete quiet="yes" failonerror="false">
<fileset dir="${inst.resrc}/debian/">
<include name="changelog"/>
<include name="control"/>
<include name="rules"/>
<include name="sip-communicator.sh"/>
</fileset>
</delete>
</target>
<!-- Outputs a warning notifying the user that dpkg-scanpackages is not installed. -->
<target name="dpkg-scan-warning" unless="dpkg.scan.present">
<echo message="The ${dpkg-scanpackages} tool was not found on your system."/>
<echo message="Try installing the 'dpkg-dev' package "/>
</target>
<!-- Prepare to deploy the Debian package - This needs dpkg utilities -->
<target name="deb-rel" depends="deb,dpkg-scan-warning"
if="dpkg.scan.present"
description="Prepare to deploy Debian package (needs dpkg utilities)">
<mkdir dir="${debian.binary.dir}"/>
<move todir="${debian.binary.dir}">
<fileset dir="${debian.dir}">
<include name="sip-communicator*386*"/>
</fileset>
</move>
<exec executable="${dpkg-scanpackages}"
dir="${debian.dir}"
output="${debian.binary.dir}/dpkg-scanpackages.out"
errorproperty="dpkg-scanpackages.err">
<arg value="binary"/>
<arg value="/dev/null"/>
</exec>
<exec executable="/bin/gzip"
dir="${debian.dir}"
input="${debian.binary.dir}/dpkg-scanpackages.out"
output="${debian.binary.dir}/Packages.gz">
<arg value="-9c"/>
</exec>
<!-- Delete the temporary file -->
<delete file="${debian.binary.dir}/dpkg-scanpackages.out"
quiet="yes" failonerror="false"/>
</target>
</project>