mirror of
https://github.com/mitb-archive/filebot
synced 2024-11-11 03:45:06 -05:00
946 lines
36 KiB
XML
946 lines
36 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
<project name="filebot" default="jar" xmlns:if="ant:if" xmlns:unless="ant:unless" xmlns:ivy="antlib:org.apache.ivy.ant">
|
|
|
|
<!-- define source dirs -->
|
|
<property name="dir.source" location="${basedir}/source" />
|
|
<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" />
|
|
|
|
<!-- import property files -->
|
|
<property file="${basedir}/profile.properties" />
|
|
<property file="${basedir}/app.properties" />
|
|
|
|
<property name="release" value="${application.name}_${application.version}" />
|
|
|
|
<!-- define output paths -->
|
|
<property name="dir.cache" location="${basedir}/cache" />
|
|
<property name="dir.release" location="${basedir}/release/${release}" />
|
|
|
|
|
|
<!-- timestamp variables -->
|
|
<tstamp prefix="tstamp">
|
|
<format property="date" pattern="yyyy-MM-dd" />
|
|
<format property="year" pattern="yyyy" />
|
|
</tstamp>
|
|
|
|
|
|
<!-- copy and replace ant variables macro -->
|
|
<macrodef name="copy-replace">
|
|
<attribute name="todir" />
|
|
<element name="filesets" implicit="yes" />
|
|
<sequential>
|
|
<copy todir="@{todir}" encoding="utf-8" overwrite="yes" verbose="yes">
|
|
<filesets />
|
|
<filterset begintoken="@{" endtoken="}">
|
|
<propertyset>
|
|
<propertyref builtin="all" />
|
|
</propertyset>
|
|
</filterset>
|
|
</copy>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
|
|
<!-- sign with gpg macro -->
|
|
<macrodef name="release-sign">
|
|
<element name="filesets" implicit="yes" />
|
|
<sequential>
|
|
<apply executable="gpg" verbose="yes" failonerror="yes">
|
|
<arg line="--verbose --batch --yes --local-user ${package.maintainer}" />
|
|
<arg line="--armor --detach-sign" />
|
|
<srcfile />
|
|
<filesets />
|
|
</apply>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
|
|
<!-- deploy release artifacts -->
|
|
<macrodef name="release-deploy">
|
|
<attribute name="dir" />
|
|
<attribute name="todir" />
|
|
<element name="includes" implicit="yes" />
|
|
<sequential>
|
|
<scp todir="@{todir}" trust="yes" verbose="true" sftp="true" keyfile="${deploy.keyfile}">
|
|
<fileset dir="@{dir}">
|
|
<includes />
|
|
<modified>
|
|
<param name="cache.cachefile" value="${dir.cache}/scp.cache" />
|
|
</modified>
|
|
</fileset>
|
|
</scp>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
|
|
|
|
<patternset id="pattern.jre">
|
|
<!-- exclude Windows browser plugin -->
|
|
<exclude name="**/dtplugin/**" />
|
|
<exclude name="**/plugin2/**" />
|
|
|
|
<!-- exclude Mac browser plugin -->
|
|
<exclude name="**/deploy/**" />
|
|
<exclude name="**/nibs/**" />
|
|
<exclude name="**/shortcuts/**" />
|
|
|
|
<!-- libjfxwebkit.dylib has many dependencies to deprecated librararies that cause issues with MAS review -->
|
|
<exclude name="**/libjfxwebkit.dylib" />
|
|
</patternset>
|
|
|
|
|
|
<!-- fetch and unpack JRE bundle (64-bit Windows) -->
|
|
<macrodef name="get-windows-jre">
|
|
<attribute name="dest" />
|
|
<sequential>
|
|
<exec executable="powershell" dir="${dir.cache}" failonerror="yes">
|
|
<arg line="get-java" />
|
|
</exec>
|
|
<untar src="${dir.cache}/jre-${jre.version}_windows-x64_bin.tar.gz" dest="@{dest}" compression="gzip">
|
|
<patternset refid="pattern.jre" />
|
|
<cutdirsmapper dirs="1" />
|
|
</untar>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
|
|
<!-- fetch and unpack JRE bundle (64-bit Mac) -->
|
|
<macrodef name="get-macos-jre">
|
|
<attribute name="dest" />
|
|
<sequential>
|
|
<exec executable="get-java.sh" dir="${dir.cache}" failonerror="yes" />
|
|
<untar src="${dir.cache}/jre-${jre.version}_osx-x64_bin.tar.gz" dest="@{dest}" compression="gzip">
|
|
<patternset refid="pattern.jre" />
|
|
<cutdirsmapper dirs="1" />
|
|
</untar>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
<!-- fetch and unpack JRE bundle (64-bit Linux) -->
|
|
<macrodef name="get-linux-jre">
|
|
<attribute name="dest" />
|
|
<sequential>
|
|
<exec executable="get-java.sh" dir="${dir.cache}" failonerror="yes" />
|
|
<untar src="${dir.cache}/jre-${jre.version}_linux-x64_bin.tar.gz" dest="@{dest}" compression="gzip">
|
|
<patternset refid="pattern.jre" />
|
|
<cutdirsmapper dirs="1" />
|
|
</untar>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
|
|
<target name="resolve" description="Retrieve dependencies with Apache Ivy">
|
|
<delete dir="${dir.lib}/ivy" />
|
|
<ivy:retrieve pattern="${dir.lib}/ivy/[type]/[artifact].[ext]" />
|
|
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="mac-x86_64" />
|
|
<param name="arch.jna" value="darwin" />
|
|
<param name="arch.7zj" value="Mac-x86_64" />
|
|
</antcall>
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="win32-x64" />
|
|
<param name="arch.jna" value="win32-x86-64" />
|
|
<param name="arch.7zj" value="Windows-amd64" />
|
|
</antcall>
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="win32-x86" />
|
|
<param name="arch.jna" value="win32-x86/" />
|
|
<param name="arch.7zj" value="Windows-x86" />
|
|
</antcall>
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="linux-amd64" />
|
|
<param name="arch.jna" value="linux-x86-64" />
|
|
<param name="arch.7zj" value="Linux-amd64" />
|
|
</antcall>
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="linux-i686" />
|
|
<param name="arch.jna" value="linux-x86" />
|
|
<param name="arch.7zj" value="Linux-i386" />
|
|
</antcall>
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="linux-armv7l" />
|
|
<param name="arch.jna" value="linux-arm" />
|
|
<param name="arch.7zj" value="linux-arm" />
|
|
</antcall>
|
|
<antcall target="resolve-import-native">
|
|
<param name="arch" value="linux-armv8" />
|
|
<param name="arch.jna" value="linux-aarch64" />
|
|
<param name="arch.7zj" value="linux-aarch64" />
|
|
</antcall>
|
|
</target>
|
|
|
|
|
|
<target name="resolve-import-native">
|
|
<unzip src="${dir.lib}/ivy/jar/jna.jar" dest="${dir.lib}/native/${arch}" overwrite="yes">
|
|
<patternset>
|
|
<include name="**/${arch.jna}/*.dll" />
|
|
<include name="**/${arch.jna}/*.so" />
|
|
<include name="**/${arch.jna}/*.jnilib" />
|
|
</patternset>
|
|
<chainedmapper>
|
|
<flattenmapper />
|
|
<compositemapper>
|
|
<globmapper from="*.jnilib" to="*.dylib" />
|
|
<identitymapper />
|
|
</compositemapper>
|
|
</chainedmapper>
|
|
</unzip>
|
|
<unzip src="${dir.lib}/ivy/jar/sevenzipjbinding-all-platforms.jar" dest="${dir.lib}/native/${arch}" overwrite="yes">
|
|
<patternset>
|
|
<include name="**/${arch.7zj}/*.dll" />
|
|
<include name="**/${arch.7zj}/*.so" />
|
|
<include name="**/${arch.7zj}/*.dylib" />
|
|
</patternset>
|
|
<chainedmapper>
|
|
<flattenmapper />
|
|
<compositemapper>
|
|
<globmapper from="lib*.dll" to="*.dll" />
|
|
<identitymapper />
|
|
</compositemapper>
|
|
</chainedmapper>
|
|
</unzip>
|
|
</target>
|
|
|
|
|
|
<target name="build" depends="revision">
|
|
<!-- copy dependencies -->
|
|
<copy todir="${dir.dist}/lib" flatten="yes" verbose="yes">
|
|
<fileset dir="${dir.lib}/ivy/jar">
|
|
<include name="ehcache.jar" />
|
|
<include name="miglayout-core.jar" />
|
|
<include name="miglayout-swing.jar" />
|
|
<include name="glazedlists_java16.jar" />
|
|
<include name="controlsfx.jar" />
|
|
<include name="rsyntaxtextarea.jar" />
|
|
<include name="lanterna.jar" />
|
|
<include name="xz.jar" />
|
|
<include name="sevenzipjbinding.jar" />
|
|
<include name="commons-io.jar" />
|
|
<include name="commons-vfs2.jar" />
|
|
<include name="jaxb-api.jar" />
|
|
<include name="jaxb-impl.jar" />
|
|
<include name="junrar.jar" />
|
|
<include name="jna.jar" />
|
|
<include name="jna-platform.jar" />
|
|
<include name="streamex.jar" />
|
|
<include name="icu4j.jar" />
|
|
<include name="language-detector.jar" />
|
|
<include name="metadata-extractor.jar" />
|
|
<include name="xmpcore.jar" />
|
|
<include name="commons-logging.jar" />
|
|
<include name="slf4j-api.jar" />
|
|
<include name="slf4j-jdk14.jar" />
|
|
<include name="groovy.jar" />
|
|
<include name="groovy-ant.jar" />
|
|
<include name="groovy-bsf.jar" />
|
|
<include name="groovy-datetime.jar" />
|
|
<include name="groovy-dateutil.jar" />
|
|
<include name="groovy-json.jar" />
|
|
<include name="groovy-jsr223.jar" />
|
|
<include name="groovy-nio.jar" />
|
|
<include name="groovy-sql.jar" />
|
|
<include name="groovy-swing.jar" />
|
|
<include name="groovy-xml.jar" />
|
|
<include name="ivy.jar" />
|
|
<include name="jsoup.jar" />
|
|
<include name="ant.jar" />
|
|
<include name="ant-launcher.jar" />
|
|
<include name="ant-commons-net.jar" />
|
|
<include name="ant-jsch.jar" />
|
|
<include name="ant-javamail.jar" />
|
|
<include name="commons-net.jar" />
|
|
<include name="jsch.jar" />
|
|
<include name="javax.mail.jar" />
|
|
<include name="activation.jar" />
|
|
<include name="bcprov-jdk15on.jar" />
|
|
<include name="bcpg-jdk15on.jar" />
|
|
</fileset>
|
|
<fileset dir="${dir.lib}/ivy/bundle">
|
|
<include name="args4j.jar" />
|
|
<include name="json-io.jar" />
|
|
<include name="guava.jar" />
|
|
</fileset>
|
|
<fileset dir="${dir.lib}/jars">
|
|
<include name="xmlrpc.jar" />
|
|
<include name="ObjCBridge.jar" />
|
|
<include name="simmetrics.jar" />
|
|
<include name="jacksum.jar" />
|
|
</fileset>
|
|
</copy>
|
|
|
|
<!-- compile -->
|
|
<javac srcdir="${dir.source}" destdir="${dir.build}" release="${jvm.version}" encoding="utf-8" debug="yes" debuglevel="lines,vars,source" includeAntRuntime="no">
|
|
<classpath>
|
|
<fileset dir="${dir.dist}/lib" />
|
|
</classpath>
|
|
</javac>
|
|
|
|
<!-- copy property files -->
|
|
<copy-replace todir="${dir.build}">
|
|
<fileset dir="${dir.source}" includes="**/*.properties" />
|
|
</copy-replace>
|
|
|
|
<!-- copy resources -->
|
|
<copy todir="${dir.build}">
|
|
<fileset dir="${dir.source}">
|
|
<exclude name="**/*.java" />
|
|
<exclude name="**/*.properties" />
|
|
</fileset>
|
|
</copy>
|
|
</target>
|
|
|
|
|
|
<target name="jar" depends="build">
|
|
<jar destfile="${dir.dist}/lib/filebot.jar">
|
|
<fileset dir="${dir.build}" />
|
|
<manifest>
|
|
<attribute name="Build-Date" value="${tstamp.date}" />
|
|
<attribute name="Build-Revision" value="${revision}" />
|
|
</manifest>
|
|
</jar>
|
|
</target>
|
|
|
|
|
|
<target name="appbundle-maspkg-core">
|
|
<antcall target="appbundle-maspkg">
|
|
<param name="application.name" value="FileBot" />
|
|
<param name="application.executable" value="filebot.launcher" />
|
|
<param name="application.identifier" value="${package.identifier}" />
|
|
<param name="application.icon" value="${dir.installer}/appbundle/filebot.icns" />
|
|
<param name="application.cert.appbundle" value="3rd Party Mac Developer Application: ${package.company}" />
|
|
<param name="application.cert.installer" value="3rd Party Mac Developer Installer: ${package.company}" />
|
|
|
|
<!-- MAS does not allow subtitle apps -->
|
|
<param name="application.mode" value="Rename|Episodes|SFV|Filter|List" />
|
|
|
|
<!-- libjfxwebkit.dylib cannot be deployed on the MAS due to deprecated dependencies -->
|
|
<param name="application.help" value="ask" />
|
|
</antcall>
|
|
</target>
|
|
|
|
|
|
<target name="appbundle-maspkg-subtitles">
|
|
<antcall target="appbundle-maspkg">
|
|
<param name="application.name" value="FileBot Subtitles" />
|
|
<param name="application.executable" value="filebot.subtitles.launcher" />
|
|
<param name="application.identifier" value="${package.identifier}.Subtitles" />
|
|
<param name="application.icon" value="${dir.installer}/appbundle/subtitles.icns" />
|
|
<param name="application.cert.appbundle" value="Developer ID Application: ${package.company}" />
|
|
<param name="application.cert.installer" value="Developer ID Installer: ${package.company}" />
|
|
<param name="application.mode" value="Subtitles" />
|
|
<param name="application.help" value="skip" />
|
|
</antcall>
|
|
</target>
|
|
|
|
|
|
<target name="appbundle-maspkg" depends="revision">
|
|
<property name="dir.staging" location="${dir.dist}/mas" />
|
|
|
|
<property name="path.app" location="${dir.staging}/${application.name}.app" />
|
|
<property name="path.pkg" location="${dir.staging}/${application.name}_${application.version}_r${revision}.pkg" />
|
|
|
|
<!-- fetch latest JRE -->
|
|
<get-macos-jre dest="${dir.staging}" />
|
|
|
|
<bundleapp jvmrequired="${jvm.version}" minimumsystemversion="${mac.version}" outputdirectory="${dir.staging}" executablename="${application.executable}" name="${application.name}" displayname="${application.name}" version="${revision}" shortversion="${application.version}" identifier="${application.identifier}" mainclassname="${main.class}" icon="${application.icon}" copyright="${tstamp.year} ${package.company}" applicationcategory="${mac.application.category}" highresolutioncapable="true" supportsautomaticgraphicsswitching="true" debug="true">
|
|
<classpath dir="${dir.dist}/lib" />
|
|
<librarypath dir="${dir.lib}/native/mac-x86_64" />
|
|
|
|
<arch name="x86_64" />
|
|
<runtime dir="${dir.staging}/jre-${java.version}.jre/Contents/Home">
|
|
<include name="**/*" />
|
|
</runtime>
|
|
|
|
<argument value="--mode" />
|
|
<argument value="${application.mode}" />
|
|
|
|
<!-- WORKING_DIR is sandbox data folder -->
|
|
<option value="-Dapplication.dir=Library/Application Support/User Data" />
|
|
<option value="-Dapplication.cache=Library/Caches/ehcache.disk.store" />
|
|
<option value="-Djava.io.tmpdir=Library/Caches/java.io.tmpdir" />
|
|
|
|
<option value="-Dnet.filebot.UserFiles.fileChooser=COCOA" />
|
|
<option value="-Dapplication.name=${application.name}" />
|
|
<option value="-Dapplication.help=${application.help}" />
|
|
<option value="-Dapplication.deployment=mas" />
|
|
<option value="-Dapplication.update=skip" />
|
|
<option value="-DuseExtendedFileAttributes=true" />
|
|
<option value="-DuseCreationDate=false" />
|
|
|
|
<option value="-Djava.net.useSystemProxies=true" />
|
|
<option value="-Dfile.encoding=UTF-8" />
|
|
|
|
<option value="-Djna.nosys=true" />
|
|
<option value="-Djna.nounpack=true" />
|
|
<option value="-Djna.boot.library.name=jnidispatch" />
|
|
<option value="-Djna.boot.library.path=$APP_ROOT/Contents/MacOS" />
|
|
|
|
<option value="-Djna.library.path=$APP_ROOT/Contents/MacOS" />
|
|
<option value="-Djava.library.path=$APP_ROOT/Contents/MacOS" />
|
|
<option value="-Dnet.filebot.AcoustID.fpcalc=$APP_ROOT/Contents/MacOS/fpcalc" />
|
|
|
|
<option value="-Dapple.laf.useScreenMenuBar=true" />
|
|
<option value="-Dapple.awt.application.name=${application.name}" />
|
|
|
|
<bundledocument role="viewer" handlerRank="none" contentTypes="public.movie" name="Video file" />
|
|
<bundledocument role="viewer" handlerRank="none" contentTypes="public.audio" name="Audio file" />
|
|
<bundledocument role="viewer" handlerRank="none" contentTypes="public.folder" name="Media folder" />
|
|
</bundleapp>
|
|
|
|
<!-- remove unused language resources -->
|
|
<delete verbose="yes" includeEmptyDirs="yes">
|
|
<fileset dir="${path.app}/Contents/Resources">
|
|
<include name="**.lproj/**" />
|
|
<exclude name="en.lproj/**" />
|
|
</fileset>
|
|
</delete>
|
|
|
|
<property name="path.app.jre" location="${path.app}/Contents/PlugIns/jre-${jre.version}.jre" />
|
|
|
|
<!-- MAS validation is a bit buggy and requires even libraries and frameworks to have a unique CFBundleIdentifier Collision -->
|
|
<replace file="${path.app.jre}/Contents/Info.plist" token="com.oracle.java.${jre.version}.jre" value="${application.identifier}.jre" encoding="UTF-8" summary="true" />
|
|
|
|
<!-- fix broken symlink -->
|
|
<copy file="${dir.staging}/jre-${java.version}.jre/Contents/Home/lib/jli/libjli.dylib" tofile="${path.app.jre}/Contents/MacOS/libjli.dylib" overwrite="yes" verbose="yes" failonerror="yes" />
|
|
|
|
<!-- fix permissions (fpcalc and jspawnhelper be executable and signed with inherit entitlements) -->
|
|
<chmod perm="+x">
|
|
<fileset dir="${path.app}">
|
|
<include name="**/jspawnhelper" />
|
|
<include name="**/fpcalc" />
|
|
<include name="**/*.sh" />
|
|
</fileset>
|
|
</chmod>
|
|
|
|
<!-- JRE sign all jars, dylibs and executables -->
|
|
<property name="sign" value="--verbose --force --sign '${application.cert.appbundle}'" />
|
|
<property name="entitlements" value="--entitlements '${dir.installer}/appbundle/FileBot.entitlements'" />
|
|
<property name="entitlements.inherit" value="--entitlements '${dir.installer}/appbundle/inherit.entitlements'" />
|
|
|
|
<!-- sign helper tools with inherit entitlements -->
|
|
<apply executable="codesign" parallel="yes" failonerror="yes">
|
|
<arg line="${sign} ${entitlements.inherit}" />
|
|
<fileset dir="${path.app}">
|
|
<include name="**/jspawnhelper" />
|
|
<include name="**/fpcalc" />
|
|
<include name="**/*.dylib" />
|
|
<include name="**/*.jar" />
|
|
<include name="**/*.sh" />
|
|
</fileset>
|
|
</apply>
|
|
|
|
<!-- sign frameworks -->
|
|
<exec executable="codesign" failonerror="yes">
|
|
<arg line="${sign} ${entitlements.inherit} '${path.app.jre}'" />
|
|
</exec>
|
|
|
|
<!-- sign app -->
|
|
<exec executable="codesign" failonerror="yes">
|
|
<arg line="${sign} ${entitlements} '${path.app}'" />
|
|
</exec>
|
|
|
|
<!-- verify signature -->
|
|
<exec executable="codesign" failonerror="yes">
|
|
<arg line="--verbose --deep --verify '${path.app}'" />
|
|
</exec>
|
|
|
|
<!-- build package -->
|
|
<exec executable="productbuild" failonerror="yes">
|
|
<arg line="--component '${path.app}' /Applications '${path.pkg}' --sign '${application.cert.installer}'" />
|
|
</exec>
|
|
|
|
<!-- store as release build-->
|
|
<copy todir="${dir.release}" file="${path.pkg}" verbose="yes" />
|
|
</target>
|
|
|
|
|
|
<target name="app" depends="revision" description="Build Mac app bundle">
|
|
<property name="dir.staging" location="${dir.dist}/app" />
|
|
|
|
<copy-replace todir="${dir.staging}/bin">
|
|
<fileset dir="${dir.installer}/app" includes="*.sh" />
|
|
</copy-replace>
|
|
|
|
<!-- fetch latest JRE -->
|
|
<get-macos-jre dest="${dir.staging}" />
|
|
|
|
<bundleapp jvmrequired="${jvm.version}" minimumsystemversion="${mac.version}" outputdirectory="${dir.staging}" executablename="${package.name}.launcher" name="${application.name}" displayname="${application.name}.launcher" version="${revision}" shortversion="${application.version}" identifier="${package.identifier}" mainclassname="${main.class}" icon="${dir.installer}/icons/filebot.icns" copyright="${tstamp.year} ${package.company}" applicationcategory="${mac.application.category}" highresolutioncapable="true" supportsautomaticgraphicsswitching="true">
|
|
<arch name="x86_64" />
|
|
<runtime dir="${dir.staging}/jre-${java.version}.jre/Contents/Home">
|
|
<include name="**/*" />
|
|
</runtime>
|
|
|
|
<classpath dir="${dir.dist}/lib" />
|
|
<librarypath dir="${dir.staging}/bin" />
|
|
<librarypath dir="${dir.lib}/native/mac-x86_64" />
|
|
|
|
<bundledocument role="viewer" handlerRank="none" contentTypes="public.movie" name="Video file" />
|
|
<bundledocument role="viewer" handlerRank="none" contentTypes="public.audio" name="Audio file" />
|
|
<bundledocument role="viewer" handlerRank="none" contentTypes="public.folder" name="Media folder" />
|
|
|
|
<bundledocument extensions="${license.extension}" icon="${dir.installer}/icons/filebot.icns" name="${license.description}" role="viewer" handlerRank="owner" contentTypes="net.filebot.license" />
|
|
<typedeclaration extensions="${license.extension}" icon="${dir.installer}/icons/filebot.icns" description="${license.description}" conformsTo="public.plain-text" identifier="net.filebot.license" mimeTypes="${license.mimetype}" />
|
|
|
|
<option value="-Dapple.laf.useScreenMenuBar=true" />
|
|
<option value="-Dapple.awt.application.name=${application.name}" />
|
|
|
|
<option value="-Dunixfs=false" />
|
|
<option value="-DuseExtendedFileAttributes=true" />
|
|
<option value="-DuseCreationDate=false" />
|
|
<option value="-Djava.net.useSystemProxies=true" />
|
|
<option value="-Djna.nosys=true" />
|
|
<option value="-Djna.nounpack=true" />
|
|
|
|
<option value="-Dnet.filebot.UserFiles.fileChooser=COCOA" />
|
|
|
|
<option value="-Dapplication.deployment=app" />
|
|
<option value="-Dapplication.help=ask" />
|
|
|
|
<option value="-Djna.boot.library.name=jnidispatch" />
|
|
<option value="-Djna.boot.library.path=$APP_ROOT/Contents/MacOS" />
|
|
|
|
<option value="-Djna.library.path=$APP_ROOT/Contents/MacOS" />
|
|
<option value="-Djava.library.path=$APP_ROOT/Contents/MacOS" />
|
|
<option value="-Dnet.filebot.AcoustID.fpcalc=$APP_ROOT/Contents/MacOS/fpcalc" />
|
|
|
|
|
|
<option value="--illegal-access=permit" />
|
|
<option value="--add-opens=java.base/java.lang=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.lang.invoke=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.util=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.util.function=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.util.regex=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.net=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.io=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.nio.file=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.nio.file.attribute=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.nio.channels=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.nio.charset=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.time=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.base/java.time.chrono=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.logging/java.util.logging=ALL-UNNAMED" />
|
|
<option value="--add-opens=java.desktop/java.awt=ALL-UNNAMED" />
|
|
</bundleapp>
|
|
|
|
<!-- fix permissions -->
|
|
<chmod perm="+x" verbose="yes">
|
|
<fileset dir="${dir.staging}">
|
|
<include name="*.app/**/MacOS/filebot.*" />
|
|
<include name="*.app/**/MacOS/fpcalc" />
|
|
<include name="*.app/**/lib/jspawnhelper" />
|
|
<include name="*.app/**/bin/*" />
|
|
</fileset>
|
|
</chmod>
|
|
|
|
<tar destfile="${dir.dist}/${release}.app.tar.xz" compression="${tar.compression}" longfile="posix" encoding="utf-8">
|
|
<tarfileset dir="${dir.staging}">
|
|
<include name="*.app/**" />
|
|
<exclude name="*.app/**/MacOS/filebot.*" />
|
|
<exclude name="*.app/**/MacOS/fpcalc" />
|
|
<exclude name="*.app/**/lib/jspawnhelper" />
|
|
<exclude name="*.app/**/bin/*" />
|
|
</tarfileset>
|
|
<tarfileset dir="${dir.staging}" filemode="755">
|
|
<include name="*.app/**/MacOS/filebot.*" />
|
|
<include name="*.app/**/MacOS/fpcalc" />
|
|
<include name="*.app/**/lib/jspawnhelper" />
|
|
<include name="*.app/**/bin/*" />
|
|
</tarfileset>
|
|
</tar>
|
|
</target>
|
|
|
|
|
|
<target name="pkg" depends="revision" description="Build Mac installer package">
|
|
<property name="dir.staging" location="${dir.dist}/pkg" />
|
|
|
|
<copy-replace todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/pkg" />
|
|
</copy-replace>
|
|
|
|
<!-- fix permissions -->
|
|
<chmod perm="+x" verbose="yes">
|
|
<fileset dir="${dir.staging}/scripts" />
|
|
</chmod>
|
|
|
|
<exec executable="pkgbuild" dir="${dir.staging}" failonerror="yes">
|
|
<arg line="${package.name}.pkg --component ${dir.dist}/app/${application.name}.app --scripts scripts" />
|
|
</exec>
|
|
<exec executable="productbuild" dir="${dir.staging}" failonerror="yes">
|
|
<arg line="${dir.dist}/${release}.pkg --distribution distribution.xml --package-path . --sign 'Developer ID Installer: ${package.company}'" />
|
|
</exec>
|
|
</target>
|
|
|
|
|
|
<target name="snap" depends="revision" description="Build Ubuntu snap package">
|
|
<property name="dir.staging" location="${dir.dist}/snap" />
|
|
<property name="dir.base" location="${dir.staging}/base" />
|
|
|
|
<get-linux-jre dest="${dir.base}/jre" />
|
|
|
|
<!-- copy files and resolve ant variables -->
|
|
<copy-replace todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/snap" />
|
|
</copy-replace>
|
|
|
|
<copy todir="${dir.base}/filebot/jar">
|
|
<fileset dir="${dir.dist}/lib" includes="*.jar" />
|
|
</copy>
|
|
<copy todir="${dir.base}/filebot/lib">
|
|
<fileset dir="${dir.lib}/native/linux-amd64" />
|
|
</copy>
|
|
<chmod perm="+x" verbose="yes">
|
|
<fileset dir="${dir.base}" includes="**/bin/**" />
|
|
</chmod>
|
|
|
|
<exec executable="snapcraft" dir="${dir.staging}" failonerror="yes">
|
|
<arg line="cleanbuild" />
|
|
</exec>
|
|
</target>
|
|
|
|
|
|
<target name="deb" depends="revision" description="Build Debian package">
|
|
<property name="dir.staging" location="${dir.dist}/deb" />
|
|
|
|
<get-linux-jre dest="${dir.staging}/jre" />
|
|
|
|
<copy-replace todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/deb" />
|
|
</copy-replace>
|
|
|
|
<jdeb destfile="${dir.dist}/${application.name}_${application.version}_amd64.deb" control="${dir.staging}/control" compression="${tar.compression}" verbose="true">
|
|
<tarfileset prefix="/usr/share/filebot/jre" dir="${dir.staging}/jre" includes="**/bin/**" filemode="755" />
|
|
<tarfileset prefix="/usr/share/filebot/jre" dir="${dir.staging}/jre" excludes="**/bin/**" />
|
|
|
|
<tarfileset prefix="/usr/share/filebot/bin" dir="${dir.staging}" includes="*.sh" filemode="755" />
|
|
<tarfileset prefix="/usr/share/filebot/jar" dir="${dir.dist}/lib" />
|
|
<tarfileset prefix="/usr/share/filebot/lib" dir="${dir.lib}/native/linux-amd64" includes="fpcalc" filemode="755" />
|
|
<tarfileset prefix="/usr/share/filebot/lib" dir="${dir.lib}/native/linux-amd64" includes="*.so" />
|
|
|
|
<tarfileset prefix="/usr/share/icons/hicolor/scalable/apps" dir="${dir.installer}/icons" includes="filebot.svg" />
|
|
<tarfileset prefix="/usr/share" dir="${dir.staging}/share" />
|
|
</jdeb>
|
|
</target>
|
|
|
|
|
|
<target name="appx" depends="revision" description="Build Windows 10 package">
|
|
<property name="dir.staging" location="${dir.dist}/appx" />
|
|
|
|
<copy todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/appx" includes="*.exe, **/*.png" />
|
|
</copy>
|
|
<copy todir="${dir.staging}/lib">
|
|
<fileset dir="${dir.lib}/native/win32-x64" />
|
|
</copy>
|
|
<copy todir="${dir.staging}/jar">
|
|
<fileset dir="${dir.dist}/lib" includes="*.jar" />
|
|
</copy>
|
|
|
|
<!-- copy files and resolve ant variables -->
|
|
<copy-replace todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/appx" includes="*.xml, *.ini" excludes="*.l4j.xml" />
|
|
</copy-replace>
|
|
|
|
<!-- fetch latest JRE -->
|
|
<get-windows-jre dest="${dir.staging}/jre" />
|
|
|
|
<!-- Workaround for VS2013 / CoInitialize hack (see http://mail.openjdk.java.net/pipermail/swing-dev/2018-February/008323.html) -->
|
|
<delete verbose="yes">
|
|
<fileset dir="${dir.staging}/jre" includes="**/*120*.dll" />
|
|
</delete>
|
|
|
|
|
|
<!-- package APPX -->
|
|
<exec executable="makepri" dir="${dir.staging}" failonerror="yes">
|
|
<arg line="createconfig /o /pv 10.0.0 /cf priconfig.xml /dq en-US" />
|
|
</exec>
|
|
<exec executable="makepri" dir="${dir.staging}" failonerror="yes">
|
|
<arg line="new /o /pr . /cf priconfig.xml /in ${microsoft.application.name}" />
|
|
</exec>
|
|
<exec executable="makeappx" dir="${dir.dist}" failonerror="yes">
|
|
<arg line="pack /v /o /d ${dir.staging} /p ${release}_r${revision}_x64.appx" />
|
|
</exec>
|
|
</target>
|
|
|
|
|
|
<target name="msi" depends="revision" description="Build Windows Installer package">
|
|
<property name="dir.staging" location="${dir.dist}/msi/x64" />
|
|
|
|
<!-- 1. prepare application files for heat harvest -->
|
|
<get-windows-jre dest="${dir.staging}/base/jre" />
|
|
|
|
<copy todir="${dir.staging}/base/jar">
|
|
<fileset dir="${dir.dist}/lib" includes="*.jar" />
|
|
</copy>
|
|
<copy todir="${dir.staging}/base/lib">
|
|
<fileset dir="${dir.lib}/native/win32-x64" />
|
|
</copy>
|
|
|
|
<exec executable="heat" dir="${dir.staging}" failonerror="true">
|
|
<arg line="dir base -v -srd -gg -dr ApplicationBase -cg ApplicationBase -template fragment -sreg -sfrag -scom -out base.wxs" />
|
|
</exec>
|
|
<exec executable="candle" dir="${dir.staging}" failonerror="true">
|
|
<arg line="base.wxs -out base.wixobj" />
|
|
</exec>
|
|
|
|
|
|
<!-- 2. prepare installer files and application stub for candle light -->
|
|
<copy-replace todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/msi" includes="*.wix, *.ini" />
|
|
</copy-replace>
|
|
<exec executable="candle" dir="${dir.staging}" failonerror="true">
|
|
<arg line="filebot.wix -out filebot.wixobj" />
|
|
</exec>
|
|
|
|
<!-- 3. compile MSI package (use -b to add additional resource folders) -->
|
|
<exec executable="light" dir="${dir.staging}" failonerror="true">
|
|
<arg line="filebot.wixobj base.wixobj -b base -b ${dir.installer}/msi -sval -ext WixUIExtension -out ${dir.dist}/${release}_x64.msi" />
|
|
</exec>
|
|
</target>
|
|
|
|
|
|
<target name="portable" depends="revision" description="Build portable package">
|
|
<property name="dir.staging" location="${dir.dist}/portable" />
|
|
|
|
<copy-replace todir="${dir.staging}">
|
|
<fileset dir="${dir.installer}/portable" includes="*.sh" />
|
|
</copy-replace>
|
|
|
|
<tar destfile="${dir.dist}/${release}-portable.tar.xz" compression="${tar.compression}" longfile="posix" encoding="utf-8">
|
|
<tarfileset dir="${dir.staging}" includes="*.sh" filemode="755" />
|
|
<tarfileset prefix="jar" dir="${dir.dist}/lib" />
|
|
|
|
<!-- include native libraries for all supported platforms -->
|
|
<tarfileset prefix="lib/armv7l" dir="${dir.lib}/native/linux-armv7l" includes="*.so" />
|
|
<tarfileset prefix="lib/aarch64" dir="${dir.lib}/native/linux-armv8" includes="*.so" />
|
|
<tarfileset prefix="lib/i686" dir="${dir.lib}/native/linux-i686" includes="*.so" />
|
|
<tarfileset prefix="lib/x86_64" dir="${dir.lib}/native/linux-amd64" includes="*.so" />
|
|
|
|
<!-- include maintainer public key -->
|
|
<tarfileset dir="${dir.installer}/gpg" includes="maintainer.pub" />
|
|
</tar>
|
|
</target>
|
|
|
|
|
|
<target name="spk" depends="revision" description="Build Synology NAS package">
|
|
<spk destdir="${dir.dist}" name="${package.name}" version="${application.version}" arch="noarch" compression="${tar.compression}">
|
|
<info name="displayname" value="${application.name}" />
|
|
<info name="description" value="${package.description}" />
|
|
<info name="maintainer" value="${package.project}" />
|
|
<info name="maintainer_url" value="${package.homepage}" />
|
|
<info name="distributor" value="${package.project}" />
|
|
<info name="distributor_url" value="${package.homepage}" />
|
|
<info name="support_url" value="${link.help.synology}" />
|
|
<info name="helpurl" value="${link.help.manpage}" />
|
|
<info name="firmware" value="6.0" />
|
|
<info name="startable" value="no" />
|
|
<info name="silent_install" value="yes" />
|
|
<info name="silent_uninstall" value="yes" />
|
|
<info name="silent_upgrade" value="yes" />
|
|
<info name="thirdparty" value="yes" />
|
|
|
|
<!-- Dependencies are troublesome for some users because they cannot be skipped or ignored (i.e. DSM does not support optional or recommended dependencies) -->
|
|
<!-- <info name="start_dep_services" value="ssh" /> -->
|
|
<!-- <info name="install_dep_packages" value="oracle-java" /> -->
|
|
|
|
<icon size="72" file="${dir.installer}/icons/icon72.png" />
|
|
<icon size="256" file="${dir.installer}/icons/icon256.png" />
|
|
|
|
<scripts dir="${dir.installer}/spk/scripts" filemode="755" />
|
|
<package dir="${dir.installer}/spk/package" includes="*.sh" filemode="755" />
|
|
<package file="${path.fatjar}" fullpath="FileBot.jar" />
|
|
|
|
<!-- include native libraries for all supported platforms -->
|
|
<package prefix="lib/armv7l" dir="${dir.lib}/native/linux-armv7l" includes="*.so" />
|
|
<package prefix="lib/armv8" dir="${dir.lib}/native/linux-armv8" includes="*.so" />
|
|
<package prefix="lib/i686" dir="${dir.lib}/native/linux-i686" includes="*.so" />
|
|
<package prefix="lib/x86_64" dir="${dir.lib}/native/linux-amd64" includes="*.so" />
|
|
|
|
<codesign secring="${dir.installer}/gpg/secring.gpg" keyid="${gpg.key}" password="${gpg.pwd}" />
|
|
</spk>
|
|
|
|
<move file="${dir.dist}/${package.name}-${application.version}-noarch.spk" tofile="${dir.dist}/${release}_noarch.spk" />
|
|
</target>
|
|
|
|
|
|
<target name="clean" description="Delete build artifacts">
|
|
<delete dir="${dir.dist}" />
|
|
<delete dir="${dir.build}" />
|
|
</target>
|
|
|
|
|
|
<target name="revision" depends="init">
|
|
<exec executable="git" outputproperty="revision" failonerror="true">
|
|
<arg line="rev-list --count master" />
|
|
</exec>
|
|
<echo>Revision: ${revision}</echo>
|
|
</target>
|
|
|
|
|
|
<target name="init">
|
|
<mkdir dir="${dir.build}" />
|
|
<mkdir dir="${dir.dist}" />
|
|
<mkdir dir="${dir.release}" />
|
|
<mkdir dir="${dir.cache}" />
|
|
|
|
<path id="lib.classpath">
|
|
<fileset dir="${dir.lib}" includes="**/*.jar" excludes="**/*-jdk14.jar" />
|
|
</path>
|
|
<taskdef resource="net/filebot/ant/spk/antlib.xml" classpathref="lib.classpath" />
|
|
<taskdef resource="org/vafer/jdeb/ant/antlib.xml" classpathref="lib.classpath" />
|
|
<taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask" classpathref="lib.classpath" />
|
|
</target>
|
|
|
|
|
|
<target name="deploy-release" description="Upload release files">
|
|
<mkdir dir="${dir.release}" />
|
|
|
|
<!-- prepare release packages -->
|
|
<copy todir="${dir.release}" verbose="yes" overwrite="yes">
|
|
<fileset dir="${dir.dist}">
|
|
<include name="*.msi" />
|
|
<include name="*.pkg" />
|
|
<include name="*.deb" />
|
|
<include name="*.tar.xz" />
|
|
<include name="*.spk" />
|
|
<include name="*.appx" />
|
|
<include name="*.snap" />
|
|
</fileset>
|
|
</copy>
|
|
|
|
<!-- add *.asc files -->
|
|
<release-sign>
|
|
<fileset dir="${dir.release}">
|
|
<exclude name="*.asc" />
|
|
<exclude name="*.sha256" />
|
|
</fileset>
|
|
</release-sign>
|
|
|
|
<!-- add *.sha256 files -->
|
|
<checksum algorithm="SHA-256" pattern="{0}" fileext=".sha256">
|
|
<fileset dir="${dir.release}">
|
|
<exclude name="*.asc" />
|
|
<exclude name="*.sha256" />
|
|
</fileset>
|
|
</checksum>
|
|
|
|
<!-- upload release files -->
|
|
<release-deploy dir="${dir.release}/.." todir="${deploy.release}/${package.name}" />
|
|
</target>
|
|
|
|
|
|
<target name="deploy-update" description="Upload incremental update archive">
|
|
<!-- TODO -->
|
|
</target>
|
|
|
|
|
|
<target name="deploy-synology" description="Update Synology Package Source" depends="init">
|
|
<mkdir dir="${dir.dist}/syno" />
|
|
|
|
<!-- merge all filebot related packages into a single package source file -->
|
|
<package-source file="${dir.dist}/syno/index.json">
|
|
<keyring file="${dir.installer}/gpg/FileBot.pub" />
|
|
<spk file="${dir.release}/${release}_noarch.spk">
|
|
<info name="link" value="https://get.filebot.net/${package.name}/${release}/${release}_noarch.spk" />
|
|
<thumbnail url="https://www.filebot.net/syno/filebot-thumbnail.png" />
|
|
<snapshot url="https://www.filebot.net/syno/filebot-snapshot.png" />
|
|
</spk>
|
|
<source url="https://raw.githubusercontent.com/filebot/filebot-node/master/spksrc.json" />
|
|
<source url="https://raw.githubusercontent.com/rednoah/java-installer/master/spksrc.json" />
|
|
<source url="https://raw.githubusercontent.com/rednoah/ant-installer/master/spksrc.json" />
|
|
</package-source>
|
|
|
|
<!-- upload -->
|
|
<release-deploy dir="${dir.dist}" todir="${deploy.release}">
|
|
<include name="syno/**" />
|
|
</release-deploy>
|
|
</target>
|
|
|
|
|
|
<target name="deploy-chocolatey" description="Update Chocolatey Package Source">
|
|
<checksum property="x64.msi.sha256" file="${dir.release}/${release}_x64.msi" algorithm="SHA-256" />
|
|
|
|
<!-- replace variables for new release -->
|
|
<copy-replace todir="${dir.dist}/chocolatey">
|
|
<fileset dir="${dir.installer}/chocolatey">
|
|
<include name="**/*.ps1" />
|
|
<include name="**/*.nuspec" />
|
|
</fileset>
|
|
</copy-replace>
|
|
|
|
<!-- chocolatey pack and push -->
|
|
<exec executable="chocolatey" dir="${dir.dist}/chocolatey" failonerror="yes">
|
|
<arg line="pack" />
|
|
</exec>
|
|
<exec executable="chocolatey" dir="${dir.dist}/chocolatey" failonerror="yes">
|
|
<arg line="push ${package.name}.${version}.nupkg" />
|
|
</exec>
|
|
</target>
|
|
|
|
|
|
|
|
|
|
<target name="deploy-website" depends="revision" description="Upload website resources">
|
|
<!-- copy image resources -->
|
|
<copy todir="${dir.dist}/website/resources" preservelastmodified="yes" verbose="yes" flatten="true">
|
|
<fileset dir="${dir.source}/net/filebot/resources">
|
|
<include name="*.png" />
|
|
</fileset>
|
|
</copy>
|
|
|
|
<!-- copy static website resources -->
|
|
<copy todir="${dir.dist}/website" preservelastmodified="yes" verbose="yes">
|
|
<fileset dir="${dir.website}">
|
|
<include name="*.json" />
|
|
<include name="*.xml" />
|
|
<include name="*.css" />
|
|
<include name="*.js" />
|
|
<include name="*.png" />
|
|
<include name="*.ico" />
|
|
<include name="*.txt" />
|
|
<include name="syno/**" />
|
|
<include name="images/**" />
|
|
<include name="screenshots/**" />
|
|
<include name="getting-started/**" />
|
|
</fileset>
|
|
</copy>
|
|
|
|
<!-- copy files and resolve ant variables -->
|
|
<copy-replace todir="${dir.dist}/website">
|
|
<fileset dir="${dir.website}">
|
|
<include name=".htaccess" />
|
|
<include name="*.html" />
|
|
<include name="*.php" />
|
|
</fileset>
|
|
</copy-replace>
|
|
|
|
<!-- upload -->
|
|
<release-deploy dir="${dir.dist}/website" todir="${deploy.website}" />
|
|
</target>
|
|
|
|
|
|
<target name="website-docs" depends="revision" description="Generate API documentation">
|
|
<javadoc destdir="${dir.dist}/website/docs" linksource="yes" access="public" classpathref="lib.classpath" encoding="UTF-8" charset="UTF-8" windowtitle="${application.name}" noindex="yes" nohelp="yes" notree="yes" nodeprecated="yes" nonavbar="yes">
|
|
<fileset dir="${dir.source}" includesfile="${dir.website}/docs/includes.fileset" />
|
|
<doctitle>${application.name} ${application.version}</doctitle>
|
|
<bottom>${application.name} ${application.version} (r${revision}) built on ${tstamp.date}</bottom>
|
|
<link href="http://docs.oracle.com/javase/${jre.version}/docs/api/" />
|
|
<link href="http://docs.groovy-lang.org/latest/html/api/" />
|
|
</javadoc>
|
|
</target>
|
|
|
|
|
|
<target name="eclipse-properties-builder">
|
|
<exec executable="git" outputproperty="revision" failonerror="true">
|
|
<arg line="rev-list --count master" />
|
|
</exec>
|
|
<copy-replace todir="bin">
|
|
<fileset dir="source" includes="**/*.properties" />
|
|
</copy-replace>
|
|
</target>
|
|
|
|
</project>
|