Skip to content

Commit 2e9dc14

Browse files
ahorekknu
authored andcommitted
jruby support
1 parent d39db59 commit 2e9dc14

File tree

19 files changed

+926
-16
lines changed

19 files changed

+926
-16
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ jobs:
3030
- { os: ubuntu-20.04, ruby: head, ignore-pkg-error: true }
3131
- { os: windows-latest, ruby: mingw, ignore-pkg-error: true }
3232
- { os: windows-latest, ruby: mswin, ignore-pkg-error: true }
33+
- { os: ubuntu-20.04, ruby: jruby-head, ignore-pkg-error: true }
3334
exclude:
3435
- { os: windows-latest, ruby: debug }
3536

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
/pkg/
88
/spec/reports/
99
/tmp/
10+
lib/*.jar
11+
lib/digest
12+
lib/digest/*.rb
1013
*.bundle
1114
*.so
1215
*.o

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,5 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/d
9595
## License
9696

9797
The gem is available as open source under the terms of the [2-Clause BSD License](https://opensource.org/licenses/BSD-2-Clause).
98+
99+
Files under ext/java (JRuby's digest) are licensed under [Eclipse Public License version 2.0](https://opensource.org/licenses/EPL-2.0), [GNU General Public License version 2](https://opensource.org/licenses/GPL-2.0), [GNU Lesser General Public License version 2.1](https://opensource.org/licenses/LGPL-2.1).

Rakefile

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,26 @@ Rake::TestTask.new(:test) do |t|
77
t.test_files = FileList["test/**/test_*.rb"]
88
end
99

10-
require 'rake/extensiontask'
11-
Rake::ExtensionTask.new("digest")
12-
%w(bubblebabble md5 rmd160 sha1 sha2).each do |ext|
13-
Rake::ExtensionTask.new("digest/#{ext}")
10+
if RUBY_ENGINE == 'jruby'
11+
require 'rake/javaextensiontask'
12+
Rake::JavaExtensionTask.new("digest") do |ext|
13+
ext.source_version = '1.8'
14+
ext.target_version = '1.8'
15+
ext.ext_dir = 'ext/java'
16+
end
17+
18+
# copy library loaders
19+
require 'fileutils'
20+
%w(bubblebabble md5 rmd160 sha1 sha2).each do |ext|
21+
FileUtils.mkdir "./lib/digest" unless File.exist?("./lib/digest")
22+
FileUtils.cp "./ext/digest/#{ext}/lib/#{ext}.rb", "./lib/digest/#{ext}.rb"
23+
end
24+
else
25+
require 'rake/extensiontask'
26+
Rake::ExtensionTask.new("digest")
27+
%w(bubblebabble md5 rmd160 sha1 sha2).each do |ext|
28+
Rake::ExtensionTask.new("digest/#{ext}")
29+
end
1430
end
1531

1632
task :sync_tool do

digest.gemspec

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ Gem::Specification.new do |spec|
1010
spec.summary = %q{Provides a framework for message digest libraries.}
1111
spec.description = %q{Provides a framework for message digest libraries.}
1212
spec.homepage = "https://github.com/ruby/digest"
13-
spec.licenses = ["Ruby", "BSD-2-Clause"]
13+
if Gem::Platform === spec.platform and spec.platform =~ 'java' or RUBY_ENGINE == 'jruby'
14+
spec.licenses = ["Ruby", "BSD-2-Clause", "EPL-2.0", "GPL-2.0", "LGPL-2.1"]
15+
else
16+
spec.licenses = ["Ruby", "BSD-2-Clause"]
17+
end
1418

1519
spec.files = [
1620
"LICENSE.txt", "README.md",
@@ -46,13 +50,27 @@ Gem::Specification.new do |spec|
4650
spec.bindir = "exe"
4751
spec.executables = []
4852
spec.require_paths = ["lib"]
49-
spec.extensions = %w[
50-
ext/digest/extconf.rb
51-
ext/digest/bubblebabble/extconf.rb
52-
ext/digest/md5/extconf.rb
53-
ext/digest/rmd160/extconf.rb
54-
ext/digest/sha1/extconf.rb
55-
ext/digest/sha2/extconf.rb
56-
]
53+
54+
if Gem::Platform === spec.platform and spec.platform =~ 'java' or RUBY_ENGINE == 'jruby'
55+
spec.platform = 'java'
56+
spec.files.concat [
57+
"lib/digest.jar",
58+
"lib/digest/md5.rb",
59+
"lib/digest/sha1.rb",
60+
"lib/digest/sha2.rb",
61+
"lib/digest/rmd160.rb",
62+
"lib/digest/bubblebabble.rb"
63+
]
64+
else
65+
spec.extensions = %w[
66+
ext/digest/extconf.rb
67+
ext/digest/bubblebabble/extconf.rb
68+
ext/digest/md5/extconf.rb
69+
ext/digest/rmd160/extconf.rb
70+
ext/digest/sha1/extconf.rb
71+
ext/digest/sha2/extconf.rb
72+
]
73+
end
74+
5775
spec.metadata["msys2_mingw_dependencies"] = "openssl"
5876
end
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: false
2+
3+
require 'digest'
4+
5+
if RUBY_ENGINE == 'jruby'
6+
JRuby::Util.load_ext("org.jruby.ext.digest.BubbleBabble")
7+
else
8+
require 'digest/bubblebabble.so'
9+
end

ext/digest/lib/digest.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# frozen_string_literal: false
2-
require 'digest.so'
2+
if RUBY_ENGINE == 'jruby'
3+
JRuby::Util.load_ext("org.jruby.ext.digest.DigestLibrary")
4+
else
5+
require 'digest.so'
6+
end
37

48
module Digest
59
# A mutex for Digest().
@@ -8,7 +12,7 @@ module Digest
812
def self.const_missing(name) # :nodoc:
913
case name
1014
when :SHA256, :SHA384, :SHA512
11-
lib = 'digest/sha2.so'
15+
lib = 'digest/sha2'
1216
else
1317
lib = File.join('digest', name.to_s.downcase)
1418
end

ext/digest/md5/lib/md5.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: false
2+
3+
require 'digest'
4+
5+
if RUBY_ENGINE == 'jruby'
6+
JRuby::Util.load_ext("org.jruby.ext.digest.MD5")
7+
else
8+
require 'digest/md5.so'
9+
end

ext/digest/rmd160/lib/rmd160.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: false
2+
3+
require 'digest'
4+
5+
if RUBY_ENGINE == 'jruby'
6+
JRuby::Util.load_ext("org.jruby.ext.digest.RMD160")
7+
else
8+
require 'digest/rmd160.so'
9+
end

ext/digest/sha1/lib/sha1.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: false
2+
3+
require 'digest'
4+
5+
if RUBY_ENGINE == 'jruby'
6+
JRuby::Util.load_ext("org.jruby.ext.digest.SHA1")
7+
else
8+
require 'digest/sha1.so'
9+
end

0 commit comments

Comments
 (0)