Mercurial > cgi-bin > hgweb.cgi > JpegWasher
view build.xml @ 34:d175593317a8
Add a bunch of packaging stuff, NOT WORKING YET,
author | David Barts <n5jrn@me.com> |
---|---|
date | Wed, 29 Apr 2020 21:49:21 -0700 |
parents | 3d86f0391168 |
children | bcbc92ffe0d0 |
line wrap: on
line source
<?xml version="1.0" encoding="UTF-8"?> <project name="JpegWasher" default="help" basedir="." xmlns:contrib="antlib:net.sf.antcontrib" xmlns:jarbundler="antlib:com.ultramixer.jarbundler" xmlns:launch4j="antlib:net.sf.launch4j.ant" xmlns:mod="antlib:de.masters_of_disaster.ant.tasks"> <!-- import all environment variables as env.* --> <property environment="env"/> <!-- ensure required environment variables are set --> <macrodef name="env-require"> <attribute name="name"/> <sequential> <fail message="Environment variable @{name} not set!"> <condition> <not><isset property="env.@{name}"/></not> </condition> </fail> </sequential> </macrodef> <env-require name="JRE_HOME"/> <env-require name="KOTLIN_HOME"/> <!-- cribbed from https://stackoverflow.com/questions/7129672/uppercase-lowercase-capitalize-an-ant-property --> <scriptdef language="javascript" name="toLowerCase"> <attribute name="value" /> <attribute name="target" /> <![CDATA[ "use strict"; project.setProperty( attributes.get( "target" ), attributes.get( "value" ).toLowerCase() ); ]]> </scriptdef> <!-- Define the properties used by the build --> <property name="app.name" value="${ant.project.name}"/> <property name="app.version" value="1.03"/> <property name="app.entry" value="name.blackcap.exifwasher.MainKt"/> <toLowerCase target="lc.app.name" value="${app.name}"/> <property name="jar.name" value="${basedir}/${lc.app.name}.jar"/> <property name="work.jar" value="${basedir}/work.jar"/> <property name="lib.home" value="${basedir}/lib"/> <property name="src.home" value="${basedir}/src"/> <property name="dist.home" value="${basedir}/dist"/> <property name="pf.home" value="${basedir}/package-files"/> <property name="nat.dir" value="${src.home}/name/blackcap/exifwasher/exiv2"/> <property name="bin.dir" value="${src.home}/name/blackcap/exifwasher/binaries"/> <!-- load the ant-contrib tasks --> <taskdef resource="net/sf/antcontrib/antlib.xml" uri="antlib:net.sf.antcontrib"> <classpath> <fileset dir="${lib.home}/ant-contrib" includes="*.jar"/> </classpath> </taskdef> <!-- load jarbundler (Mac app bundler) tasks --> <contrib:if> <os family="mac"/> <contrib:then> <taskdef name="create" classname="com.ultramixer.jarbundler.JarBundler" classpath="${lib.home}/jarbundler-core-3.3.0.jar" uri="antlib:com.ultramixer.jarbundler"> </taskdef> </contrib:then> </contrib:if> <!-- load launch4j (Windows app bundler) tasks --> <contrib:if> <os family="windows"/> <contrib:then> <taskdef name="create" classname="net.sf.launch4j.ant.Launch4jTask" uri="antlib:net.sf.launch4j.ant"> <classpath> <fileset dir="${lib.home}/launch4j" includes="*.jar"/> </classpath> </taskdef> </contrib:then> </contrib:if> <!-- load mod (Gnome app bundler) tasks --> <contrib:if> <os family="unix"/> <contrib:then> <taskdef name="calculatesize" classname="de.masters_of_disaster.ant.tasks.calculatesize.CalculateSize" uri="antlib:de.masters_of_disaster.ant.tasks"> <classpath> <fileset dir="${lib.home}/mod" includes="*.jar"/> </classpath> </taskdef> <taskdef name="deb" classname="de.masters_of_disaster.ant.tasks.deb.Deb" uri="antlib:de.masters_of_disaster.ant.tasks"> <classpath> <fileset dir="${lib.home}/mod" includes="*.jar"/> </classpath> </taskdef> </contrib:then> </contrib:if> <!-- define the kotlin task --> <property name="kotlin.lib" value="${env.KOTLIN_HOME}/lib"/> <typedef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/> <!-- help message --> <target name="help"> <echo>You can use the following targets:</echo> <echo> </echo> <echo> help : (default) Prints this message </echo> <echo> all : Cleans, compiles, and stages application</echo> <echo> clean : Deletes work directories</echo> <echo> compile : Compiles servlets into class files</echo> <echo> jar : Make JAR file.</echo> <echo> </echo> <echo>For example, to clean, compile, and package all at once, run:</echo> <echo>prompt> ant all </echo> </target> <!-- Determine OS type --> <condition property="os.type" value="mac"> <os family="mac"/> </condition> <condition property="os.type" value="windows"> <os family="windows"/> </condition> <condition property="os.type" value="linux"> <!-- notes: 1) XXX not all non-mac UNIX systems are Linux, but this assumes so; 2) this clause MUST appear AFTER the "mac" one --> <os family="unix"/> </condition> <property name="os.type" value="unknown"/> <!-- Define the CLASSPATH --> <target name="classpath"> <path id="compile.classpath"> <pathelement location="${src.home}"/> </path> </target> <!-- make needed directories --> <target name="mkdirs"> <mkdir dir="${bin.dir}/${os.type}"/> <mkdir dir="${dist.home}"/> </target> <!-- remove old cruft --> <target name="clean"> <delete includeEmptyDirs="true"> <fileset dir="${dist.home}" includes="**/*"/> <fileset dir="${bin.dir}"/> </delete> </target> <!-- rename files containing OS-dependant code --> <target name="osdep"> <exec executable="${env.JRE_HOME}/bin/java"> <arg value="-jar"/> <arg value="../Osdep/osdep.jar"/> <arg value="${src.home}"/> </exec> </target> <!-- do everything but install --> <target name="all" depends="jar" description="Clean work dirs, compile, make JAR."/> <!-- compile *.kt to *.class --> <target name="compile" depends="mkdirs,osdep,classpath" description="Compile Java sources to ${work.home}"> <kotlinc src="${src.home}" output="${work.jar}" classpathref="compile.classpath"> <compilerarg line="-jvm-target 1.8"/> </kotlinc> </target> <!-- make .jar file --> <target name="jar" depends="compile" description="Create JAR file."> <jar destfile="${jar.name}"> <manifest> <attribute name="Main-Class" value="${app.entry}"/> </manifest> <zipgroupfileset dir="${lib.home}" includes="*.jar"/> <zipfileset src="${work.jar}"/> <zipfileset dir="${src.home}" includes="**/*.properties,**/*.dll,**/*.so,**/*.dylib"/> </jar> </target> <!-- the packaging logic here is cribbed from what jEdit does --> <target name="macapp" depends="jar" description="Create MacOS app bundle."> <!-- not finished --> </target> <target name="winapp" depends="jar" description="Create app bundle."> <!-- not finished --> </target> <target name="gunk"> <sequential> <mkdir dir="${dist.home}/classes/package-files/linux/deb"/> <copy todir="${dist.home}/classes/package-files/linux/deb"> <fileset file="${pf.home}/linux/deb/control"/> </copy> <exec executable="ls"> <arg value="-ld"/> <arg value="${dist.home}/classes/package-files/linux/deb"/> </exec> </sequential> </target> <target name="deb" depends="jar" description="Create Debian package."> <sequential> <mod:calculatesize realsizeproperty="deb.installed.size"> <fileset file="${jar.name}"/> </mod:calculatesize> <mkdir dir="${dist.home}/classes/package-files/linux/deb"/> <copy todir="${dist.home}/classes/package-files/linux/deb" encoding="UTF-8" overwrite="true"> <fileset file="${pf.home}/linux/deb/control"/> <filterset> <filter token="app.version" value="${app.version}"/> <filter token="deb.installed.size" value="${deb.installed.size}"/> </filterset> </copy> <copy todir="${dist.home}/classes/package-files/linux"> <filelist dir="${pf.home}/linux" files="jpegwasher,jpegwasher.1"/> <filterset> <filter token="jar.filename" value="${lc.app.name}.jar"/> </filterset> </copy> <mkdir dir="${dist.home}/doc"/> <copy todir="${dist.home}/doc"> <filelist dir="${basedir}" files="Readme.html,Readme.rst"/> </copy> <copy todir="${dist.home}"> <filelist dir="${basedir}" files="${jar.name}"/> </copy> <property name="deb.file" value="${dist.home}/${lc.app.name}_${app.version}.deb"/> <mod:deb destfile="${deb.file}" tempDir="${dist.home}/classes/deb" deleteTempFiles="false" includeMd5sums="true"> <controlfileset file="${dist.home}/classes/package-files/linux/deb/control"/> <controlfileset dir="${dist.home}/classes/package-files/linux/deb" includes="postinst,postrm" mode="755"/> <datafileset file="." fullpath="usr/"/> <datafileset file="." fullpath="usr/bin/"/> <datafileset file="${dist.home}/classes/package-files/linux/jpegwasher" fullpath="usr/bin/jpegwasher" mode="755"/> <datafileset file="." fullpath="usr/lib/"/> <datafileset file="." fullpath="usr/lib/menu/"/> <datafileset file="${dist.home}/classes/package-files/linux/deb/jedit" fullpath="usr/lib/menu/jedit"/> <datafileset file="." fullpath="usr/share/"/> <datafileset file="." fullpath="usr/share/applications/"/> <datafileset file="${dist.home}/classes/package-files/linux/deb/jedit.desktop" fullpath="usr/share/applications/jedit.desktop"/> <datafileset file="." fullpath="usr/share/doc/"/> <datafileset file="." fullpath="usr/share/doc/JpegWasher/"/> <datafileset dir="${dist.home}/doc" includes="*.html,*.rst" prefix="usr/share/doc/JpegWasher/"/> <datafileset file="." fullpath="usr/share/JpegWasher/"/> <datafileset dir="${dist.home}" includes="doc/**,keymaps/**,macros/**,modes/**,properties/**,startup/**,${jar.name}" prefix="usr/share/JpegWasher/"/> <datafileset file="." fullpath="/usr/share/JpegWasher/jars"/> <datafileset file="${jar.name}" fullpath="/usr/share/JpegWasher/jars/${lc.app.name}.jar"/> <datafileset file="." fullpath="usr/share/man/"/> <datafileset file="." fullpath="usr/share/man/man1/"/> <datafileset file="${dist.home}/classes/package-files/linux/jpegwasher.1" fullpath="usr/share/man/man1/jpegwasher.1"/> </mod:deb> <length property="deb.size" file="${deb.file}"/> <checksum file="${deb.file}" algorithm="MD5" property="deb.md5"/> <checksum file="${deb.file}" algorithm="SHA1" property="deb.sha1"/> <checksum file="${deb.file}" algorithm="SHA-256" property="deb.sha256"/> <copy todir="${dist.home}" encoding="UTF-8" overwrite="true"> <fileset file="${pf.home}/linux/deb/Packages"/> <filterset> <filter token="app.version" value="${app.version}"/> <filter token="deb.installed.size" value="${deb.installed.size}"/> <filter token="deb.repository.file" value="${deb.file}"/> <filter token="deb.size" value="${deb.size}"/> <filter token="deb.md5" value="${deb.md5}"/> <filter token="deb.sha1" value="${deb.sha1}"/> <filter token="deb.sha256" value="${deb.sha256}"/> </filterset> </copy> <gzip src="${dist.home}/Packages" destfile="${dist.home}/Packages.gz"/> <bzip2 src="${dist.home}/Packages" destfile="${dist.home}/Packages.bz2"/> <length property="packages.size" file="${dist.home}/Packages"/> <checksum file="${dist.home}/Packages" algorithm="MD5" property="packages.md5"/> <checksum file="${dist.home}/Packages" algorithm="SHA1" property="packages.sha1"/> <checksum file="${dist.home}/Packages" algorithm="SHA-256" property="packages.sha256"/> <length property="packages.gz.size" file="${dist.home}/Packages.gz"/> <checksum file="${dist.home}/Packages.gz" algorithm="MD5" property="packages.gz.md5"/> <checksum file="${dist.home}/Packages.gz" algorithm="SHA1" property="packages.gz.sha1"/> <checksum file="${dist.home}/Packages.gz" algorithm="SHA-256" property="packages.gz.sha256"/> <length property="packages.bz2.size" file="${dist.home}/Packages.bz2"/> <checksum file="${dist.home}/Packages.bz2" algorithm="MD5" property="packages.bz2.md5"/> <checksum file="${dist.home}/Packages.bz2" algorithm="SHA1" property="packages.bz2.sha1"/> <checksum file="${dist.home}/Packages.bz2" algorithm="SHA-256" property="packages.bz2.sha256"/> <script language="javascript"> <![CDATA[ "use strict"; var Calendar = Java.type('java.util.Calendar'); var File = Java.type('java.io.File'); var Formatter = Java.type('java.util.Formatter'); var Locale = Java.type('java.util.Locale'); var TimeZone = Java.type('java.util.TimeZone'); new Formatter(new File(project.getProperty("dist.home"), "Release"), "UTF-8", Locale.ENGLISH) .format("Date: %1$ta, %1$td %1$tb %1$tY %1$tT %1$tZ\n", Calendar.getInstance(TimeZone.getTimeZone("UTC"))) .format("MD5Sum:\n") .format(" %s %16s %s\n", project.getProperty("packages.md5"), project.getProperty("packages.size"), "Packages") .format(" %s %16s %s\n", project.getProperty("packages.bz2.md5"), project.getProperty("packages.bz2.size"), "Packages.bz2") .format(" %s %16s %s\n", project.getProperty("packages.gz.md5"), project.getProperty("packages.gz.size"), "Packages.gz") .format("SHA1:\n") .format(" %s %16s %s\n", project.getProperty("packages.sha1"), project.getProperty("packages.size"), "Packages") .format(" %s %16s %s\n", project.getProperty("packages.bz2.sha1"), project.getProperty("packages.bz2.size"), "Packages.bz2") .format(" %s %16s %s\n", project.getProperty("packages.gz.sha1"), project.getProperty("packages.gz.size"), "Packages.gz") .format("SHA256:\n") .format(" %s %16s %s\n", project.getProperty("packages.sha256"), project.getProperty("packages.size"), "Packages") .format(" %s %16s %s\n", project.getProperty("packages.bz2.sha256"), project.getProperty("packages.bz2.size"), "Packages.bz2") .format(" %s %16s %s\n", project.getProperty("packages.gz.sha256"), project.getProperty("packages.gz.size"), "Packages.gz") .close(); ]]> <!-- gpg reads from tty, so can't be used inside ant --> </script> <echo message="Use gpg(1) to sign the Release file, if desired:"/> <echo message=" gpg --sign ${dist.home}/Release"/> </sequential> </target> </project>