2005-02-10 smeghead
* Initial check-in of Pants, a new utility to help us manage our 3rd-party dependencies (Fortuna, Jetty, Java Service Wrapper, etc.). Some parts of Pants are still non-functional at this time so don't mess with it yet unless you want to potentially mangle your working copy of CVS.
This commit is contained in:
236
apps/pants/build.xml
Normal file
236
apps/pants/build.xml
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Ports + Ant = Pants, a simple Ant-based package manager
|
||||||
|
|
||||||
|
free (adj.): unencumbered; not under the control of others
|
||||||
|
|
||||||
|
Written by smeghead in 2005 and released into the public domain with no
|
||||||
|
warranty of any kind, either expressed or implied. It probably won't make
|
||||||
|
your computer catch on fire, or eat your children, but it might. Use at your
|
||||||
|
own risk.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project basedir="." default="help" name="pants-interface">
|
||||||
|
|
||||||
|
<!-- .......................... Global Properties .......................... -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ........................... Internal Tasks ............................ -->
|
||||||
|
|
||||||
|
<target name="-fetchCvs" unless="cvs.source.available" if="using.cvs">
|
||||||
|
<cvs compressionlevel="${cvs.compression.level}"
|
||||||
|
date="${cvs.date}"
|
||||||
|
dest="./distfiles/cvs-src/${pbuild}"
|
||||||
|
failonerror="true"
|
||||||
|
package="${cvs.package}"
|
||||||
|
passfile="${cvs.passfile}"
|
||||||
|
port="${cvs.port}"
|
||||||
|
cvsRoot="${cvs.root}"
|
||||||
|
cvsRsh="${cvs.rsh}"
|
||||||
|
tag="${cvs.tag}"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-fetchPackage" unless="using.cvs">
|
||||||
|
<get src="${package.url}"
|
||||||
|
verbose="true"
|
||||||
|
dest="./distfiles"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-init">
|
||||||
|
<!--
|
||||||
|
TODO: Create dist/ and working/ folders for each pbuild subdir in case
|
||||||
|
they've been wiped.
|
||||||
|
-->
|
||||||
|
<loadproperties srcfile="world" />
|
||||||
|
<taskdef name="mergetypedproperties"
|
||||||
|
classname="net.i2p.pants.MergeTypedPropertiesTask"
|
||||||
|
classpath="./lib/pants.jar"
|
||||||
|
/>
|
||||||
|
<mergetypedproperties input="./pbuilds/${pbuild}/pbuild.properties"
|
||||||
|
output="./pbuilds/${pbuild}/merged-properties.temp"
|
||||||
|
booleanList="version.latest.find.regex.canonicaleq, version.latest.find.regex.caseinsensitive, version.latest.find.regex.comments, version.latest.find.regex.dotall, version.latest.find.regex.multiline, version.latest.find.regex.unicodecase, version.latest.find.regex.unixlines"
|
||||||
|
stringList="cvs.compression.level, cvs.date, cvs.package, cvs.passfile, cvs.port, cvs.root, cvs.rsh, cvs.tag, package.url, version.latest, version.latest.find.url, version.latest.find.regex"
|
||||||
|
/>
|
||||||
|
<loadproperties srcfile="./pbuilds/${pbuild}/merged-properties.temp" />
|
||||||
|
<delete file="./pbuilds/${pbuild}/merged-properties.temp" />
|
||||||
|
<!--
|
||||||
|
If '-Dpbuild={name}' isn't specified, the 'build', 'fetch', 'update'
|
||||||
|
and 'version' commands should default to 'world' behavior.
|
||||||
|
-->
|
||||||
|
<antcall target="-setWorld" />
|
||||||
|
<condition property="using.cvs">
|
||||||
|
<or>
|
||||||
|
<equals arg1="CVS" arg2="${version.using.${pbuild}}" />
|
||||||
|
<equals arg1="cvs" arg2="${version.using.${pbuild}}" />
|
||||||
|
</or>
|
||||||
|
</condition>
|
||||||
|
<!--
|
||||||
|
If 'version.recommended' isn't defined in pbuild.properties, default
|
||||||
|
to latest available version.
|
||||||
|
-->
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-setWorld" unless="pbuild">
|
||||||
|
<property name="pbuild" value="world" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-unpackTarBz2">
|
||||||
|
<untar src="${pbuild.package}"
|
||||||
|
compression="bzip2"
|
||||||
|
dest="./${pbuild}/working"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-unpackTarGzip">
|
||||||
|
<untar src="${pbuild.package}"
|
||||||
|
compression="gzip"
|
||||||
|
dest="./${pbuild}/working"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-unpackZip">
|
||||||
|
<unzip src="${pbuild.package}" dest="./${pbuild}/working" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-updateCvs" if="using.cvs">
|
||||||
|
<cvs command="update -d"
|
||||||
|
compressionlevel="${compression.level}"
|
||||||
|
date="${cvs.date}"
|
||||||
|
dest="./distfiles/cvs-src"
|
||||||
|
failonerror="true"
|
||||||
|
package="${cvs.package}"
|
||||||
|
passfile="${cvs.passfile}"
|
||||||
|
port="${cvs.port}"
|
||||||
|
cvsRoot="${cvs.root}"
|
||||||
|
cvsRsh="${cvs.rsh}"
|
||||||
|
tag="${cvs.tag}"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-updateConfirm" if="confirm.update" unless="no.prompts">
|
||||||
|
<input validargs="y,Y,n,N"
|
||||||
|
defaultvalue="n"
|
||||||
|
addproperty="confirm.update.answer">
|
||||||
|
You currently have the recommended version installed. A newer
|
||||||
|
version will be installed if you continue and this may break some
|
||||||
|
applications which depend on this package. Are you sure you want
|
||||||
|
to update? [y/N]
|
||||||
|
</input>
|
||||||
|
<condition property="abort.update">
|
||||||
|
<or>
|
||||||
|
<equals arg1="n" arg2="${confirm.update.answer}" />
|
||||||
|
<equals arg1="N" arg2="${confirm.update.answer}" />
|
||||||
|
</or>
|
||||||
|
</condition>
|
||||||
|
<fail if="abort.update">Update aborted.</fail>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-versionLatest">
|
||||||
|
<get src="${version.latest.find.url}"
|
||||||
|
dest="version.latest.in.temp"
|
||||||
|
verbose="true"
|
||||||
|
/>
|
||||||
|
<taskdef name="match"
|
||||||
|
classname="net.i2p.pants.MatchTask"
|
||||||
|
classpath="./lib/pants.jar"
|
||||||
|
/>
|
||||||
|
<match input="version.latest.in.temp"
|
||||||
|
output="version.latest.parsed.temp"
|
||||||
|
regex="${version.latest.find.regex}"
|
||||||
|
canonicaleq="${version.latest.find.regex.canonicaleq}"
|
||||||
|
caseinsensitive="${version.latest.find.regex.caseinsensitive}"
|
||||||
|
comments="${version.latest.find.regex.comments}"
|
||||||
|
dotall="${version.latest.find.regex.dotall}"
|
||||||
|
multiline="${version.latest.find.regex.multiline}"
|
||||||
|
unicodecase="${version.latest.find.regex.unicodecase}"
|
||||||
|
unixlines="${version.latest.find.regex.unixlines}"
|
||||||
|
/>
|
||||||
|
<loadproperties srcFile="version.latest.parsed.temp" />
|
||||||
|
<delete file="version.latest.in.temp" />
|
||||||
|
<delete file="version.latest.parsed.temp" />
|
||||||
|
<property name="version.latest" value="${group.1}" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-versionRecommended">
|
||||||
|
<property name="version.recommended" value="x" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="-versionUsing">
|
||||||
|
<property name="version.using" value="x" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- .......................... Public Interface ........................... -->
|
||||||
|
|
||||||
|
<target name="build" depends="-init,fetch"
|
||||||
|
description="Build a pbuild and its dependencies">
|
||||||
|
<ant antfile="pbuild.xml" dir="./pbuilds/${pbuild}" target="clean" />
|
||||||
|
<ant antfile="pbuild.xml" dir="./pbuilds/${pbuild}" target="build" />
|
||||||
|
<!--
|
||||||
|
Perform a 'clean' on the target first (but not 'distclean')
|
||||||
|
-->
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="fetch" depends="-init"
|
||||||
|
description="Get package only">
|
||||||
|
<antcall target="-fetchPackage" />
|
||||||
|
<antcall target="-fetchCvs" />
|
||||||
|
<copydir dest="./pbuilds/${pbuild}/working"
|
||||||
|
src="./distfiles/cvs-src/${pbuild}"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="help"
|
||||||
|
description="Display usage synopsis">
|
||||||
|
<echo>
|
||||||
|
Pants usage:
|
||||||
|
|
||||||
|
ant [--usejikes] [-Dpbuild={name}] [-Dpbuild.version={version}]
|
||||||
|
[-D{property}={value}] [-Dno.prompts=true] build | fetch |
|
||||||
|
help | install | uninstall | update | version
|
||||||
|
|
||||||
|
build Build a pbuild and its dependencies
|
||||||
|
fetch Get package only
|
||||||
|
help Display usage synopsis
|
||||||
|
install Fetch, build and install a pbuild
|
||||||
|
uninstall Uninstall a pbuild
|
||||||
|
update Update pbuild(s) to the latest version(s)
|
||||||
|
version Display pbuild version information
|
||||||
|
</echo>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Install recommended version by default unless 'version' property is set.
|
||||||
|
Do not install if package is already installed.
|
||||||
|
-->
|
||||||
|
<target name="install" depends="-init, build"
|
||||||
|
description="Install a pbuild">
|
||||||
|
<ant antfile="pbuild.xml" dir="./pbuilds/${pbuild}" target="dist" />
|
||||||
|
<ant antfile="pbuild.xml" dir="./pbuilds/${pbuild}"
|
||||||
|
target="distclean"
|
||||||
|
/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="uninstall" depends="-init"
|
||||||
|
description="Uninstall a pbuild" />
|
||||||
|
|
||||||
|
<target name="update" depends="-init"
|
||||||
|
description="Update pbuild(s) to the latest version(s)">
|
||||||
|
<condition property="${confirm.update}">
|
||||||
|
<equals arg1="${version.using}" arg2="${version.recommended}" />
|
||||||
|
</condition>
|
||||||
|
<antcall target="-updateConfirm" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="version"
|
||||||
|
depends="-init, -versionRecommended, -versionUsing, -versionLatest"
|
||||||
|
description="Display pbuild version information">
|
||||||
|
<echo message="Latest version: ${version.recommended}" />
|
||||||
|
<echo message="Latest version: ${version.using}" />
|
||||||
|
<echo message="Latest version: ${version.latest}" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
</project>
|
45
apps/pants/pants/build.xml
Normal file
45
apps/pants/pants/build.xml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project basedir="." default="build" name="build-pants">
|
||||||
|
|
||||||
|
<target name="build"
|
||||||
|
description="Build the source">
|
||||||
|
<mkdir dir="./java/build"/>
|
||||||
|
<javac srcdir="./java/src" source="1.3" target="1.3" deprecation="on" destdir="./java/build" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="clean"
|
||||||
|
description="Remove all object files">
|
||||||
|
<delete dir="./java/build" />
|
||||||
|
<delete dir="./java/jartemp" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="dist" depends="build, jar"
|
||||||
|
description="Create the jar and copy it to ../lib">
|
||||||
|
<copy todir="../lib" file="./java/build/pants.jar" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="distclean" depends="clean"
|
||||||
|
description="Remove the jar and all object files" >
|
||||||
|
<delete file="../lib/pants.jar" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar">
|
||||||
|
<delete dir="./java/jartemp" />
|
||||||
|
<mkdir dir="./java/jartemp" />
|
||||||
|
<copy todir="./java/jartemp">
|
||||||
|
<fileset dir="./java/build" includes="**/*.class" />
|
||||||
|
</copy>
|
||||||
|
<jar basedir="./java/jartemp" jarfile="./java/build/pants.jar">
|
||||||
|
<manifest>
|
||||||
|
<section name="net.i2p.pants">
|
||||||
|
<attribute name="Implementation-Title" value="Pants" />
|
||||||
|
<attribute name="Implementation-Version" value="0.0.1" />
|
||||||
|
<attribute name="Implementation-Vendor" value="I2P" />
|
||||||
|
<attribute name="Implementation-Vendor-Id" value="I2P" />
|
||||||
|
<attribute name="Implementation-URL" value="http://www.i2p.net" />
|
||||||
|
</section>
|
||||||
|
</manifest>
|
||||||
|
</jar>
|
||||||
|
<delete dir="./java/jartemp" />
|
||||||
|
</target>
|
||||||
|
</project>
|
212
apps/pants/pants/java/src/net/i2p/pants/MatchTask.java
Normal file
212
apps/pants/pants/java/src/net/i2p/pants/MatchTask.java
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
/*
|
||||||
|
* Ports + Ant = Pants, a simple Ant-based package manager
|
||||||
|
*
|
||||||
|
* free (adj.): unencumbered; not under the control of others
|
||||||
|
*
|
||||||
|
* Written by smeghead in 2005 and released into the public domain with no
|
||||||
|
* warranty of any kind, either expressed or implied. It probably won't make
|
||||||
|
* your computer catch on fire, or eat your children, but it might. Use at your
|
||||||
|
* own risk.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.i2p.pants;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.apache.tools.ant.BuildException;
|
||||||
|
import org.apache.tools.ant.Task;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Custom Ant task for matching the contents of a file against a given
|
||||||
|
* regular expression and writing any matching groups to a file in
|
||||||
|
* <code>java.util.Properties</code> format.
|
||||||
|
* </p>
|
||||||
|
* <p>Each key in the properties file is named after the number corresponding to
|
||||||
|
* its matching group and its value is the contents of the matching group.
|
||||||
|
* </p>
|
||||||
|
* <p>Regular expressions passed to this task must conform to the specification
|
||||||
|
* used by Sun's <code>java.util.regex</code> package and thus are mostly
|
||||||
|
* compatible with Perl 5 regular expressions.
|
||||||
|
* </p>
|
||||||
|
* <p>When calling the <code>match</code> task, the attributes
|
||||||
|
* <code>input</code>, <code>output</code>, and <code>regex</code> are required.
|
||||||
|
* </p>
|
||||||
|
* <p>Optional boolean attributes may be used to toggle various modes for the
|
||||||
|
* regular expression engine (all are set to <code>false</code> by default):
|
||||||
|
* </p>
|
||||||
|
* <table>
|
||||||
|
* <tr><td><code>canonicaleq</code></td><td>Enable canonical equivalence</td></tr>
|
||||||
|
* <tr><td><code>caseinsensitive</code></td><td>Enable case-insensitive matching</td></tr>
|
||||||
|
* <tr><td><code>comments</code></td><td>Permit whitespace and comments in pattern</td></tr>
|
||||||
|
* <tr><td><code>dotall</code></td><td>Enable dotall mode</td></tr>
|
||||||
|
* <tr><td><code>multiline</code></td><td>Enable multi-line mode</td></tr>
|
||||||
|
* <tr><td><code>unicodecase</code></td><td>Enable Unicode-aware case folding</td></tr>
|
||||||
|
* <tr><td><code>unixlines</code></td><td>Enable Unix lines mode</td></tr>
|
||||||
|
* </table>
|
||||||
|
* <p>There is one additional optional boolean attribute,
|
||||||
|
* <code>failOnNoMatch</code>. If this attribute is <code>true</code> it causes
|
||||||
|
* the <code>match</code> task to throw a
|
||||||
|
* <code>org.apache.tools.ant.BuildException</code> and fail if no matches for
|
||||||
|
* the regular expression are found. The default value is <code>false</code>,
|
||||||
|
* meaning a failed match will simply result in a warning message to
|
||||||
|
* <code>STDERR</code> and an empty (0 byte) <code>output</code> file being
|
||||||
|
* created.
|
||||||
|
* </p>
|
||||||
|
* <p>
|
||||||
|
* <h4>Example</h4>
|
||||||
|
* </p>
|
||||||
|
* <p>Contents of input file <code>letter.txt</code>:
|
||||||
|
* <pre>
|
||||||
|
* Dear Alice,
|
||||||
|
*
|
||||||
|
* How's about you and me gettin' together for some anonymous foo action?
|
||||||
|
*
|
||||||
|
* Kisses,
|
||||||
|
* Bob
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
* <p>Ant <code>match</code> task and a <code>taskdef</code> defining it:
|
||||||
|
* <pre>
|
||||||
|
* <taskdef name="match" classname="net.i2p.pants.MatchTask" classpath="../../lib/pants.jar" />
|
||||||
|
* <match input="letter.txt"
|
||||||
|
* output="matches.txt"
|
||||||
|
* regex="about (\S*?) and (\S*?) .+anonymous (\S*?)"
|
||||||
|
* />
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
* <p>Contents of properties file <code>matches.txt</code> written by this task:
|
||||||
|
* <pre>
|
||||||
|
* group.0=about you and me gettin' together for some anonymous foo
|
||||||
|
* group.1=you
|
||||||
|
* group.2=me
|
||||||
|
* group.3=foo
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
* <p>These values can be loaded from <code>matches.txt</code> into Ant
|
||||||
|
* properties like so:
|
||||||
|
* <pre>
|
||||||
|
* <loadproperties srcFile="matches.txt" />
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author smeghead
|
||||||
|
*/
|
||||||
|
public class MatchTask extends Task {
|
||||||
|
|
||||||
|
private boolean _failOnNoMatch;
|
||||||
|
private String _inputFile;
|
||||||
|
private String _outputFile;
|
||||||
|
private String _regex;
|
||||||
|
private int _regexFlags;
|
||||||
|
|
||||||
|
public void execute() throws BuildException {
|
||||||
|
int charRead = 0;
|
||||||
|
FileReader fileReader = null;
|
||||||
|
FileWriter fileWriter = null;
|
||||||
|
Matcher matcher = null;
|
||||||
|
Pattern pattern = null;
|
||||||
|
PrintWriter printWriter = null;
|
||||||
|
StringBuffer text = new StringBuffer();
|
||||||
|
|
||||||
|
if (_inputFile == null)
|
||||||
|
throw new BuildException("Error: 'match' task requires 'input' attribute");
|
||||||
|
|
||||||
|
if (_outputFile == null)
|
||||||
|
throw new BuildException("Error: 'match' task requires 'output' attribute");
|
||||||
|
|
||||||
|
if (_regex == null)
|
||||||
|
throw new BuildException("Error: 'match' task requires 'regex' attribute");
|
||||||
|
|
||||||
|
pattern = Pattern.compile(_regex, _regexFlags);
|
||||||
|
|
||||||
|
try {
|
||||||
|
fileReader = new FileReader(_inputFile);
|
||||||
|
|
||||||
|
while ((charRead = fileReader.read()) != -1)
|
||||||
|
text.append((char) charRead);
|
||||||
|
|
||||||
|
fileReader.close();
|
||||||
|
matcher = pattern.matcher(text);
|
||||||
|
|
||||||
|
if (matcher.find()) {
|
||||||
|
printWriter = new PrintWriter(new FileWriter(_outputFile));
|
||||||
|
|
||||||
|
for (int i = 0; i <= matcher.groupCount(); i++)
|
||||||
|
printWriter.println("group." + Integer.toString(i) + "=" + matcher.group(i));
|
||||||
|
|
||||||
|
printWriter.flush();
|
||||||
|
printWriter.close();
|
||||||
|
} else {
|
||||||
|
if (_failOnNoMatch) {
|
||||||
|
throw new BuildException("Error: No matches found in " + _inputFile);
|
||||||
|
} else {
|
||||||
|
System.err.println("Warning: No matches found in " + _inputFile);
|
||||||
|
// Create 0 byte output file.
|
||||||
|
fileWriter = new FileWriter(_outputFile);
|
||||||
|
fileWriter.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException fnfe) {
|
||||||
|
throw new BuildException("File " + _inputFile + " not found", fnfe);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
throw new BuildException(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCanonicalEq(boolean enableCanonicalEq) {
|
||||||
|
if (enableCanonicalEq)
|
||||||
|
_regexFlags |= Pattern.CANON_EQ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCaseInsensitive(boolean enableCaseInsensitive) {
|
||||||
|
if (enableCaseInsensitive)
|
||||||
|
_regexFlags |= Pattern.CASE_INSENSITIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComments(boolean enableComments) {
|
||||||
|
if (enableComments)
|
||||||
|
_regexFlags |= Pattern.COMMENTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDotall(boolean enableDotall) {
|
||||||
|
if (enableDotall)
|
||||||
|
_regexFlags |= Pattern.DOTALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFailOnNoMatch(boolean failOnNoMatch) {
|
||||||
|
_failOnNoMatch = failOnNoMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInput(String inputFile) {
|
||||||
|
_inputFile = inputFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMultiLine(boolean enableMultiLine) {
|
||||||
|
if (enableMultiLine)
|
||||||
|
_regexFlags |= Pattern.MULTILINE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOutput(String outputFile) {
|
||||||
|
_outputFile = outputFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegex(String regex) {
|
||||||
|
_regex = regex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnicodeCase(boolean enableUnicodeCase) {
|
||||||
|
if (enableUnicodeCase)
|
||||||
|
_regexFlags |= Pattern.UNICODE_CASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnixLines(boolean enableUnixLines) {
|
||||||
|
if (enableUnixLines)
|
||||||
|
_regexFlags |= Pattern.UNIX_LINES;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
* Ports + Ant = Pants, a simple Ant-based package manager
|
||||||
|
*
|
||||||
|
* free (adj.): unencumbered; not under the control of others
|
||||||
|
*
|
||||||
|
* Written by smeghead in 2005 and released into the public domain with no
|
||||||
|
* warranty of any kind, either expressed or implied. It probably won't make
|
||||||
|
* your computer catch on fire, or eat your children, but it might. Use at your
|
||||||
|
* own risk.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.i2p.pants;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import org.apache.tools.ant.BuildException;
|
||||||
|
import org.apache.tools.ant.Task;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Custom Ant task for loading properties from a
|
||||||
|
* <code>java.util.Properties</code> file then merging them with lists of
|
||||||
|
* expected properties. When an expected property is found in the properties
|
||||||
|
* file it is set to the value given for it in the file. If an expected property
|
||||||
|
* from a list isn't found in the properties file its value will be set to "" or
|
||||||
|
* "false", depending on the property's data type.
|
||||||
|
* </p>
|
||||||
|
* <p>A property's data type is determined by membership in one of two lists
|
||||||
|
* which can be passed into an instance of this class: a string-typed list and a
|
||||||
|
* boolean-typed list. Values for string-typed properties may be any valid
|
||||||
|
* string accepted by <code>java.util.Properties</code>, and values for
|
||||||
|
* boolean-typed properties must be either "false" or "true".
|
||||||
|
* </p>
|
||||||
|
* <p>Lists holding more than one property must be comma-delimited.
|
||||||
|
* </p>
|
||||||
|
* <p>The output of this class is a temporary <code>java.util.Properties</code>
|
||||||
|
* file which is suitable for reading by the standard Ant
|
||||||
|
* <code>loadproperties</code> task.
|
||||||
|
* </p>
|
||||||
|
* <p>Note that if any properties in the given lists have already been defined
|
||||||
|
* before the <code>mergetypedproperties</code> task is called, their values
|
||||||
|
* cannot be changed since Ant properties are immutable.
|
||||||
|
* </p>
|
||||||
|
* <h4>Example</h4>
|
||||||
|
* </p>
|
||||||
|
* <p>Contents of a properties file <code>my.properties</code>:
|
||||||
|
* <pre>
|
||||||
|
* some.property.exists=true
|
||||||
|
* hasValue=false
|
||||||
|
* some.property=this is a value
|
||||||
|
* property0=bork bork
|
||||||
|
* propertyX=this property wasn't passed in a list
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
* <p>Ant <code>mergetypedproperties</code> task and a <code>taskdef</code>
|
||||||
|
* defining it:
|
||||||
|
* <pre>
|
||||||
|
* <taskdef name="mergetypedproperties" classname="net.i2p.pants.MergeTypedPropertiesTask" classpath="../../lib/pants.jar" />
|
||||||
|
* <mergetypedproperties input="my.properties"
|
||||||
|
* output="merged-properties.temp"
|
||||||
|
* booleanList="some.property.exists,is.valid,hasValue"
|
||||||
|
* stringList="some.property,another.property,property0"
|
||||||
|
* />
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
* <p>Contents of properties file <code>merged-properties.temp</code> written by this task:
|
||||||
|
* <pre>
|
||||||
|
* some.property.exists=true
|
||||||
|
* is.valid=false
|
||||||
|
* hasValue=false
|
||||||
|
* some.property=this is a value
|
||||||
|
* another.property=
|
||||||
|
* property0=bork bork
|
||||||
|
* propertyX=this property wasn't passed in a list
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
* <p>If you don't want this task's output to include properties which weren't
|
||||||
|
* in the lists of expected properties, you can set the attribute
|
||||||
|
* <code>onlyExpected</code> to <code>true</code>. In the example, this would
|
||||||
|
* result in the file <code>merged-properties.temp</code> containing only the
|
||||||
|
* following properties:
|
||||||
|
* <pre>
|
||||||
|
* some.property.exists=true
|
||||||
|
* is.valid=false
|
||||||
|
* hasValue=false
|
||||||
|
* some.property=this is a value
|
||||||
|
* another.property=
|
||||||
|
* property0=bork bork
|
||||||
|
* </pre>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author smeghead
|
||||||
|
*/
|
||||||
|
public class MergeTypedPropertiesTask extends Task {
|
||||||
|
|
||||||
|
private String _booleanList = "";
|
||||||
|
private String _inputFile;
|
||||||
|
private boolean _onlyExpected;
|
||||||
|
private String _outputFile;
|
||||||
|
private Properties _propertiesIn = new Properties();
|
||||||
|
private Properties _propertiesOut = new Properties();
|
||||||
|
private String _stringList = "";
|
||||||
|
|
||||||
|
public void execute() throws BuildException {
|
||||||
|
StringTokenizer strtokBoolean = new StringTokenizer(_booleanList, ",");
|
||||||
|
StringTokenizer strtokString = new StringTokenizer(_stringList, ",");
|
||||||
|
String property = "";
|
||||||
|
|
||||||
|
if (_inputFile == null)
|
||||||
|
throw new BuildException("Error: 'mergetypedproperties' task requires 'input' attribute");
|
||||||
|
|
||||||
|
if (_outputFile == null)
|
||||||
|
throw new BuildException("Error: 'mergetypedproperties' task requires 'output' attribute");
|
||||||
|
|
||||||
|
// Add some type-checking on the list elements
|
||||||
|
|
||||||
|
try {
|
||||||
|
_propertiesIn.load(new FileInputStream(_inputFile));
|
||||||
|
|
||||||
|
while (strtokBoolean.hasMoreTokens())
|
||||||
|
_propertiesOut.setProperty(strtokBoolean.nextToken().trim(), "false");
|
||||||
|
|
||||||
|
while (strtokString.hasMoreTokens())
|
||||||
|
_propertiesOut.setProperty(strtokString.nextToken().trim(), "");
|
||||||
|
|
||||||
|
for (Enumeration enum = _propertiesIn.elements(); enum.hasMoreElements(); ) {
|
||||||
|
property = (String) enum.nextElement();
|
||||||
|
|
||||||
|
if (_onlyExpected && !_propertiesOut.containsKey(property))
|
||||||
|
continue;
|
||||||
|
else
|
||||||
|
_propertiesOut.setProperty(property, _propertiesIn.getProperty(property));
|
||||||
|
}
|
||||||
|
|
||||||
|
_propertiesOut.store(new FileOutputStream(_inputFile), "This is a temporary file. It is safe to delete it.");
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
throw new BuildException(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBooleanList(String booleanList) {
|
||||||
|
_booleanList = booleanList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInput(String inputFile) {
|
||||||
|
_inputFile = inputFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnlyExpected(boolean onlyExpected) {
|
||||||
|
_onlyExpected = onlyExpected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOutput(String outputFile) {
|
||||||
|
_outputFile = outputFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringList(String stringList) {
|
||||||
|
_stringList = stringList;
|
||||||
|
}
|
||||||
|
}
|
116
apps/pants/pants/resources/README
Normal file
116
apps/pants/pants/resources/README
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
What is Pants?
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Pants is an Apache Ant-based package manager for the management of 3rd party
|
||||||
|
dependencies in Java development projects. It's loosely modeled after
|
||||||
|
FreeBSD's Ports and Gentoo Linux's Portage, with two major differences:
|
||||||
|
|
||||||
|
* Pants isn't intended for system-wide package management. It's tailored for
|
||||||
|
per-project 3rd party package management. You will typically have one
|
||||||
|
Pants repository per project and each repository will be located somewhere
|
||||||
|
under your project's root directory. If you're familiar with Ports or
|
||||||
|
Portage, a Pants repository is roughly analogous to /usr/ports or
|
||||||
|
/usr/portage.
|
||||||
|
|
||||||
|
* Pants is extremely portable. It goes anywhere Apache Ant goes.
|
||||||
|
|
||||||
|
Pants takes a modular approach to the standard Ant buildfile, breaking it
|
||||||
|
into 3 files for functionality and convenience:
|
||||||
|
|
||||||
|
1. The Pants public interface, pants/build.xml, provides a single consistent
|
||||||
|
way to access and manipulate dependency packages and relieves some of the
|
||||||
|
developer's burden by providing implementations for some frequently-used
|
||||||
|
and complex Ant operations.
|
||||||
|
|
||||||
|
2. pbuild.xml is a specially-structured and slimmed-down Ant buildfile in
|
||||||
|
which you implement custom handling for a package your project depends
|
||||||
|
on. This is known as the "pbuild" and is roughly analogous to a FreeBSD
|
||||||
|
port or a Gentoo ebuild. A fairly explanatory template for pbuilds,
|
||||||
|
pbuild.template.xml, is provided.
|
||||||
|
|
||||||
|
3. pbuild.properties contains those properties for a specific pbuild which
|
||||||
|
are most likely to change over time. It uses the java.util.Properties
|
||||||
|
format which is more human-friendly for hand-editing than Ant/XML. A
|
||||||
|
fairly explanatory template, pbuild.template.properties, is provided.
|
||||||
|
|
||||||
|
There is one more file that completes the Pants system: the metadata file
|
||||||
|
pants/world is a database for keeping track of all packages managed by Pants
|
||||||
|
for your project.
|
||||||
|
|
||||||
|
Pants automatically handles versioning for your project's dependency
|
||||||
|
packages and keeps track of their recommended versions, currently used
|
||||||
|
versions, and latest available versions. This makes it extremely simple for
|
||||||
|
project developers to switch back and forth between different versions of a
|
||||||
|
dependency, and makes it just as easy to update a dependency. You can even
|
||||||
|
update all your project's Pants-managed packages with a single command.
|
||||||
|
|
||||||
|
Pbuilds are designed to automatically handle the downloading, building,
|
||||||
|
repackaging and deployment of source archives, binary archives, and CVS
|
||||||
|
sources, all in a manner that's completely transparent to the project
|
||||||
|
developer. Pbuilds currently support tar + gzip, tar + bzip2, and zip
|
||||||
|
archives.
|
||||||
|
|
||||||
|
Because it is based on Ant, Pants integrates very well with Ant buildfiles
|
||||||
|
and will fit easily into your project's Ant build framework. However, its
|
||||||
|
interface is simple enough to be called just as easily by more traditional
|
||||||
|
build systems such as GNU Make.
|
||||||
|
|
||||||
|
|
||||||
|
Why Should I Use Pants?
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
There are many applications for Pants, but a few use cases should best serve
|
||||||
|
to illustrate its usefulness:
|
||||||
|
|
||||||
|
1. You have a project that you ship with several 3rd party libraries but the
|
||||||
|
versions you're using are stale. With a single command, Pants can
|
||||||
|
automatically discover the latest release versions for all of these, then
|
||||||
|
download, build, and place the fresh libraries where your project's main
|
||||||
|
build system expects them to be at build time.
|
||||||
|
|
||||||
|
2. You want to test multiple versions of a 3rd party library against your
|
||||||
|
project. Pants only requires you to issue a single command to switch
|
||||||
|
library versions, so can spend more time testing and less time hunting
|
||||||
|
packages down, unpackaging them, symlinking, etc.
|
||||||
|
|
||||||
|
3. Pants is public domain. You can ship it with your project if you need to
|
||||||
|
without having to worry about petty intellectual property or licensing
|
||||||
|
issues.
|
||||||
|
|
||||||
|
|
||||||
|
Minimum Requirements
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
* Apache Ant 1.6.2 or higher is recommended
|
||||||
|
|
||||||
|
* Any Java runtime and operating system that will run Ant
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Not finished yet.
|
||||||
|
|
||||||
|
|
||||||
|
Why the Silly Name?
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Ports + Ant = Pants. Any other explanation is purely a product of your
|
||||||
|
twisted imagination.
|
||||||
|
|
||||||
|
|
||||||
|
Miscellaneous Pocket Fluff
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Author: smeghead <smeghead@i2pmail.org> <smeghead@mail.i2p>
|
||||||
|
|
||||||
|
License: No license necessary. This work is released into the public domain.
|
||||||
|
|
||||||
|
Price: Free! But if you really appreciate Pants, or you're just a sicko,
|
||||||
|
please send me a picture of your worst or most unusual pair of
|
||||||
|
pants so I can add it to the Whirling Hall of Pants on pants.i2p,
|
||||||
|
the official Pants eepsite (that's an anonymous website on I2P--see
|
||||||
|
http://www.i2p.net for more information).
|
||||||
|
|
||||||
|
|
||||||
|
$Id$
|
110
apps/pants/pants/resources/pbuild.template.properties
Normal file
110
apps/pants/pants/resources/pbuild.template.properties
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# The properties defined in this file can be overridden on the command line by
|
||||||
|
# passing them in as parameters like so:
|
||||||
|
#
|
||||||
|
# ant -Dpbuild=myapp -Dversion.recommended=2.0.5 install
|
||||||
|
#
|
||||||
|
# *** DO NOT DEFINE A PROPERTY BUT LEAVE ITS VALUE BLANK. PANTS WILL BREAK! ***
|
||||||
|
|
||||||
|
|
||||||
|
# Recommended Package Version
|
||||||
|
#
|
||||||
|
# Set this property's value to the package version you want Pants to use for the
|
||||||
|
# pbuild by default. The version string specified must match the version
|
||||||
|
# substring from the package's filename if the filename contains a version
|
||||||
|
# number.
|
||||||
|
#
|
||||||
|
# Comment out this property to force use of the latest available version.
|
||||||
|
#
|
||||||
|
# If the pbuild is CVS-based rather than package-based, this property must be
|
||||||
|
# set to 'CVS'.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# version.recommended=2.0.4
|
||||||
|
|
||||||
|
|
||||||
|
# Latest Package Version
|
||||||
|
#
|
||||||
|
# There are currently two ways to inform Pants of the latest version number for
|
||||||
|
# your package.
|
||||||
|
#
|
||||||
|
# Method 1: Manually modify the property 'version.latest' to reflect the latest
|
||||||
|
# version number.
|
||||||
|
#
|
||||||
|
# Method 2: Provide a URL for a page on the package's website and a regular
|
||||||
|
# expression with which to parse it in order to extract the version
|
||||||
|
# number of the latest available package. For this you must define the
|
||||||
|
# properties 'version.latest.find.url', 'version.latest.find.regex',
|
||||||
|
# and any regular expression engine mode flags needed. The pattern
|
||||||
|
# defined must have exactly one capturing group to encapsulate the
|
||||||
|
# version string, otherwise the operation will fail.
|
||||||
|
#
|
||||||
|
# You may use both methods, in which case the version number specified by Method
|
||||||
|
# 1 will be used as the fallback value if Method 2 for some reason is
|
||||||
|
# unsuccessful.
|
||||||
|
#
|
||||||
|
# If neither method is enabled here or they fail to return a valid value to
|
||||||
|
# Pants, the 'ant update' operation for this pbuild may exit ungracefully unless
|
||||||
|
# the pbuild is CVS-based (none of the version.latest.* properties are used by
|
||||||
|
# CVS-based pbuilds).
|
||||||
|
#
|
||||||
|
# The following is a list of boolean properties for optional mode flags used by
|
||||||
|
# the regular expression engine. Set a value of "true" for any you wish to use.
|
||||||
|
#
|
||||||
|
# version.latest.find.regex.canonicaleq - Enable canonical equivalence
|
||||||
|
# version.latest.find.regex.caseinsensitive - Enable case-insensitive matching
|
||||||
|
# version.latest.find.regex.comments - Permit whitespace and comments
|
||||||
|
# version.latest.find.regex.dotall - Enable dotall mode
|
||||||
|
# version.latest.find.regex.multiline - Enable multi-line mode
|
||||||
|
# version.latest.find.regex.unicodecase - Enable Unicode-aware case folding
|
||||||
|
# version.latest.find.regex.unixlines - Enable Unix lines mode
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# version.latest=5.1.2
|
||||||
|
# version.latest.find.url=http://sourceforge.net/projects/jetty/
|
||||||
|
# version.latest.find.regex=Stable.+?Jetty-(.+?)</A>
|
||||||
|
|
||||||
|
|
||||||
|
# Package URL
|
||||||
|
#
|
||||||
|
# Specify the URL pointing to the pbuild's package from here. The token
|
||||||
|
# '${pbuild.version}' if used will automatically be expanded to the appropriate
|
||||||
|
# version string.
|
||||||
|
#
|
||||||
|
# The package URL property is not used by CVS-based pbuilds.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# package.url=ftp://borkbork.se/bork-${pbuild.version}.tar.bz2
|
||||||
|
# package.url=http://bork.borkbork.se/bork-${pbuild.version}-src.tar.gz
|
||||||
|
|
||||||
|
|
||||||
|
# CVS Repository
|
||||||
|
#
|
||||||
|
# The values expected for CVS properties here are the same as those expected by
|
||||||
|
# their corresponding Apache Ant 'Cvs' task attributes. For details see:
|
||||||
|
#
|
||||||
|
# http://ant.apache.org/manual/CoreTasks/cvs.html
|
||||||
|
#
|
||||||
|
# Not all of the 'Cvs' task's attributes have corresponding Pants properties.
|
||||||
|
# The following is a list of all valid CVS properties for Pants (and their
|
||||||
|
# default values if applicable):
|
||||||
|
#
|
||||||
|
# cvs.compression.level
|
||||||
|
# cvs.date
|
||||||
|
# cvs.package
|
||||||
|
# cvs.passfile=~/.cvspass
|
||||||
|
# cvs.port=2401
|
||||||
|
# cvs.root
|
||||||
|
# cvs.rsh
|
||||||
|
# cvs.tag
|
||||||
|
#
|
||||||
|
# Of these, only the 'cvs.root' property is required for CVS-based pbuilds.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# cvs.root=:pserver:anoncvs@borkbork.se:/cvsroot/bork
|
||||||
|
# cvs.rsh=ssh
|
||||||
|
# cvs.package=borkbork
|
||||||
|
|
69
apps/pants/pants/resources/pbuild.template.xml
Normal file
69
apps/pants/pants/resources/pbuild.template.xml
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This is a template for Pants pbuilds. Pbuilds use standard Apache Ant syntax.
|
||||||
|
For each target in the Public Interface section you must provide either an
|
||||||
|
implementation or a stub. You may also add your own custom tasks and
|
||||||
|
properties to this file. Be careful that none of your custom properties'
|
||||||
|
names clash with the properties defined in pants/build.xml.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project basedir="." default="build" name="name-of-pbuild-here">
|
||||||
|
|
||||||
|
<!-- ....................... Begin Public Interface ........................ -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
When this target is called, the pbuild's sources and/or binaries have
|
||||||
|
already been extracted/copied by Pants into the pbuild's working/
|
||||||
|
subdirectory. This target must prepare those sources and/or binaries in
|
||||||
|
the working/ subdirectory into deployable form, for example by building
|
||||||
|
all necessary classes and jar files.
|
||||||
|
|
||||||
|
This target must not create or modify any files outside the pbuild's
|
||||||
|
working/ subdirectory. (An automatic sandboxing mechanism should be added
|
||||||
|
to Pants at some point.) It is however acceptable for a task called by
|
||||||
|
'builddep' to modify files outside of this pbuild's working/ directory.
|
||||||
|
-->
|
||||||
|
<target name="build" depends="builddep" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Use this to call targets from other pbuilds, Ant buildfiles, Makefiles,
|
||||||
|
etc. which perform tasks this pbuild's 'build' target depends on. If other
|
||||||
|
pbuilds are called here, they must be called through the Pants interface
|
||||||
|
or else it may leave Pants in an inconsistent state.
|
||||||
|
|
||||||
|
Most pbuilds probably won't need to implement this target.
|
||||||
|
-->
|
||||||
|
<target name="builddep" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This target must undo the actions performed by the 'build' target.
|
||||||
|
-->
|
||||||
|
<target name="clean" depends="depclean" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
If the 'builddep' target is implemented, this target must be implemented
|
||||||
|
to undo its actions.
|
||||||
|
-->
|
||||||
|
<target name="depclean" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This target must copy all deployable files generated by the 'build' target
|
||||||
|
into the pbuild's dist/ subdirectory (for use by other pbuilds or Ant
|
||||||
|
processes) or to their final deployment locations outside the pants/
|
||||||
|
directory hierarchy. Note that the latter may require the user to gain
|
||||||
|
superuser/admin privileges.
|
||||||
|
-->
|
||||||
|
<target name="dist" depends="build" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This target must remove all files from the pbuild's dist/ subdirectory
|
||||||
|
and final deployment locations, reversing the actions of the 'dist'
|
||||||
|
target. Note that removal of files from their final deployment locations
|
||||||
|
may require the user to gain superuser/admin privileges.
|
||||||
|
-->
|
||||||
|
<target name="distclean" depends="clean" />
|
||||||
|
|
||||||
|
<!-- ........................ End Public Interface ......................... -->
|
||||||
|
|
||||||
|
</project>
|
112
apps/pants/pbuilds/fortuna/pbuild.properties
Normal file
112
apps/pants/pbuilds/fortuna/pbuild.properties
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
# The properties defined in this file can be overridden on the command line by
|
||||||
|
# passing them in as parameters like so:
|
||||||
|
#
|
||||||
|
# ant -Dpbuild=myapp -Dversion.recommended=2.0.5 install
|
||||||
|
#
|
||||||
|
# *** DO NOT DEFINE A PROPERTY BUT LEAVE ITS VALUE BLANK. PANTS WILL BREAK! ***
|
||||||
|
|
||||||
|
|
||||||
|
# Recommended Package Version
|
||||||
|
#
|
||||||
|
# Set this property's value to the package version you want Pants to use for the
|
||||||
|
# pbuild by default. The version string specified must match the version
|
||||||
|
# substring from the package's filename if the filename contains a version
|
||||||
|
# number.
|
||||||
|
#
|
||||||
|
# Comment out this property to force use of the latest available version.
|
||||||
|
#
|
||||||
|
# If the pbuild is CVS-based rather than package-based, this property must be
|
||||||
|
# set to 'CVS'.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# version.recommended=2.0.4
|
||||||
|
version.recommended=CVS
|
||||||
|
|
||||||
|
# Latest Package Version
|
||||||
|
#
|
||||||
|
# There are currently two ways to inform Pants of the latest version number for
|
||||||
|
# your package.
|
||||||
|
#
|
||||||
|
# Method 1: Manually modify the property 'version.latest' to reflect the latest
|
||||||
|
# version number.
|
||||||
|
#
|
||||||
|
# Method 2: Provide a URL for a page on the package's website and a regular
|
||||||
|
# expression with which to parse it in order to extract the version
|
||||||
|
# number of the latest available package. For this you must define the
|
||||||
|
# properties 'version.latest.find.url', 'version.latest.find.regex',
|
||||||
|
# and any regular expression engine mode flags needed. The pattern
|
||||||
|
# defined must have exactly one capturing group to encapsulate the
|
||||||
|
# version string, otherwise the operation will fail.
|
||||||
|
#
|
||||||
|
# You may use both methods, in which case the version number specified by Method
|
||||||
|
# 1 will be used as the fallback value if Method 2 for some reason is
|
||||||
|
# unsuccessful.
|
||||||
|
#
|
||||||
|
# If neither method is enabled here or they fail to return a valid value to
|
||||||
|
# Pants, the 'ant update' operation for this pbuild may exit ungracefully unless
|
||||||
|
# the pbuild is CVS-based (none of the version.latest.* properties are used by
|
||||||
|
# CVS-based pbuilds).
|
||||||
|
#
|
||||||
|
# The following is a list of boolean properties for optional mode flags used by
|
||||||
|
# the regular expression engine. Set a value of "true" for any you wish to use.
|
||||||
|
#
|
||||||
|
# version.latest.find.regex.canonicaleq - Enable canonical equivalence
|
||||||
|
# version.latest.find.regex.caseinsensitive - Enable case-insensitive matching
|
||||||
|
# version.latest.find.regex.comments - Permit whitespace and comments
|
||||||
|
# version.latest.find.regex.dotall - Enable dotall mode
|
||||||
|
# version.latest.find.regex.multiline - Enable multi-line mode
|
||||||
|
# version.latest.find.regex.unicodecase - Enable Unicode-aware case folding
|
||||||
|
# version.latest.find.regex.unixlines - Enable Unix lines mode
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# version.latest=5.1.2
|
||||||
|
# version.latest.find.url=http://sourceforge.net/projects/jetty/
|
||||||
|
# version.latest.find.regex=Stable.+?Jetty-(.+?)</A>
|
||||||
|
|
||||||
|
|
||||||
|
# Package URL
|
||||||
|
#
|
||||||
|
# Specify the URL pointing to the pbuild's package from here. The token
|
||||||
|
# '${pbuild.version}' if used will automatically be expanded to the appropriate
|
||||||
|
# version string.
|
||||||
|
#
|
||||||
|
# The package URL property is not used by CVS-based pbuilds.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# package.url=ftp://borkbork.se/bork-${pbuild.version}.tar.bz2
|
||||||
|
# package.url=http://bork.borkbork.se/bork-${pbuild.version}-src.tar.gz
|
||||||
|
|
||||||
|
|
||||||
|
# CVS Repository
|
||||||
|
#
|
||||||
|
# The values expected for CVS properties here are the same as those expected by
|
||||||
|
# their corresponding Apache Ant 'Cvs' task attributes. For details see:
|
||||||
|
#
|
||||||
|
# http://ant.apache.org/manual/CoreTasks/cvs.html
|
||||||
|
#
|
||||||
|
# Not all of the 'Cvs' task's attributes have corresponding Pants properties.
|
||||||
|
# The following is a list of all valid CVS properties for Pants (and their
|
||||||
|
# default values if applicable):
|
||||||
|
#
|
||||||
|
# cvs.compression.level
|
||||||
|
# cvs.date
|
||||||
|
# cvs.package
|
||||||
|
# cvs.passfile=~/.cvspass
|
||||||
|
# cvs.port=2401
|
||||||
|
# cvs.root
|
||||||
|
# cvs.rsh
|
||||||
|
# cvs.tag
|
||||||
|
#
|
||||||
|
# Of these, only the 'cvs.root' property is required for CVS-based pbuilds.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# cvs.root=:pserver:anoncvs@borkbork.se:/cvsroot/bork
|
||||||
|
# cvs.rsh=ssh
|
||||||
|
# cvs.package=borkbork
|
||||||
|
cvs.root=:ext:anoncvs@savannah.gnu.org:/cvsroot/gnu-crypto
|
||||||
|
cvs.rsh=ssh
|
||||||
|
cvs.package=gnu-crypto
|
127
apps/pants/pbuilds/fortuna/pbuild.xml
Normal file
127
apps/pants/pbuilds/fortuna/pbuild.xml
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project basedir="." default="build" name="fortuna-pbuild">
|
||||||
|
|
||||||
|
<property name="gnucrypt.base.dir" value="./working/gnu-crypto" />
|
||||||
|
<property name="gnucrypt.etc.dir" value="${gnucrypt.base.dir}/etc" />
|
||||||
|
<property name="gnucrypt.lib.dir" value="${gnucrypt.base.dir}/lib" />
|
||||||
|
<property name="gnucrypt.object.dir" value="${gnucrypt.base.dir}/classes" />
|
||||||
|
<property name="gnucrypt.base.crypto.object.dir" value="${gnucrypt.object.dir}/gnu/crypto" />
|
||||||
|
<property name="gnucrypt.cipher.object.dir" value="${gnucrypt.base.crypto.object.dir}/cipher" />
|
||||||
|
<property name="gnucrypt.hash.object.dir" value="${gnucrypt.base.crypto.object.dir}/hash" />
|
||||||
|
<property name="gnucrypt.prng.object.dir" value="${gnucrypt.base.crypto.object.dir}/prng" />
|
||||||
|
|
||||||
|
<patternset id="fortuna.files">
|
||||||
|
<include name="${gnucrypt.base.crypto.object.dir}/Registry.class" />
|
||||||
|
<include name="${gnucrypt.prng.object.dir}/Fortuna*.class" />
|
||||||
|
<include name="${gnucrypt.prng.object.dir}/BasePRNG.class" />
|
||||||
|
<include name="${gnucrypt.prng.object.dir}/RandomEventListener.class" />
|
||||||
|
<include name="${gnucrypt.prng.object.dir}/IRandom.class" />
|
||||||
|
<include name="${gnucrypt.cipher.object.dir}/CipherFactory.class" />
|
||||||
|
<include name="${gnucrypt.cipher.object.dir}/IBlockCipher.class" />
|
||||||
|
<include name="${gnucrypt.hash.object.dir}/HashFactory.class" />
|
||||||
|
<include name="${gnucrypt.hash.object.dir}/IMessageDigest.class" />
|
||||||
|
</patternset>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Add this when Fortuna tests are added to GNU Crypto, else write some
|
||||||
|
-->
|
||||||
|
<target name="-test" />
|
||||||
|
|
||||||
|
<!-- ....................... Begin Public Interface ........................ -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
When this target is called, the pbuild's sources and/or binaries have
|
||||||
|
already been extracted/copied by Pants into the pbuild's working/
|
||||||
|
subdirectory. This target must prepare those sources and/or binaries in
|
||||||
|
the working/ subdirectory into deployable form, for example by building
|
||||||
|
all necessary classes and jar files.
|
||||||
|
|
||||||
|
This target must not create or modify any files outside the pbuild's
|
||||||
|
working/ subdirectory. (An automatic sandboxing mechanism should be added
|
||||||
|
to Pants at some point.) It is however acceptable for a task called by
|
||||||
|
'builddep' to modify files outside of this pbuild's working/ directory.
|
||||||
|
-->
|
||||||
|
<target name="build" depends="builddep">
|
||||||
|
<delete dir="./working/build" />
|
||||||
|
<delete dir="./working/jartemp" />
|
||||||
|
<mkdir dir="./working/build" />
|
||||||
|
<mkdir dir="./working/jartemp/${gnucrypt.object.dir}" />
|
||||||
|
<copy todir="./working/jartemp">
|
||||||
|
<fileset dir=".">
|
||||||
|
<patternset refid="fortuna.files" />
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
<jar basedir="./working/jartemp/${gnucrypt.object.dir}" jarfile="./working/build/fortuna.jar">
|
||||||
|
<manifest>
|
||||||
|
<section name="fortuna">
|
||||||
|
<attribute name="Implementation-Title" value="I2P Custom GNU Crypto Fortuna Library" />
|
||||||
|
<attribute name="Implementation-Version" value="CVS HEAD" />
|
||||||
|
<attribute name="Implementation-Vendor" value="Free Software Foundation" />
|
||||||
|
<attribute name="Implementation-Vendor-Id" value="FSF" />
|
||||||
|
<attribute name="Implementation-URL" value="http://www.gnu.org/software/gnu-crypto" />
|
||||||
|
</section>
|
||||||
|
</manifest>
|
||||||
|
</jar>
|
||||||
|
<delete dir="./working/jartemp" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Use this to call targets from other pbuilds, Ant buildfiles, Makefiles,
|
||||||
|
etc. which perform tasks this pbuild's 'build' target depends on. If other
|
||||||
|
pbuilds are called here, they must be called through the Pants interface
|
||||||
|
or else it may leave Pants in an inconsistent state.
|
||||||
|
|
||||||
|
Most pbuilds probably won't need to implement this target.
|
||||||
|
-->
|
||||||
|
<target name="builddep">
|
||||||
|
<ant dir="${gnucrypt.base.dir}" target="jar" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This target must undo the actions performed by the 'build' target.
|
||||||
|
-->
|
||||||
|
<target name="clean" depends="depclean">
|
||||||
|
<delete dir="./working/jartemp" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
If the 'builddep' target is implemented, this target must be implemented
|
||||||
|
to undo its actions.
|
||||||
|
-->
|
||||||
|
<target name="depclean">
|
||||||
|
<!--
|
||||||
|
Annoyingly the GNU Crypto distclean task called here doesn't clean
|
||||||
|
*all* derived files from java/gnu-crypto/lib like it should (because
|
||||||
|
a couple of lines are commented out).....
|
||||||
|
-->
|
||||||
|
<ant dir="${gnucrypt.base.dir}" target="distclean" />
|
||||||
|
<!--
|
||||||
|
.....and so we mop up the rest ourselves.
|
||||||
|
-->
|
||||||
|
<delete dir="${gnucrypt.lib.dir}" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This target must copy all deployable files generated by the 'build' target
|
||||||
|
into the pbuild's dist/ subdirectory (for use by other pbuilds or Ant
|
||||||
|
processes) or to their final deployment locations outside the pants/
|
||||||
|
directory hierarchy. Note that the latter may require the user to gain
|
||||||
|
superuser/admin privileges.
|
||||||
|
-->
|
||||||
|
<target name="dist" depends="build">
|
||||||
|
<copy todir="./dist/fortuna.jar" file="./working/build/fortuna.jar" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This target must remove all files from the pbuild's dist/ subdirectory
|
||||||
|
and final deployment locations, reversing the actions of the 'dist'
|
||||||
|
target. Note that removal of files from their final deployment locations
|
||||||
|
may require the user to gain superuser/admin privileges.
|
||||||
|
-->
|
||||||
|
<target name="distclean" depends="clean">
|
||||||
|
<delete file="./dist/fortuna.jar" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- ........................ End Public Interface ......................... -->
|
||||||
|
|
||||||
|
</project>
|
112
apps/pants/pbuilds/jetty/pbuild.properties
Normal file
112
apps/pants/pbuilds/jetty/pbuild.properties
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
# The properties defined in this file can be overridden on the command line by
|
||||||
|
# passing them in as parameters like so:
|
||||||
|
#
|
||||||
|
# ant -Dpbuild=myapp -Dversion.recommended=2.0.5 install
|
||||||
|
#
|
||||||
|
# *** DO NOT DEFINE A PROPERTY BUT LEAVE ITS VALUE BLANK. PANTS WILL BREAK! ***
|
||||||
|
|
||||||
|
|
||||||
|
# Recommended Package Version
|
||||||
|
#
|
||||||
|
# Set this property's value to the package version you want Pants to use for the
|
||||||
|
# pbuild by default. The version string specified must match the version
|
||||||
|
# substring from the package's filename if the filename contains a version
|
||||||
|
# number.
|
||||||
|
#
|
||||||
|
# Comment out this property to force use of the latest available version.
|
||||||
|
#
|
||||||
|
# If the pbuild is CVS-based rather than package-based, this property must be
|
||||||
|
# set to 'CVS'.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# version.recommended=2.0.4
|
||||||
|
version.recommended=5.1.2
|
||||||
|
|
||||||
|
# Latest Package Version
|
||||||
|
#
|
||||||
|
# There are currently two ways to inform Pants of the latest version number for
|
||||||
|
# your package.
|
||||||
|
#
|
||||||
|
# Method 1: Manually modify the property 'version.latest' to reflect the latest
|
||||||
|
# version number.
|
||||||
|
#
|
||||||
|
# Method 2: Provide a URL for a page on the package's website and a regular
|
||||||
|
# expression with which to parse it in order to extract the version
|
||||||
|
# number of the latest available package. For this you must define the
|
||||||
|
# properties 'version.latest.find.url', 'version.latest.find.regex',
|
||||||
|
# and any regular expression engine mode flags needed. The pattern
|
||||||
|
# defined must have exactly one capturing group to encapsulate the
|
||||||
|
# version string, otherwise the operation will fail.
|
||||||
|
#
|
||||||
|
# You may use both methods, in which case the version number specified by Method
|
||||||
|
# 1 will be used as the fallback value if Method 2 for some reason is
|
||||||
|
# unsuccessful.
|
||||||
|
#
|
||||||
|
# If neither method is enabled here or they fail to return a valid value to
|
||||||
|
# Pants, the 'ant update' operation for this pbuild may exit ungracefully unless
|
||||||
|
# the pbuild is CVS-based (none of the version.latest.* properties are used by
|
||||||
|
# CVS-based pbuilds).
|
||||||
|
#
|
||||||
|
# The following is a list of boolean properties for optional mode flags used by
|
||||||
|
# the regular expression engine. Set a value of "true" for any you wish to use.
|
||||||
|
#
|
||||||
|
# version.latest.find.regex.canonicaleq - Enable canonical equivalence
|
||||||
|
# version.latest.find.regex.caseinsensitive - Enable case-insensitive matching
|
||||||
|
# version.latest.find.regex.comments - Permit whitespace and comments
|
||||||
|
# version.latest.find.regex.dotall - Enable dotall mode
|
||||||
|
# version.latest.find.regex.multiline - Enable multi-line mode
|
||||||
|
# version.latest.find.regex.unicodecase - Enable Unicode-aware case folding
|
||||||
|
# version.latest.find.regex.unixlines - Enable Unix lines mode
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# version.latest=5.1.2
|
||||||
|
# version.latest.find.url=http://sourceforge.net/projects/jetty/
|
||||||
|
# version.latest.find.regex=Stable.+?Jetty-(.+?)</A>
|
||||||
|
version.latest=5.1.2
|
||||||
|
version.latest.find.url=http://sourceforge.net/projects/jetty/
|
||||||
|
version.latest.find.regex=Stable.+?Jetty-(.+?)</A>
|
||||||
|
|
||||||
|
# Package URL
|
||||||
|
#
|
||||||
|
# Specify the URL pointing to the pbuild's package from here. The token
|
||||||
|
# '${pbuild.version}' if used will automatically be expanded to the appropriate
|
||||||
|
# version string.
|
||||||
|
#
|
||||||
|
# The package URL property is not used by CVS-based pbuilds.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# package.url=ftp://borkbork.se/bork-${pbuild.version}.tar.bz2
|
||||||
|
# package.url=http://bork.borkbork.se/bork-${pbuild.version}-src.tar.gz
|
||||||
|
package.url=http://mesh.dl.sourceforge.net/sourceforge/jetty/jetty-${pbuild.version}.zip
|
||||||
|
|
||||||
|
# CVS Repository
|
||||||
|
#
|
||||||
|
# The values expected for CVS properties here are the same as those expected by
|
||||||
|
# their corresponding Apache Ant 'Cvs' task attributes. For details see:
|
||||||
|
#
|
||||||
|
# http://ant.apache.org/manual/CoreTasks/cvs.html
|
||||||
|
#
|
||||||
|
# Not all of the 'Cvs' task's attributes have corresponding Pants properties.
|
||||||
|
# The following is a list of all valid CVS properties for Pants (and their
|
||||||
|
# default values if applicable):
|
||||||
|
#
|
||||||
|
# cvs.compression.level
|
||||||
|
# cvs.date
|
||||||
|
# cvs.package
|
||||||
|
# cvs.passfile=~/.cvspass
|
||||||
|
# cvs.port=2401
|
||||||
|
# cvs.root
|
||||||
|
# cvs.rsh
|
||||||
|
# cvs.tag
|
||||||
|
#
|
||||||
|
# Of these, only the 'cvs.root' property is required for CVS-based pbuilds.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
#
|
||||||
|
# cvs.root=:pserver:anoncvs@borkbork.se:/cvsroot/bork
|
||||||
|
# cvs.rsh=ssh
|
||||||
|
# cvs.package=borkbork
|
||||||
|
|
89
apps/pants/pbuilds/jetty/pbuild.xml
Normal file
89
apps/pants/pbuilds/jetty/pbuild.xml
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project basedir="." default="all" name="jetty">
|
||||||
|
|
||||||
|
<!-- make this generic, place variables in properties file -->
|
||||||
|
|
||||||
|
<target name="all" depends="build"
|
||||||
|
description="Run the build target" />
|
||||||
|
|
||||||
|
<target name="assignProperties" if="group.0">
|
||||||
|
<property name="latest.jetty.version" value="${group.1}" />
|
||||||
|
<available property="jetty.package.available" file="jetty-${latest.jetty.version}.zip" />
|
||||||
|
<available property="jetty.package.unpacked.available" file="jettypkg/jetty-${latest.jetty.version}" />
|
||||||
|
<echo message="Properties assigned" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="build" depends="init, unpackJettyPackage" if="latest.jetty.version"
|
||||||
|
description="Download latest Jetty package and copy needed libs to jettylib/">
|
||||||
|
<property name="unpack.dir" value="jettypkg/jetty-${latest.jetty.version}" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/ext/ant.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/ext/jasper-compiler.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/ext/jasper-runtime.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/ext/xercesImpl.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/ext/xml-apis.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/extra/lib/org.mortbay.jetty-jdk1.2.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/lib/javax.servlet.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true" file="${unpack.dir}/lib/org.mortbay.jetty.jar" />
|
||||||
|
<copy todir="jettylib" overwrite="true">
|
||||||
|
<fileset dir="${unpack.dir}/ext" includes="xmlParserAPIs*.jar" />
|
||||||
|
</copy>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="builddep"
|
||||||
|
description="Build the custom helper Ant task for this buildfile">
|
||||||
|
<mkdir dir="java/build"/>
|
||||||
|
<javac srcdir="./java/src" source="1.3" target="1.3" deprecation="on" destdir="./java/build" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="clean"
|
||||||
|
description="Remove temp files and zip only; jettypkg/ requires manual deletion">
|
||||||
|
<echo message="Not actually deleting the Jetty package directory since it's so large" />
|
||||||
|
<delete>
|
||||||
|
<fileset dir="." includes="*.zip jettytemp.html parsed.temp" />
|
||||||
|
</delete>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="cleandep"
|
||||||
|
description="Remove custom helper Ant task">
|
||||||
|
<delete dir="java/build" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="compile" />
|
||||||
|
|
||||||
|
<target name="distclean" depends="clean"
|
||||||
|
description="Remove temp files, zip and jettylib/ contents" >
|
||||||
|
<delete>
|
||||||
|
<fileset dir="jettylib" includes="*.jar"/>
|
||||||
|
</delete>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="fetchJettyPackage" if="latest.jetty.version" unless="jetty.package.available">
|
||||||
|
<echo message="The Jetty libs are not necessary for using I2P, but are used by some" />
|
||||||
|
<echo message="applications on top of I2P such as the routerconsole." />
|
||||||
|
<get src="http://mesh.dl.sourceforge.net/sourceforge/jetty/jetty-${latest.jetty.version}.zip" verbose="true" dest="jetty-${latest.jetty.version}.zip" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="init" depends="builddep">
|
||||||
|
<echo message="Checking SourceForge for latest Jetty version....." />
|
||||||
|
<get src="http://sourceforge.net/projects/jetty/" dest="jettytemp.html" verbose="true" />
|
||||||
|
<taskdef name="match" classname="net.i2p.pants.MatchTask" classpath="../../lib/pants.jar" />
|
||||||
|
<match input="jettytemp.html"
|
||||||
|
output="parsed.temp"
|
||||||
|
regex="Stable.+?Jetty-(.+?)</A>"
|
||||||
|
/>
|
||||||
|
<loadproperties srcFile="parsed.temp" />
|
||||||
|
<antcall target="assignProperties" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar" />
|
||||||
|
|
||||||
|
<target name="showlatest" depends="init"
|
||||||
|
description="Display latest version number for Jetty">
|
||||||
|
<echo message="Latest Jetty version: ${latest.jetty.version}" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="unpackJettyPackage" depends="fetchJettyPackage" if="latest.jetty.version" unless="jetty.package.unpacked.available">
|
||||||
|
<mkdir dir="jettypkg" />
|
||||||
|
<unzip src="jetty-${latest.jetty.version}.zip" dest="jettypkg" />
|
||||||
|
</target>
|
||||||
|
</project>
|
2
apps/pants/world
Normal file
2
apps/pants/world
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
version.using.fortuna=CVS
|
||||||
|
version.using.jetty=5.1.2
|
@ -1,4 +1,10 @@
|
|||||||
$Id: history.txt,v 1.139 2005/02/07 05:04:23 jrandom Exp $
|
$Id: history.txt,v 1.140 2005/02/09 14:28:29 duck Exp $
|
||||||
|
|
||||||
|
2005-02-10 smeghead
|
||||||
|
* Initial check-in of Pants, a new utility to help us manage our 3rd-party
|
||||||
|
dependencies (Fortuna, Jetty, Java Service Wrapper, etc.). Some parts of
|
||||||
|
Pants are still non-functional at this time so don't mess with it yet
|
||||||
|
unless you want to potentially mangle your working copy of CVS.
|
||||||
|
|
||||||
2005-02-09 duck
|
2005-02-09 duck
|
||||||
* Allow an unneeded newline in the SAM client connection without
|
* Allow an unneeded newline in the SAM client connection without
|
||||||
|
Reference in New Issue
Block a user