propane 2.5.0-java → 2.6.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.mvn/extensions.xml +1 -1
- data/CHANGELOG.md +6 -2
- data/README.md +1 -1
- data/lib/propane.rb +2 -2
- data/lib/propane/creators/sketch_factory.rb +12 -0
- data/lib/propane/library.rb +69 -0
- data/lib/propane/library_loader.rb +23 -85
- data/lib/propane/native_folder.rb +33 -0
- data/lib/propane/native_loader.rb +27 -0
- data/lib/propane/runner.rb +2 -12
- data/lib/propane/version.rb +1 -1
- data/pom.rb +1 -1
- data/pom.xml +1 -1
- data/vendors/Rakefile +24 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 567aec3d6371ce62d0f6f92dd1f5b892d19d70b5
|
4
|
+
data.tar.gz: 03c137c744d27124dbf52a4fca6cbd78b02f1c11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d139c3005b7b43ccb8a9f063a459b9a036c45dcf466eb7827208a6ea9baaf2b22f7490d53499c9f369acddf7ef6b0ecd344bd07606fcdd8de2e1006b1ace02e
|
7
|
+
data.tar.gz: 61f7b3f865f49ac239ce886b59f0c336f37ab1b8fa456d238a4fd420088a613dfbc5d39b1226554c2e8a5e67b743c64de4ef9f28cb3799f0b74c882bafc3df98
|
data/.mvn/extensions.xml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
+
**v2.6.0** Reafactored `LibraryLoader` knows less about `Library` class. The library class _knows_ about paths, and checks that they exist. Features ability to load GLVideo library, that will surely be the future for video (supports gstreamer-1.0 instead of gstreamer-0.1.0 that has already been dropped by some linux distros).
|
2
|
+
|
3
|
+
**v2.5.5** Intermediate `refactored_library` loader, can be release if required but still not there as regards refactor goals.
|
4
|
+
|
1
5
|
**v2.5.0** No need for `$app` we can replace with `Propane.app`
|
2
6
|
|
3
|
-
**v2.4.1** Add post_initialize
|
7
|
+
**v2.4.1** Add `post_initialize` hook to `app.rb`.
|
4
8
|
|
5
9
|
**v2.4.0** Extend LibraryProxy to include mouseEvent and keyEvent.
|
6
10
|
|
7
|
-
**v2.3.4** Simplify control_panel library (replacing `c.title = 'PaneTitle'` with `c.title('PaneTitle')`) also enable use of `block` with `button's`.
|
11
|
+
**v2.3.4** Simplify `control_panel` library (replacing `c.title = 'PaneTitle'` with `c.title('PaneTitle')`) also enable use of `block` with `button's`.
|
8
12
|
|
9
13
|
**v2.3.3** Update to processing-3.3.4, and upgrade jruby-9.1.12.0 last in 9.1 series?
|
10
14
|
|
data/README.md
CHANGED
data/lib/propane.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
require 'java'
|
3
3
|
unless defined? PROPANE_ROOT
|
4
4
|
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
|
5
|
-
PROPANE_ROOT = File.
|
5
|
+
PROPANE_ROOT = File.absolute_path(File.dirname(__dir__))
|
6
6
|
end
|
7
7
|
Dir["#{PROPANE_ROOT}/lib/*.jar"].each do |jar|
|
8
8
|
require jar
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'sketch_writer'
|
2
|
+
|
3
|
+
class SketchFactory
|
4
|
+
NAMES = %w[One Two Three]
|
5
|
+
def initialize(argc)
|
6
|
+
NAMES.each do |name|
|
7
|
+
SketchWriter.new(File.basename(name, '.rb'), width: 300, height: 300).write
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
SketchFactory.new(File.join(ENV['HOME'], 'test'))
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require_relative 'native_folder'
|
2
|
+
require_relative 'native_loader'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
# This class knows where to find propane libraries
|
6
|
+
class Library
|
7
|
+
attr_reader :name, :path, :dir, :ppath
|
8
|
+
|
9
|
+
def initialize(name)
|
10
|
+
@name = name
|
11
|
+
@ruby = true
|
12
|
+
end
|
13
|
+
|
14
|
+
def locate
|
15
|
+
return if (@path = Pathname.new(
|
16
|
+
File.join(Propane::SKETCH_ROOT, 'library', name, "#{name}.rb")
|
17
|
+
)).exist?
|
18
|
+
return if (@path = Pathname.new(
|
19
|
+
File.join(PROPANE_ROOT, 'library', name, "#{name}.rb")
|
20
|
+
)).exist?
|
21
|
+
locate_java
|
22
|
+
end
|
23
|
+
|
24
|
+
def locate_java
|
25
|
+
@dir = Pathname.new(
|
26
|
+
File.join(Propane::SKETCH_ROOT, 'library', name)
|
27
|
+
)
|
28
|
+
locate_installed_java
|
29
|
+
end
|
30
|
+
|
31
|
+
def locate_installed_java
|
32
|
+
unless dir.directory?
|
33
|
+
@dir = Pathname.new(
|
34
|
+
File.join(ENV['HOME'], '.propane', 'libraries', name, 'library')
|
35
|
+
)
|
36
|
+
end
|
37
|
+
@path = dir.join(Pathname.new("#{name}.jar"))
|
38
|
+
end
|
39
|
+
|
40
|
+
def ruby?
|
41
|
+
path.extname == '.rb'
|
42
|
+
end
|
43
|
+
|
44
|
+
def exist?
|
45
|
+
path.exist?
|
46
|
+
end
|
47
|
+
|
48
|
+
def load_jars
|
49
|
+
Dir.glob("#{dir}/*.jar").each do |jar|
|
50
|
+
require jar
|
51
|
+
end
|
52
|
+
return true unless native_binaries?
|
53
|
+
add_binaries_to_classpath
|
54
|
+
end
|
55
|
+
|
56
|
+
def native_binaries?
|
57
|
+
native_folder = NativeFolder.new
|
58
|
+
native = native_folder.name
|
59
|
+
@ppath = File.join(dir, native)
|
60
|
+
File.directory?(ppath) &&
|
61
|
+
!Dir.glob(File.join(ppath, native_folder.extension)).empty?
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_binaries_to_classpath
|
65
|
+
native_loader = NativeLoader.new
|
66
|
+
native_loader.add_native_path(ppath)
|
67
|
+
true
|
68
|
+
end
|
69
|
+
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
|
+
|
2
3
|
# The processing wrapper module
|
3
4
|
module Propane
|
5
|
+
require_relative 'library'
|
6
|
+
|
4
7
|
# Encapsulate library loader functionality as a class
|
5
8
|
class LibraryLoader
|
9
|
+
attr_reader :library
|
10
|
+
|
6
11
|
def initialize
|
7
12
|
@loaded_libraries = Hash.new(false)
|
8
13
|
end
|
@@ -13,103 +18,36 @@ module Propane
|
|
13
18
|
end
|
14
19
|
|
15
20
|
# Load a list of Ruby or Java libraries (in that order)
|
16
|
-
# Usage: load_libraries :
|
21
|
+
# Usage: load_libraries :video, :video_event
|
17
22
|
#
|
18
23
|
# If a library is put into a 'library' folder next to the sketch it will
|
19
|
-
# be used instead of
|
24
|
+
# be used instead of an installed propane library.
|
20
25
|
def load_libraries(*args)
|
21
26
|
message = 'no such file to load -- %s'
|
22
27
|
args.each do |lib|
|
23
|
-
loaded =
|
24
|
-
|
28
|
+
loaded = loader(lib)
|
29
|
+
raise(LoadError.new, format(message, lib)) unless loaded
|
25
30
|
end
|
26
31
|
end
|
27
|
-
|
28
|
-
|
29
|
-
# For pure ruby libraries.
|
30
|
-
# The library should have an initialization ruby file
|
31
|
-
# of the same name as the library folder.
|
32
|
-
def load_ruby_library(library_name)
|
33
|
-
library_name = library_name.to_sym
|
34
|
-
return true if @loaded_libraries.include?(library_name)
|
35
|
-
path = get_library_paths(library_name, 'rb').first
|
36
|
-
return false unless path
|
37
|
-
@loaded_libraries[library_name] = (require path)
|
38
|
-
end
|
32
|
+
alias load_library load_libraries
|
39
33
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
jars = get_library_paths(library_name, 'jar')
|
49
|
-
return false if jars.empty?
|
50
|
-
jars.each { |jar| require jar }
|
51
|
-
platform_specific_library_paths = get_platform_specific_library_paths(jpath)
|
52
|
-
platform_specific_library_paths = platform_specific_library_paths.select do |ppath|
|
53
|
-
FileTest.directory?(ppath) && !Dir.glob(File.join(ppath, '*.{so,dll,jnilib}')).empty?
|
54
|
-
end
|
55
|
-
unless platform_specific_library_paths.empty?
|
56
|
-
platform_specific_library_paths << java.lang.System.getProperty('java.library.path')
|
57
|
-
new_library_path = platform_specific_library_paths.join(java.io.File.pathSeparator)
|
58
|
-
java.lang.System.setProperty('java.library.path', new_library_path)
|
59
|
-
field = java.lang.Class.for_name('java.lang.ClassLoader').get_declared_field('sys_paths')
|
60
|
-
if field
|
61
|
-
field.accessible = true
|
62
|
-
field.set(java.lang.Class.for_name('java.lang.System').get_class_loader, nil)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
@loaded_libraries[library_name] = true
|
34
|
+
def loader(name)
|
35
|
+
return true if @loaded_libraries.include?(name)
|
36
|
+
fname = name.to_s
|
37
|
+
library = Library.new(fname)
|
38
|
+
library.locate
|
39
|
+
return require_library(library, name) if library.ruby?
|
40
|
+
warn("Not found library: #{fname}") unless library.exist?
|
41
|
+
load_jars(library, name)
|
66
42
|
end
|
67
43
|
|
68
|
-
def
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
return 'other' unless match
|
73
|
-
return match unless match =~ /mac/
|
74
|
-
'macosx'
|
44
|
+
def load_jars(lib, name)
|
45
|
+
lib.load_jars
|
46
|
+
@loaded_libraries[name] = true
|
75
47
|
end
|
76
48
|
|
77
|
-
def
|
78
|
-
|
79
|
-
bits = 'universal'
|
80
|
-
if java.lang.System.getProperty('sun.arch.data.model') == '32' ||
|
81
|
-
java.lang.System.getProperty('java.vm.name').index('32')
|
82
|
-
bits = '32'
|
83
|
-
elsif java.lang.System.getProperty('sun.arch.data.model') == '64' ||
|
84
|
-
java.lang.System.getProperty('java.vm.name').index('64')
|
85
|
-
bits = '64' unless platform =~ /macosx/
|
86
|
-
end
|
87
|
-
[platform, platform + bits].map { |p| File.join(basename, p) }
|
88
|
-
end
|
89
|
-
|
90
|
-
def get_library_paths(library_name, extension = nil)
|
91
|
-
dir = get_library_directory_path(library_name, extension)
|
92
|
-
Dir.glob("#{dir}/*.{rb,jar}")
|
93
|
-
end
|
94
|
-
|
95
|
-
protected
|
96
|
-
|
97
|
-
def get_library_directory_path(library_name, extension = nil)
|
98
|
-
extensions = extension ? [extension] : %w(jar rb)
|
99
|
-
extensions.each do |ext|
|
100
|
-
[
|
101
|
-
"#{SKETCH_ROOT}/library/#{library_name}",
|
102
|
-
"#{PROPANE_ROOT}/library/#{library_name}",
|
103
|
-
"#{PROPANE_ROOT}/library/#{library_name}/library",
|
104
|
-
"#{PROPANE_ROOT}/library/#{library_name}",
|
105
|
-
"#{ENV['HOME']}/.propane/libraries/#{library_name}/library"
|
106
|
-
].each do |jpath|
|
107
|
-
if File.exist?(jpath) && !Dir.glob(format('%s/*.%s', jpath, ext)).empty?
|
108
|
-
return jpath
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
nil
|
49
|
+
def require_library(lib, name)
|
50
|
+
@loaded_libraries[name] = require lib.path
|
113
51
|
end
|
114
52
|
end
|
115
53
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
# Utility to load native binaries on Java CLASSPATH
|
4
|
+
class NativeFolder
|
5
|
+
attr_reader :os, :bit
|
6
|
+
|
7
|
+
WIN_FORMAT = 'windows%d'.freeze
|
8
|
+
LINUX_FORMAT = 'linux%d'.freeze
|
9
|
+
# WIN_PATTERNS = [
|
10
|
+
# /bccwin/i,
|
11
|
+
# /cygwin/i,
|
12
|
+
# /djgpp/i,
|
13
|
+
# /ming/i,
|
14
|
+
# /mswin/i,
|
15
|
+
# /wince/i
|
16
|
+
# ].freeze
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@os = RbConfig::CONFIG['host_os'].downcase
|
20
|
+
@bit = java.lang.System.get_property('os.arch') =~ /64/ ? 64 : 32
|
21
|
+
end
|
22
|
+
|
23
|
+
def name
|
24
|
+
return 'macosx' if os =~ /darwin/ || os =~ /mac/
|
25
|
+
# return format(WIN_FORMAT, bit) if WIN_PATTERNS.include? os
|
26
|
+
return format(LINUX_FORMAT, bit) if os =~ /linux/
|
27
|
+
end
|
28
|
+
|
29
|
+
def extension
|
30
|
+
return '*.so' if os =~ /linux/
|
31
|
+
'*.dylib' # MacOS
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# This class knows how to dynamically set the 'java' native library path
|
2
|
+
# It might not work with java 9?
|
3
|
+
class NativeLoader
|
4
|
+
attr_reader :separator, :current_path
|
5
|
+
|
6
|
+
# This module wraps java_import with namespace JC
|
7
|
+
module JC
|
8
|
+
java_import 'java.lang.Class'
|
9
|
+
java_import 'java.lang.System'
|
10
|
+
java_import 'java.io.File'
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@separator = JC::File.pathSeparatorChar
|
15
|
+
@current_path = JC::System.getProperty('java.library.path')
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_native_path(pth)
|
19
|
+
current_path << separator << pth
|
20
|
+
JC::System.setProperty('java.library.path', current_path)
|
21
|
+
field = JC::Class.for_name('java.lang.ClassLoader')
|
22
|
+
.get_declared_field('sys_paths')
|
23
|
+
return unless field
|
24
|
+
field.accessible = true # some jruby magic
|
25
|
+
field.set(JC::Class.for_name('java.lang.System').get_class_loader, nil)
|
26
|
+
end
|
27
|
+
end
|
data/lib/propane/runner.rb
CHANGED
@@ -40,7 +40,7 @@ module Propane
|
|
40
40
|
end
|
41
41
|
|
42
42
|
options[:install] = false
|
43
|
-
message = '<Samples><Video><Sound> Install samples or library'
|
43
|
+
message = '<Samples><GLVideo><Video><Sound> Install samples or library'
|
44
44
|
opts.on('-i', '--install', message) do
|
45
45
|
options[:install] = true
|
46
46
|
end
|
@@ -50,11 +50,6 @@ module Propane
|
|
50
50
|
options[:create] = true
|
51
51
|
end
|
52
52
|
|
53
|
-
options[:example] = false
|
54
|
-
opts.on('-e', '--example', 'Create new sketch outline') do
|
55
|
-
options[:example] = true
|
56
|
-
end
|
57
|
-
|
58
53
|
# This displays the help screen, all programs are
|
59
54
|
# assumed to have this option.
|
60
55
|
opts.on('-h', '--help', 'Display this screen') do
|
@@ -68,11 +63,6 @@ module Propane
|
|
68
63
|
|
69
64
|
def create
|
70
65
|
require_relative 'creators/sketch_writer'
|
71
|
-
SketchFactory.new(argc).write
|
72
|
-
end
|
73
|
-
|
74
|
-
def examples
|
75
|
-
require_relative 'creators/sketch_factory'
|
76
66
|
SketchWriter.new(File.basename(filename, '.rb'), argc).write
|
77
67
|
end
|
78
68
|
|
@@ -83,7 +73,7 @@ module Propane
|
|
83
73
|
|
84
74
|
def install(library)
|
85
75
|
choice = library.downcase
|
86
|
-
valid = Regexp.union('samples', 'sound', 'video')
|
76
|
+
valid = Regexp.union('samples', 'sound', 'video', 'glvideo')
|
87
77
|
return warn format('No installer for %s', choice) unless valid =~ choice
|
88
78
|
system "cd #{PROPANE_ROOT}/vendors && rake download_and_copy_#{choice}"
|
89
79
|
end
|
data/lib/propane/version.rb
CHANGED
data/pom.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
project 'rp5extras', 'https://github.com/monkstone/propane' do
|
3
3
|
model_version '4.0.0'
|
4
|
-
id 'propane:propane', '2.
|
4
|
+
id 'propane:propane', '2.6.0'
|
5
5
|
packaging 'jar'
|
6
6
|
description 'rp5extras for propane'
|
7
7
|
organization 'ruby-processing', 'https://ruby-processing.github.io'
|
data/pom.xml
CHANGED
@@ -11,7 +11,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
11
11
|
<modelVersion>4.0.0</modelVersion>
|
12
12
|
<groupId>propane</groupId>
|
13
13
|
<artifactId>propane</artifactId>
|
14
|
-
<version>2.
|
14
|
+
<version>2.6.0</version>
|
15
15
|
<name>rp5extras</name>
|
16
16
|
<description>rp5extras for propane</description>
|
17
17
|
<url>https://github.com/monkstone/propane</url>
|
data/vendors/Rakefile
CHANGED
@@ -7,9 +7,10 @@ WARNING = <<-EOS
|
|
7
7
|
EOS
|
8
8
|
SOUND = 'sound.zip'.freeze
|
9
9
|
SOUND_VERSION = 'v1.3.2' # version 1.3.2
|
10
|
+
GLVIDEO = 'processing-glvideo.zip'
|
10
11
|
VIDEO = 'video-2.zip'
|
11
12
|
VIDEO_VERSION = '2' # version 1.0.1
|
12
|
-
EXAMPLES = '1.
|
13
|
+
EXAMPLES = '1.6'.freeze
|
13
14
|
HOME_DIR = ENV['HOME']
|
14
15
|
MAC_OR_LINUX = /linux|mac|darwin/ =~ RbConfig::CONFIG['host_os']
|
15
16
|
|
@@ -37,6 +38,9 @@ task download_and_copy_sound: [:download_sound, :copy_sound]
|
|
37
38
|
desc 'download and copy video library to ~/.propane'
|
38
39
|
task download_and_copy_video: [:download_video, :copy_video]
|
39
40
|
|
41
|
+
desc 'download and copy glvideo library to ~/.propane'
|
42
|
+
task download_and_copy_glvideo: [:download_glvideo, :copy_glvideo]
|
43
|
+
|
40
44
|
|
41
45
|
desc 'download sound library'
|
42
46
|
task :download_sound do
|
@@ -49,6 +53,17 @@ task :download_sound do
|
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
56
|
+
desc 'download glvideo library'
|
57
|
+
task :download_glvideo do
|
58
|
+
wget_base = 'wget https://github.com/gohai/processing-glvideo'
|
59
|
+
wget_string = [wget_base, 'releases/download/latest', GLVIDEO].join('/')
|
60
|
+
begin
|
61
|
+
sh wget_string
|
62
|
+
rescue
|
63
|
+
warn(WARNING)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
52
67
|
desc 'download video library'
|
53
68
|
task :download_video do
|
54
69
|
wget_base = 'wget https://github.com/processing/processing-video'
|
@@ -87,3 +102,11 @@ task :copy_video => VIDEO do
|
|
87
102
|
sh "cp -r video #{HOME_DIR}/.propane/libraries/video"
|
88
103
|
sh 'rm -r video'
|
89
104
|
end
|
105
|
+
|
106
|
+
desc 'copy glvideo library'
|
107
|
+
task :copy_glvideo => GLVIDEO do
|
108
|
+
sh "unzip #{GLVIDEO}"
|
109
|
+
sh "rm -r #{HOME_DIR}/.propane/libraries/glvideo" if File.exist? "#{HOME_DIR}/.propane/libraries/glvideo"
|
110
|
+
sh "cp -r glvideo #{HOME_DIR}/.propane/libraries/glvideo"
|
111
|
+
sh 'rm -r glvideo'
|
112
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- monkstone
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -91,10 +91,14 @@ files:
|
|
91
91
|
- lib/propane.rb
|
92
92
|
- lib/propane/app.rb
|
93
93
|
- lib/propane/creators/sketch_class.rb
|
94
|
+
- lib/propane/creators/sketch_factory.rb
|
94
95
|
- lib/propane/creators/sketch_writer.rb
|
95
96
|
- lib/propane/helper_methods.rb
|
96
97
|
- lib/propane/helpers/numeric.rb
|
98
|
+
- lib/propane/library.rb
|
97
99
|
- lib/propane/library_loader.rb
|
100
|
+
- lib/propane/native_folder.rb
|
101
|
+
- lib/propane/native_loader.rb
|
98
102
|
- lib/propane/runner.rb
|
99
103
|
- lib/propane/version.rb
|
100
104
|
- library/boids/boids.rb
|