I did some more debugging on the Jython source, and this bug is related
to problems with jnr-posix-1.1.8.jar which is used by Jython 2.5.3. This
java library provides POSIX functionality to the os module in Jython.
When Jython is installed directly from jython.org, then a working
version of jnr-posix is linked in as part of the Jython jar, which is
the reason why this version works.
I tried to compile in support for jnr-posix-2.5.0.jar in
jython-2.5.4-rc1. This approach requires a source code patch (attached)
for the newer jnr-posix-2.5.0 library. It also requires installation of
jnr-constants-0.8.5.jar and jnr-ffi-1.0.0.jar.
The easiest workaround for now, is to download and install
jython-2.5.4-rc1 from jython.org, and wait for a stable version of
Jython 2.7, which includes the required upgrade of jnr-posix, since
doing this patch properly requires quite extensive changes to Jython.
I have attached the patch I was working on, in case someone wants to
take this approach further.
Best regards,
Nils Ulltveit-Moe
Description: <short summary of the patch>
TODO: Put a short summary on the line above and replace this paragraph
with a longer explanation of this change. Complete the meta-information
with other relevant fields (see below for details). To make it easier, the
information below has been extracted from the changelog. Adjust it or drop
it.
.
jython (2.5.4-RC1-1ubuntu1) trusty; urgency=medium
.
* Fixes chmod problem in earlier versions, which prevents installation of setuptools on Jython
Author: Nils Ulltveit-Moe <n...@u-moe.no>
---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:
Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: http://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>
--- jython-2.5.4-RC1.orig/src/org/python/core/PySystemState.java
+++ jython-2.5.4-RC1/src/org/python/core/PySystemState.java
@@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentMa
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-import org.jruby.ext.posix.util.Platform;
+import jnr.posix.util.Platform;
import org.python.Version;
import org.python.core.adapter.ClassicPyObjectAdapter;
import org.python.core.adapter.ExtensiblePyObjectAdapter;
--- jython-2.5.4-RC1.orig/src/org/python/core/io/FileIO.java
+++ jython-2.5.4-RC1/src/org/python/core/io/FileIO.java
@@ -13,7 +13,7 @@ import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import com.kenai.constantine.platform.Errno;
-import org.jruby.ext.posix.util.Platform;
+import jnr.posix.util.Platform;
import org.python.core.Py;
import org.python.core.PyString;
import org.python.core.util.RelativeFile;
--- jython-2.5.4-RC1.orig/src/org/python/core/util/PlatformUtil.java
+++ jython-2.5.4-RC1/src/org/python/core/util/PlatformUtil.java
@@ -1,7 +1,7 @@
/* Copyright (c) 2009 Jython project */
package org.python.core.util;
-import org.jruby.ext.posix.util.Platform;
+import jnr.posix.util.Platform;
/**
* Methods for testing the platform/operating system that we are on.
--- jython-2.5.4-RC1.orig/src/org/python/modules/errno.java
+++ jython-2.5.4-RC1/src/org/python/modules/errno.java
@@ -4,7 +4,7 @@ package org.python.modules;
import com.kenai.constantine.Constant;
import com.kenai.constantine.ConstantSet;
import com.kenai.constantine.platform.Errno;
-import org.jruby.ext.posix.util.Platform;
+import jnr.posix.util.Platform;
import org.python.core.ClassDictInit;
import org.python.core.Py;
import org.python.core.PyDictionary;
--- jython-2.5.4-RC1.orig/src/org/python/modules/posix/PosixModule.java
+++ jython-2.5.4-RC1/src/org/python/modules/posix/PosixModule.java
@@ -17,10 +17,10 @@ import java.security.SecureRandom;
import java.util.Iterator;
import java.util.Map;
-import org.jruby.ext.posix.FileStat;
-import org.jruby.ext.posix.POSIX;
-import org.jruby.ext.posix.POSIXFactory;
-import org.jruby.ext.posix.util.Platform;
+import jnr.posix.FileStat;
+import jnr.posix.POSIX;
+import jnr.posix.POSIXFactory;
+import jnr.posix.util.Platform;
import org.python.core.ClassDictInit;
import org.python.core.Py;
--- jython-2.5.4-RC1.orig/src/org/python/modules/posix/PyStatResult.java
+++ jython-2.5.4-RC1/src/org/python/modules/posix/PyStatResult.java
@@ -1,7 +1,7 @@
/* Copyright (c) Jython Developers */
package org.python.modules.posix;
-import org.jruby.ext.posix.FileStat;
+import jnr.posix.FileStat;
import org.python.core.ArgParser;
import org.python.core.Py;
--- jython-2.5.4-RC1.orig/src/org/python/modules/posix/PythonPOSIXHandler.java
+++ jython-2.5.4-RC1/src/org/python/modules/posix/PythonPOSIXHandler.java
@@ -1,14 +1,16 @@
/* Copyright (c) Jython Developers */
package org.python.modules.posix;
-import com.kenai.constantine.platform.Errno;
+//import com.kenai.constantine.platform.Errno;
+import jnr.constants.platform.Errno;
+import static com.kenai.constantine.platform.Errno.*;
import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
-import org.jruby.ext.posix.POSIX;
-import org.jruby.ext.posix.POSIXHandler;
+import jnr.posix.POSIX;
+import jnr.posix.POSIXHandler;
import org.python.core.imp;
import org.python.core.Options;
@@ -21,9 +23,14 @@ import org.python.core.PyObject;
public class PythonPOSIXHandler implements POSIXHandler {
public void error(Errno error, String extraData) {
+ com.kenai.constantine.platform.Errno oldError=com.kenai.constantine.platform.Errno.valueOf(1);
// XXX: extraData (filename) could have been unicode!
// http://bugs.jython.org/issue1825
- throw Py.OSError(error, Py.newString(extraData));
+ // Have to translate from old Errno enum class to new Errno enum class.
+ // Patch by Nils Ulltveit-Moe for Debian.
+ oldError=oldError.values()[error.ordinal()];
+
+ throw Py.OSError(oldError, Py.newString(extraData));
}
public void unimplementedError(String methodName) {
--- jython-2.5.4-RC1.orig/tests/java/org/python/core/PySystemStateTest.java
+++ jython-2.5.4-RC1/tests/java/org/python/core/PySystemStateTest.java
@@ -7,7 +7,7 @@ import java.net.URLStreamHandler;
import junit.framework.TestCase;
-import org.jruby.ext.posix.util.Platform;
+import jnr.posix.util.Platform;
public class PySystemStateTest extends TestCase {