Files
processing4/build/build.xml

1018 lines
36 KiB
XML
Executable File

<?xml version="1.0"?>
<project name="Processing" default="build">
<!-- Sets properties for macosx/windows/linux depending on current system -->
<condition property="platform" value="macosx">
<os family="mac" />
</condition>
<condition property="platform" value="windows">
<os family="windows" />
</condition>
<condition property="platform" value="linux">
<and>
<os family="unix" />
<not>
<os family="mac" />
</not>
</and>
</condition>
<!-- Require Java 7 to bootstrap, otherwise there will be sadness.
Java 1.8 caused build problems (with ECJ?) so not supported. -->
<fail message="Unsupported Java version: ${java.version}. Make sure that Java 7 (aka Java 1.7) is installed.">
<condition>
<not>
<or>
<contains string="${java.version}" substring="1.7" />
</or>
</not>
</condition>
</fail>
<property name="examples.dir"
value="../../processing-docs/content/examples" />
<!-- Figure out the JRE download location for Linux and Windows. -->
<condition property="jre.file" value="jre-7u40-${platform}-i586.tgz">
<equals arg1="${sun.arch.data.model}" arg2="32" />
</condition>
<condition property="jre.file" value="jre-7u40-${platform}-x64.tgz">
<equals arg1="${sun.arch.data.model}" arg2="64" />
</condition>
<fileset dir="windows/work/java" id="jre-optional-windows">
<include name="bin/dtplugin" />
<include name="bin/plugin2" />
<include name="bin/kinit.exe" />
<include name="bin/klist.exe" />
<include name="bin/ktab.exe" />
<!--<include name="bin/keytool" />-->
<include name="bin/orbd" />
<include name="bin/policytool" />
<include name="bin/rmid" />
<include name="bin/rmiregistry" />
<include name="bin/servertool" />
<include name="bin/tnameserv" />
<include name="bin/javaws.exe" />
<include name="lib/javaws.jar" />
<include name="lib/ext/dnsns.jar" />
<include name="lib/cmm/PYCC.pf" />
</fileset>
<fileset dir="linux/work/java" id="jre-optional-linux">
<!--<include name="bin/keytool" />-->
<include name="bin/orbd" />
<include name="bin/policytool" />
<include name="bin/rmid" />
<include name="bin/rmiregistry" />
<include name="bin/servertool" />
<include name="bin/tnameserv" />
<include name="bin/javaws" />
<include name="lib/javaws.jar" />
<include name="lib/ext/dnsns.jar" />
<include name="lib/cmm/PYCC.pf" />
</fileset>
<!-- Unused JavaFX files that can be removed from the JRE on Windows
and Linux. On Mac OS X, this is removed by the appbundler task.
www.oracle.com/technetwork/java/javase/jdk-7-readme-429198.html -->
<!-- There might be others, based on what was in the Java 6 docs,
but that info isn't part of the Java 7 instructions.
http://www.oracle.com/technetwork/java/javase/jrereadme-182762.html -->
<fileset dir="${platform}/work/java" id="javafx-basics">
<include name="THIRDPARTYLICENSEREADME-JAVAFX.txt" />
<include name="lib/javafx.properties" />
<include name="lib/jfxrt.jar" />
<include name="lib/security/javafx.policy" />
</fileset>
<fileset dir="windows/work/java" id="javafx-windows">
<include name="bin/decora-sse.dll" />
<include name="bin/fxplugins.dll" />
<include name="bin/glass.dll" />
<include name="bin/glib-lite.dll" />
<include name="bin/gstreamer-lite.dll" />
<include name="bin/javafx-font.dll" />
<include name="bin/javafx-iio.dll" />
<include name="bin/jfxmedia.dll" />
<include name="bin/jfxwebkit.dll" />
<include name="bin/libxml2.dll" />
<include name="bin/libxslt.dll" />
</fileset>
<fileset dir="linux/work/java" id="javafx-linux-32">
<include name="lib/i386/fxavcodecplugin-52.so" />
<include name="lib/i386/fxavcodecplugin-53.so" />
<include name="lib/i386/fxplugins.so" />
<include name="lib/i386/libglass.so" />
<include name="lib/i386/libgstplugins-lite.so" />
<include name="lib/i386/libgstreamer-lite.so" />
<include name="lib/i386/libjavafx-font.so" />
<include name="lib/i386/libjavafx-iio.so" />
<include name="lib/i386/libjfxmedia.so" />
<include name="lib/i386/libjfxwebkit.so" />
<include name="lib/i386/libprism-es2.so" />
</fileset>
<fileset dir="linux/work/java" id="javafx-linux-64">
<include name="lib/amd64/fxavcodecplugin-52.so" />
<include name="lib/amd64/fxavcodecplugin-53.so" />
<include name="lib/amd64/fxplugins.so" />
<include name="lib/amd64/libglass.so" />
<include name="lib/amd64/libgstplugins-lite.so" />
<include name="lib/amd64/libgstreamer-lite.so" />
<include name="lib/amd64/libjavafx-font.so" />
<include name="lib/amd64/libjavafx-iio.so" />
<include name="lib/amd64/libjfxmedia.so" />
<include name="lib/amd64/libjfxwebkit.so" />
<include name="lib/amd64/libprism-es2.so" />
</fileset>
<!--
<echo message="${java.class.path}" />
-->
<!-- Set a property named macosx, linux, or windows.
The 'value' chosen is arbitrary. -->
<property name="${platform}" value="${platform}" />
<property environment="env" />
<!-- code signing hack, turns on code signing during dist -->
<condition property="codesign">
<equals arg1="${env.USER}" arg2="fry" />
</condition>
<!-- Set the version of Java that must be present to build. -->
<property name="jdk.update.macosx" value="67" />
<property name="jdk.path.macosx" value="/Library/Java/JavaVirtualMachines/jdk1.7.0_${jdk.update.macosx}.jdk" />
<available file="${jdk.path.macosx}" property="macosx_jdk_found" />
<fail if="macosx" unless="macosx_jdk_found"
message="JDK 7u${jdk.update.macosx} required.${line.separator}To build on OS X, you must install Oracle's JDK 7u${jdk.update.macosx} from${line.separator}http://www.oracle.com/technetwork/java/javase/downloads${line.separator}Note that only 7u${jdk.update.macosx} (not a later or earlier version) will work. ${line.separator}And it must be the JDK, not the JRE. And do not try to defy me again." />
<!--
<fail if="linux" unless="java_tools_found"
message="The JAVA_HOME variable must be set to the location of a full JDK. For instance, on Ubuntu Linux, this might be /usr/lib/jvm/java-6-sun." />
-->
<!-- Figure out the platform-specific output directory for all this work. -->
<condition property="target.path"
value="macosx/work/Processing.app/Contents/Java">
<os family="mac" />
</condition>
<condition property="target.path" value="linux/work">
<os family="unix" />
</condition>
<condition property="target.path" value="windows/work">
<os family="windows" />
</condition>
<!-- Libraries required for running processing -->
<!-- also need to copy these to the bundleapp task for macosx -->
<fileset dir=".." id="runtime.jars">
<include name="app/pde.jar" />
<include name="app/lib/antlr.jar" />
<include name="app/lib/jna.jar" />
<include name="app/lib/ant.jar" />
<include name="app/lib/ant-launcher.jar" />
<include name="app/lib/org-netbeans-swing-outline.jar" />
<include name="app/lib/jdi.jar" />
<include name="app/lib/jdimodel.jar" />
<include name="app/lib/org.eclipse.osgi_3.8.1.v20120830-144521.jar" />
<include name="app/lib/com.ibm.icu_4.4.2.v20110823.jar" />
</fileset>
<target name="build" description="Build Processing.">
<antcall target="${platform}-build" />
</target>
<target name="run" description="Run Processing.">
<antcall target="${platform}-run" />
</target>
<target name="dist" depends="revision-check"
description="Build Processing for distribution.">
<input message="Enter version number:"
addproperty="version"
defaultvalue="${revision}" />
<available file="${examples.dir}" property="examples.exist" />
<fail unless="examples.exist" message="To do a distribution, the processing-docs repo must be checked out at the same level as the processing repo." />
<antcall target="${platform}-dist" />
</target>
<!-- "§$§$&, ant doesn't have a built-in help target :( -->
<target name="help" description="Show project help">
<java classname="org.apache.tools.ant.Main">
<arg value="-p" />
</java>
</target>
<!-- - - - - - - - - - - - - - - - - - -->
<!-- Subprojects: Core, App, Libraries -->
<!-- - - - - - - - - - - - - - - - - - -->
<target name="subprojects-clean">
<subant buildpath="../core" target="clean"/>
<subant buildpath="../app" target="clean"/>
<subant buildpath="../java/libraries/dxf" target="clean"/>
<subant buildpath="../java/libraries/net" target="clean"/>
<subant buildpath="../java/libraries/pdf" target="clean"/>
<subant buildpath="../java/libraries/serial" target="clean"/>
<subant buildpath="shared/tools/MovieMaker" target="clean"/>
<subant buildpath="../pdex" target="clean"/>
<!-- make sure this isn't around from an old build 140730 -->
<delete dir="../java/examples" />
</target>
<target name="subprojects-build">
<subant buildpath="../core" target="build"/>
<subant buildpath="../app" target="build"/>
<subant buildpath="../java/libraries/dxf" target="build"/>
<subant buildpath="../java/libraries/net" target="build"/>
<subant buildpath="../java/libraries/pdf" target="build"/>
<subant buildpath="../java/libraries/serial" target="build"/>
<subant buildpath="shared/tools/MovieMaker" target="build"/>
<subant buildpath="../pdex" target="package"/>
</target>
<!-- - - - - - - - - -->
<!-- Basic Assembly -->
<!-- - - - - - - - - -->
<target name="assemble" depends="version-clear, version-write">
<fail unless="target.path"
message="Do not call assemble from the command line." />
<!-- copy shared tools folder -->
<copy todir="${target.path}/tools">
<fileset dir="shared/tools" />
</copy>
<copy todir="${target.path}/modes/java">
<fileset dir="../java">
<!-- don't include LWJGL, it's not operational -->
<exclude name="libraries/lwjgl/**" />
<exclude name="reference.zip" />
<exclude name="**/._*" />
</fileset>
</copy>
<!-- get the examples folder, but don't require it to buid -->
<copy todir="${target.path}/modes/java/examples" failonerror="false">
<fileset dir="${examples.dir}" />
</copy>
<unzip dest="${target.path}/modes/java"
src="../java/reference.zip"
overwrite="false">
<patternset>
<exclude name="__MACOSX/**" />
<exclude name="**/._*" />
</patternset>
</unzip>
<!-- copy PDE X mode folder-->
<copy todir="${target.path}/modes/">
<fileset dir="../pdex/dist" />
</copy>
</target>
<target name="version-clear">
<delete file="${target.path}/lib/version.txt" />
</target>
<target name="version-write" if="version">
<echo file="${target.path}/lib/version.txt" message="${version}"/>
</target>
<!-- - - - - - - - - -->
<!-- Revision check -->
<!-- - - - - - - - - -->
<target name="revision-check">
<!-- figure out the revision number -->
<loadfile srcfile="../todo.txt" property="revision">
<filterchain>
<headfilter lines="1"/>
<tokenfilter>
<stringtokenizer suppressdelims="true"/>
<!-- grab the thing from the first line that's 4 digits -->
<containsregex pattern="(\d\d\d\d)" />
</tokenfilter>
</filterchain>
</loadfile>
<!-- <echo message="revision is ${revision}." /> -->
<!-- figure out the revision number in base.java -->
<loadfile srcfile="../app/src/processing/app/Base.java"
property="revision.base">
<filterchain>
<tokenfilter>
<linetokenizer />
<containsregex pattern="String VERSION_NAME = "/>
<replaceregex pattern="[^0-9]*" flags="g" replace=""/>
</tokenfilter>
</filterchain>
</loadfile>
<!-- <echo message="base revision is ${revision.base}." /> -->
<condition property="revision.correct">
<!-- Using contains because I can't figure out how to get rid of the
LF in revision.base. Please file a bug if you have a fix. -->
<contains string="${revision.base}" substring="${revision}"/>
</condition>
<!-- the revision.base property won't be set
if $revision wasn't found... -->
<fail unless="revision.correct"
message="Fix revision number in Base.java" />
</target>
<!-- - - - - - - - -->
<!-- Mac OS X -->
<!-- - - - - - - - -->
<target name="macosx-clean" depends="subprojects-clean" description="Clean Mac OS X build">
<delete dir="macosx/work" />
<delete file="macosx/processing-*.dmg" />
</target>
<target name="macosx-checkos" unless="macosx">
<echo>
=======================================================
Processing for Mac OS X can only be built on Mac OS X.
Bye.
=======================================================
</echo>
<fail message="wrong platform (${os.name})" />
</target>
<target name="macosx-build" if="macosx" depends="revision-check, macosx-checkos, subprojects-build" description="Build Mac OS X version">
<mkdir dir="macosx/work" />
<!-- app bundler for OS X and Java 1.7 -->
<taskdef name="bundleapp"
classname="com.oracle.appbundler.AppBundlerTask"
classpath="macosx/appbundler.jar" />
<!--icon="macosx/processing.icns"-->
<bundleapp outputDirectory="macosx/work"
name="Processing"
displayName="Processing"
executableName="Processing"
identifier="org.processing.app"
signature="Pde2"
icon="macosx/processing.icns"
copyright="© The Processing Foundation"
getInfo="${version}, Copyright © The Processing Foundation"
shortVersion="${version}"
version="${revision}"
mainClassName="processing.app.Base">
<!-- The appbundler task needs a couple files (the Info.plist and
anything else outside /jre) from the full JDK, even though
it's primarily copying over the JRE folder. -->
<runtime dir="${jdk.path.macosx}/Contents/Home" />
<!-- Eventually we'll want to load the JRE directly from
the .tgz on the Oracle site, though it's in a folder called
jre1.7.0_40.jre, so we'll need to strip that out. -->
<!-- Same as runtime.jars, seen above; plus core.jar. -->
<classpath file="../app/pde.jar" />
<classpath file="../app/lib/antlr.jar" />
<classpath file="../app/lib/jna.jar" />
<classpath file="../app/lib/ant.jar" />
<classpath file="../app/lib/ant-launcher.jar" />
<classpath file="../app/lib/org-netbeans-swing-outline.jar" />
<classpath file="../app/lib/jdi.jar" />
<classpath file="../app/lib/jdimodel.jar" />
<classpath file="../app/lib/org.eclipse.osgi_3.8.1.v20120830-144521.jar" />
<classpath file="../app/lib/com.ibm.icu_4.4.2.v20110823.jar" />
<!-- plus core.jar... note that this is no longer shared -->
<classpath file="../core/library/core.jar" />
<arch name="x86_64"/>
<!-- no support for this with Java 7 from Oracle -->
<!--<arch name="i386"/>-->
<!--icon="macosx/template.app/Contents/Resources/pde.icns"-->
<!--icon="${bundle.icon}"-->
<bundledocument extensions="pde"
icon="macosx/pde.icns"
name="Processing Source Code"
role="Editor">
</bundledocument>
<!-- Sets dock icon when debugging (not launched via launch svcs) -->
<option value="-Xdock:icon=Contents/Resources/processing.icns" />
<!-- Don't think these actually make any difference. -->
<!--
<option value="-Xdock:name=Processing" />
-->
<!-- Probably no longer needed? [fry 130917]
<option value="-Xms128M" />
-->
<!-- returning 140606 per PDE X request -->
<option value="-Xmx256M" />
<option value="-Dapple.awt.application.name=Processing" />
<!-- avoid conflicts with JNA DLLs already in the path -->
<option value="-Djna.nosys=true" />
<option value="-Dapple.laf.useScreenMenuBar=true" />
<option value="-Dcom.apple.macos.use-file-dialog-packages=true" />
<option value="-Dcom.apple.macos.useScreenMenuBar=true" />
<option value="-Dcom.apple.smallTabs=true" />
<!--
the old options; most of these are probably no longer useful
<key>apple.laf.useScreenMenuBar</key>
<string>true</string>
<key>apple.awt.showGrowBox</key>
<string>true</string>
<key>com.apple.smallTabs</key>
<string>true</string>
<key>apple.awt.Antialiasing</key>
<string>false</string>
<key>apple.awt.TextAntialiasing</key>
<string>true</string>
<key>com.apple.hwaccel</key>
<string>true</string>
<key>apple.awt.use-file-dialog-packages</key>
<string>false</string>
<key>apple.awt.graphics.UseQuartz</key>
<string>true</string>
-->
</bundleapp>
<!-- The 'keytool' file is deleted by our appbundler. Add it back so that
Android signing works properly. (Not modifying our appbundler since
most of the time that appbundler is used, keytool isn't needed).
Also, because Ant's copy task does not retain file permissions on Unix systems,
we need to use <exec executable="cp" ... > instead -->
<exec executable="cp">
<arg line="${jdk.path.macosx}/Contents/Home/bin/keytool macosx/work/Processing.app/Contents/PlugIns/jdk1.7.0_${jdk.update.macosx}.jdk/Contents/Home/jre/bin"/>
</exec>
<copy todir="macosx/work/Processing.app/Contents/Java">
<fileset dir=".." includes="core/library/**" /> <!-- why this? -->
<!--<fileset dir="shared" includes="launch4j/**" />-->
<fileset dir="shared" includes="lib/**" excludes="lib/fonts/**" />
<fileset file="shared/revisions.txt" />
</copy>
<!--
Processing.app/Contents/PlugIns/jdk1.7.0_40.jdk/Contents/Home/jre/lib/fonts
-->
<copy todir="macosx/work/Processing.app/Contents/PlugIns/jdk1.7.0_${jdk.update.macosx}.jdk/Contents/Home/jre/lib/fonts">
<fileset dir="shared/lib/fonts" includes="*" />
</copy>
<antcall target="assemble">
<param name="target.path"
value="macosx/work/Processing.app/Contents/Java" />
</antcall>
<exec executable="macosx/language_gen.py" />
<property name="launch4j.dir" value="macosx/work/Processing.app/Contents/Java/modes/java/application/launch4j" />
<!-- rename the version we need -->
<move file="${launch4j.dir}/bin/windres-macosx"
tofile="${launch4j.dir}/bin/windres" />
<move file="${launch4j.dir}/bin/ld-macosx"
tofile="${launch4j.dir}/bin/ld" />
<!-- make executable (ant doesn't preserve) -->
<chmod perm="ugo+x" file="${launch4j.dir}/bin/windres" />
<chmod perm="ugo+x" file="${launch4j.dir}/bin/ld" />
<!-- remove the others -->
<delete failonerror="true">
<fileset dir="${launch4j.dir}/bin" includes="ld-*" />
<fileset dir="${launch4j.dir}/bin" includes="windres-*" />
</delete>
</target>
<target name="macosx-run" depends="macosx-build"
description="Run Mac OS X version">
<exec executable="open" dir="macosx/work" spawn="true">
<arg value="-a" />
<arg value="/Applications/Utilities/Terminal.app" />
<!-- <arg value="Processing.app/Contents/MacOS/JavaApplicationStub" />-->
<arg value="Processing.app/Contents/MacOS/Processing" />
</exec>
</target>
<target name="macosx-dist-sign" if="codesign">
<echo>
Code signing will only work if you have a $99/yr Apple developer ID.
With a proper ID, if code signing fails, you may need to use:
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"
</echo>
<!-- 3rd party is for the app store, dev id is gatekeeper only -->
<!--<arg value="3rd Party Mac Developer Application" />-->
<exec executable="/usr/bin/codesign" dir="macosx/work">
<arg value="--force" />
<arg value="--sign" />
<arg value="Developer ID Application" />
<arg value="Processing.app/Contents/PlugIns/jdk1.7.0_${jdk.update.macosx}.jdk" />
</exec>
<exec executable="/usr/bin/codesign" dir="macosx/work">
<arg value="--force" />
<arg value="--sign" />
<arg value="Developer ID Application" />
<arg value="Processing.app" />
</exec>
</target>
<target name="macosx-dist" if="macosx"
depends="macosx-build"
description="Create a downloadable .zip for the Mac OS X version">
<!-- The ant copy command does not preserve permissions. -->
<chmod file="macosx/work/Processing.app/Contents/MacOS/JavaApplicationStub" perm="ugo+x" />
<!-- Now handled by the app bundler -->
<!--
<replace file="macosx/work/Processing.app/Contents/Info.plist"
token="VERSION" value="${version}" />
<replace file="macosx/work/Processing.app/Contents/Info.plist"
token="REVISION" value="${revision}" />
-->
<antcall target="macosx-dist-sign" />
<exec executable="ditto" dir="macosx/work">
<arg line="-c -k -rsrc . ../processing-${version}-macosx.zip" />
</exec>
<echo>
=======================================================
Processing for Mac OS X was built. Grab it from
macosx/processing-${version}-macosx.zip
=======================================================
</echo>
</target>
<!-- - - - - - - - -->
<!-- Linux -->
<!-- - - - - - - - -->
<target name="linux-clean" depends="subprojects-clean" description="Clean linux version">
<delete dir="linux/work" />
</target>
<target name="linux-checkos" unless="linux">
<echo>
=======================================================
Processing for Linux can only be built on on unix systems.
Bye.
=======================================================
</echo>
<fail message="wrong platform (${os.name})" />
</target>
<target name="linux-build" depends="revision-check, linux-checkos, subprojects-build" description="Build linux version">
<mkdir dir="linux/work" />
<copy todir="linux/work">
<fileset dir=".." includes="core/library/**" />
<fileset dir="shared" includes="launch4j/**" />
<fileset dir="shared" includes="lib/**" excludes="lib/fonts/**" />
<fileset dir="shared" includes="modes/**" />
<fileset file="shared/revisions.txt" />
</copy>
<antcall target="assemble">
<param name="target.path" value="linux/work" />
</antcall>
<property name="launch4j.dir" value="linux/work/modes/java/application/launch4j" />
<!-- rename the version we need -->
<move file="${launch4j.dir}/bin/windres-linux"
tofile="${launch4j.dir}/bin/windres" />
<move file="${launch4j.dir}/bin/ld-linux"
tofile="${launch4j.dir}/bin/ld" />
<!-- make executable (ant doesn't preserve) -->
<chmod perm="ugo+x" file="${launch4j.dir}/bin/windres" />
<chmod perm="ugo+x" file="${launch4j.dir}/bin/ld" />
<!-- remove the others -->
<delete failonerror="true">
<fileset dir="${launch4j.dir}/bin" includes="ld-*" />
<fileset dir="${launch4j.dir}/bin" includes="windres-*" />
</delete>
<copy todir="linux/work/lib" flatten="true">
<fileset refid="runtime.jars" />
</copy>
<copy file="linux/processing" todir="linux/work" />
<chmod perm="ugo+x" file="linux/work/processing" />
<!-- copy command line tool -->
<copy file="linux/processing" tofile="linux/work/processing-java" />
<chmod perm="ugo+x" file="linux/work/processing-java" />
<!--
<property name="jre.file"
value="jre-tools-6u37-linux${sun.arch.data.model}.tgz" />
-->
<get src="http://processing.googlecode.com/files/${jre.file}"
dest="linux/jre.tgz"
usetimestamp="true" />
<!--
Cannot use ant version of tar because it doesn't preserve properties.
<untar compression="gzip"
dest="linux/work"
src="linux/jre.tgz"
overwrite="false"/>
-->
<!--
http://www.gnu.org/software/tar/manual/html_section/transform.html
-->
<exec executable="tar" dir="linux">
<!-- Change directory -->
<!--
<arg value="-C" />
<arg value="linux/work" />
<arg value="-xzpf" />
-->
<arg value="xfz" />
<arg value="jre.tgz"/>
</exec>
<!--
We only want to move when the folder didn't exist before
<move file="linux/jre1.7.0_40" tofile="linux/work/java" />
-->
<exec executable="rsync" dir="linux">
<arg value="-a" />
<arg value="--delete" />
<arg value="jre1.7.0_40/" />
<arg value="work/java" />
</exec>
<delete dir="linux/jre1.7.0_40" />
<!-- Remove unused JRE bloat. -->
<delete failonerror="true">
<fileset refid="javafx-basics" />
<fileset refid="javafx-linux-${sun.arch.data.model}" />
<fileset refid="jre-optional-linux" />
</delete>
<copy todir="linux/work/java/lib/fonts">
<fileset dir="shared/lib/fonts" includes="*" />
</copy>
</target>
<target name="linux-run" depends="linux-build"
description="Run Linux version">
<exec executable="./processing" dir="linux/work" spawn="true"/>
</target>
<target name="linux-dist" depends="linux-build"
description="Build .tar.gz of linux version">
<!--
<tar compression="gzip" destfile="linux/processing-${version}.tgz">
<tarfileset dir="linux/work" prefix="processing-${version}" />
</tar>
-->
<!-- rename the work folder temporarily -->
<move file="linux/work" tofile="linux/processing-${version}" />
<property name="linux.dist" value="linux/processing-${version}-linux${sun.arch.data.model}.tgz" />
<exec executable="tar">
<arg value="--directory=linux" />
<arg value="--file=${linux.dist}" />
<arg value="-cpz" />
<arg value="processing-${version}" />
</exec>
<!-- put... the candle... back -->
<!-- (rename the work processing-NNNN version to work) -->
<move file="linux/processing-${version}" tofile="linux/work" />
<echo>
=======================================================
Processing for Linux was built. Grab the archive from
${linux.dist}
=======================================================
</echo>
</target>
<!-- - - - - - - - -->
<!-- Windows -->
<!-- - - - - - - - -->
<target name="windows-clean" depends="subprojects-clean"
description="Clean windows version">
<delete dir="windows/work" />
</target>
<target name="windows-checkos" unless="windows">
<echo>
=======================================================
Processing for Windows can only be built on windows.
Bye.
=======================================================
</echo>
<fail message="wrong platform (${os.name})" />
</target>
<target name="windows-build"
depends="revision-check, windows-checkos, subprojects-build"
description="Build windows version">
<mkdir dir="windows/work" />
<!-- assemble the pde -->
<mkdir dir="windows/work/lib" />
<copy todir="windows/work/lib" flatten="true">
<fileset refid="runtime.jars" />
</copy>
<copy todir="windows/work">
<fileset dir=".." includes="core/library/**" />
<fileset dir="shared" includes="launch4j/**" />
<fileset dir="shared" includes="lib/**" excludes="lib/fonts/**" />
<fileset dir="shared" includes="modes/**" />
<fileset file="shared/revisions.txt" />
</copy>
<fixcrlf file="windows/work/revisions.txt" eol="crlf" encoding="UTF-8" />
<antcall target="assemble">
<param name="target.path" value="windows/work" />
</antcall>
<property name="launch4j.dir" value="windows/work/modes/java/application/launch4j" />
<!-- rename the version we need -->
<move file="${launch4j.dir}/bin/windres-windows.exe"
tofile="${launch4j.dir}/bin/windres.exe" />
<move file="${launch4j.dir}/bin/ld-windows.exe"
tofile="${launch4j.dir}/bin/ld.exe" />
<!-- remove the others -->
<delete failonerror="true">
<fileset dir="${launch4j.dir}/bin" includes="ld-*" />
<fileset dir="${launch4j.dir}/bin" includes="windres-*" />
</delete>
<taskdef name="launch4j"
classname="net.sf.launch4j.ant.Launch4jTask"
classpath="${launch4j.dir}/launch4j.jar; ${launch4j.dir}/lib/xstream.jar" />
<!-- not all launch4j options are available when embedded inside this
file (i.e. the icon param doesn't work), so use a config file -->
<launch4j configFile="windows/config.xml" />
<launch4j configFile="windows/config-cmd.xml" />
<!-- cygwin requires html, dll, and exe to have the +x flag -->
<chmod perm="ugo+x">
<fileset dir="windows/work" includes="**/*.html, **/*.dll, **/*.exe" />
</chmod>
<!-- starting with 2.0a7, require the local JRE + tools.jar -->
<get src="http://processing.googlecode.com/files/${jre.file}"
dest="windows/jre.tgz"
usetimestamp="true" />
<!--
<unzip dest="windows/work" src="windows/jre.zip" overwrite="false"/>
-->
<!-- Hopefully this is OK with the permissions (unlike Linux),
since those shouldn't matter on Windows. -->
<untar compression="gzip"
dest="windows/work"
src="windows/jre.tgz"
overwrite="false" />
<move file="windows/work/jre1.7.0_40" tofile="windows/work/java" />
<!-- Remove space-wasting JavaFX garbage. -->
<delete failonerror="true">
<fileset refid="javafx-basics" />
<fileset refid="javafx-windows" />
<fileset refid="jre-optional-windows" />
</delete>
<copy todir="windows/work/java/lib/fonts">
<fileset dir="shared/lib/fonts" includes="*" />
</copy>
</target>
<target name="windows-run" depends="windows-build"
description="Run windows version">
<exec executable="windows/work/processing.exe"
dir="windows/work" spawn="true"/>
</target>
<target name="windows-dist" depends="windows-build"
description="Create .zip files of windows version">
<!--
<zip basedir="windows/work"
prefix="processing-${version}"
destfile="windows/processing-${version}.zip" />
<zip basedir="windows/work"
prefix="processing-${version}"
destfile="windows/processing-${version}-expert.zip"
excludes="java/**" />
-->
<property name="windows.dist" value="windows/processing-${version}-windows${sun.arch.data.model}.zip" />
<zip destfile="${windows.dist}">
<zipfileset dir="windows/work"
prefix="processing-${version}" />
</zip>
<!-- Expert is too much of a headache. Just nix it for 2.0. -->
<!--
<zip destfile="windows/processing-${version}-windows-expert.zip">
<zipfileset dir="windows/work"
prefix="processing-${version}"
excludes="java/**" />
</zip>
-->
<echo>
=======================================================
Processing for Windows was built. Grab the archive from
${windows.dist}
=======================================================
</echo>
</target>
<!-- - - - - - - - - - - - - - - - - - -->
<!-- Package source 'n tag the release -->
<!-- - - - - - - - - - - - - - - - - - -->
<!--
not ready to automate this yet, since we often have to reset the tag
<target name="dist-src" depends="dist">
<exec executable="git">
remove the spaces for depth since it should be double dash, but screws up comments
<arg line="clone - -depth 1 git@github.com:processing/processing.git /tmp/processing-${version}-src" />
</exec>
</target>
-->
<!-- - - - - - - - - -->
<!-- Developer Docs -->
<!-- - - - - - - - - -->
<target name="doc">
<!-- build doc for core -->
<exec executable="find" dir="javadoc" errorproperty="ignored">
<arg line="core -type f -exec rm -rf {} ';'" />
</exec>
<javadoc access="public" author="false" classpath="../core/library/jogl-all.jar:../core/bin:../core/library/gluegen-rt.jar" destdir="javadoc/core" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" source="1.7" splitindex="false" use="false" version="false">
<!-- provide links for java.* classes.
also suppresses the java.lang prefix in the text. -->
<link href="http://docs.oracle.com/javase/7/docs/api/" />
<!-- prevent files from always appearing to have changed -->
<arg value="-notimestamp" />
<packageset dir="../core/src">
<include name="processing/**" />
</packageset>
</javadoc>
<!--
<copy file="javadoc/stylesheet.css"
tofile="javadoc/core/stylesheet.css" />
<copy file="javadoc/index.html"
tofile="javadoc/core/index.html" />
-->
<!-- build everything else -->
<exec executable="find" dir="javadoc" errorproperty="ignored">
<arg line="everything -type f -exec rm -rf {} ';'" />
</exec>
<javadoc access="public" author="false" classpath="../java/libraries/video/library/jna.jar:../java/libraries/serial/bin:lib/antlr.jar:../core/library/jogl-all.jar:../java/libraries/video/bin:lib/apple.jar:lib/jna.jar:lib/ant-launcher.jar:../java/libraries/pdf/bin:lib/ant.jar:../core/bin:../java/libraries/pdf/library/itext.jar:../java/libraries/video/library/gstreamer-java.jar:lib/org-netbeans-swing-outline.jar:../java/libraries/dxf/bin:bin:../java/libraries/net/bin:../java/libraries/serial/library/jssc.jar:../core/library/gluegen-rt.jar:${java.home}/lib/tools.jar" destdir="javadoc/everything" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" source="1.7" splitindex="false" use="false" version="false" noqualifier="all">
<arg value="-notimestamp" />
<link href="http://docs.oracle.com/javase/7/docs/api/" />
<packageset dir="../app/src">
<include name="antlr/**" />
<include name="processing/**" />
</packageset>
<packageset dir="../app/generated">
<include name="processing/**" />
</packageset>
<packageset dir="../core/src">
<include name="processing/**" />
<!--
<include name="japplemenubar/**" />
-->
</packageset>
</javadoc>
<!--
<copy file="javadoc/stylesheet.css"
tofile="javadoc/everything/stylesheet.css" />
<copy file="javadoc/index.html"
tofile="javadoc/everything/index.html" />
-->
<!-- set the MIME type so that Google Code shows the files properly -->
<!--
<exec executable="find" dir=".">
<arg line="javadoc -name '*.html' -exec svn propset svn:mime-type text/html {} ';'" />
</exec>
-->
</target>
<!-- no longer necessary because it comes straight from Google Code -->
<!--
<target name="doc-upload">
<exec executable="rsync" dir="javadoc" spawn="true">
<arg value="-avz" />
<arg value="- -delete" />
<arg value="core/" />
<arg value="fry@processing.org:dev/reference/core/javadoc/" />
</exec>
<exec executable="rsync" dir="javadoc" spawn="true">
<arg value="-avz" />
<arg value="- -delete" />
<arg value="everything/" />
<arg value="fry@processing.org:dev/reference/core/everything/" />
</exec>
rsync -avz - -delete core/ fry@processing.org:dev/reference/core/javadoc/
rsync -avz - -delete everything/ fry@processing.org:dev/reference/everything/javadoc/
</target>
-->
<!-- - - - - - - - -->
<!-- Run It! -->
<!-- - - - - - - - -->
<target name="clean" description="Perform a spring cleaning"
depends="linux-clean, windows-clean, macosx-clean, subprojects-clean">
</target>
</project>