filebot/build.xml
2011-12-28 13:51:36 +00:00

501 lines
19 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<project name="filebot" default="fatjar">
<!-- include application properties -->
<property file="source/net/sourceforge/filebot/Settings.properties" />
<property name="title" value="${application.name}" />
<property name="version" value="${application.version}" />
<tstamp><format property="today" pattern="yyyy-MM-dd" /></tstamp>
<!-- define source dirs -->
<property name="dir.source" location="${basedir}/source" />
<property name="dir.test" location="${basedir}/test" />
<property name="dir.build" location="${basedir}/build" />
<property name="dir.dist" location="${basedir}/dist" />
<property name="dir.lib" location="${basedir}/lib" />
<property name="dir.website" location="${basedir}/website" />
<property name="dir.installer" location="${basedir}/installer" />
<!-- define output paths -->
<property name="path.fatjar" location="${dir.dist}/${title}_${version}.jar" />
<property name="path.appbundle.tar.gz" location="${dir.dist}/${title}_${version}.app.tar.gz" />
<property name="path.source.zip" location="${dir.dist}/filebot-${version}-src.zip" />
<property name="deploy.release" value="web.sourceforge.net:/home/frs/project/f/fi/filebot/filebot" />
<property name="deploy.website" value="web.sourceforge.net:htdocs" />
<target name="jar" depends="build">
<!-- create dist dir -->
<mkdir dir="${dir.dist}" />
<!-- main jar -->
<jar destfile="${dir.dist}/filebot.jar">
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Built-Date" value="${today}" />
<attribute name="Built-Revision" value="${svn.revision}" />
<attribute name="Application-Name" value="${title}" />
<attribute name="Application-Version" value="${version}" />
<attribute name="Main-Class" value="net.sourceforge.filebot.Main" />
</manifest>
<fileset dir="${dir.build}" excludes="**/*Test*" />
</jar>
<!-- extra jar containing all the unit tests -->
<jar destfile="${dir.dist}/filebot-test.jar">
<fileset dir="${dir.build}" includes="**/*Test*" />
</jar>
<!-- source as zip -->
<zip destfile="${path.source.zip}">
<fileset dir="source" />
<fileset dir="test" />
</zip>
</target>
<target name="fatjar" depends="jar" description="Merge all class files into a single executable jar file">
<jar destfile="${path.fatjar}" filesetmanifest="merge" duplicate="fail">
<!-- include main jar -->
<zipfileset src="${dir.dist}/filebot.jar" />
<!-- include libs -->
<zipfileset src="${dir.lib}/xercesImpl.jar">
<include name="org/apache/**" />
<include name="org/w3c/dom/html/**" />
</zipfileset>
<zipfileset src="${dir.lib}/nekohtml.jar">
<include name="org/cyberneko/html/**" />
</zipfileset>
<zipfileset src="${dir.lib}/json-simple.jar">
<include name="org/json/simple/**" />
</zipfileset>
<zipfileset src="${dir.lib}/simmetrics.jar">
<include name="uk/ac/shef/wit/simmetrics/**" />
</zipfileset>
<zipfileset src="${dir.lib}/glazedlists.jar">
<include name="ca/odell/glazedlists/**" />
</zipfileset>
<zipfileset src="${dir.lib}/miglayout.jar">
<include name="net/miginfocom/**" />
</zipfileset>
<zipfileset src="${dir.lib}/xmlrpc.jar">
<include name="redstone/xmlrpc/**" />
</zipfileset>
<zipfileset src="${dir.lib}/args4j.jar">
<include name="org/kohsuke/args4j/**" />
</zipfileset>
<zipfileset src="${dir.lib}/ehcache.jar">
<include name="net/sf/ehcache/**" />
<include name="ehcache-failsafe.xml" />
<include name="ehcache-version.properties" />
</zipfileset>
<zipfileset src="${dir.lib}/slf4j.jar">
<include name="org/slf4j/**" />
</zipfileset>
<zipfileset src="${dir.lib}/slf4j-jdk.jar">
<include name="org/slf4j/**" />
</zipfileset>
<zipfileset src="${dir.lib}/guava.jar">
<include name="com/google/common/**" />
</zipfileset>
<zipfileset src="${dir.lib}/jna.jar">
<!-- include classes and native libraries -->
<include name="com/sun/jna/**" />
</zipfileset>
<zipfileset src="${dir.lib}/groovy.jar">
<include name="groovy*/**" />
<include name="org/codehaus/groovy/**" />
<include name="META-INF/dgminfo" />
</zipfileset>
<zipfileset src="${dir.lib}/icu4j.jar">
<include name="com/ibm/icu/text/**" />
</zipfileset>
<zipfileset src="${dir.lib}/sublight-ws.jar">
<include name="net/sublight/webservice/**" />
</zipfileset>
<zipfileset src="${dir.lib}/junrar-custom.jar">
<include name="de/innosystec/unrar/**" />
</zipfileset>
<zipfileset src="${dir.lib}/jgat-custom.jar">
<include name="com/dmurph/tracking/**" />
</zipfileset>
</jar>
</target>
<target name="appbundle" depends="fatjar" description="Build an OSX application bundle">
<taskdef name="jarbundler" classname="net.sourceforge.jarbundler.JarBundler" classpath="${dir.lib}/build/jarbundler.jar" />
<copy tofile="${dir.dist}/appbundle/FileBot.jar" file="${path.fatjar}" />
<!-- build app bundle folder and add native libs -->
<jarbundler dir="${dir.dist}" name="${title}" version="${version}" build="${svn.revision}" icon="${dir.installer}/appbundle/icon.icns" bundleid="net.sourceforge.filebot" jar="${dir.dist}/appbundle/FileBot.jar" stubfile="${dir.installer}/appbundle/JavaApplicationStub" workingdirectory="$APP_PACKAGE/Contents/Resources/Java" mainclass="net.sourceforge.filebot.Main" jvmversion="1.6+" vmoptions="-Xmx256m">
<javaproperty name="application.deployment" value="app"/>
</jarbundler>
<!-- shell scripts -->
<copy todir="${dir.dist}/${title}.app/Contents/MacOS" file="${dir.installer}/appbundle/filebot" />
<copy todir="${dir.dist}/${title}.app/Contents/MacOS" file="${dir.installer}/appbundle/install.sh" />
<copy todir="${dir.dist}/${title}.app/Contents/Resources/Java">
<fileset dir="${dir.lib}/native/mac-x86_64" includes="*.dylib" />
</copy>
<!-- application bundle folder as .tar.gz -->
<tar destfile="${path.appbundle.tar.gz}" compression="gzip">
<tarfileset dir="${dir.dist}" includes="${title}.app/**" excludes="**/MacOS/**" />
<tarfileset dir="${dir.dist}" includes="${title}.app/**/MacOS/**" filemode="755" /> <!-- IMPORTANT application stub must be executable!! -->
</tar>
</target>
<target name="deb" depends="fatjar" description="Build debian package for i386 and amd64">
<taskdef resource="ant_deb_task.properties" classpath="${dir.lib}/build/ant-deb.jar" />
<antcall target="deb-arch">
<param name="arch" value="i386" />
</antcall>
<antcall target="deb-arch">
<param name="arch" value="amd64" />
</antcall>
</target>
<target name="deb-arch">
<deb todir="${dir.dist}" package="filebot" version="${version}" architecture="${arch}" section="misc" depends="default-jre-headless" recommends="default-jre" suggests="openjdk-7-jre" homepage="http://filebot.sourceforge.net" priority="optional">
<maintainer name="Reinhard Pointner" email="rednoah@users.sourceforge.net" />
<description synopsis="The ultimate tv renamer / subtitle downloader / sfv validator">FileBot is the ultimate tool for renaming your tv shows and anime, downloading subtitles from various sources or just simple file verification.</description>
<tarfileset fullpath="usr/share/filebot/FileBot.jar" file="${path.fatjar}" />
<tarfileset prefix="usr/share/filebot" dir="${dir.lib}/native/linux-${arch}" includes="*.so" />
<tarfileset prefix="usr/share/filebot" file="${dir.installer}/icons/icon48.png" />
<tarfileset prefix="usr/share/filebot/bin" file="${dir.installer}/deb/filebot.sh" filemode="755" />
<tarfileset fullpath="usr/bin/filebot" file="${dir.installer}/deb/filebot.sh" filemode="755" />
<tarfileset prefix="usr/share/applications" file="${dir.installer}/deb/FileBot.desktop" />
</deb>
</target>
<target name="msi" depends="fatjar" description="Build Windows Installer for x86 and x64">
<antcall target="msi-arch">
<param name="arch" value="x86" />
</antcall>
<antcall target="msi-arch">
<param name="arch" value="x64" />
</antcall>
</target>
<target name="msi-arch">
<property name="mediainfo" location="${dir.lib}/native/win32-${arch}/MediaInfo.dll" />
<property name="installer" location="${dir.dist}/FileBot_${version}_${arch}.msi" />
<exec executable="candle.exe" dir="${dir.installer}/msi" failonerror="true">
<arg line="filebot-wix.xml -out ${dir.dist}/msi.wixobj -arch ${arch} -dreleaseversion=${version} -dfatjar=${path.fatjar} -dmediainfo=${mediainfo}" />
</exec>
<exec executable="light.exe" dir="${dir.installer}/msi" failonerror="true">
<arg line="${dir.dist}/msi.wixobj -sval -ext WixUIExtension -out ${installer}" />
</exec>
</target>
<target name="portable" depends="fatjar" description="Portable application package">
<mkdir dir="${dir.dist}/portable"/>
<copy file="${path.fatjar}" tofile="${dir.dist}/portable/FileBot.jar" />
<copy todir="${dir.dist}/portable">
<fileset dir="${dir.installer}/portable" includes="*.exe, *.ini, *.sh" />
</copy>
<zip destfile="${dir.dist}/FileBot_${version}-portable.zip">
<zipfileset dir="${dir.dist}/portable" includes="*.jar, *.exe, *.ini" />
<zipfileset dir="${dir.dist}/portable" includes="*.sh" filemode="755" />
</zip>
</target>
<target name="webstart" depends="jar" description="Build and compress jars used for webstart deployment">
<!-- create dirs -->
<mkdir dir="${dir.dist}/webstart" />
<!-- copy jnlp descriptors and icons -->
<copy todir="${dir.dist}/webstart">
<fileset dir="${dir.installer}/webstart" />
<fileset dir="${dir.installer}/icons" />
</copy>
<!-- copy jars -->
<copy todir="${dir.dist}/webstart">
<fileset dir="${dir.lib}" includes="*.jar" excludes="jna.jar" />
</copy>
<!-- copy jna.jar without native libs -->
<jar destfile="${dir.dist}/webstart/jna.jar">
<zipfileset src="${dir.lib}/jna.jar" includes="**/*.class" />
</jar>
<!-- create mediainfo jar as seperate jar and use as trigger for lazy loading the native libs -->
<jar destfile="${dir.dist}/webstart/mediainfo.jar">
<fileset dir="${dir.build}" includes="net/sourceforge/filebot/mediainfo/**" />
</jar>
<!-- create indexed main jar -->
<jar destfile="${dir.dist}/webstart/filebot.jar" index="yes">
<fileset dir="${dir.build}" excludes="**/*Test*, net/sourceforge/filebot/mediainfo/**" />
<indexjars>
<!-- IMPORTANT if groovy is indexed things break during runtime!! -->
<fileset dir="${dir.dist}/webstart" includes="**/*.jar" excludes="filebot.jar, groovy.jar" />
</indexjars>
</jar>
<!-- create native lib jars -->
<antcall target="webstart-nativelib">
<param name="arch" value="win32-x86" />
</antcall>
<antcall target="webstart-nativelib">
<param name="arch" value="win32-x64" />
</antcall>
<antcall target="webstart-nativelib">
<param name="arch" value="linux-i386" />
</antcall>
<antcall target="webstart-nativelib">
<param name="arch" value="linux-amd64" />
</antcall>
<antcall target="webstart-nativelib">
<param name="arch" value="mac-x86_64" />
</antcall>
<!-- sign all jars -->
<apply executable="pack200">
<!-- workaround for bug 6575373, see http://bugs.sun.com/view_bug.do?bug_id=6575373 -->
<arg line="--segment-limit=-1" />
<arg line="--repack" />
<srcfile />
<fileset dir="${dir.dist}/webstart" includes="**/*.jar" />
</apply>
<signjar alias="filebot" keystore="filebot.keystore" storepass="secret">
<fileset id="signjar" dir="${dir.dist}/webstart" includes="**/*.jar" />
</signjar>
<!-- pack200 all jars -->
<apply executable="pack200" dest="${dir.dist}/webstart">
<!-- workaround for bug 6575373, see http://bugs.sun.com/view_bug.do?bug_id=6575373 -->
<arg line="--segment-limit=-1" />
<targetfile />
<srcfile />
<fileset dir="${dir.dist}/webstart" includes="*.jar" />
<mapper type="glob" from="*.jar" to="*.jar.pack.gz" />
</apply>
</target>
<target name="webstart-nativelib">
<!-- create temp dir -->
<mkdir dir="${dir.dist}/webstart/native/${arch}" />
<!-- copy native libs to temp dir -->
<copy todir="${dir.dist}/webstart/native/${arch}" flatten="true">
<zipfileset src="${dir.lib}/jna.jar" includes="com/sun/jna/${arch}/*" />
<fileset dir="${dir.lib}/native" includes="${arch}/*" />
</copy>
<!-- create native lib jar -->
<jar destfile="${dir.dist}/webstart/native/${arch}.jar" basedir="${dir.dist}/webstart/native/${arch}" />
<!-- delete temp dir -->
<delete dir="${dir.dist}/webstart/native/${arch}" />
</target>
<target name="genkey">
<genkey alias="filebot" keystore="filebot.keystore" storepass="secret" validity="3650" dname="CN=${user.name}" />
</target>
<target name="build">
<!-- create build dir -->
<mkdir dir="${dir.build}" />
<!-- compile -->
<javac srcdir="${dir.source}:${dir.test}" destdir="${dir.build}" target="1.6" source="1.6" encoding="utf-8" includeAntRuntime="false">
<classpath>
<fileset dir="${dir.lib}" includes="*.jar" />
<pathelement location="${dir.lib}/build/junit.jar" />
</classpath>
</javac>
<!-- copy resources -->
<copy todir="${dir.build}">
<fileset dir="${dir.source}">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${dir.dist}" />
<delete dir="${dir.build}" />
</target>
<target name="test" depends="jar">
<junit printsummary="yes" fork="true">
<classpath>
<fileset dir="${dir.dist}" includes="*.jar" />
<fileset dir="${dir.lib}" includes="*.jar" />
<pathelement location="${dir.lib}/build/junit.jar" />
</classpath>
<formatter type="plain" />
<test name="net.sourceforge.filebot.AllTests" outfile="test-report" />
</junit>
</target>
<target name="test-fatjar" depends="fatjar">
<junit printsummary="yes" fork="true">
<classpath>
<pathelement location="${path.fatjar}" />
<pathelement location="${dir.dist}/filebot-test.jar" />
<pathelement location="${dir.lib}/build/junit.jar" />
</classpath>
<formatter type="plain" />
<test name="net.sourceforge.filebot.AllTests" outfile="test-report" />
</junit>
</target>
<target name="svn-update">
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml">
<classpath><fileset dir="${dir.lib}/build" includes="*.jar" /></classpath>
</typedef>
<svnSetting id="svn.settings" svnkit="true" javahl="false" />
<svn refid="svn.settings"><update dir="${dir.source}" revision="HEAD" recurse="false" /></svn>
<svn refid="svn.settings"><status path="${dir.source}" revisionProperty="svn.revision" /></svn>
<echo>Revision: ${svn.revision}</echo>
</target>
<target name="deploy-release" depends="svn-update, fatjar, appbundle, deb, msi, portable, webstart">
<mkdir dir="${dir.dist}/release" />
<!-- prepare release packages -->
<copy todir="${dir.dist}/release/${title}_${version}" file="${path.fatjar}" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${path.appbundle.tar.gz}" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${dir.dist}/filebot_${version}_i386.deb" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${dir.dist}/filebot_${version}_amd64.deb" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${dir.dist}/FileBot_${version}_x86.msi" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${dir.dist}/FileBot_${version}_x64.msi" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${dir.dist}/FileBot_${version}-portable.zip" />
<copy todir="${dir.dist}/release/${title}_${version}" file="${path.source.zip}" />
<!-- ask for sourceforge password -->
<property name="sf.user" value="rednoah,filebot" />
<input message="Please enter password:" addproperty="sf.password" />
<!-- deploy source zip first so it will be the oldest file in the release folder -->
<scp todir="${sf.user}:${sf.password}@${deploy.release}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/release" includes="**/*-src.zip" />
</scp>
<!-- deploy fatjar -->
<sleep seconds="5" />
<scp todir="${sf.user}:${sf.password}@${deploy.release}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/release" includes="**/*.jar" />
</scp>
<!-- deploy portable application package -->
<sleep seconds="5" />
<scp todir="${sf.user}:${sf.password}@${deploy.release}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/release" includes="**/*-portable.zip" />
</scp>
<!-- deploy windows installers -->
<sleep seconds="5" />
<scp todir="${sf.user}:${sf.password}@${deploy.release}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/release" includes="**/*.msi" />
</scp>
<!-- deploy debian packages -->
<sleep seconds="5" />
<scp todir="${sf.user}:${sf.password}@${deploy.release}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/release" includes="**/*.deb" />
</scp>
<!-- deploy osx app bundle -->
<sleep seconds="5" />
<scp todir="${sf.user}:${sf.password}@${deploy.release}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/release" includes="**/*.app.tar.gz" />
</scp>
<!-- deploy webstart jars and jnlp descriptors -->
<scp todir="${sf.user}:${sf.password}@${deploy.website}/webstart" trust="yes" verbose="true">
<fileset dir="${dir.dist}/webstart" />
</scp>
</target>
<target name="deploy-website">
<!-- prepare website resources -->
<copy todir="${dir.dist}/website">
<fileset dir="${dir.website}">
<include name="*.xml" />
<include name="*.php" />
<include name="*.html" />
<include name="*.css" />
<include name="*.js" />
<include name="*.png" />
<include name="*.ico" />
<include name="images/**" />
<include name="data/**" />
<include name="scripts/**" />
<include name="screenshots/**" />
</fileset>
</copy>
<!-- replace variables for new release -->
<replace dir="${dir.dist}/website" encoding="utf-8" summary="yes">
<include name="**/*.html" />
<include name="**/*.php" />
<replacefilter token="@{version}" value="${version}" />
</replace>
<!-- ask for sourceforge password -->
<property name="sf.user" value="rednoah,filebot" />
<input message="Please enter password:" addproperty="sf.password" />
<!-- upload -->
<scp todir="${sf.user}:${sf.password}@${deploy.website}" trust="yes" verbose="true">
<fileset dir="${dir.dist}/website" />
</scp>
</target>
<target name="deploy-test-package" depends="svn-update, fatjar">
<!-- ask for sourceforge password -->
<property name="sf.user" value="rednoah,filebot" />
<input message="Please enter password:" addproperty="sf.password" />
<input message="Mark:" addproperty="mark" />
<!-- deploy fatjar -->
<scp file="${path.fatjar}" remoteTofile="${sf.user}:${sf.password}@${deploy.release}/HEAD/filebot-${version}-r${svn.revision}-${mark}.jar" trust="yes" verbose="true" />
</target>
</project>