This is an automated email from the git hooks/post-receive script. nomadium pushed a commit to branch experimental in repository jruby.
commit 857f251ecc683e74211875548bd94ddba135edd4 Author: Miguel Landaeta <[email protected]> Date: Wed Mar 22 22:46:15 2017 +0000 Enable additional JRuby tests tasks --- debian/changelog | 11 +- debian/control | 6 +- .../patches/0009-Bundle-psych-java-extension.patch | 995 --------------------- debian/patches/series | 1 - debian/psych-java-ext-build-classpath | 12 - debian/psych-java-ext-class-entries | 18 - debian/psych-java-ext-source-files | 6 - debian/rules | 67 +- debian/test-tasks.txt | 17 + 9 files changed, 68 insertions(+), 1065 deletions(-) diff --git a/debian/changelog b/debian/changelog index c710ccd..f24c6dd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,15 @@ jruby (9.1.8.0-1~exp2) UNRELEASED; urgency=medium However, a few tests were excluded, so an additional patch was introduced: 0010-Exclude-mri-tests-failing-in-debian.patch * Reintroduce B-D on locales-all. - - -- Miguel Landaeta <[email protected]> Sat, 11 Mar 2017 20:22:13 +0000 + * Enable additional JRuby tests tasks. + - Drop patch 0009-Bundle-psych-java-extension.patch. + - Add dependencies on: + + ruby-jar-dependencies + + ruby-json (>= 2.0.1+dfsg-4~) + + ruby-psych + - Simplify several d/rules targets. + + -- Miguel Landaeta <[email protected]> Wed, 22 Mar 2017 22:37:49 +0000 jruby (9.1.8.0-1~exp1) experimental; urgency=medium diff --git a/debian/control b/debian/control index c8f5403..38c76f5 100644 --- a/debian/control +++ b/debian/control @@ -39,7 +39,6 @@ Build-Depends: ant-optional, libmaven-shade-plugin-java, libmaven-source-plugin-java, libosgi-core-java, - libruby2.3, libunsafe-fences-java, libunsafe-mock-java, libyaml-snake-java, @@ -47,7 +46,9 @@ Build-Depends: ant-optional, maven-debian-helper (>= 2.0~), nailgun, rake, - ruby-json, + ruby-jar-dependencies, + ruby-json (>= 2.0.1+dfsg-4~), + ruby-psych, ruby-rspec, ruby-test-unit Standards-Version: 3.9.8 @@ -86,6 +87,7 @@ Depends: default-jre | java7-runtime, libyaml-snake-java, nailgun, ruby-jar-dependencies, + ruby-psych, ${misc:Depends} Recommends: jruby-openssl (>= 0.9.17~), ri, diff --git a/debian/patches/0009-Bundle-psych-java-extension.patch b/debian/patches/0009-Bundle-psych-java-extension.patch deleted file mode 100644 index b7a5444..0000000 --- a/debian/patches/0009-Bundle-psych-java-extension.patch +++ /dev/null @@ -1,995 +0,0 @@ -Description: Bundle psych Java extension - This patch must be removed as soon as jruby-psych is packaged. - This was bundled with jruby in 1.7.x releases but now is provided by - ruby-psych gem when Java extension is built. -Author: Miguel Landaeta <[email protected]> -Forwarded: no -Last-Update: 2017-03-03 - ---- /dev/null -+++ jruby-9.1.6.0/ext/java/PsychEmitter.java -@@ -0,0 +1,347 @@ -+/***** BEGIN LICENSE BLOCK ***** -+ * Version: EPL 1.0/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Eclipse Public -+ * License Version 1.0 (the "License"); you may not use this file -+ * except in compliance with the License. You may obtain a copy of -+ * the License at http://www.eclipse.org/legal/epl-v10.html -+ * -+ * Software distributed under the License is distributed on an "AS -+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -+ * implied. See the License for the specific language governing -+ * rights and limitations under the License. -+ * -+ * Copyright (C) 2010 Charles O Nutter <[email protected]> -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either of the GNU General Public License Version 2 or later (the "GPL"), -+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the EPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the EPL, the GPL or the LGPL. -+ ***** END LICENSE BLOCK *****/ -+package org.jruby.ext.psych; -+ -+import java.io.IOException; -+import java.io.OutputStreamWriter; -+import java.nio.charset.Charset; -+import java.util.HashMap; -+import java.util.Map; -+ -+import org.jcodings.Encoding; -+import org.jruby.Ruby; -+import org.jruby.RubyArray; -+import org.jruby.RubyClass; -+import org.jruby.RubyFixnum; -+import org.jruby.RubyModule; -+import org.jruby.RubyObject; -+import org.jruby.RubyString; -+import org.jruby.anno.JRubyMethod; -+import org.jruby.runtime.ObjectAllocator; -+import org.jruby.runtime.ThreadContext; -+import org.jruby.runtime.builtin.IRubyObject; -+import org.jruby.util.IOOutputStream; -+import org.yaml.snakeyaml.DumperOptions; -+import org.yaml.snakeyaml.emitter.Emitter; -+import org.yaml.snakeyaml.emitter.EmitterException; -+import org.yaml.snakeyaml.error.Mark; -+import org.yaml.snakeyaml.events.AliasEvent; -+import org.yaml.snakeyaml.events.DocumentEndEvent; -+import org.yaml.snakeyaml.events.DocumentStartEvent; -+import org.yaml.snakeyaml.events.Event; -+import org.yaml.snakeyaml.events.ImplicitTuple; -+import org.yaml.snakeyaml.events.MappingEndEvent; -+import org.yaml.snakeyaml.events.MappingStartEvent; -+import org.yaml.snakeyaml.events.ScalarEvent; -+import org.yaml.snakeyaml.events.SequenceEndEvent; -+import org.yaml.snakeyaml.events.SequenceStartEvent; -+import org.yaml.snakeyaml.events.StreamEndEvent; -+import org.yaml.snakeyaml.events.StreamStartEvent; -+ -+import static org.jruby.runtime.Visibility.*; -+ -+public class PsychEmitter extends RubyObject { -+ public static void initPsychEmitter(Ruby runtime, RubyModule psych) { -+ RubyClass psychHandler = runtime.defineClassUnder("Handler", runtime.getObject(), runtime.getObject().getAllocator(), psych); -+ RubyClass psychEmitter = runtime.defineClassUnder("Emitter", psychHandler, new ObjectAllocator() { -+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) { -+ return new PsychEmitter(runtime, klazz); -+ } -+ }, psych); -+ -+ psychEmitter.defineAnnotatedMethods(PsychEmitter.class); -+ } -+ -+ public PsychEmitter(Ruby runtime, RubyClass klass) { -+ super(runtime, klass); -+ } -+ -+ @JRubyMethod(visibility = PRIVATE) -+ public IRubyObject initialize(ThreadContext context, IRubyObject io) { -+ options = new DumperOptions(); -+ options.setIndent(2); -+ -+ this.io = io; -+ -+ return context.nil; -+ } -+ -+ @JRubyMethod(visibility = PRIVATE) -+ public IRubyObject initialize(ThreadContext context, IRubyObject io, IRubyObject rbOptions) { -+ IRubyObject width = rbOptions.callMethod(context, "line_width"); -+ IRubyObject canonical = rbOptions.callMethod(context, "canonical"); -+ IRubyObject level = rbOptions.callMethod(context, "indentation"); -+ -+ options = new DumperOptions(); -+ -+ options.setCanonical(canonical.isTrue()); -+ options.setIndent((int)level.convertToInteger().getLongValue()); -+ line_width_set(context, width); -+ -+ this.io = io; -+ -+ return context.nil; -+ } -+ -+ @JRubyMethod -+ public IRubyObject start_stream(ThreadContext context, IRubyObject encoding) { -+ if (!(encoding instanceof RubyFixnum)) { -+ throw context.runtime.newTypeError(encoding, context.runtime.getFixnum()); -+ } -+ -+ initEmitter(context, encoding); -+ -+ StreamStartEvent event = new StreamStartEvent(NULL_MARK, NULL_MARK); -+ -+ emit(context, event); -+ -+ return this; -+ } -+ -+ @JRubyMethod -+ public IRubyObject end_stream(ThreadContext context) { -+ StreamEndEvent event = new StreamEndEvent(NULL_MARK, NULL_MARK); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod -+ public IRubyObject start_document(ThreadContext context, IRubyObject _version, IRubyObject tags, IRubyObject implicit) { -+ DumperOptions.Version version = null; -+ boolean implicitBool = implicit.isTrue(); -+ Map<String, String> tagsMap = null; -+ -+ RubyArray versionAry = _version.convertToArray(); -+ if (versionAry.size() == 2) { -+ int versionInt0 = (int)versionAry.eltInternal(0).convertToInteger().getLongValue(); -+ int versionInt1 = (int)versionAry.eltInternal(1).convertToInteger().getLongValue(); -+ -+ if (versionInt0 == 1) { -+ if (versionInt1 == 0) { -+ version = DumperOptions.Version.V1_0; -+ } else if (versionInt1 == 1) { -+ version = DumperOptions.Version.V1_1; -+ } -+ } -+ if (version == null) { -+ throw context.runtime.newArgumentError("invalid YAML version: " + versionAry); -+ } -+ } -+ -+ RubyArray tagsAry = tags.convertToArray(); -+ if (tagsAry.size() > 0) { -+ tagsMap = new HashMap<String, String>(tagsAry.size()); -+ for (int i = 0; i < tagsAry.size(); i++) { -+ RubyArray tagsTuple = tagsAry.eltInternal(i).convertToArray(); -+ if (tagsTuple.size() != 2) { -+ throw context.runtime.newRuntimeError("tags tuple must be of length 2"); -+ } -+ IRubyObject key = tagsTuple.eltInternal(0); -+ IRubyObject value = tagsTuple.eltInternal(1); -+ tagsMap.put( -+ key.asJavaString(), -+ value.asJavaString()); -+ } -+ } -+ -+ DocumentStartEvent event = new DocumentStartEvent(NULL_MARK, NULL_MARK, !implicitBool, version, tagsMap); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod -+ public IRubyObject end_document(ThreadContext context, IRubyObject implicit) { -+ DocumentEndEvent event = new DocumentEndEvent(NULL_MARK, NULL_MARK, !implicit.isTrue()); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod(required = 6) -+ public IRubyObject scalar(ThreadContext context, IRubyObject[] args) { -+ IRubyObject value = args[0]; -+ IRubyObject anchor = args[1]; -+ IRubyObject tag = args[2]; -+ IRubyObject plain = args[3]; -+ IRubyObject quoted = args[4]; -+ IRubyObject style = args[5]; -+ -+ if (!(value instanceof RubyString)) { -+ throw context.runtime.newTypeError(value, context.runtime.getString()); -+ } -+ -+ ScalarEvent event = new ScalarEvent( -+ anchor.isNil() ? null : anchor.asJavaString(), -+ tag.isNil() ? null : tag.asJavaString(), -+ new ImplicitTuple(plain.isTrue(), -+ quoted.isTrue()), -+ value.asJavaString(), -+ NULL_MARK, -+ NULL_MARK, -+ SCALAR_STYLES[(int)style.convertToInteger().getLongValue()]); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod(required = 4) -+ public IRubyObject start_sequence(ThreadContext context, IRubyObject[] args) { -+ IRubyObject anchor = args[0]; -+ IRubyObject tag = args[1]; -+ IRubyObject implicit = args[2]; -+ IRubyObject style = args[3]; -+ -+ final int SEQUENCE_BLOCK = 1; // see psych/nodes/sequence.rb -+ -+ SequenceStartEvent event = new SequenceStartEvent( -+ anchor.isNil() ? null : anchor.asJavaString(), -+ tag.isNil() ? null : tag.asJavaString(), -+ implicit.isTrue(), -+ NULL_MARK, -+ NULL_MARK, -+ SEQUENCE_BLOCK != style.convertToInteger().getLongValue()); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod -+ public IRubyObject end_sequence(ThreadContext context) { -+ SequenceEndEvent event = new SequenceEndEvent(NULL_MARK, NULL_MARK); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod(required = 4) -+ public IRubyObject start_mapping(ThreadContext context, IRubyObject[] args) { -+ IRubyObject anchor = args[0]; -+ IRubyObject tag = args[1]; -+ IRubyObject implicit = args[2]; -+ IRubyObject style = args[3]; -+ -+ final int MAPPING_BLOCK = 1; // see psych/nodes/mapping.rb -+ -+ MappingStartEvent event = new MappingStartEvent( -+ anchor.isNil() ? null : anchor.asJavaString(), -+ tag.isNil() ? null : tag.asJavaString(), -+ implicit.isTrue(), -+ NULL_MARK, -+ NULL_MARK, -+ MAPPING_BLOCK != style.convertToInteger().getLongValue()); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod -+ public IRubyObject end_mapping(ThreadContext context) { -+ MappingEndEvent event = new MappingEndEvent(NULL_MARK, NULL_MARK); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod -+ public IRubyObject alias(ThreadContext context, IRubyObject anchor) { -+ AliasEvent event = new AliasEvent(anchor.asJavaString(), NULL_MARK, NULL_MARK); -+ emit(context, event); -+ return this; -+ } -+ -+ @JRubyMethod(name = "canonical=") -+ public IRubyObject canonical_set(ThreadContext context, IRubyObject canonical) { -+ // TODO: unclear if this affects a running emitter -+ options.setCanonical(canonical.isTrue()); -+ return canonical; -+ } -+ -+ @JRubyMethod -+ public IRubyObject canonical(ThreadContext context) { -+ // TODO: unclear if this affects a running emitter -+ return context.runtime.newBoolean(options.isCanonical()); -+ } -+ -+ @JRubyMethod(name = "indentation=") -+ public IRubyObject indentation_set(ThreadContext context, IRubyObject level) { -+ // TODO: unclear if this affects a running emitter -+ options.setIndent((int)level.convertToInteger().getLongValue()); -+ return level; -+ } -+ -+ @JRubyMethod -+ public IRubyObject indentation(ThreadContext context) { -+ // TODO: unclear if this affects a running emitter -+ return context.runtime.newFixnum(options.getIndent()); -+ } -+ -+ @JRubyMethod(name = "line_width=") -+ public IRubyObject line_width_set(ThreadContext context, IRubyObject width) { -+ int newWidth = (int)width.convertToInteger().getLongValue(); -+ if (newWidth <= 0) newWidth = Integer.MAX_VALUE; -+ options.setWidth(newWidth); -+ return width; -+ } -+ -+ @JRubyMethod -+ public IRubyObject line_width(ThreadContext context) { -+ return context.runtime.newFixnum(options.getWidth()); -+ } -+ -+ private void emit(ThreadContext context, Event event) { -+ try { -+ if (emitter == null) throw context.runtime.newRuntimeError("uninitialized emitter"); -+ -+ emitter.emit(event); -+ } catch (IOException ioe) { -+ throw context.runtime.newIOErrorFromException(ioe); -+ } catch (EmitterException ee) { -+ throw context.runtime.newRuntimeError(ee.toString()); -+ } -+ } -+ -+ private void initEmitter(ThreadContext context, IRubyObject _encoding) { -+ if (emitter != null) throw context.runtime.newRuntimeError("already initialized emitter"); -+ -+ Encoding encoding = PsychLibrary.YAMLEncoding.values()[(int)_encoding.convertToInteger().getLongValue()].encoding; -+ Charset charset = context.runtime.getEncodingService().charsetForEncoding(encoding); -+ -+ emitter = new Emitter(new OutputStreamWriter(new IOOutputStream(io, encoding), charset), options); -+ } -+ -+ Emitter emitter; -+ DumperOptions options = new DumperOptions(); -+ IRubyObject io; -+ -+ private static final Mark NULL_MARK = new Mark(null, 0, 0, 0, null, 0); -+ -+ // Map style constants from Psych values (ANY = 0 ... FOLDED = 5) -+ // to SnakeYaml values; see psych/nodes/scalar.rb. -+ private static final Character[] SCALAR_STYLES = new Character[] { -+ null, // ANY; we'll choose plain -+ null, // PLAIN -+ '\'', // SINGLE_QUOTED -+ '"', // DOUBLE_QUOTED -+ '|', // LITERAL -+ '>', // FOLDED -+ }; -+} ---- /dev/null -+++ jruby-9.1.6.0/ext/java/PsychLibrary.java -@@ -0,0 +1,93 @@ -+/***** BEGIN LICENSE BLOCK ***** -+ * Version: EPL 1.0/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Eclipse Public -+ * License Version 1.0 (the "License"); you may not use this file -+ * except in compliance with the License. You may obtain a copy of -+ * the License at http://www.eclipse.org/legal/epl-v10.html -+ * -+ * Software distributed under the License is distributed on an "AS -+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -+ * implied. See the License for the specific language governing -+ * rights and limitations under the License. -+ * -+ * Copyright (C) 2010 Charles O Nutter <[email protected]> -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either of the GNU General Public License Version 2 or later (the "GPL"), -+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the EPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the EPL, the GPL or the LGPL. -+ ***** END LICENSE BLOCK *****/ -+package org.jruby.ext.psych; -+ -+import java.io.InputStream; -+import java.io.IOException; -+import java.util.Properties; -+ -+import org.jcodings.Encoding; -+import org.jcodings.specific.UTF16BEEncoding; -+import org.jcodings.specific.UTF16LEEncoding; -+import org.jcodings.specific.UTF8Encoding; -+import org.jruby.Ruby; -+import org.jruby.RubyArray; -+import org.jruby.RubyModule; -+import org.jruby.RubyString; -+import org.jruby.internal.runtime.methods.JavaMethod.JavaMethodZero; -+import org.jruby.runtime.ThreadContext; -+import org.jruby.runtime.Visibility; -+import org.jruby.runtime.builtin.IRubyObject; -+import org.jruby.runtime.load.Library; -+ -+public class PsychLibrary implements Library { -+ public void load(final Ruby runtime, boolean wrap) { -+ RubyModule psych = runtime.defineModule("Psych"); -+ -+ // load version from properties packed with the jar -+ Properties props = new Properties(); -+ try( InputStream is = runtime.getJRubyClassLoader().getResourceAsStream("META-INF/maven/org.yaml/snakeyaml/pom.properties") ) { -+ props.load(is); -+ } -+ catch( IOException e ) { -+ // ignored -+ } -+ RubyString version = runtime.newString(props.getProperty("version", "0.0") + ".0"); -+ version.setFrozen(true); -+ psych.setConstant("SNAKEYAML_VERSION", version); -+ -+ String[] versionParts = version.toString().split("\\."); -+ final RubyArray versionElements = runtime.newArray(runtime.newFixnum(Integer.parseInt(versionParts[0])), runtime.newFixnum(Integer.parseInt(versionParts[1])), runtime.newFixnum(Integer.parseInt(versionParts[2]))); -+ versionElements.setFrozen(true); -+ -+ psych.getSingletonClass().addMethod("libyaml_version", new JavaMethodZero(psych, Visibility.PUBLIC) { -+ @Override -+ public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name) { -+ return versionElements; -+ } -+ }); -+ -+ PsychParser.initPsychParser(runtime, psych); -+ PsychEmitter.initPsychEmitter(runtime, psych); -+ PsychToRuby.initPsychToRuby(runtime, psych); -+ PsychYamlTree.initPsychYamlTree(runtime, psych); -+ } -+ -+ public enum YAMLEncoding { -+ YAML_ANY_ENCODING(UTF8Encoding.INSTANCE), -+ YAML_UTF8_ENCODING(UTF8Encoding.INSTANCE), -+ YAML_UTF16LE_ENCODING(UTF16LEEncoding.INSTANCE), -+ YAML_UTF16BE_ENCODING(UTF16BEEncoding.INSTANCE); -+ -+ YAMLEncoding(Encoding encoding) { -+ this.encoding = encoding; -+ } -+ -+ public final Encoding encoding; -+ } -+} ---- /dev/null -+++ jruby-9.1.6.0/ext/java/PsychParser.java -@@ -0,0 +1,398 @@ -+/***** BEGIN LICENSE BLOCK ***** -+ * Version: EPL 1.0/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Eclipse Public -+ * License Version 1.0 (the "License"); you may not use this file -+ * except in compliance with the License. You may obtain a copy of -+ * the License at http://www.eclipse.org/legal/epl-v10.html -+ * -+ * Software distributed under the License is distributed on an "AS -+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -+ * implied. See the License for the specific language governing -+ * rights and limitations under the License. -+ * -+ * Copyright (C) 2010 Charles O Nutter <[email protected]> -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either of the GNU General Public License Version 2 or later (the "GPL"), -+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the EPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the EPL, the GPL or the LGPL. -+ ***** END LICENSE BLOCK *****/ -+package org.jruby.ext.psych; -+ -+import java.io.ByteArrayInputStream; -+import java.io.InputStreamReader; -+import java.nio.charset.Charset; -+import java.util.Map; -+ -+import org.jcodings.Encoding; -+import org.jcodings.specific.UTF8Encoding; -+import org.jcodings.unicode.UnicodeEncoding; -+import org.jruby.Ruby; -+import org.jruby.RubyArray; -+import org.jruby.RubyClass; -+import org.jruby.RubyEncoding; -+import org.jruby.RubyIO; -+import org.jruby.RubyKernel; -+import org.jruby.RubyModule; -+import org.jruby.RubyObject; -+import org.jruby.RubyString; -+import org.jruby.anno.JRubyMethod; -+import static org.jruby.ext.psych.PsychLibrary.YAMLEncoding.*; -+import org.jruby.runtime.Block; -+import org.jruby.runtime.Helpers; -+import org.jruby.runtime.ObjectAllocator; -+import org.jruby.runtime.ThreadContext; -+import org.jruby.runtime.builtin.IRubyObject; -+import org.jruby.util.IOInputStream; -+import org.jruby.util.io.EncodingUtils; -+import org.jruby.util.log.Logger; -+import org.jruby.util.log.LoggerFactory; -+import org.yaml.snakeyaml.DumperOptions; -+import org.yaml.snakeyaml.error.Mark; -+import org.yaml.snakeyaml.error.MarkedYAMLException; -+import org.yaml.snakeyaml.events.AliasEvent; -+import org.yaml.snakeyaml.events.DocumentEndEvent; -+import org.yaml.snakeyaml.events.DocumentStartEvent; -+import org.yaml.snakeyaml.events.Event; -+import org.yaml.snakeyaml.events.Event.ID; -+import org.yaml.snakeyaml.events.MappingStartEvent; -+import org.yaml.snakeyaml.events.ScalarEvent; -+import org.yaml.snakeyaml.events.SequenceStartEvent; -+import org.yaml.snakeyaml.parser.Parser; -+import org.yaml.snakeyaml.parser.ParserException; -+import org.yaml.snakeyaml.parser.ParserImpl; -+import org.yaml.snakeyaml.reader.ReaderException; -+import org.yaml.snakeyaml.reader.StreamReader; -+import org.yaml.snakeyaml.scanner.ScannerException; -+import static org.jruby.runtime.Helpers.invoke; -+import org.jruby.util.ByteList; -+ -+public class PsychParser extends RubyObject { -+ -+ private static final Logger LOG = LoggerFactory.getLogger(PsychParser.class); -+ -+ public static void initPsychParser(Ruby runtime, RubyModule psych) { -+ RubyClass psychParser = runtime.defineClassUnder("Parser", runtime.getObject(), new ObjectAllocator() { -+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) { -+ return new PsychParser(runtime, klazz); -+ } -+ }, psych); -+ -+ RubyKernel.require(runtime.getNil(), -+ runtime.newString("psych/syntax_error"), Block.NULL_BLOCK); -+ psychParser.defineConstant("ANY", runtime.newFixnum(YAML_ANY_ENCODING.ordinal())); -+ psychParser.defineConstant("UTF8", runtime.newFixnum(YAML_UTF8_ENCODING.ordinal())); -+ psychParser.defineConstant("UTF16LE", runtime.newFixnum(YAML_UTF16LE_ENCODING.ordinal())); -+ psychParser.defineConstant("UTF16BE", runtime.newFixnum(YAML_UTF16BE_ENCODING.ordinal())); -+ -+ psychParser.defineAnnotatedMethods(PsychParser.class); -+ } -+ -+ public PsychParser(Ruby runtime, RubyClass klass) { -+ super(runtime, klass); -+ } -+ -+ @JRubyMethod -+ public IRubyObject parse(ThreadContext context, IRubyObject yaml) { -+ Ruby runtime = context.runtime; -+ -+ return parse(context, yaml, runtime.getNil()); -+ } -+ -+ private IRubyObject stringOrNilFor(Ruby runtime, String value, boolean tainted) { -+ if (value == null) return runtime.getNil(); // No need to taint nil -+ -+ return stringFor(runtime, value, tainted); -+ } -+ -+ private RubyString stringFor(Ruby runtime, String value, boolean tainted) { -+ Encoding encoding = runtime.getDefaultInternalEncoding(); -+ if (encoding == null) { -+ encoding = UTF8Encoding.INSTANCE; -+ } -+ -+ Charset charset = RubyEncoding.UTF8; -+ if (encoding.getCharset() != null) { -+ charset = encoding.getCharset(); -+ } -+ -+ ByteList bytes = new ByteList(value.getBytes(charset), encoding); -+ RubyString string = RubyString.newString(runtime, bytes); -+ -+ string.setTaint(tainted); -+ -+ return string; -+ } -+ -+ private StreamReader readerFor(ThreadContext context, IRubyObject yaml) { -+ Ruby runtime = context.runtime; -+ -+ if (yaml instanceof RubyString) { -+ ByteList byteList = ((RubyString)yaml).getByteList(); -+ Encoding enc = byteList.getEncoding(); -+ -+ // if not unicode, transcode to UTF8 -+ if (!(enc instanceof UnicodeEncoding)) { -+ byteList = EncodingUtils.strConvEnc(context, byteList, enc, UTF8Encoding.INSTANCE); -+ enc = UTF8Encoding.INSTANCE; -+ } -+ -+ ByteArrayInputStream bais = new ByteArrayInputStream(byteList.getUnsafeBytes(), byteList.getBegin(), byteList.getRealSize()); -+ -+ Charset charset = enc.getCharset(); -+ -+ assert charset != null : "charset for encoding " + enc + " should not be null"; -+ -+ InputStreamReader isr = new InputStreamReader(bais, charset); -+ -+ return new StreamReader(isr); -+ } -+ -+ // fall back on IOInputStream, using default charset -+ if (yaml.respondsTo("read")) { -+ Encoding enc = (yaml instanceof RubyIO) -+ ? ((RubyIO)yaml).getReadEncoding() -+ : UTF8Encoding.INSTANCE; -+ Charset charset = enc.getCharset(); -+ return new StreamReader(new InputStreamReader(new IOInputStream(yaml), charset)); -+ } else { -+ throw runtime.newTypeError(yaml, runtime.getIO()); -+ } -+ } -+ -+ @JRubyMethod -+ public IRubyObject parse(ThreadContext context, IRubyObject yaml, IRubyObject path) { -+ Ruby runtime = context.runtime; -+ boolean tainted = yaml.isTaint() || yaml instanceof RubyIO; -+ -+ try { -+ parser = new ParserImpl(readerFor(context, yaml)); -+ -+ if (path.isNil() && yaml.respondsTo("path")) { -+ path = yaml.callMethod(context, "path"); -+ } -+ -+ IRubyObject handler = getInstanceVariable("@handler"); -+ -+ while (true) { -+ event = parser.getEvent(); -+ -+ // FIXME: Event should expose a getID, so it can be switched -+ if (event.is(ID.StreamStart)) { -+ invoke(context, handler, "start_stream", runtime.newFixnum(YAML_ANY_ENCODING.ordinal())); -+ } else if (event.is(ID.DocumentStart)) { -+ handleDocumentStart(context, (DocumentStartEvent) event, tainted, handler); -+ } else if (event.is(ID.DocumentEnd)) { -+ IRubyObject notExplicit = runtime.newBoolean(!((DocumentEndEvent) event).getExplicit()); -+ -+ invoke(context, handler, "end_document", notExplicit); -+ } else if (event.is(ID.Alias)) { -+ IRubyObject alias = stringOrNilFor(runtime, ((AliasEvent)event).getAnchor(), tainted); -+ -+ invoke(context, handler, "alias", alias); -+ } else if (event.is(ID.Scalar)) { -+ handleScalar(context, (ScalarEvent) event, tainted, handler); -+ } else if (event.is(ID.SequenceStart)) { -+ handleSequenceStart(context,(SequenceStartEvent) event, tainted, handler); -+ } else if (event.is(ID.SequenceEnd)) { -+ invoke(context, handler, "end_sequence"); -+ } else if (event.is(ID.MappingStart)) { -+ handleMappingStart(context, (MappingStartEvent) event, tainted, handler); -+ } else if (event.is(ID.MappingEnd)) { -+ invoke(context, handler, "end_mapping"); -+ } else if (event.is(ID.StreamEnd)) { -+ invoke(context, handler, "end_stream"); -+ -+ break; -+ } -+ } -+ } catch (ParserException pe) { -+ parser = null; -+ raiseParserException(context, yaml, pe, path); -+ -+ } catch (ScannerException se) { -+ parser = null; -+ StringBuilder message = new StringBuilder("syntax error"); -+ if (se.getProblemMark() != null) { -+ message.append(se.getProblemMark().toString()); -+ } -+ raiseParserException(context, yaml, se, path); -+ -+ } catch (ReaderException re) { -+ parser = null; -+ raiseParserException(context, yaml, re, path); -+ -+ } catch (Throwable t) { -+ Helpers.throwException(t); -+ return this; -+ } -+ -+ return this; -+ } -+ -+ private void handleDocumentStart(ThreadContext context, DocumentStartEvent dse, boolean tainted, IRubyObject handler) { -+ Ruby runtime = context.runtime; -+ DumperOptions.Version _version = dse.getVersion(); -+ IRubyObject version = _version == null ? -+ RubyArray.newArray(runtime) : -+ RubyArray.newArray(runtime, runtime.newFixnum(_version.major()), runtime.newFixnum(_version.minor())); -+ -+ Map<String, String> tagsMap = dse.getTags(); -+ RubyArray tags = RubyArray.newArray(runtime); -+ if (tagsMap != null && tagsMap.size() > 0) { -+ for (Map.Entry<String, String> tag : tagsMap.entrySet()) { -+ IRubyObject key = stringFor(runtime, tag.getKey(), tainted); -+ IRubyObject value = stringFor(runtime, tag.getValue(), tainted); -+ -+ tags.append(RubyArray.newArray(runtime, key, value)); -+ } -+ } -+ IRubyObject notExplicit = runtime.newBoolean(!dse.getExplicit()); -+ -+ invoke(context, handler, "start_document", version, tags, notExplicit); -+ } -+ -+ private void handleMappingStart(ThreadContext context, MappingStartEvent mse, boolean tainted, IRubyObject handler) { -+ Ruby runtime = context.runtime; -+ IRubyObject anchor = stringOrNilFor(runtime, mse.getAnchor(), tainted); -+ IRubyObject tag = stringOrNilFor(runtime, mse.getTag(), tainted); -+ IRubyObject implicit = runtime.newBoolean(mse.getImplicit()); -+ IRubyObject style = runtime.newFixnum(translateFlowStyle(mse.getFlowStyle())); -+ -+ invoke(context, handler, "start_mapping", anchor, tag, implicit, style); -+ } -+ -+ private void handleScalar(ThreadContext context, ScalarEvent se, boolean tainted, IRubyObject handler) { -+ Ruby runtime = context.runtime; -+ IRubyObject anchor = stringOrNilFor(runtime, se.getAnchor(), tainted); -+ IRubyObject tag = stringOrNilFor(runtime, se.getTag(), tainted); -+ IRubyObject plain_implicit = runtime.newBoolean(se.getImplicit().canOmitTagInPlainScalar()); -+ IRubyObject quoted_implicit = runtime.newBoolean(se.getImplicit().canOmitTagInNonPlainScalar()); -+ IRubyObject style = runtime.newFixnum(translateStyle(se.getStyle())); -+ IRubyObject val = stringFor(runtime, se.getValue(), tainted); -+ -+ invoke(context, handler, "scalar", val, anchor, tag, plain_implicit, -+ quoted_implicit, style); -+ } -+ -+ private void handleSequenceStart(ThreadContext context, SequenceStartEvent sse, boolean tainted, IRubyObject handler) { -+ Ruby runtime = context.runtime; -+ IRubyObject anchor = stringOrNilFor(runtime, sse.getAnchor(), tainted); -+ IRubyObject tag = stringOrNilFor(runtime, sse.getTag(), tainted); -+ IRubyObject implicit = runtime.newBoolean(sse.getImplicit()); -+ IRubyObject style = runtime.newFixnum(translateFlowStyle(sse.getFlowStyle())); -+ -+ invoke(context, handler, "start_sequence", anchor, tag, implicit, style); -+ } -+ -+ private static void raiseParserException(ThreadContext context, IRubyObject yaml, ReaderException re, IRubyObject rbPath) { -+ Ruby runtime; -+ RubyClass se; -+ IRubyObject exception; -+ -+ runtime = context.runtime; -+ se = (RubyClass)runtime.getModule("Psych").getConstant("SyntaxError"); -+ -+ exception = se.newInstance(context, -+ new IRubyObject[] { -+ rbPath, -+ runtime.newFixnum(0), -+ runtime.newFixnum(0), -+ runtime.newFixnum(re.getPosition()), -+ (null == re.getName() ? runtime.getNil() : runtime.newString(re.getName())), -+ (null == re.toString() ? runtime.getNil() : runtime.newString(re.toString())) -+ }, -+ Block.NULL_BLOCK); -+ -+ RubyKernel.raise(context, runtime.getKernel(), new IRubyObject[] { exception }, Block.NULL_BLOCK); -+ } -+ -+ private static void raiseParserException(ThreadContext context, IRubyObject yaml, MarkedYAMLException mye, IRubyObject rbPath) { -+ Ruby runtime; -+ Mark mark; -+ RubyClass se; -+ IRubyObject exception; -+ -+ runtime = context.runtime; -+ se = (RubyClass)runtime.getModule("Psych").getConstant("SyntaxError"); -+ -+ mark = mye.getProblemMark(); -+ -+ exception = se.newInstance(context, -+ new IRubyObject[] { -+ rbPath, -+ runtime.newFixnum(mark.getLine() + 1), -+ runtime.newFixnum(mark.getColumn() + 1), -+ runtime.newFixnum(mark.getIndex()), -+ (null == mye.getProblem() ? runtime.getNil() : runtime.newString(mye.getProblem())), -+ (null == mye.getContext() ? runtime.getNil() : runtime.newString(mye.getContext())) -+ }, -+ Block.NULL_BLOCK); -+ -+ RubyKernel.raise(context, runtime.getKernel(), new IRubyObject[] { exception }, Block.NULL_BLOCK); -+ } -+ -+ private static int translateStyle(Character style) { -+ if (style == null) return 0; // any -+ -+ switch (style) { -+ case 0: return 1; // plain -+ case '\'': return 2; // single-quoted -+ case '"': return 3; // double-quoted -+ case '|': return 4; // literal -+ case '>': return 5; // folded -+ default: return 0; // any -+ } -+ } -+ -+ private static int translateFlowStyle(Boolean flowStyle) { -+ if (flowStyle == null) return 0; // any -+ -+ if (flowStyle) return 2; -+ return 1; -+ } -+ -+ @JRubyMethod -+ public IRubyObject mark(ThreadContext context) { -+ Ruby runtime = context.runtime; -+ -+ Event event = null; -+ -+ if (parser != null) { -+ event = parser.peekEvent(); -+ -+ if (event == null) event = this.event; -+ } -+ -+ if (event == null) { -+ return ((RubyClass)context.runtime.getClassFromPath("Psych::Parser::Mark")).newInstance( -+ context, -+ runtime.newFixnum(0), -+ runtime.newFixnum(0), -+ runtime.newFixnum(0), -+ Block.NULL_BLOCK -+ ); -+ } -+ -+ Mark mark = event.getStartMark(); -+ -+ return ((RubyClass)context.runtime.getClassFromPath("Psych::Parser::Mark")).newInstance( -+ context, -+ runtime.newFixnum(mark.getIndex()), -+ runtime.newFixnum(mark.getLine()), -+ runtime.newFixnum(mark.getColumn()), -+ Block.NULL_BLOCK -+ ); -+ } -+ -+ private Parser parser; -+ private Event event; -+} ---- /dev/null -+++ jruby-9.1.6.0/ext/java/PsychToRuby.java -@@ -0,0 +1,79 @@ -+/***** BEGIN LICENSE BLOCK ***** -+ * Version: EPL 1.0/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Eclipse Public -+ * License Version 1.0 (the "License"); you may not use this file -+ * except in compliance with the License. You may obtain a copy of -+ * the License at http://www.eclipse.org/legal/epl-v10.html -+ * -+ * Software distributed under the License is distributed on an "AS -+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -+ * implied. See the License for the specific language governing -+ * rights and limitations under the License. -+ * -+ * Copyright (C) 2010 Charles O Nutter <[email protected]> -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either of the GNU General Public License Version 2 or later (the "GPL"), -+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the EPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the EPL, the GPL or the LGPL. -+ ***** END LICENSE BLOCK *****/ -+package org.jruby.ext.psych; -+ -+import org.jruby.Ruby; -+import org.jruby.RubyClass; -+import org.jruby.RubyModule; -+import org.jruby.RubyObject; -+import org.jruby.RubyException; -+import org.jruby.anno.JRubyMethod; -+import org.jruby.exceptions.RaiseException; -+import org.jruby.runtime.ThreadContext; -+import org.jruby.runtime.builtin.IRubyObject; -+import static org.jruby.runtime.Visibility.*; -+ -+public class PsychToRuby { -+ public static void initPsychToRuby(Ruby runtime, RubyModule psych) { -+ RubyClass classLoader = runtime.defineClassUnder("ClassLoader", runtime.getObject(), RubyObject.OBJECT_ALLOCATOR, psych); -+ -+ RubyModule visitors = runtime.defineModuleUnder("Visitors", psych); -+ RubyClass visitor = runtime.defineClassUnder("Visitor", runtime.getObject(), runtime.getObject().getAllocator(), visitors); -+ RubyClass psychToRuby = runtime.defineClassUnder("ToRuby", visitor, RubyObject.OBJECT_ALLOCATOR, visitors); -+ -+ psychToRuby.defineAnnotatedMethods(ToRuby.class); -+ classLoader.defineAnnotatedMethods(ClassLoader.class); -+ } -+ -+ public static class ToRuby { -+ @JRubyMethod(visibility = PRIVATE) -+ public static IRubyObject build_exception(ThreadContext context, IRubyObject self, IRubyObject klass, IRubyObject message) { -+ if (klass instanceof RubyClass) { -+ IRubyObject exception = ((RubyClass)klass).allocate(); -+ ((RubyException)exception).setMessage(message); -+ return exception; -+ } else { -+ throw context.runtime.newTypeError(klass, context.runtime.getClassClass()); -+ } -+ } -+ } -+ -+ public static class ClassLoader { -+ @JRubyMethod(visibility = PRIVATE) -+ public static IRubyObject path2class(ThreadContext context, IRubyObject self, IRubyObject path) { -+ try { -+ return context.runtime.getClassFromPath(path.asJavaString()); -+ } catch (RaiseException re) { -+ if (re.getException().getMetaClass() == context.runtime.getNameError()) { -+ throw context.runtime.newArgumentError("undefined class/module " + path); -+ } -+ throw re; -+ } -+ } -+ } -+} ---- /dev/null -+++ jruby-9.1.6.0/ext/java/PsychYamlTree.java -@@ -0,0 +1,55 @@ -+/***** BEGIN LICENSE BLOCK ***** -+ * Version: EPL 1.0/GPL 2.0/LGPL 2.1 -+ * -+ * The contents of this file are subject to the Eclipse Public -+ * License Version 1.0 (the "License"); you may not use this file -+ * except in compliance with the License. You may obtain a copy of -+ * the License at http://www.eclipse.org/legal/epl-v10.html -+ * -+ * Software distributed under the License is distributed on an "AS -+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -+ * implied. See the License for the specific language governing -+ * rights and limitations under the License. -+ * -+ * Copyright (C) 2010 Charles O Nutter <[email protected]> -+ * -+ * Alternatively, the contents of this file may be used under the terms of -+ * either of the GNU General Public License Version 2 or later (the "GPL"), -+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -+ * in which case the provisions of the GPL or the LGPL are applicable instead -+ * of those above. If you wish to allow use of your version of this file only -+ * under the terms of either the GPL or the LGPL, and not to allow others to -+ * use your version of this file under the terms of the EPL, indicate your -+ * decision by deleting the provisions above and replace them with the notice -+ * and other provisions required by the GPL or the LGPL. If you do not delete -+ * the provisions above, a recipient may use your version of this file under -+ * the terms of any one of the EPL, the GPL or the LGPL. -+ ***** END LICENSE BLOCK *****/ -+package org.jruby.ext.psych; -+ -+import org.jruby.Ruby; -+import org.jruby.RubyClass; -+import org.jruby.RubyModule; -+import org.jruby.RubyObject; -+import org.jruby.anno.JRubyMethod; -+import org.jruby.runtime.ThreadContext; -+import org.jruby.runtime.builtin.IRubyObject; -+import static org.jruby.runtime.Visibility.*; -+ -+public class PsychYamlTree { -+ public static void initPsychYamlTree(Ruby runtime, RubyModule psych) { -+ RubyModule visitors = (RubyModule)psych.getConstant("Visitors"); -+ RubyClass visitor = (RubyClass)visitors.getConstant("Visitor"); -+ RubyClass psychYamlTree = runtime.defineClassUnder("YAMLTree", visitor, RubyObject.OBJECT_ALLOCATOR, visitors); -+ -+ psychYamlTree.defineAnnotatedMethods(PsychYamlTree.class); -+ } -+ -+ @JRubyMethod(visibility = PRIVATE) -+ public static IRubyObject private_iv_get(ThreadContext context, IRubyObject self, IRubyObject target, IRubyObject prop) { -+ IRubyObject obj = (IRubyObject)target.getInternalVariables().getInternalVariable(prop.asJavaString()); -+ if (obj == null) obj = context.nil; -+ -+ return obj; -+ } -+} diff --git a/debian/patches/series b/debian/patches/series index a6a1531..06ba1b1 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,5 +5,4 @@ 0006-Disable-maven-jruby-jars-artifact.patch 0007-Add-usr-lib-ruby-vendor-ruby-to-load-path.patch 0008-Configure-unit-tests-to-run-at-build-time.patch -0009-Bundle-psych-java-extension.patch 0010-Exclude-mri-tests-failing-in-debian.patch diff --git a/debian/psych-java-ext-build-classpath b/debian/psych-java-ext-build-classpath deleted file mode 100755 index 7a4d841..0000000 --- a/debian/psych-java-ext-build-classpath +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -set -e - -JAVA_HOME="/usr/lib/jvm/java-8-openjdk-`dpkg-architecture --query DEB_HOST_ARCH`" - -for JAR in resources.jar rt.jar sunrsasign.jar jsse.jar jce.jar charsets.jar jfr.jar; do - echo -n "${JAVA_HOME}/jre/lib/${JAR}:" -done - -echo -n "${JAVA_HOME}/jre/classes:" -echo -n "${PWD}/lib/jruby.jar:" -echo -n /usr/share/maven-repo/org/yaml/snakeyaml/1.x/snakeyaml-1.x.jar diff --git a/debian/psych-java-ext-class-entries b/debian/psych-java-ext-class-entries deleted file mode 100755 index 1bf699f..0000000 --- a/debian/psych-java-ext-class-entries +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -set -e - -for ENTRY in \ - PsychEmitter\$1 \ - PsychEmitter \ - PsychLibrary\$1 \ - PsychLibrary\$YAMLEncoding \ - PsychLibrary \ - PsychParser\$1 \ - PsychParser \ - PsychToRuby\$ClassLoader \ - PsychToRuby\$ToRuby \ - PsychToRuby \ - PsychYamlTree \ -; do - echo -n "-C tmp/java/psych org/jruby/ext/psych/${ENTRY}.class " -done diff --git a/debian/psych-java-ext-source-files b/debian/psych-java-ext-source-files deleted file mode 100755 index 2e9cb61..0000000 --- a/debian/psych-java-ext-source-files +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -e - -for FILE in PsychEmitter.java PsychLibrary.java PsychParser.java PsychToRuby.java PsychYamlTree.java; do - echo -n "ext/java/${FILE} " -done diff --git a/debian/rules b/debian/rules index e932736..e362912 100755 --- a/debian/rules +++ b/debian/rules @@ -3,6 +3,7 @@ include /usr/share/dpkg/default.mk export LC_ALL=en_US.UTF-8 +export CI=true %: dh $@ --buildsystem=maven @@ -17,16 +18,17 @@ override_dh_auto_clean: && cp ./core/pom.xml ../core \ && cp ./lib/pom.xml ../lib ) @rm -rf ./bak - -cd ./lib/ruby/stdlib/ && rm -r psych* *openssl* org/ jar* ./rubygems_plugin.rb + -cd ./lib/ruby/stdlib/ && rm -r psych* *openssl* org/ jar* json* test* rake* ./rubygems_plugin.rb -rm ./core/dependency-reduced-pom.xml ./link* test/jruby/testapp/testapp -find . -name pom.xml.save -delete -rm -r ./tmp/ + -cd ./spec/ffi/fixtures/ && rm -f *.o *.so mh_clean override_dh_auto_configure: mkdir -p ./bak/lib ./bak/core # save POM files before being patched, otherwise sometimes they are not cleanly - # restored this prevent twice in a row builds + # restored and this will prevent twice in a row builds to work cp ./pom.xml ./bak && cp ./core/pom.xml ./bak/core && cp ./lib/pom.xml ./bak/lib dh_auto_configure @@ -35,13 +37,6 @@ override_dh_auto_build: dh_auto_build -- -Pcomplete dh_auto_build -- -Pdist package dh_auto_build -- -Pall - # bundle ruby/psych jar with jruby until jruby-psych is packaged - mkdir -p tmp/java/psych - javac -extdirs "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext" \ - -target 1.7 -source 1.7 -Xlint:unchecked \ - -cp "`./debian/psych-java-ext-build-classpath`" \ - -d tmp/java/psych `./debian/psych-java-ext-source-files` - jar cf tmp/java/psych/psych.jar `./debian/psych-java-ext-class-entries` DIST_TARBALL=./maven/jruby-dist/target/jruby-dist-$(DEB_VERSION_UPSTREAM)-bin.tar.gz DIST_TARGET_DIR=./target/package/ @@ -49,15 +44,12 @@ override_dh_prep: dh_prep mkdir -p $(DIST_TARGET_DIR) tar zxf $(DIST_TARBALL) -C $(DIST_TARGET_DIR) --strip-components=1 - cd $(DIST_TARGET_DIR) && ( \ - mv ./bin/jruby.bash ./bin/jruby \ - && cp ./bin/jruby ../../bin \ - && chmod 0755 ./bin/* \ - && mkdir -p ./lib/jni/ \ - && cp -a /usr/lib/ruby/2.3.0/psych* ./lib/ruby/stdlib/ \ - && cp -a ../../tmp/java/psych/psych.jar ./lib/ruby/stdlib/ \ - && sed 's/1\.[0-9]\{1,2\}/1.x/' -i ./lib/ruby/stdlib/psych/versions.rb \ - && rm -r ./tool/nailgun/* ) + cd $(DIST_TARGET_DIR) && ( \ + mv ./bin/jruby.bash ./bin/jruby \ + && cp ./bin/jruby ../../bin \ + && chmod 0755 ./bin/* \ + && mkdir -p ./lib/jni/ \ + && rm -r ./tool/nailgun/* ) override_dh_auto_install: dh_auto_install @@ -69,18 +61,35 @@ override_dh_auto_install: mh_installjar -pjruby ./maven/jruby/pom.xml \ ./maven/jruby/target/jruby-$(DEB_VERSION_UPSTREAM).jar -export CI:="true" -override_dh_auto_test: +RUBY_LIB_PATH=/usr/lib/ruby/vendor_ruby +MAVEN_REPO=/usr/share/maven-repo +prepare-tests: ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) - # to-do: package psych java extension - cp -a /usr/lib/ruby/2.3.0/psych* ./lib/ruby/stdlib/ - cp -a ./tmp/java/psych/psych.jar ./lib/ruby/stdlib/ - sed 's/1\.[0-9]\{1,2\}/1.x/' -i ./lib/ruby/stdlib/psych/versions.rb - dh_auto_build -- package -B -Dinvoker.skip=false -Prake -Dtask=test:mri - # these tests will be enabled once the following gems are packaged: - # jar-dependencies and recent jruby-openssl (>= 0.9.17) -# -dh_auto_build -- package -B -Dinvoker.skip=false -Prake -Dtask=test:jruby - dh_auto_build -- package -B -Dinvoker.skip=false -Prake -Dtask=spec:jruby + # this just copies some needed gems and their dependencies to the + # lib directory, so tests can load all their needed dependencies + cd ./lib/ruby/stdlib/ && for gem in psych test json rake jar; do \ + cp -a $(RUBY_LIB_PATH)/$$gem* ./ ; \ + done + cd ./lib/ruby/stdlib/ && \ + cp -aL /usr/share/jruby/lib/ruby/stdlib/*openssl* ./ \ + && for lib in bouncycastle/bcpkix/debian bouncycastle/bcprov/debian yaml/snakeyaml/1.x; do \ + mkdir -p ./org/$$lib ; \ + cp $(MAVEN_REPO)/org/$$lib/$$(echo $$lib | cut -f2-3 -d/ --output-delimiter=-).jar ./org/$$lib ; \ + done +endif + + +TEST_CMD = dh_auto_build -- package -B -Dinvoker.skip=false +override_dh_auto_test: prepare-tests +ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + $(TEST_CMD) -Ptest + for task in $$(cat ./debian/test-tasks.txt | grep -v ^#); do \ + echo "*** Running '$$task' tests..." ; \ + $(TEST_CMD) -Prake -Dtask=$$task ; \ + done + # this last set of tests is run outside the loop because is the only one using JRUBY_OPTS env var + echo "*** Running 'spec:compiler' tests (JRUBY_OPTS=-Xcompile.invokedynamic)..." + JRUBY_OPTS=-Xcompile.invokedynamic $(TEST_CMD) -Prake -Dtask=spec:compiler endif get-orig-source: diff --git a/debian/test-tasks.txt b/debian/test-tasks.txt new file mode 100644 index 0000000..8627504 --- /dev/null +++ b/debian/test-tasks.txt @@ -0,0 +1,17 @@ +# test:mri:jit # many broken tests +test:jruby +test:jruby:fullint +test:jruby:jit +test:jruby:aot +test:mri +test:mri:fullint +test:slow_suites +test:tracing +spec:ji +spec:compiler +spec:ffi +spec:regression +# spec:ruby:fast # it hangs with OpenSSL tests, research is needed +# spec:jruby # it hangs, it shows no progress, research is needed +spec:jrubyc +spec:profiler -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jruby.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

