wxruby3 0.9.5 → 0.9.8
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/INSTALL.md +440 -84
- data/README.md +40 -23
- data/ext/mkrf_conf_ext.rb +68 -0
- data/lib/wx/core/ext.rb +22 -3
- data/lib/wx/core/secret_store.rb +38 -0
- data/lib/wx/doc/extra/02_lifecycles.md +4 -4
- data/lib/wx/doc/extra/14_config.md +1 -1
- data/lib/wx/doc/secret_store.rb +55 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/wxruby/base.rb +8 -8
- data/lib/wx/wxruby/cmd/check.rb +182 -0
- data/lib/wx/wxruby/cmd/sampler.rb +39 -29
- data/lib/wx/wxruby/cmd/setup.rb +125 -0
- data/lib/wx/wxruby/cmd/test.rb +56 -6
- data/rakelib/bin.rake +48 -0
- data/rakelib/bin.rb +62 -0
- data/rakelib/build.rb +11 -7
- data/rakelib/config.rake +3 -1
- data/rakelib/configure.rb +63 -35
- data/rakelib/doc.rake +3 -1
- data/rakelib/gem.rake +199 -0
- data/rakelib/gem.rb +334 -0
- data/rakelib/install.rb +5 -3
- data/rakelib/lib/config/{cygwin.rb → freebsd.rb} +1 -1
- data/rakelib/lib/config/linux.rb +26 -2
- data/rakelib/lib/config/macosx.rb +58 -11
- data/rakelib/lib/config/mingw.rb +134 -10
- data/rakelib/lib/config/pkgman/linux.rb +144 -0
- data/rakelib/lib/config/pkgman/macosx.rb +122 -0
- data/rakelib/lib/config/unixish.rb +47 -20
- data/rakelib/lib/config/{netbsd.rb → unknown.rb} +3 -2
- data/rakelib/lib/config.rb +301 -88
- data/rakelib/lib/core/package.rb +47 -49
- data/rakelib/lib/director/aui_manager.rb +1 -1
- data/rakelib/lib/director/dialog.rb +8 -0
- data/rakelib/lib/director/gdicommon.rb +1 -2
- data/rakelib/lib/director/grid_ctrl.rb +2 -2
- data/rakelib/lib/director/richtext_composite_object.rb +2 -4
- data/rakelib/lib/director/secret_store.rb +117 -0
- data/rakelib/lib/director/tree_event.rb +2 -2
- data/rakelib/lib/generate/doc/secret_store.yaml +55 -0
- data/rakelib/lib/generate/doc.rb +29 -14
- data/rakelib/lib/generate/interface.rb +4 -2
- data/rakelib/lib/specs/interfaces.rb +1 -0
- data/rakelib/lib/swig_runner.rb +11 -11
- data/rakelib/lib/typemap/common.rb +10 -0
- data/rakelib/prepost.rake +17 -5
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +18 -0
- data/rakelib/yard/templates/default/fulldoc/html/setup.rb +5 -5
- data/rakelib/yard/yard/relative_markdown_links.rb +7 -1
- data/samples/sampler/sample.rb +2 -0
- data/tests/lib/wxapp_runner.rb +1 -1
- data/tests/test_config.rb +7 -4
- data/tests/test_secret_store.rb +83 -0
- metadata +46 -23
- data/ext/mkrf_conf_srcgem.rb +0 -67
- data/rakelib/run.rake +0 -52
data/rakelib/gem.rake
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
#
|
3
|
+
# This software is released under the MIT license.
|
4
|
+
|
5
|
+
###
|
6
|
+
# wxRuby3 rake file
|
7
|
+
###
|
8
|
+
|
9
|
+
require_relative './gem'
|
10
|
+
|
11
|
+
namespace :wxruby do
|
12
|
+
|
13
|
+
namespace :gem do
|
14
|
+
|
15
|
+
task :srcgem => ['bin:build', WXRuby3::Gem.gem_file]
|
16
|
+
|
17
|
+
# this task only exists for installed (source) gems (where run tasks have been removed)
|
18
|
+
unless File.file?(File.join(__dir__, 'run.rake'))
|
19
|
+
|
20
|
+
task :setup => 'config:bootstrap' do |_t, args|
|
21
|
+
begin
|
22
|
+
$stdout.print "Building wxRuby3 extensions..." if WXRuby3.config.run_silent?
|
23
|
+
WXRuby3.config.set_silent_run_incremental
|
24
|
+
Rake::Task['wxruby:build'].invoke
|
25
|
+
WXRuby3.config.set_silent_run_batched
|
26
|
+
$stdout.puts 'done!' if WXRuby3.config.run_silent?
|
27
|
+
Rake::Task['wxruby:post:srcgem'].invoke
|
28
|
+
# all is well -> cleanup
|
29
|
+
if args.extras.include?(':keep_log')
|
30
|
+
$stdout.puts "Log: #{WXRuby3.config.silent_log_name}"
|
31
|
+
else
|
32
|
+
rm_f(WXRuby3.config.silent_log_name, verbose: WXRuby3.config.verbose?)
|
33
|
+
end
|
34
|
+
rescue Exception => ex
|
35
|
+
$stderr.puts <<~__ERR_TXT
|
36
|
+
#{ex.message}#{WXRuby3.config.verbose? ? "\n#{ex.backtrace.join("\n")}" : ''}
|
37
|
+
|
38
|
+
For error details check #{WXRuby3.config.silent_log_name}
|
39
|
+
__ERR_TXT
|
40
|
+
exit(1)
|
41
|
+
end
|
42
|
+
$stdout.puts <<~__MSG
|
43
|
+
|
44
|
+
wxRuby3 has been successfully installed including the 'wxruby' utility.
|
45
|
+
|
46
|
+
You can run the regression tests to verify the installation by executing:
|
47
|
+
|
48
|
+
$ ./wxruby test
|
49
|
+
|
50
|
+
The wxRuby3 sample explorer can be run by executing:
|
51
|
+
|
52
|
+
$ ./wxruby sampler
|
53
|
+
|
54
|
+
Have fun using wxRuby3.
|
55
|
+
__MSG
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
# source gem file
|
64
|
+
file WXRuby3::Gem.gem_file => WXRuby3::Gem.manifest do
|
65
|
+
gemspec = WXRuby3::Gem.define_spec do |gem|
|
66
|
+
gem.summary = %Q{wxWidgets extension for Ruby}
|
67
|
+
gem.description = %Q{wxRuby3 is a Ruby library providing an extension for the wxWidgets C++ UI framework}
|
68
|
+
gem.email = 'mcorino@m2c-software.nl'
|
69
|
+
gem.homepage = "https://github.com/mcorino/wxRuby3"
|
70
|
+
gem.authors = ['Martin Corino']
|
71
|
+
gem.extensions = ['ext/mkrf_conf_ext.rb']
|
72
|
+
gem.files = WXRuby3::Gem.manifest
|
73
|
+
gem.require_paths = %w{lib}
|
74
|
+
gem.bindir = 'bin'
|
75
|
+
gem.executables = WXRuby3::Bin.binaries
|
76
|
+
gem.required_ruby_version = '>= 2.5'
|
77
|
+
gem.licenses = ['MIT']
|
78
|
+
gem.add_dependency 'nokogiri', '~> 1.12'
|
79
|
+
gem.add_dependency 'rake'
|
80
|
+
gem.add_dependency 'minitest', '~> 5.15'
|
81
|
+
gem.add_dependency 'test-unit', '~> 3.5'
|
82
|
+
gem.add_dependency 'plat4m', '~> 1.0'
|
83
|
+
gem.rdoc_options <<
|
84
|
+
'--exclude=\\.dll' <<
|
85
|
+
'--exclude=\\.so' <<
|
86
|
+
'--exclude=lib/wx.rb' <<
|
87
|
+
'--exclude=lib/wx/*.rb' <<
|
88
|
+
"'--exclude=lib/wx/(aui|core|grid|html|pg|prt|rbn|rtc|stc|wxruby)/.*'"
|
89
|
+
gem.metadata = {
|
90
|
+
"bug_tracker_uri" => "https://github.com/mcorino/wxRuby3/issues",
|
91
|
+
"homepage_uri" => "https://github.com/mcorino/wxRuby3",
|
92
|
+
"documentation_uri" => "https://mcorino.github.io/wxRuby3",
|
93
|
+
"github_repo" => "https://github.com/mcorino/wxRuby3"
|
94
|
+
}
|
95
|
+
gem.post_install_message = <<~__MSG
|
96
|
+
|
97
|
+
The wxRuby3 Gem has been successfully installed including the 'wxruby' utility.
|
98
|
+
|
99
|
+
In case no suitable binary release package was available for your platform you
|
100
|
+
will need to run the post-install setup process by executing:
|
101
|
+
|
102
|
+
$ wxruby setup
|
103
|
+
|
104
|
+
To check whether wxRuby3 is ready to run or not you can at any time execute the
|
105
|
+
following command:
|
106
|
+
|
107
|
+
$ wxruby check
|
108
|
+
|
109
|
+
Run 'wxruby check -h' for more information.
|
110
|
+
|
111
|
+
When the wxRuby3 setup has been fully completed you can start using wxRuby3.
|
112
|
+
|
113
|
+
You can run the regression tests to verify the installation by executing:
|
114
|
+
|
115
|
+
$ wxruby test
|
116
|
+
|
117
|
+
The wxRuby3 sample explorer can be run by executing:
|
118
|
+
|
119
|
+
$ wxruby sampler
|
120
|
+
|
121
|
+
Have fun using wxRuby3.
|
122
|
+
|
123
|
+
Run 'wxruby -h' to see information on the available commands.
|
124
|
+
|
125
|
+
__MSG
|
126
|
+
end
|
127
|
+
WXRuby3::Gem.build_gem(gemspec)
|
128
|
+
end
|
129
|
+
|
130
|
+
desc 'Build wxRuby 3 gem'
|
131
|
+
task :gem => 'wxruby:gem:srcgem'
|
132
|
+
|
133
|
+
# these tasks do not exist for installed (source) gems (where run tasks have been removed)
|
134
|
+
if File.file?(File.join(__dir__, 'run.rake'))
|
135
|
+
|
136
|
+
if WXRuby3.is_bootstrapped?
|
137
|
+
|
138
|
+
namespace :wxruby do
|
139
|
+
|
140
|
+
namespace :gem do
|
141
|
+
task :binpkg => ['wxruby:build', 'wxruby:doc', 'bin:build', WXRuby3::Gem.bin_pkg_file]
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
# binary package file
|
147
|
+
file WXRuby3::Gem.bin_pkg_file => WXRuby3::Gem.bin_pkg_manifest do |t|
|
148
|
+
WXRuby3::Install.install_wxwin_shlibs
|
149
|
+
begin
|
150
|
+
# create bin package
|
151
|
+
WXRuby3::Gem.build_bin_pkg
|
152
|
+
ensure
|
153
|
+
# cleanup
|
154
|
+
WXRuby3::Install.remove_wxwin_shlibs
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
desc 'Build wxRuby 3 binary release package'
|
159
|
+
task :binpkg => 'wxruby:gem:binpkg'
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
else # in case of installed source gem the following tasks exist
|
164
|
+
|
165
|
+
namespace :wxruby do
|
166
|
+
|
167
|
+
namespace :gem do
|
168
|
+
kwargs = {}
|
169
|
+
no_prebuilt = false
|
170
|
+
task :install do |_, args|
|
171
|
+
argv = args.extras
|
172
|
+
until argv.empty?
|
173
|
+
switch = argv.shift
|
174
|
+
case switch
|
175
|
+
when '--prebuilt'
|
176
|
+
kwargs[:prebuilt_only] = true
|
177
|
+
when '--no-prebuilt'
|
178
|
+
no_prebuilt = true unless kwargs[:package]
|
179
|
+
when '--package'
|
180
|
+
fail "Missing value for '--package' argument for wxruby:gem:install." if argv.empty?
|
181
|
+
kwargs[:package] = argv.shift
|
182
|
+
no_prebuilt = false
|
183
|
+
else
|
184
|
+
fail "Invalid argument #{switch} for wxruby:gem:install."
|
185
|
+
end
|
186
|
+
end
|
187
|
+
unless no_prebuilt # do not even try to find&install a binary package
|
188
|
+
if WXRuby3::Gem.install_gem(**kwargs)
|
189
|
+
# binaries have been installed -> finish install
|
190
|
+
Rake::Task['wxruby:post:binpkg'].invoke
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
data/rakelib/gem.rb
ADDED
@@ -0,0 +1,334 @@
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
#
|
3
|
+
# This software is released under the MIT license.
|
4
|
+
|
5
|
+
###
|
6
|
+
# wxRuby3 rake gem support
|
7
|
+
###
|
8
|
+
|
9
|
+
require 'set'
|
10
|
+
require 'rubygems'
|
11
|
+
require 'rubygems/package'
|
12
|
+
begin
|
13
|
+
require 'rubygems/builder'
|
14
|
+
rescue LoadError
|
15
|
+
end
|
16
|
+
require 'zlib'
|
17
|
+
require 'tempfile'
|
18
|
+
require 'json'
|
19
|
+
require 'uri'
|
20
|
+
require 'net/https'
|
21
|
+
require 'fileutils'
|
22
|
+
require 'digest/sha2'
|
23
|
+
|
24
|
+
require_relative './lib/config'
|
25
|
+
require_relative './install'
|
26
|
+
|
27
|
+
module WXRuby3
|
28
|
+
|
29
|
+
module Gem
|
30
|
+
|
31
|
+
BINPKG_EXT = '.pkg'
|
32
|
+
DIGEST_EXT = '.sha'
|
33
|
+
|
34
|
+
class << self
|
35
|
+
|
36
|
+
# Gem helpers
|
37
|
+
|
38
|
+
def manifest
|
39
|
+
# create MANIFEST list with included files
|
40
|
+
manifest = Rake::FileList.new
|
41
|
+
manifest.include %w[bin/*] # *nix executables in bin/
|
42
|
+
manifest.exclude %w[bin/*.bat] unless WXRuby3.config.windows?
|
43
|
+
manifest.include %w[assets/**/* lib/**/* samples/**/* tests/**/*]
|
44
|
+
manifest.exclude "lib/*.#{WXRuby3.config.dll_mask}"
|
45
|
+
manifest.include 'ext/mkrf_conf_ext.rb', 'ext/wxruby3/wxruby.ico', 'ext/wxruby3/swig/**/*', 'ext/wxruby3/include/**/*'
|
46
|
+
manifest.exclude 'ext/wxruby3/swig/classes/**/*'
|
47
|
+
manifest.include 'rakelib/**/*'
|
48
|
+
manifest.exclude %w[rakelib/run.* rakelib/help.* rakelib/package.* rakelib/memcheck.* rakelib/memcheck/**/*]
|
49
|
+
manifest.include %w{LICENSE README.md CREDITS.md INSTALL.md .yardopts}
|
50
|
+
manifest
|
51
|
+
end
|
52
|
+
|
53
|
+
def define_spec(&block)
|
54
|
+
gemspec = ::Gem::Specification.new('wxruby3', WXRuby3::WXRUBY_VERSION)
|
55
|
+
gemspec.required_rubygems_version = ::Gem::Requirement.new(">= 0") if gemspec.respond_to? :required_rubygems_version=
|
56
|
+
block.call(gemspec) if block_given?
|
57
|
+
gemspec
|
58
|
+
end
|
59
|
+
|
60
|
+
def gem_name
|
61
|
+
define_spec.full_name
|
62
|
+
end
|
63
|
+
private :gem_name
|
64
|
+
|
65
|
+
def gem_file
|
66
|
+
File.join('pkg', "#{gem_name}.gem")
|
67
|
+
end
|
68
|
+
|
69
|
+
def build_gem(gemspec)
|
70
|
+
if defined?(::Gem::Package) && ::Gem::Package.respond_to?(:build)
|
71
|
+
gem_file_name = ::Gem::Package.build(gemspec)
|
72
|
+
else
|
73
|
+
gem_file_name = ::Gem::Builder.new(gemspec).build
|
74
|
+
end
|
75
|
+
|
76
|
+
FileUtils.mkdir_p('pkg')
|
77
|
+
|
78
|
+
FileUtils.mv(gem_file_name, 'pkg')
|
79
|
+
end
|
80
|
+
|
81
|
+
# Binary package helpers
|
82
|
+
|
83
|
+
def bin_pkg_manifest
|
84
|
+
# create MANIFEST list with included files
|
85
|
+
manifest = Rake::FileList.new
|
86
|
+
manifest.include "lib/*.#{WXRuby3.config.dll_mask}"
|
87
|
+
manifest.include 'lib/wx/**/events/*.rb', 'lib/wx/**/ext/*.rb', 'lib/wx/core/font/*.rb'
|
88
|
+
manifest.include "lib/wx/doc/gen/**/*.rb"
|
89
|
+
if WXRuby3.config.get_config('with-wxwin')
|
90
|
+
manifest.include "ext/*.#{WXRuby3.config.dll_mask}"
|
91
|
+
end
|
92
|
+
manifest
|
93
|
+
end
|
94
|
+
|
95
|
+
def make_bin_name
|
96
|
+
os = WXRuby3.config.sysinfo.os
|
97
|
+
case os.id
|
98
|
+
when :windows
|
99
|
+
"wxruby3_#{os.distro}_ruby#{WXRuby3::Config.rb_ver_major}#{WXRuby3::Config.rb_ver_minor}"
|
100
|
+
else
|
101
|
+
"wxruby3_#{os.distro}_#{os.release || '0'}_ruby#{WXRuby3::Config.rb_ver_major}#{WXRuby3::Config.rb_ver_minor}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
private :make_bin_name
|
105
|
+
|
106
|
+
def bin_pkg_name
|
107
|
+
gemspec = ::Gem::Specification.new(make_bin_name, WXRuby3::WXRUBY_VERSION)
|
108
|
+
platform = ::Gem::Platform.new(RB_CONFIG["arch"])
|
109
|
+
if platform.os == 'darwin'
|
110
|
+
# loose the version for darwin kernels as that does not seem to affect wxRuby runtime compatibility
|
111
|
+
# (until proven otherwise)
|
112
|
+
platform.version = nil
|
113
|
+
end
|
114
|
+
gemspec.platform = platform.to_s
|
115
|
+
gemspec.full_name
|
116
|
+
end
|
117
|
+
private :bin_pkg_name
|
118
|
+
|
119
|
+
def bin_pkg_file
|
120
|
+
File.join('pkg', bin_pkg_name+BINPKG_EXT)
|
121
|
+
end
|
122
|
+
|
123
|
+
def build_bin_pkg
|
124
|
+
# make sure pkg directory exists
|
125
|
+
FileUtils.mkdir_p('pkg')
|
126
|
+
|
127
|
+
fname = bin_pkg_file
|
128
|
+
|
129
|
+
# package registry and essential config
|
130
|
+
registry = []
|
131
|
+
config = %w{wxwininstdir with-wxwin}.reduce({}) { |h, k| h[k] = WXRuby3.config.get_config(k); h }
|
132
|
+
# package temp deflate stream
|
133
|
+
deflate_stream = Tempfile.new(File.basename(fname, '.*'), binmode: true)
|
134
|
+
begin
|
135
|
+
# pack binaries into temp deflate stream
|
136
|
+
bin_pkg_manifest.each do |path|
|
137
|
+
registry << pack_file(deflate_stream, path)
|
138
|
+
end
|
139
|
+
# convert registry and config to deflated json string
|
140
|
+
registry_json_z = Zlib::Deflate.deflate(registry.to_json)
|
141
|
+
config_json_z = Zlib::Deflate.deflate(config.to_json)
|
142
|
+
|
143
|
+
# create final package archive
|
144
|
+
deflate_stream.rewind
|
145
|
+
digest = Digest::SHA256.new
|
146
|
+
File.open(fname, 'w', binmode: true) do |fout|
|
147
|
+
# pack config
|
148
|
+
data = [config_json_z.size].pack('Q')
|
149
|
+
digest << data
|
150
|
+
fout.write(data)
|
151
|
+
digest << config_json_z
|
152
|
+
fout.write(config_json_z)
|
153
|
+
# pack registry
|
154
|
+
data = [registry_json_z.size].pack('Q')
|
155
|
+
digest << data
|
156
|
+
fout.write(data)
|
157
|
+
digest << registry_json_z
|
158
|
+
fout.write(registry_json_z)
|
159
|
+
# pack files
|
160
|
+
registry.each do |entry|
|
161
|
+
if entry[2] > 0
|
162
|
+
data = deflate_stream.read(entry[2])
|
163
|
+
digest << data
|
164
|
+
fout.write(data)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
sha_file = File.join('pkg', bin_pkg_name+DIGEST_EXT)
|
169
|
+
File.open(sha_file, 'w') { |fsha| fsha << digest.hexdigest! }
|
170
|
+
ensure
|
171
|
+
deflate_stream.close(true)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def pack_file(os, path)
|
176
|
+
pack = true
|
177
|
+
entry = [path, File.stat(path).mode, 0]
|
178
|
+
unless WXRuby3.config.windows?
|
179
|
+
if File.symlink?(path)
|
180
|
+
pack = false
|
181
|
+
entry << File.readlink(path)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
if pack
|
185
|
+
offs = os.tell
|
186
|
+
os.write(Zlib::Deflate.deflate(File.read(path, binmode: true)))
|
187
|
+
entry[2] = os.tell - offs # packed data size
|
188
|
+
end
|
189
|
+
entry
|
190
|
+
end
|
191
|
+
private :pack_file
|
192
|
+
|
193
|
+
# Gem installation helpers
|
194
|
+
|
195
|
+
def install_gem(prebuilt_only: false, package: nil)
|
196
|
+
# check if a user specified binary package is to be used
|
197
|
+
if package
|
198
|
+
uri = File.file?(package) ? nil : URI(package)
|
199
|
+
if uri.nil? || uri.scheme == 'file'
|
200
|
+
filename = package
|
201
|
+
if uri
|
202
|
+
filename = uri.host ? "#{uri.host}:#{uri.path}" : uri.path
|
203
|
+
filename = nil unless File.file?(filename)
|
204
|
+
end
|
205
|
+
if filename
|
206
|
+
$stdout.puts "Installing user package #{filename}..."
|
207
|
+
exit(1) unless install_bin_pkg(filename)
|
208
|
+
$stdout.puts 'Done!'
|
209
|
+
true
|
210
|
+
else
|
211
|
+
$stderr.puts "ERROR: Cannot access file #{package}."
|
212
|
+
exit(1)
|
213
|
+
end
|
214
|
+
elsif uri.scheme == 'http' || uri.scheme == 'https'
|
215
|
+
# download the binary release package
|
216
|
+
$stdout.puts "Downloading #{uri.path}..."
|
217
|
+
filename = File.basename(uri.path)
|
218
|
+
if WXRuby3.config.download_file(uri.path, filename)
|
219
|
+
sha_file = File.basename(filename, '.*')+DIGEST_EXT
|
220
|
+
uri.path = File.join(File.dirname(uri.path), sha_file)
|
221
|
+
unless WXRuby3.config.download_file(uri.path, sha_file)
|
222
|
+
$stderr.puts "ERROR: Unable to download digest signature for binary release package : #{package}"
|
223
|
+
exit(1)
|
224
|
+
end
|
225
|
+
exit(1) unless install_bin_pkg(filename)
|
226
|
+
true
|
227
|
+
else
|
228
|
+
$stderr.puts "ERROR: Unable to download binary release package (#{package})!"
|
229
|
+
exit(1)
|
230
|
+
end
|
231
|
+
else
|
232
|
+
end
|
233
|
+
# check if there exists a pre-built binary release package for the current platform
|
234
|
+
elsif has_release_package?
|
235
|
+
# download the binary release package
|
236
|
+
$stdout.puts "Downloading #{bin_pkg_url(BINPKG_EXT)}..."
|
237
|
+
if WXRuby3.config.download_file(bin_pkg_url(BINPKG_EXT), bin_pkg_name+BINPKG_EXT)
|
238
|
+
unless WXRuby3.config.download_file(bin_pkg_url(DIGEST_EXT), bin_pkg_name+DIGEST_EXT)
|
239
|
+
$stderr.puts "ERROR: Unable to download digest signature for binary release package : #{bin_pkg_name}"
|
240
|
+
exit(1)
|
241
|
+
end
|
242
|
+
exit(1) unless install_bin_pkg(bin_pkg_name+BINPKG_EXT)
|
243
|
+
true
|
244
|
+
else
|
245
|
+
if prebuilt_only
|
246
|
+
$stderr.puts "ERROR: Unable to download binary release package (#{bin_pkg_name})!"
|
247
|
+
exit(1)
|
248
|
+
end
|
249
|
+
$stdout.puts "WARNING: Unable to download binary release package (#{bin_pkg_name})! Reverting to source install."
|
250
|
+
false
|
251
|
+
end
|
252
|
+
else
|
253
|
+
if prebuilt_only
|
254
|
+
$stderr.puts "ERROR: No binary release package available!"
|
255
|
+
exit(1)
|
256
|
+
end
|
257
|
+
false
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def bin_pkg_url(ext)
|
262
|
+
# which package are we looking for
|
263
|
+
pkg_name = bin_pkg_name
|
264
|
+
"https://github.com/mcorino/wxRuby3/releases/download/v#{WXRuby3::WXRUBY_VERSION}/#{pkg_name}#{ext}"
|
265
|
+
end
|
266
|
+
private :bin_pkg_url
|
267
|
+
|
268
|
+
def has_release_package?
|
269
|
+
# check if the release package exists on Github
|
270
|
+
uri = URI(bin_pkg_url(BINPKG_EXT))
|
271
|
+
$stdout.print "Checking #{uri.to_s}..." if WXRuby3.config.verbose?
|
272
|
+
response = Net::HTTP.start('github.com', use_ssl: true) do |http|
|
273
|
+
request = Net::HTTP::Head.new(uri)
|
274
|
+
http.request(request)
|
275
|
+
end
|
276
|
+
$stdout.puts "response #{response}" if WXRuby3.config.verbose?
|
277
|
+
# directly found or with redirect
|
278
|
+
Net::HTTPOK === response || Net::HTTPRedirection === response
|
279
|
+
end
|
280
|
+
private :has_release_package?
|
281
|
+
|
282
|
+
def install_bin_pkg(fname)
|
283
|
+
# first get digest signature (if available)
|
284
|
+
sha_file = File.join(File.dirname(fname), File.basename(fname, '.*')+DIGEST_EXT)
|
285
|
+
unless File.file?(sha_file)
|
286
|
+
$stderr.puts "ERROR: Cannot access package digest signature file : #{sha_file}."
|
287
|
+
return false
|
288
|
+
end
|
289
|
+
sha_sig = File.read(sha_file)
|
290
|
+
File.open(fname, 'r', binmode: true) do |fin|
|
291
|
+
# check digest signature
|
292
|
+
digest = Digest::SHA256.new
|
293
|
+
while (data = fin.read(1024*1024))
|
294
|
+
digest << data
|
295
|
+
end
|
296
|
+
if sha_sig != digest.hexdigest!
|
297
|
+
$stderr.puts 'ERROR: Package digest signature does NOT match.'
|
298
|
+
return false
|
299
|
+
end
|
300
|
+
fin.rewind
|
301
|
+
# get packed config size
|
302
|
+
config_size = fin.read(8).unpack('Q').shift
|
303
|
+
# unpack config
|
304
|
+
config = JSON.parse!(Zlib::Inflate.inflate(fin.read(config_size)))
|
305
|
+
# get packed registry size
|
306
|
+
registry_size = fin.read(8).unpack('Q').shift
|
307
|
+
# unpack registry
|
308
|
+
registry = JSON.parse!(Zlib::Inflate.inflate(fin.read(registry_size)))
|
309
|
+
# unpack and create binaries
|
310
|
+
registry.each do |entry|
|
311
|
+
path, mode, size, symlink = entry
|
312
|
+
if symlink
|
313
|
+
FileUtils.mkdir_p(File.dirname(symlink))
|
314
|
+
FileUtils.ln_s(symlink, path)
|
315
|
+
else
|
316
|
+
FileUtils.mkdir_p(File.dirname(path))
|
317
|
+
File.open(path, 'w', binmode: true) do |fbin|
|
318
|
+
fbin << Zlib::Inflate.inflate(fin.read(size))
|
319
|
+
end
|
320
|
+
File.chmod(mode, path)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
# merge config
|
324
|
+
config.each_pair { |k,v| WXRuby3.config.set_config(k, v) }
|
325
|
+
end
|
326
|
+
true
|
327
|
+
end
|
328
|
+
private :install_bin_pkg
|
329
|
+
|
330
|
+
end
|
331
|
+
|
332
|
+
end
|
333
|
+
|
334
|
+
end
|
data/rakelib/install.rb
CHANGED
@@ -57,6 +57,7 @@ module WXRuby3
|
|
57
57
|
|
58
58
|
def install_wxwin_shlibs
|
59
59
|
if WXRuby3.config.get_config('with-wxwin')
|
60
|
+
$stdout.print "Installing wxRuby3 extensions..." if WXRuby3.config.run_silent?
|
60
61
|
# prepare required wxWidgets shared libs
|
61
62
|
wxwin_inshlibs = []
|
62
63
|
WXRuby3::Install.wxwin_shlibs.each do |shlib|
|
@@ -66,7 +67,7 @@ module WXRuby3
|
|
66
67
|
FileUtils.ln_s(File.join('.', File.basename(src_shlib)), File.join('ext', File.basename(shlib)))
|
67
68
|
else
|
68
69
|
FileUtils.cp(shlib, inshlib = File.join('ext', File.basename(shlib)))
|
69
|
-
unless WXRuby3.config.
|
70
|
+
unless WXRuby3.config.update_shlib_loadpaths(inshlib)
|
70
71
|
# cleanup and exit
|
71
72
|
FileUtils.rm_f(Dir["ext/*.#{WXRuby3.config.dll_mask}"])
|
72
73
|
exit(1)
|
@@ -76,19 +77,20 @@ module WXRuby3
|
|
76
77
|
end
|
77
78
|
# prepare wxRuby shared libs
|
78
79
|
Dir["lib/*.#{WXRuby3.config.dll_mask}"].each do |shlib|
|
79
|
-
unless WXRuby3.config.
|
80
|
+
unless WXRuby3.config.update_shlib_loadpaths(shlib) && WXRuby3.config.update_shlib_ruby_libpath(shlib)
|
80
81
|
# cleanup and exit
|
81
82
|
FileUtils.rm_f(Dir["ext/*.#{WXRuby3.config.dll_mask}"])
|
82
83
|
exit(1)
|
83
84
|
end
|
84
85
|
end
|
85
86
|
(wxwin_inshlibs + Dir["lib/*.#{WXRuby3.config.dll_mask}"]).each do |shlib|
|
86
|
-
unless WXRuby3.config.
|
87
|
+
unless WXRuby3.config.update_shlib_wxwin_libpaths(shlib, WXRuby3::Install.wxwin_shlibs)
|
87
88
|
# cleanup and exit
|
88
89
|
FileUtils.rm_f(Dir["ext/*.#{WXRuby3.config.dll_mask}"])
|
89
90
|
exit(1)
|
90
91
|
end
|
91
92
|
end
|
93
|
+
$stdout.puts 'done!' if WXRuby3.config.run_silent?
|
92
94
|
end
|
93
95
|
end
|
94
96
|
|
data/rakelib/lib/config/linux.rb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
###
|
8
8
|
|
9
9
|
require_relative './unixish'
|
10
|
+
require_relative 'pkgman/linux'
|
10
11
|
|
11
12
|
module WXRuby3
|
12
13
|
|
@@ -17,6 +18,7 @@ module WXRuby3
|
|
17
18
|
def self.included(base)
|
18
19
|
base.class_eval do
|
19
20
|
include Config::UnixLike
|
21
|
+
|
20
22
|
alias :base_ldflags :ldflags
|
21
23
|
def ldflags(target)
|
22
24
|
"-Wl,-soname,#{File.basename(target)} #{base_ldflags(target)}"
|
@@ -31,15 +33,16 @@ module WXRuby3
|
|
31
33
|
|
32
34
|
def check_rpath_patch
|
33
35
|
unless @rpath_patch
|
34
|
-
if system('
|
36
|
+
if system('command -v patchelf > /dev/null')
|
35
37
|
@rpath_patch = 'patchelf --set-rpath'
|
36
38
|
else
|
37
|
-
STDERR.puts 'Installation of binary gem with-wxwin requires an installed version of
|
39
|
+
STDERR.puts 'Installation of binary gem with-wxwin requires an installed version of the patchelf utility.'
|
38
40
|
return false
|
39
41
|
end
|
40
42
|
end
|
41
43
|
true
|
42
44
|
end
|
45
|
+
protected :check_rpath_patch
|
43
46
|
|
44
47
|
def patch_rpath(shlib, *rpath)
|
45
48
|
if check_rpath_patch
|
@@ -48,6 +51,27 @@ module WXRuby3
|
|
48
51
|
end
|
49
52
|
false
|
50
53
|
end
|
54
|
+
protected :patch_rpath
|
55
|
+
|
56
|
+
def check_tool_pkgs
|
57
|
+
pkg_deps = super
|
58
|
+
# need g++ to build wxRuby3 extensions in any case
|
59
|
+
pkg_deps << 'g++' unless system('command -v g++>/dev/null')
|
60
|
+
# do we need to build wxWidgets?
|
61
|
+
if get_config('with-wxwin') && get_cfg_string('wxwin').empty?
|
62
|
+
pkg_deps << 'patchelf' unless system('command -v patchelf>/dev/null')
|
63
|
+
pkg_deps << 'make' unless system('command -v make>/dev/null')
|
64
|
+
pkg_deps << 'git' unless system('command -v git>/dev/null')
|
65
|
+
end
|
66
|
+
pkg_deps
|
67
|
+
end
|
68
|
+
|
69
|
+
def install_prerequisites
|
70
|
+
pkg_deps = check_tool_pkgs
|
71
|
+
PkgManager.install(pkg_deps)
|
72
|
+
[]
|
73
|
+
end
|
74
|
+
|
51
75
|
end
|
52
76
|
end
|
53
77
|
|