wxruby3 0.9.4 → 0.9.7
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 +315 -78
- data/README.md +32 -21
- data/ext/wxruby3/include/wxruby-ComboPopup.h +777 -0
- data/lib/wx/core/combo_ctrl.rb +171 -0
- data/lib/wx/core/ext.rb +22 -3
- data/lib/wx/doc/comboctrl.rb +128 -3
- data/lib/wx/doc/owner_drawn_combobox.rb +5 -1
- data/lib/wx/version.rb +1 -1
- data/lib/wx/wxruby/base.rb +6 -4
- data/lib/wx/wxruby/cmd/sampler.rb +39 -29
- data/lib/wx/wxruby/cmd/setup.rb +122 -0
- data/lib/wx/wxruby/cmd/test.rb +56 -6
- data/rakefile +14 -0
- 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 +28 -8
- data/rakelib/doc.rake +3 -1
- data/rakelib/gem.rake +169 -0
- data/rakelib/gem.rb +82 -0
- data/rakelib/install.rb +2 -0
- data/rakelib/lib/config/linux.rb +24 -2
- data/rakelib/lib/config/macosx.rb +16 -0
- data/rakelib/lib/config/mingw.rb +133 -9
- data/rakelib/lib/config/pkgman/arch.rb +53 -0
- data/rakelib/lib/config/pkgman/base.rb +169 -0
- data/rakelib/lib/config/pkgman/debian.rb +66 -0
- data/rakelib/lib/config/pkgman/macosx.rb +183 -0
- data/rakelib/lib/config/pkgman/rhel.rb +54 -0
- data/rakelib/lib/config/pkgman/suse.rb +54 -0
- data/rakelib/lib/config/unixish.rb +36 -19
- data/rakelib/lib/config.rb +254 -61
- data/rakelib/lib/core/include/funcall.inc +2 -1
- data/rakelib/lib/core/package.rb +47 -49
- data/rakelib/lib/director/comboctrl.rb +104 -3
- data/rakelib/lib/director/defs.rb +1 -3
- data/rakelib/lib/director/gdicommon.rb +5 -0
- data/rakelib/lib/director/menu_item.rb +1 -1
- data/rakelib/lib/director/num_validator.rb +5 -7
- data/rakelib/lib/director/owner_drawn_combobox.rb +1 -0
- data/rakelib/lib/director/persistent_window.rb +2 -2
- data/rakelib/lib/director/pgeditor.rb +1 -1
- data/rakelib/lib/director/pgproperties.rb +3 -3
- data/rakelib/lib/director/pgproperty.rb +5 -1
- data/rakelib/lib/director/richtext_style_listbox.rb +5 -0
- data/rakelib/lib/director/sizer.rb +1 -1
- data/rakelib/lib/director/window.rb +4 -0
- data/rakelib/lib/extractor/module.rb +15 -0
- data/rakelib/lib/generate/doc/combo_ctrl.yaml +135 -0
- data/rakelib/lib/generate/doc/file_dialog_customize_hook.yaml +62 -0
- data/rakelib/lib/generate/doc/file_system.yaml +28 -0
- data/rakelib/lib/generate/doc.rb +29 -14
- data/rakelib/lib/generate/interface.rb +16 -6
- data/rakelib/lib/swig_runner.rb +18 -15
- data/rakelib/lib/typemap/combo_popup.rb +42 -0
- data/rakelib/prepost.rake +9 -4
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +14 -0
- data/rakelib/yard/templates/default/fulldoc/html/setup.rb +5 -5
- data/rakelib/yard/yard/relative_markdown_links.rb +7 -1
- data/tests/test_combo_ctrl.rb +196 -0
- metadata +28 -17
- data/ext/mkrf_conf_srcgem.rb +0 -67
- data/rakelib/run.rake +0 -52
data/lib/wx/wxruby/cmd/test.rb
CHANGED
@@ -10,21 +10,71 @@ require 'fileutils'
|
|
10
10
|
module WxRuby
|
11
11
|
module Commands
|
12
12
|
class Test
|
13
|
+
|
14
|
+
DESC = 'Run wxRuby3 regression tests.'
|
15
|
+
|
13
16
|
def self.description
|
14
|
-
" test
|
17
|
+
" test -h|[options] [TEST [...]]\t#{DESC}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.options
|
21
|
+
Commands.options['test'] ||= { verbose: Commands.options[:verbose], excludes: [] }
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse_args(args)
|
25
|
+
opts = OptionParser.new
|
26
|
+
opts.banner = "#{DESC}\n\nUsage: wxruby test -h|--help OR wxruby test [options] [TEST [...]]\n\n" +
|
27
|
+
"TEST == test name\n" +
|
28
|
+
"Runs all tests (except any specified to exclude) if no test specified.\n\n"
|
29
|
+
opts.separator ''
|
30
|
+
opts.on('--list',
|
31
|
+
"display the list of names of the installed tests") do |v|
|
32
|
+
tests = Dir[File.join(WxRuby::ROOT, 'tests', '*.rb')].collect { |t| File.basename(t, '.*') }
|
33
|
+
$stdout.puts <<~__INFO
|
34
|
+
Installed wxRuby tests:
|
35
|
+
#{tests.join(', ')}
|
36
|
+
|
37
|
+
__INFO
|
38
|
+
exit(0)
|
39
|
+
end
|
40
|
+
opts.on('--exclude=TEST',
|
41
|
+
"exclude the specified test from running") {|v| Test.options[:excludes] << v }
|
42
|
+
opts.on('-h', '--help',
|
43
|
+
'Show this message.') do |v|
|
44
|
+
puts opts
|
45
|
+
puts
|
46
|
+
exit(0)
|
47
|
+
end
|
48
|
+
opts.parse!(args)
|
15
49
|
end
|
16
50
|
|
17
51
|
def self.run(argv)
|
18
|
-
if argv == :describe
|
19
|
-
|
20
|
-
|
21
|
-
|
52
|
+
return description if argv == :describe
|
53
|
+
|
54
|
+
parse_args(argv)
|
55
|
+
|
56
|
+
tests = if argv.empty?
|
57
|
+
Dir[File.join(WxRuby::ROOT, 'tests', '*.rb')]
|
58
|
+
else
|
59
|
+
argv.collect do |a|
|
60
|
+
fn = File.join(WxRuby::ROOT, 'tests', a+'.rb')
|
61
|
+
unless File.file?(fn)
|
62
|
+
$stderr.puts "ERROR: Invalid test [#{a}] specified."
|
63
|
+
exit(1)
|
64
|
+
end
|
65
|
+
fn
|
66
|
+
end
|
67
|
+
end
|
68
|
+
tests.each do |test|
|
69
|
+
unless Test.options[:excludes].include?(File.basename(test, '.*'))
|
22
70
|
exit(1) unless system(RUBY, test)
|
23
71
|
end
|
24
72
|
end
|
25
73
|
end
|
26
74
|
end
|
27
75
|
|
28
|
-
self.
|
76
|
+
if self.setup_done?
|
77
|
+
self.register('test', Test)
|
78
|
+
end
|
29
79
|
end
|
30
80
|
end
|
data/rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
###
|
2
|
+
# wxRuby3 rake file
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
4
|
+
###
|
5
|
+
|
6
|
+
# Influential environment variables
|
7
|
+
# WXRUBY_VERBOSE : define verbosity for (rake) build scripts
|
8
|
+
# WXRUBY_VERSION : define the version info (x.x.x) for this tree
|
9
|
+
# WXRUBY_EXCLUDED : exclude certain classes from being compiled, even if present
|
10
|
+
#
|
11
|
+
# WXWIN : install folder of wxWidgets library if not system default
|
12
|
+
# WXXML : folder containing doxygen generated wxWidgets XML interface specs if not using wxRuby bootstrap
|
13
|
+
|
14
|
+
task :default => 'wxruby:help'
|
data/rakelib/bin.rake
ADDED
@@ -0,0 +1,48 @@
|
|
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 'rake/clean'
|
10
|
+
|
11
|
+
require_relative './bin'
|
12
|
+
|
13
|
+
directory 'bin'
|
14
|
+
|
15
|
+
file File.join('bin', 'wxruby') => 'bin' do |t|
|
16
|
+
File.open(t.name, 'w') { |f| f.puts WXRuby3::Bin.wxruby }
|
17
|
+
File.chmod(0755, t.name)
|
18
|
+
end
|
19
|
+
|
20
|
+
namespace :wxruby do
|
21
|
+
|
22
|
+
namespace :bin do
|
23
|
+
|
24
|
+
task :build => ['wxruby:bin:check', File.join('bin', 'wxruby')]
|
25
|
+
|
26
|
+
task :check do
|
27
|
+
WXRuby3::Bin.binaries.each do |bin|
|
28
|
+
if File.exist?(File.join('bin', bin))
|
29
|
+
content = IO.read(File.join('bin', bin))
|
30
|
+
rm_f(File.join('bin', bin)) unless content == WXRuby3::Bin.__send__(bin.gsub('.','_').to_sym)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
CLOBBER.include File.join('bin', 'wxruby')
|
38
|
+
|
39
|
+
if WXRuby3.config.windows?
|
40
|
+
|
41
|
+
file File.join('bin', 'wxruby.bat') => ['bin'] do |t|
|
42
|
+
File.open(t.name, 'w') { |f| f.puts WXRuby3::Bin.wxruby_bat }
|
43
|
+
end
|
44
|
+
Rake::Task['wxruby:bin:build'].enhance [File.join('bin', 'wxruby.bat')]
|
45
|
+
|
46
|
+
CLOBBER.include File.join('bin', 'wxruby.bat')
|
47
|
+
|
48
|
+
end
|
data/rakelib/bin.rb
ADDED
@@ -0,0 +1,62 @@
|
|
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 bin support
|
7
|
+
###
|
8
|
+
|
9
|
+
require_relative './lib/config'
|
10
|
+
|
11
|
+
module WXRuby3
|
12
|
+
|
13
|
+
module Bin
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def wxruby
|
17
|
+
<<~_SH_TXT
|
18
|
+
#!#{WXRuby3.config.windows? ? '/bin/' : (`which env`).strip+' '}#{RB_CONFIG['ruby_install_name']}
|
19
|
+
#---------------------------------
|
20
|
+
# This file is generated
|
21
|
+
#---------------------------------
|
22
|
+
module WxRuby
|
23
|
+
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
24
|
+
end
|
25
|
+
require 'wx/wxruby/base'
|
26
|
+
WxRuby.run
|
27
|
+
_SH_TXT
|
28
|
+
end
|
29
|
+
|
30
|
+
def wxruby_bat
|
31
|
+
<<~_BAT_TXT
|
32
|
+
@echo off
|
33
|
+
if not "%~f0" == "~f0" goto WinNT
|
34
|
+
#{RB_CONFIG['ruby_install_name']} -Sx "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
|
35
|
+
goto endofruby
|
36
|
+
:WinNT
|
37
|
+
if not exist "%~d0%~p0#{RB_CONFIG['ruby_install_name']}" goto rubyfrompath
|
38
|
+
if exist "%~d0%~p0#{RB_CONFIG['ruby_install_name']}" "%~d0%~p0#{RB_CONFIG['ruby_install_name']}" -x "%~f0" %*
|
39
|
+
goto endofruby
|
40
|
+
:rubyfrompath
|
41
|
+
#{RB_CONFIG['ruby_install_name']} -x "%~f0" %*
|
42
|
+
goto endofruby
|
43
|
+
#!/bin/#{RB_CONFIG['ruby_install_name']}
|
44
|
+
#
|
45
|
+
module WxRuby
|
46
|
+
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
47
|
+
end
|
48
|
+
require 'wx/wxruby/base'
|
49
|
+
WxRuby.run
|
50
|
+
__END__
|
51
|
+
:endofruby
|
52
|
+
_BAT_TXT
|
53
|
+
end
|
54
|
+
|
55
|
+
def binaries
|
56
|
+
%w{wxruby}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/rakelib/build.rb
CHANGED
@@ -11,8 +11,11 @@ require_relative './lib/config'
|
|
11
11
|
|
12
12
|
if WXRuby3.is_bootstrapped?
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
# only if not part of installed Gem
|
15
|
+
if File.file?(File.join(__dir__, 'package.rake'))
|
16
|
+
Rake.application.options.always_multitask =
|
17
|
+
Rake.application.top_level_tasks.size == 1 && Rake.application.top_level_tasks.first == 'build'
|
18
|
+
end
|
16
19
|
|
17
20
|
require_relative './lib/director'
|
18
21
|
|
@@ -102,22 +105,23 @@ if WXRuby3.is_bootstrapped?
|
|
102
105
|
|
103
106
|
file WXRuby3::Director.enum_cache_control_path do |t_|
|
104
107
|
WXRuby3::Director.all_packages.each { |p| p.extract(genint: false) }
|
105
|
-
touch(WXRuby3::Director.enum_cache_control_path)
|
108
|
+
touch(WXRuby3::Director.enum_cache_control_path, verbose: !WXRuby3.config.run_silent?)
|
106
109
|
end
|
107
110
|
|
108
111
|
# Compile an object file from a generated c++ source
|
109
112
|
rule ".#{WXRuby3.config.obj_ext}" => [
|
110
113
|
proc { |tn| "#{WXRuby3.config.src_dir}/#{File.basename(tn, ".*")}.cpp" }
|
111
114
|
] do | t |
|
112
|
-
sh "#{WXRuby3.config.cpp} -c #{WXRuby3.config.verbose_flag} " +
|
113
|
-
|
114
|
-
|
115
|
+
WXRuby3.config.sh "#{WXRuby3.config.cpp} -c #{WXRuby3.config.verbose_flag} " +
|
116
|
+
"#{WXRuby3.config.cxxflags} #{WXRuby3::Director.cpp_flags(t.source)} " +
|
117
|
+
"#{WXRuby3.config.cpp_out_flag}#{t.name} #{t.source}",
|
118
|
+
fail_on_error: true
|
115
119
|
end
|
116
120
|
|
117
121
|
if WXRuby3.config.windows?
|
118
122
|
# compile an object file from the standard wxRuby resource file
|
119
123
|
file File.join(WXRuby3.config.obj_dir, 'wx_rc.o') => File.join(WXRuby3.config.swig_dir, 'wx.rc') do |t|
|
120
|
-
sh "#{WXRuby3.config.rescomp} -i#{t.source} -o#{t.name}"
|
124
|
+
WXRuby3.config.sh "#{WXRuby3.config.rescomp} -i#{t.source} -o#{t.name}", fail_on_error: true
|
121
125
|
end
|
122
126
|
end
|
123
127
|
|
data/rakelib/config.rake
CHANGED
data/rakelib/configure.rb
CHANGED
@@ -70,6 +70,10 @@ module WXRuby3
|
|
70
70
|
"the path to swig executable [#{get_config('swig')}]") {|v| CONFIG['swig'] = v}
|
71
71
|
opts.on('--doxygen=path',
|
72
72
|
"the path to doxygen executable [#{get_config('doxygen')}]") {|v| CONFIG['doxygen'] = v}
|
73
|
+
opts.on('--git=path',
|
74
|
+
"the path to git executable [#{get_config('git')}]") {|v| CONFIG['git'] = v}
|
75
|
+
opts.on('--[no-]autoinstall',
|
76
|
+
"do (not) attempt to automatically install any required packages") {|v| CONFIG['autoinstall'] = !!v }
|
73
77
|
|
74
78
|
opts.separator ""
|
75
79
|
|
@@ -110,20 +114,36 @@ module WXRuby3
|
|
110
114
|
# check wxWidgets availability through 'wx-config' command
|
111
115
|
if instance.check_wx_config
|
112
116
|
if instance.wx_config("--version") < '3.2.0'
|
113
|
-
|
114
|
-
|
117
|
+
if get_cfg_string('wxwin').empty? && get_cfg_string('wxxml').empty?
|
118
|
+
# no custom wxWidgets build specified so switch to assuming we should include building wxWidgets ourselves
|
119
|
+
set_config('with-wxwin', true)
|
120
|
+
else
|
121
|
+
# if someone wants to customize they HAVE to do it right
|
122
|
+
STDERR.puts "ERROR: Incompatible wxWidgets version. wxRuby requires a wxWidgets >= 3.2.0 release."
|
123
|
+
exit(1)
|
124
|
+
end
|
115
125
|
end
|
116
126
|
else
|
117
|
-
|
118
|
-
|
127
|
+
if get_cfg_string('wxwin').empty? && get_cfg_string('wxxml').empty?
|
128
|
+
# no custom wxWidgets build specified so switch to assuming we should include building wxWidgets ourselves
|
129
|
+
set_config('with-wxwin', true)
|
130
|
+
else
|
131
|
+
# if someone wants to customize they HAVE to do it right
|
132
|
+
STDERR.puts "ERROR: Cannot find wxWidgets. wxRuby requires a wxWidgets >= 3.2.0 release."
|
133
|
+
exit(1)
|
134
|
+
end
|
119
135
|
end
|
120
136
|
# else we're are assumed to build wxWidgets ourselves so cannot test anything yet
|
121
137
|
end
|
122
138
|
|
123
|
-
if get_cfg_string('wxxml').empty?
|
124
|
-
#
|
125
|
-
|
126
|
-
|
139
|
+
if get_cfg_string('wxxml').empty? && !get_cfg_string('wxwin').empty?
|
140
|
+
# in case of a custom wxWidgets build and no explicit xml path check if the custom build holds this
|
141
|
+
xml_path = File.join(get_cfg_string('wxwin'), 'docs', 'doxygen', 'out', 'xml')
|
142
|
+
# if not there see if the standard setup 'wxw_root/<install dir>' was used
|
143
|
+
xml_path = File.join(get_cfg_string('wxwin'), '..', 'docs', 'doxygen', 'out', 'xml') unless File.directory?(xml_path)
|
144
|
+
if File.directory?(xml_path) && !Dir.glob(File.join(xml_path, '*.xml')).empty?
|
145
|
+
set_config('wxxml', xml_path)
|
146
|
+
end
|
127
147
|
end
|
128
148
|
|
129
149
|
end
|
data/rakelib/doc.rake
CHANGED
@@ -16,7 +16,9 @@ namespace :wxruby do
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
-
directory WXRuby3.config.rb_docgen_path
|
19
|
+
directory WXRuby3.config.rb_docgen_path do
|
20
|
+
mkdir_p(WXRuby3.config.rb_docgen_path, verbose: !WXRuby3.config.run_silent?)
|
21
|
+
end
|
20
22
|
|
21
23
|
file File.join(WXRuby3.config.rb_docgen_path, 'window.rb') => [WXRuby3.config.rb_docgen_path, *all_doc_targets]
|
22
24
|
|
data/rakelib/gem.rake
ADDED
@@ -0,0 +1,169 @@
|
|
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('wxruby3', WXRuby3::WXRUBY_VERSION)]
|
16
|
+
|
17
|
+
if WXRuby3.is_bootstrapped?
|
18
|
+
task :bingem => ['bin:build', File.join(WXRuby3.config.rb_docgen_path, 'window.rb'), WXRuby3::Gem.gem_file('wxruby3', WXRuby3::WXRUBY_VERSION, :bin)]
|
19
|
+
end
|
20
|
+
|
21
|
+
# this task only exists for installed source gems (where package tasks have been removed)
|
22
|
+
unless File.file?(File.join(__dir__, 'package.rake'))
|
23
|
+
|
24
|
+
task :setup => 'config:bootstrap' do |_t, args|
|
25
|
+
begin
|
26
|
+
$stdout.print "Building wxRuby3 extensions..." if WXRuby3.config.run_silent?
|
27
|
+
WXRuby3.config.set_silent_run_incremental
|
28
|
+
Rake::Task['wxruby:build'].invoke
|
29
|
+
WXRuby3.config.set_silent_run_batched
|
30
|
+
$stdout.puts 'done!' if WXRuby3.config.run_silent?
|
31
|
+
Rake::Task['wxruby:post:srcgem'].invoke
|
32
|
+
# all is well -> cleanup
|
33
|
+
if args.extras.include?(':keep_log')
|
34
|
+
$stdout.puts "Log: #{WXRuby3.config.silent_log_name}"
|
35
|
+
else
|
36
|
+
rm_f(WXRuby3.config.silent_log_name, verbose: WXRuby3.config.verbose?)
|
37
|
+
end
|
38
|
+
rescue Exception => ex
|
39
|
+
$stderr.puts <<~__ERR_TXT
|
40
|
+
#{ex.message}#{WXRuby3.config.verbose? ? "\n#{ex.backtrace.join("\n")}" : ''}
|
41
|
+
|
42
|
+
For error details check #{WXRuby3.config.silent_log_name}
|
43
|
+
__ERR_TXT
|
44
|
+
exit(1)
|
45
|
+
end
|
46
|
+
$stdout.puts <<~__MSG
|
47
|
+
|
48
|
+
wxRuby3 has been successfully installed including the 'wxruby' utility.
|
49
|
+
|
50
|
+
You can run the regression tests to verify the installation by executing:
|
51
|
+
|
52
|
+
$ ./wxruby test
|
53
|
+
|
54
|
+
The wxRuby3 sample selector can be run by executing:
|
55
|
+
|
56
|
+
$ ./wxruby sampler
|
57
|
+
|
58
|
+
Have fun using wxRuby3.
|
59
|
+
__MSG
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
# source gem file
|
68
|
+
file WXRuby3::Gem.gem_file('wxruby3', WXRuby3::WXRUBY_VERSION) => WXRuby3::Gem.manifest do
|
69
|
+
gemspec = WXRuby3::Gem.define_spec('wxruby3', WXRuby3::WXRUBY_VERSION) do |gem|
|
70
|
+
gem.summary = %Q{wxWidgets extension for Ruby}
|
71
|
+
gem.description = %Q{wxRuby3 is a Ruby library providing an extension for the wxWidgets C++ UI framework}
|
72
|
+
gem.email = 'mcorino@m2c-software.nl'
|
73
|
+
gem.homepage = "https://github.com/mcorino/wxRuby3"
|
74
|
+
gem.authors = ['Martin Corino']
|
75
|
+
gem.files = WXRuby3::Gem.manifest
|
76
|
+
gem.require_paths = %w{lib}
|
77
|
+
gem.bindir = 'bin'
|
78
|
+
gem.executables = WXRuby3::Bin.binaries
|
79
|
+
gem.required_ruby_version = '>= 2.5'
|
80
|
+
gem.licenses = ['MIT']
|
81
|
+
gem.add_dependency 'nokogiri', '~> 1.12'
|
82
|
+
gem.add_dependency 'rake'
|
83
|
+
gem.add_dependency 'minitest', '~> 5.15'
|
84
|
+
gem.add_dependency 'test-unit', '~> 3.5'
|
85
|
+
gem.rdoc_options <<
|
86
|
+
'--exclude=\\.dll' <<
|
87
|
+
'--exclude=\\.so' <<
|
88
|
+
'--exclude=lib/wx.rb' <<
|
89
|
+
'--exclude=lib/wx/*.rb' <<
|
90
|
+
"'--exclude=lib/wx/(aui|core|grid|html|pg|prt|rbn|rtc|stc|wxruby)/.*'"
|
91
|
+
gem.metadata = {
|
92
|
+
"bug_tracker_uri" => "https://github.com/mcorino/wxRuby3/issues",
|
93
|
+
"source_code_uri" => "https://github.com/mcorino/wxRuby3",
|
94
|
+
"documentation_uri" => "https://mcorino.github.io/wxRuby3",
|
95
|
+
"homepage_uri" => "https://github.com/mcorino/wxRuby3",
|
96
|
+
}
|
97
|
+
gem.post_install_message = <<~__MSG
|
98
|
+
|
99
|
+
The wxRuby3 Gem has been successfully installed.
|
100
|
+
Before being able to use wxRuby3 you need to run the post-install setup process
|
101
|
+
by executing the command 'wxruby setup'.
|
102
|
+
|
103
|
+
Run 'wxruby setup -h' to see information on the available commandline options.
|
104
|
+
|
105
|
+
__MSG
|
106
|
+
end
|
107
|
+
WXRuby3::Gem.build_gem(gemspec)
|
108
|
+
end
|
109
|
+
|
110
|
+
desc 'Build wxRuby 3 gem'
|
111
|
+
task :gem => 'wxruby:gem:srcgem'
|
112
|
+
|
113
|
+
if WXRuby3.is_bootstrapped?
|
114
|
+
|
115
|
+
# binary gem file
|
116
|
+
file WXRuby3::Gem.gem_file('wxruby3', WXRuby3::WXRUBY_VERSION, :bin) => WXRuby3::Gem.manifest(:bin) + ['ext/mkrf_conf_bingem.rb'] do
|
117
|
+
WXRuby3::Install.install_wxwin_shlibs
|
118
|
+
begin
|
119
|
+
# create gemspec
|
120
|
+
gemspec = WXRuby3::Gem.define_spec('wxruby3', WXRuby3::WXRUBY_VERSION, :bin) do |gem|
|
121
|
+
gem.summary = %Q{wxWidgets extension for Ruby}
|
122
|
+
gem.description = %Q{wxRuby3 is a Ruby library providing an extension for the wxWidgets C++ UI framework}
|
123
|
+
gem.email = 'mcorino@m2c-software.nl'
|
124
|
+
gem.homepage = "https://github.com/mcorino/wxRuby3"
|
125
|
+
gem.authors = ['Martin Corino']
|
126
|
+
gem.files = WXRuby3::Gem.manifest(:bin)
|
127
|
+
gem.require_paths = %w{lib}
|
128
|
+
gem.require_paths << 'ext' if WXRuby3.config.get_config('with-wxwin')
|
129
|
+
gem.bindir = 'bin'
|
130
|
+
gem.executables = WXRuby3::Bin.binaries
|
131
|
+
gem.extensions = ['ext/mkrf_conf_bingem.rb']
|
132
|
+
gem.required_ruby_version = ">= #{WXRuby3::Config.rb_ver_major}.#{WXRuby3::Config.rb_ver_minor}",
|
133
|
+
"< #{WXRuby3::Config.rb_ver_major}.#{WXRuby3::Config.rb_ver_minor+1}"
|
134
|
+
gem.licenses = ['MIT']
|
135
|
+
gem.add_dependency 'rake'
|
136
|
+
gem.add_dependency 'minitest', '~> 5.15'
|
137
|
+
gem.add_dependency 'test-unit', '~> 3.5'
|
138
|
+
gem.rdoc_options << '--exclude=\\.dll' << '--exclude=\\.so'
|
139
|
+
gem.metadata = {
|
140
|
+
"bug_tracker_uri" => "https://github.com/mcorino/wxRuby3/issues",
|
141
|
+
"source_code_uri" => "https://github.com/mcorino/wxRuby3",
|
142
|
+
"documentation_uri" => "https://mcorino.github.io/wxRuby3",
|
143
|
+
"homepage_uri" => "https://github.com/mcorino/wxRuby3",
|
144
|
+
}
|
145
|
+
gem.post_install_message = <<~__MSG
|
146
|
+
|
147
|
+
wxRuby3 has been successfully installed including the 'wxruby' utility.
|
148
|
+
|
149
|
+
You can run the regression tests to verify the installation by executing:
|
150
|
+
|
151
|
+
$ ./wxruby test
|
152
|
+
|
153
|
+
The wxRuby3 sample selector can be run by executing:
|
154
|
+
|
155
|
+
$ ./wxruby sampler
|
156
|
+
|
157
|
+
Have fun using wxRuby3.
|
158
|
+
__MSG
|
159
|
+
end
|
160
|
+
WXRuby3::Gem.build_gem(gemspec)
|
161
|
+
ensure
|
162
|
+
WXRuby3::Install.remove_wxwin_shlibs
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
desc 'Build wxRuby 3 binary gem'
|
167
|
+
task :bingem => 'wxruby:gem:bingem'
|
168
|
+
|
169
|
+
end
|
data/rakelib/gem.rb
ADDED
@@ -0,0 +1,82 @@
|
|
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
|
+
|
17
|
+
require_relative './lib/config'
|
18
|
+
require_relative './install'
|
19
|
+
|
20
|
+
module WXRuby3
|
21
|
+
|
22
|
+
module Gem
|
23
|
+
|
24
|
+
def self.manifest(gemtype = :src)
|
25
|
+
# create MANIFEST list with included files
|
26
|
+
manifest = Rake::FileList.new
|
27
|
+
manifest.include %w[bin/*] # *nix executables in bin/
|
28
|
+
manifest.exclude %w[bin/*.bat] unless WXRuby3.config.windows?
|
29
|
+
manifest.include %w[assets/**/* lib/**/* samples/**/* tests/**/*]
|
30
|
+
if gemtype == :bin
|
31
|
+
if WXRuby3.config.get_config('with-wxwin')
|
32
|
+
manifest.include "ext/*.#{WXRuby3.config.dll_mask}"
|
33
|
+
end
|
34
|
+
manifest.include 'ext/mkrf_conf_bingem.rb'
|
35
|
+
manifest.include %w[rakelib/prepost.* rakelib/install.rb rakelib/lib/config.rb rakelib/lib/config/**/* rakelib/lib/ext/**/* rakelib/yard/**/*]
|
36
|
+
manifest.include WXRuby3::BUILD_CFG
|
37
|
+
else
|
38
|
+
manifest.exclude "lib/*.#{WXRuby3.config.dll_mask}"
|
39
|
+
manifest.include 'ext/wxruby3/wxruby.ico', 'ext/wxruby3/swig/**/*', 'ext/wxruby3/include/**/*'
|
40
|
+
manifest.exclude 'ext/wxruby3/swig/classes/**/*'
|
41
|
+
manifest.include 'rakelib/**/*'
|
42
|
+
manifest.exclude %w[rakelib/run.* rakelib/help.* rakelib/package.* rakelib/memcheck.* rakelib/memcheck/**/*]
|
43
|
+
manifest.include 'rakefile'
|
44
|
+
end
|
45
|
+
manifest.include %w{LICENSE README.md CREDITS.md INSTALL.md .yardopts}
|
46
|
+
manifest
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.define_spec(name, version, gemtype = :src, &block)
|
50
|
+
gemspec = ::Gem::Specification.new(name, version)
|
51
|
+
if gemtype == :bin
|
52
|
+
platform = ::Gem::Platform.local.to_s
|
53
|
+
gemspec.platform = platform
|
54
|
+
end
|
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 self.gem_name(name, version, gemtype = :src)
|
61
|
+
define_spec(name, version, gemtype).full_name
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.gem_file(name, version, gemtype = :src)
|
65
|
+
File.join('pkg', "#{WXRuby3::Gem.gem_name(name, version, gemtype)}.gem")
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.build_gem(gemspec)
|
69
|
+
if defined?(::Gem::Package) && ::Gem::Package.respond_to?(:build)
|
70
|
+
gem_file_name = ::Gem::Package.build(gemspec)
|
71
|
+
else
|
72
|
+
gem_file_name = ::Gem::Builder.new(gemspec).build
|
73
|
+
end
|
74
|
+
|
75
|
+
FileUtils.mkdir_p('pkg')
|
76
|
+
|
77
|
+
FileUtils.mv(gem_file_name, 'pkg')
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
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|
|
@@ -89,6 +90,7 @@ module WXRuby3
|
|
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/base'
|
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,10 +33,10 @@ 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
|
@@ -48,6 +50,26 @@ module WXRuby3
|
|
48
50
|
end
|
49
51
|
false
|
50
52
|
end
|
53
|
+
|
54
|
+
def check_tool_pkgs
|
55
|
+
pkg_deps = super
|
56
|
+
# need g++ to build wxRuby3 extensions in any case
|
57
|
+
pkg_deps << 'g++' unless system('command -v g++>/dev/null')
|
58
|
+
# do we need to build wxWidgets?
|
59
|
+
if get_config('with-wxwin') && get_cfg_string('wxwin').empty?
|
60
|
+
pkg_deps << 'patchelf' unless system('command -v patchelf>/dev/null')
|
61
|
+
pkg_deps << 'make' unless system('command -v make>/dev/null')
|
62
|
+
pkg_deps << 'git' unless system('command -v git>/dev/null')
|
63
|
+
end
|
64
|
+
pkg_deps
|
65
|
+
end
|
66
|
+
|
67
|
+
def install_prerequisites
|
68
|
+
pkg_deps = check_tool_pkgs
|
69
|
+
PkgManager.install(pkg_deps)
|
70
|
+
[]
|
71
|
+
end
|
72
|
+
|
51
73
|
end
|
52
74
|
end
|
53
75
|
|
@@ -7,6 +7,7 @@
|
|
7
7
|
###
|
8
8
|
|
9
9
|
require_relative './unixish'
|
10
|
+
require_relative 'pkgman/macosx'
|
10
11
|
|
11
12
|
module WXRuby3
|
12
13
|
|
@@ -53,6 +54,21 @@ module WXRuby3
|
|
53
54
|
true
|
54
55
|
end
|
55
56
|
|
57
|
+
def check_tool_pkgs
|
58
|
+
pkg_deps = super
|
59
|
+
# need g++ to build wxRuby3 extensions in any case
|
60
|
+
pkg_deps << 'gcc' unless system('command -v g++>/dev/null')
|
61
|
+
# need this to build anything (like wxRuby3 extensions itself)
|
62
|
+
pkg_deps << 'xcode' unless system('command -v install_name_tool>/dev/null')
|
63
|
+
pkg_deps
|
64
|
+
end
|
65
|
+
|
66
|
+
def install_prerequisites
|
67
|
+
pkg_deps = check_tool_pkgs
|
68
|
+
PkgManager.install(pkg_deps)
|
69
|
+
[]
|
70
|
+
end
|
71
|
+
|
56
72
|
def get_wx_libs
|
57
73
|
wx_libset = ::Set.new
|
58
74
|
lib_list = wx_config("--libs all").split(' ')
|