[SCM] Java Abstracted Foreign Function Layer branch, master, updated. debian/0.5.4-1.1-3-g7c6ae7d
Damien Raude-Morvan
drazzib at debian.org
Thu Dec 20 23:24:51 UTC 2012
The following commit has been merged in the master branch:
commit 3cc070efb22cc3ffeb6be24a25cf3c40d2c3dfa7
Author: Damien Raude-Morvan <drazzib at debian.org>
Date: Wed Aug 29 22:27:53 2012 +0200
Team upload.
diff --git a/.gitignore b/.gitignore
index b616b77..9f92bbd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ build
dist
target
lib/nblibraries-private.properties
+.pc
diff --git a/debian/changelog b/debian/changelog
index 5ea8a42..aa8d686 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,18 @@
+jaffl (0.5.9-1) UNRELEASED; urgency=low
+
+ * Team upload.
+ * New upstream release.
+ * d/control: Add missing Depends on libjffi-java, libasm3-java
+ and libjnr-x86asm-java.
+ * d/{orig-tar.sh,watch}: Upgrade for new upstream tarballs
+ * d/rules: Also use mh_clean to clean m-r-h.
+ * d/patches/string_array_support.diff: Fix String[] handling.
+ * d/maven.rules: Improve Maven metadata registration.
+ * d/control: Bump Standards-Version to 3.9.3, no changes needed.
+ * d/copyright: Fix for copyright format 1.0.
+
+ -- Damien Raude-Morvan <drazzib at debian.org> Tue, 21 Aug 2012 01:52:49 +0200
+
jaffl (0.5.4-1.1) unstable; urgency=low
* Non maintainer upload.
diff --git a/debian/control b/debian/control
index 4206024..ebd88f7 100644
--- a/debian/control
+++ b/debian/control
@@ -3,17 +3,21 @@ Section: java
Priority: optional
Maintainer: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
Uploaders: Torsten Werner <twerner at debian.org>
-Build-Depends: debhelper (>= 7), cdbs, maven-repo-helper
-Build-Depends-Indep: ant-optional, default-jdk, libasm3-java, libjffi-java,
- libjnr-x86asm-java, junit4
-Standards-Version: 3.9.0
+Build-Depends: cdbs, debhelper (>= 7), maven-repo-helper
+Build-Depends-Indep: ant-optional,
+ default-jdk,
+ junit4,
+ libasm3-java,
+ libjffi-java,
+ libjnr-x86asm-java
+Standards-Version: 3.9.3
Vcs-Git: git://git.debian.org/pkg-java/jaffl.git
Vcs-Browser: http://git.debian.org/?p=pkg-java/jaffl.git
Homepage: http://github.com/wmeissner/jaffl
Package: libjaffl-java
Architecture: all
-Depends: ${misc:Depends}
+Depends: libasm3-java, libjffi-java, libjnr-x86asm-java, ${misc:Depends}
Description: Java Abstracted Foreign Function Layer
Jaffl is a Java library providing an abstracted interface to invoking native
functions from Java.
diff --git a/debian/copyright b/debian/copyright
index 3a368bd..5edaf0a 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,14 +1,11 @@
-Format-Specification: http://dep.debian.net/deps/dep5/
-Name: jnr-x86asm
-Maintainer: Wayne Meissner
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: jnr-x86asm
+Upstream-Contact: Wayne Meissner
Source: http://github.com/wmeissner/jnr-x86asm
-Copyright: 2010 Wayne Meissner (Java code)
- 2008-2009 Petr Kobalicek <kobalicek.petr at gmail.com> (original C++ code)
-License: LGPL-3 only (Java code), MIT/X11 (C++ code)
- The full text of the LGPL-3 license can be found at
-`/usr/share/common-licenses/LGPL-3'.
- .
+Files: *.c
+Copyright: 2008-2009 Petr Kobalicek <kobalicek.petr at gmail.com> (original C++ code)
+License: MIT/X11
The original MIT/X11 license for the C++ code is:
.
Permission is hereby granted, free of charge, to any person obtaining a copy of
@@ -29,11 +26,17 @@ License: LGPL-3 only (Java code), MIT/X11 (C++ code)
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+Files: *.java
+Copyright: 2010 Wayne Meissner (Java code)
+License: LGPL-3
+ The full text of the LGPL-3 license can be found at
+ /usr/share/common-licenses/LGPL-3.
+
Files: debian/*
Copyright: 2010 Torsten Werner <twerner at debian.org>
License: LGPL-3 or MIT/X11
The full text of the LGPL-3 license can be found at
-`/usr/share/common-licenses/LGPL-3'.
+ /usr/share/common-licenses/LGPL-3.
.
The MIT/X11 license:
.
@@ -54,4 +57,3 @@ License: LGPL-3 or MIT/X11
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-
diff --git a/debian/libjaffl-java.poms b/debian/libjaffl-java.poms
new file mode 100644
index 0000000..0417132
--- /dev/null
+++ b/debian/libjaffl-java.poms
@@ -0,0 +1,28 @@
+# List of POM files for the package
+# Format of this file is:
+# <path to pom file> [option]*
+# where option can be:
+# --ignore: ignore this POM and its artifact if any
+# --ignore-pom: don't install the POM. To use on POM files that are created
+# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms]
+# --no-parent: remove the <parent> tag from the POM
+# --package=<package>: an alternative package to use when installing this POM
+# and its artifact
+# --has-package-version: to indicate that the original version of the POM is the same as the upstream part
+# of the version for the package.
+# --keep-elements=<elem1,elem2>: a list of XML elements to keep in the POM
+# during a clean operation with mh_cleanpom or mh_installpom
+# --artifact=<path>: path to the build artifact associated with this POM,
+# it will be installed when using the command mh_install. [mh_install]
+# --java-lib: install the jar into /usr/share/java to comply with Debian
+# packaging guidelines
+# --usj-name=<name>: name to use when installing the library in /usr/share/java
+# --usj-version=<version>: version to use when installing the library in /usr/share/java
+# --no-usj-versionless: don't install the versionless link in /usr/share/java
+# --dest-jar=<path>: the destination for the real jar.
+# It will be installed with mh_install. [mh_install]
+# --classifier=<classifier>: Optional, the classifier for the jar. Empty by default.
+# --site-xml=<location>: Optional, the location for site.xml if it needs to be installed.
+# Empty by default. [mh_install]
+#
+pom.xml --has-package-version
diff --git a/debian/maven.ignoreRules b/debian/maven.ignoreRules
new file mode 100644
index 0000000..11e83cb
--- /dev/null
+++ b/debian/maven.ignoreRules
@@ -0,0 +1,21 @@
+# Maven ignore rules - ignore some Maven dependencies and plugins
+# Format of this file is:
+# [group] [artifact] [type] [version] [classifier] [scope]
+# where each element can be either
+# - the exact string, for example org.apache for the group, or 3.1
+# for the version. In this case, the element is simply matched
+# and left as it is
+# - * (the star character, alone). In this case, anything will
+# match and be left as it is. For example, using * on the
+# position of the artifact field will match any artifact id
+# All elements much match before a rule can be applied
+# Example rule: match jar with groupid= junit, artifactid= junit
+# and version starting with 3., this dependency is then removed
+# from the POM
+# junit junit jar s/3\..*/3.x/
+
+junit junit * * * *
+org.apache.maven.plugins maven-surefire-plugin * * * *
+org.apache.maven.wagon wagon-webdav * * * *
+org.jruby.extras jffi * * * *
+org.jvnet.wagon-svn wagon-svn * * * *
diff --git a/debian/maven.rules b/debian/maven.rules
new file mode 100644
index 0000000..be9ef4c
--- /dev/null
+++ b/debian/maven.rules
@@ -0,0 +1,20 @@
+# Maven rules - transform Maven dependencies and plugins
+# Format of this file is:
+# [group] [artifact] [type] [version] [classifier] [scope]
+# where each element can be either
+# - the exact string, for example org.apache for the group, or 3.1
+# for the version. In this case, the element is simply matched
+# and left as it is
+# - * (the star character, alone). In this case, anything will
+# match and be left as it is. For example, using * on the
+# position of the artifact field will match any artifact id
+# - a regular expression of the form s/match/replace/
+# in this case, elements that match are transformed using
+# the regex rule.
+# All elements much match before a rule can be applied
+# Example rule: match jar with groupid= junit, artifactid= junit
+# and version starting with 3., replacing the version with 3.x
+# junit junit jar s/3\..*/3.x/
+
+org.jruby.extras jaffl jar s/.*/debian/ * *
+asm * * s/3\..*/3.x/ * *
diff --git a/debian/orig-tar.sh b/debian/orig-tar.sh
index 3491e7f..4cf26d4 100755
--- a/debian/orig-tar.sh
+++ b/debian/orig-tar.sh
@@ -4,9 +4,9 @@
DIR=jaffl-$2
-git clone http://github.com/wmeissner/jaffl.git $DIR
-(cd $DIR && git checkout $2)
-
+tar xzf $3
+mv wmeissner-* $DIR
tar cfz jaffl_$2.orig.tar.gz -X debian/orig-tar.exclude $DIR
+mv jaffl_$2.orig.tar.gz ../
-rm -rf $DIR ../$2
+rm -rf $DIR
diff --git a/debian/patches/series b/debian/patches/series
index 179c2fd..f25df0c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,4 @@
0002-remove-copyLibs-task.patch
0003-don-t-call-ant-for-subprojects.patch
ftbfs-gcc-4.7.diff
+string_array_support.diff
diff --git a/debian/patches/string_array_support.diff b/debian/patches/string_array_support.diff
new file mode 100644
index 0000000..d046e41
--- /dev/null
+++ b/debian/patches/string_array_support.diff
@@ -0,0 +1,333 @@
+Description: Backport String[] to 0.5_branch
+ The commits include:
+ Yours from master, with modifications to merge successfully
+ Tweaks to use 0.5 versions of memory allocation, dispose (i.e. finalize), and platform bits.
+ All tests pass, including the backported StringArrayTest. execv works properly with this build and updated jnr-posix called from JRuby.
+Origin: https://github.com/wmeissner/jaffl/pull/2
+Author: Charles Oliver Nutter <headius>
+--- a/src/com/kenai/jaffl/Pointer.java
++++ b/src/com/kenai/jaffl/Pointer.java
+@@ -1,6 +1,8 @@
+
+ package com.kenai.jaffl;
+
++import java.nio.charset.Charset;
++
+ public interface Pointer {
+ public static final int SIZE = Platform.getPlatform().addressSize();
+
+@@ -31,6 +33,8 @@
+ abstract public Pointer getPointer(long offset);
+ abstract public void putPointer(long offset, Pointer value);
+ abstract public String getString(long offset);
++ abstract public String getString(long offset, int maxLength, Charset cs);
++ abstract public void putString(long offset, String string, int maxLength, Charset cs);
+ abstract public long address();
+ abstract public boolean isDirect();
+ }
+--- a/src/com/kenai/jaffl/provider/jffi/AsmLibraryLoader.java
++++ b/src/com/kenai/jaffl/provider/jffi/AsmLibraryLoader.java
+@@ -98,6 +98,7 @@
+ || Struct.class.isAssignableFrom(type)
+ || (type.isArray() && Struct.class.isAssignableFrom(type.getComponentType()))
+ || (type.isArray() && Pointer.class.isAssignableFrom(type.getComponentType()))
++ || (type.isArray() && CharSequence.class.isAssignableFrom(type.getComponentType()))
+ || CharSequence.class.isAssignableFrom(type)
+ || ByReference.class.isAssignableFrom(type)
+ || StringBuilder.class.isAssignableFrom(type)
+@@ -562,6 +563,11 @@
+ // stack should be: [ Buffer, array, flags ]
+ marshal(mv, CharSequence.class);
+
++ } else if (parameterTypes[i].isArray() && CharSequence.class.isAssignableFrom(parameterTypes[i].getComponentType())) {
++ mv.pushInt(parameterFlags);
++ mv.pushInt(nativeArrayFlags);
++ sessionmarshal(mv, CharSequence[].class, int.class, int.class);
++
+ } else if (Struct.class.isAssignableFrom(parameterTypes[i])) {
+ mv.pushInt(parameterFlags);
+ mv.pushInt(nativeArrayFlags);
+@@ -1008,7 +1014,9 @@
+ return StringBuilder.class.isAssignableFrom(parameterType)
+ || StringBuffer.class.isAssignableFrom(parameterType)
+ || ByReference.class.isAssignableFrom(parameterType)
+- || (parameterType.isArray() && Pointer.class.isAssignableFrom(parameterType.getComponentType()));
++ || (parameterType.isArray() && Pointer.class.isAssignableFrom(parameterType.getComponentType()))
++ || (parameterType.isArray() && CharSequence.class.isAssignableFrom(parameterType.getComponentType()))
++ ;
+ }
+
+ private static boolean isSessionRequired(Class[] parameterTypes) {
+--- a/src/com/kenai/jaffl/provider/jffi/AsmRuntime.java
++++ b/src/com/kenai/jaffl/provider/jffi/AsmRuntime.java
+@@ -269,23 +269,70 @@
+ }
+ }
+
++ public static final void marshal(InvocationSession session, InvocationBuffer buffer,
++ final CharSequence[] strings, final int inout, int nativeArrayFlags) {
++ if (strings == null) {
++ buffer.putAddress(0L);
++
++ } else {
++ final AllocatedDirectMemoryIO[] pointers = new AllocatedDirectMemoryIO[strings.length];
++ final StringIO io = StringIO.getStringIO();
++
++ if (ParameterFlags.isIn(inout)) {
++ for (int i = 0; i < strings.length; ++i) {
++ if (strings[i] != null) {
++ ByteBuffer buf = io.toNative(strings[i], strings[i].length(), ParameterFlags.isIn(inout));
++ AllocatedDirectMemoryIO ptr = new AllocatedDirectMemoryIO(buf.remaining(), false);
++ ptr.put(0, buf.array(), buf.arrayOffset() + buf.position(), buf.remaining());
++ pointers[i] = ptr;
++
++ } else {
++ pointers[i] = null;
++ }
++ }
++ }
++
++ // pass it as an array of pointers
++ final Pointer[] tmp = new Pointer[pointers.length];
++ System.arraycopy(pointers, 0, tmp, 0, tmp.length);
++ marshal(session, buffer, tmp, inout, nativeArrayFlags);
++
++ // Reload any elements of the native array that were changed, and convert back to java strings
++ // the PostInvoke also keeps the native memory alive until after the function call
++ session.addPostInvoke(new InvocationSession.PostInvoke() {
++
++ public void postInvoke() {
++ if (ParameterFlags.isOut(inout)) {
++ for (int i = 0; i < pointers.length; ++i) {
++ if (tmp[i] != null) {
++ strings[i] = tmp[i].getString(0);
++ }
++ }
++ }
++ }
++ });
++
++ }
++ }
++
++
+ public static final void marshal(InvocationBuffer buffer, final Enum parameter) {
+ buffer.putInt(EnumMapper.getInstance().intValue(parameter));
+ }
+
+
+- public static final void marshal(InvocationSession session, InvocationBuffer buffer, Pointer[] parameter, int inout, int nativeArrayFlags) {
+- if (parameter == null) {
++ public static final void marshal(InvocationSession session, InvocationBuffer buffer,
++ final Pointer[] pointers, int inout, int nativeArrayFlags) {
++ if (pointers == null) {
+ buffer.putAddress(0L);
+ } else {
+- final Pointer[] array = parameter;
+ if (Pointer.SIZE == 32) {
+- final int[] raw = new int[array.length];
+- for (int i = 0; i < raw.length; ++i) {
+- if (!array[i].isDirect()) {
++ final int[] raw = new int[pointers.length + 1];
++ for (int i = 0; i < pointers.length; ++i) {
++ if (pointers[i] != null && !pointers[i].isDirect()) {
+ throw new IllegalArgumentException("invalid pointer in array at index " + i);
+ }
+- raw[i] = (int) array[i].address();
++ raw[i] = pointers[i] != null ? (int) pointers[i].address() : 0;
+ }
+ buffer.putArray(raw, 0, raw.length, nativeArrayFlags);
+
+@@ -293,19 +340,19 @@
+ session.addPostInvoke(new InvocationSession.PostInvoke() {
+
+ public void postInvoke() {
+- for (int i = 0; i < raw.length; ++i) {
+- array[i] = MemoryUtil.newPointer(raw[i]);
++ for (int i = 0; i < pointers.length; ++i) {
++ pointers[i] = MemoryUtil.newPointer(raw[i]);
+ }
+ }
+ });
+ }
+ } else {
+- final long[] raw = new long[array.length];
+- for (int i = 0; i < raw.length; ++i) {
+- if (!array[i].isDirect()) {
++ final long[] raw = new long[pointers.length + 1];
++ for (int i = 0; i < pointers.length; ++i) {
++ if (pointers[i] != null && !pointers[i].isDirect()) {
+ throw new IllegalArgumentException("invalid pointer in array at index " + i);
+ }
+- raw[i] = array[i].address();
++ raw[i] = pointers[i] != null ? pointers[i].address() : 0;
+ }
+
+ buffer.putArray(raw, 0, raw.length, nativeArrayFlags);
+@@ -314,8 +361,8 @@
+ session.addPostInvoke(new InvocationSession.PostInvoke() {
+
+ public void postInvoke() {
+- for (int i = 0; i < raw.length; ++i) {
+- array[i] = MemoryUtil.newPointer(raw[i]);
++ for (int i = 0; i < pointers.length; ++i) {
++ pointers[i] = MemoryUtil.newPointer(raw[i]);
+ }
+ }
+ });
+--- a/src/com/kenai/jaffl/provider/jffi/DefaultInvokerFactory.java
++++ b/src/com/kenai/jaffl/provider/jffi/DefaultInvokerFactory.java
+@@ -254,8 +254,13 @@
+ return new StringBufferMarshaller(getParameterFlags(annotations));
+ } else if (StringBuilder.class.isAssignableFrom(type)) {
+ return new StringBuilderMarshaller(getParameterFlags(annotations));
++
+ } else if (CharSequence.class.isAssignableFrom(type)) {
+ return CharSequenceMarshaller.INSTANCE;
++
++ } else if (type.isArray() && CharSequence.class.isAssignableFrom(type.getComponentType())) {
++ return new StringArrayMarshaller(getParameterFlags(annotations));
++
+ } else if (ByReference.class.isAssignableFrom(type)) {
+ return new ByReferenceMarshaller(getParameterFlags(annotations));
+ } else if (Struct.class.isAssignableFrom(type)) {
+@@ -286,6 +291,10 @@
+ return new DoubleArrayMarshaller(getParameterFlags(annotations));
+ } else if (type.isArray() && Struct.class.isAssignableFrom(type.getComponentType())) {
+ return new StructArrayMarshaller(getParameterFlags(annotations));
++
++ } else if (type.isArray() && Pointer.class.isAssignableFrom(type.getComponentType())) {
++ return new PointerArrayMarshaller(getParameterFlags(annotations));
++
+ } else {
+ throw new IllegalArgumentException("Unsupported parameter type: " + type);
+ }
+@@ -574,11 +583,25 @@
+ }
+ }
+
++ static final class StringArrayMarshaller extends SessionRequiredMarshaller {
++ private final int nflags, inout;
++ public StringArrayMarshaller(int inout) {
++ this.inout = inout;
++ this.nflags = getNativeArrayFlags(inout | (ParameterFlags.isIn(inout) ? ParameterFlags.NULTERMINATE : 0));
++ }
++
++
++ @Override
++ public void marshal(InvocationSession session, InvocationBuffer buffer, Object parameter) {
++ AsmRuntime.marshal(session, buffer, (CharSequence[]) parameter, inout, nflags);
++ }
++ }
++
+ static final class StringBufferMarshaller extends SessionRequiredMarshaller {
+ private final int nflags, inout;
+ public StringBufferMarshaller(int inout) {
+ this.inout = inout;
+- this.nflags = getNativeArrayFlags(inout | (ParameterFlags.isIn(inout) ? ParameterFlags.NULTERMINATE : 0));
++ this.nflags = getNativeArrayFlags(inout);
+ }
+
+
+@@ -652,6 +675,19 @@
+ }
+ }
+
++ static final class PointerArrayMarshaller extends SessionRequiredMarshaller {
++ private final int nflags, inout;
++ public PointerArrayMarshaller(int inout) {
++ this.inout = inout;
++ this.nflags = getNativeArrayFlags(inout);
++ }
++
++ @Override
++ public void marshal(InvocationSession session, InvocationBuffer buffer, Object parameter) {
++ AsmRuntime.marshal(session, buffer, (Pointer[]) parameter, inout, nflags);
++ }
++ }
++
+ static final class ByteBufferMarshaller extends BaseMarshaller {
+ private final int flags;
+ public ByteBufferMarshaller(int flags) {
+--- /dev/null
++++ b/test/com/kenai/jaffl/StringArrayTest.java
+@@ -0,0 +1,78 @@
++
++package com.kenai.jaffl;
++
++import com.kenai.jaffl.annotations.In;
++import com.kenai.jaffl.annotations.Out;
++import java.nio.charset.Charset;
++import org.junit.After;
++import org.junit.AfterClass;
++import org.junit.Before;
++import org.junit.BeforeClass;
++import org.junit.Test;
++import static org.junit.Assert.*;
++
++/**
++ *
++ * @author wayne
++ */
++public class StringArrayTest {
++
++ public StringArrayTest() {
++ }
++
++ public static interface TestLib {
++ String ptr_return_array_element(@In String[] array, int index);
++ void ptr_set_array_element(@Out String[] array, int index, Pointer value);
++ }
++
++ static TestLib testlib;
++ static Runtime runtime;
++ @BeforeClass
++ public static void setUpClass() throws Exception {
++ testlib = TstUtil.loadTestLib(TestLib.class);
++ }
++
++ @AfterClass
++ public static void tearDownClass() throws Exception {
++ }
++
++ @Before
++ public void setUp() {
++ }
++
++ @After
++ public void tearDown() {
++ }
++
++ // TODO add test methods here.
++ // The methods must be annotated with annotation @Test. For example:
++ //
++ // @Test
++ // public void hello() {}
++ @Test public void lastElementOfStringArrayShouldBeNull() {
++ String[] strings = { "test" };
++ String result = testlib.ptr_return_array_element(strings, 1);
++ assertNull("last element of string array was not null", result);
++ }
++
++ @Test public void firstElementOfStringArrayShouldNotBeNull() {
++ final String MAGIC = "test";
++ String[] strings = { MAGIC };
++ assertNotNull(testlib.ptr_return_array_element(strings, 0));
++ }
++
++ @Test public void firstElementOfStringArrayShouldEqualOriginalValue() {
++ final String MAGIC = "test";
++ String[] strings = { MAGIC };
++ assertEquals(MAGIC, testlib.ptr_return_array_element(strings, 0));
++ }
++
++ @Test public void elementsSetByNativeCodeShouldBeReloaded() {
++ final String MAGIC = "test";
++ String[] strings = new String[1];
++ Pointer ptr = FFIProvider.getProvider().getMemoryManager().allocateDirect(1024);
++ ptr.putString(0, MAGIC, 1024, Charset.defaultCharset());
++ testlib.ptr_set_array_element(strings, 0, ptr);
++ assertEquals(MAGIC, strings[0]);
++ }
++}
+\ No newline at end of file
diff --git a/debian/rules b/debian/rules
index c9abae4..a94df31 100755
--- a/debian/rules
+++ b/debian/rules
@@ -11,7 +11,8 @@ install/libjaffl-java::
mh_installjar -plibjaffl-java pom.xml -l dist/jaffl-*.jar
clean::
- $(RM) -rf build
+ mh_clean
+ $(RM) -rf build dist
get-orig-source:
uscan --download-version $(DEB_UPSTREAM_VERSION) --force-download --rename
diff --git a/debian/watch b/debian/watch
index 297a5b0..a05396e 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,3 +1,2 @@
version=3
-http://github.com/wmeissner/jaffl/downloads \
- /wmeissner/jaffl/tarball/(.*) debian debian/orig-tar.sh
+http://githubredir.debian.net/github/wmeissner/jaffl /(.*).tar.gz debian debian/orig-tar.sh
--
Java Abstracted Foreign Function Layer
More information about the pkg-java-commits
mailing list