glib2 3.0.8 → 3.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,174 +6,177 @@ require 'open-uri'
6
6
  require 'rubygems'
7
7
  require 'mechanize'
8
8
 
9
- class GNOME2WindowsBinaryDownloadTask
10
- include Rake::DSL
11
-
12
- URL_BASE = "http://ftp.gnome.org/pub/gnome/binaries"
13
- def initialize(package)
14
- @package = package
15
- define
16
- end
9
+ module GNOME2
10
+ module Rake
11
+ class WindowsBinaryDownloadTask
12
+ include ::Rake::DSL
13
+
14
+ URL_BASE = "http://ftp.gnome.org/pub/gnome/binaries"
15
+ def initialize(package)
16
+ @package = package
17
+ end
17
18
 
18
- private
19
- def define
20
- namespace :windows do
21
- namespace :downloader do
22
- task :before
23
-
24
- download_tasks = []
25
- namespace :download do
26
- directory dist_dir.to_s
27
- task :prepare => [dist_dir.to_s]
28
-
29
- packages.each do |package|
30
- desc "download #{package}"
31
- task package => [:prepare] do
32
- download_package(package)
19
+ def define
20
+ namespace :windows do
21
+ namespace :downloader do
22
+ task :before
23
+
24
+ download_tasks = []
25
+ namespace :download do
26
+ directory dist_dir.to_s
27
+ task :prepare => [dist_dir.to_s]
28
+
29
+ packages.each do |package|
30
+ desc "download #{package}"
31
+ task package => [:prepare] do
32
+ download_package(package)
33
+ end
34
+ download_tasks << package
35
+ end
36
+
37
+ dependencies.each do |dependency|
38
+ name, version = dependency
39
+ desc "download #{name}"
40
+ task name => [:prepare] do
41
+ download_dependency(dependency)
42
+ end
43
+ download_tasks << name
44
+ end
33
45
  end
34
- download_tasks << package
35
- end
36
46
 
37
- dependencies.each do |dependency|
38
- name, version = dependency
39
- desc "download #{name}"
40
- task name => [:prepare] do
41
- download_dependency(dependency)
47
+ download_tasks = download_tasks.collect do |task|
48
+ "windows:downloader:download:#{task}"
42
49
  end
43
- download_tasks << name
44
- end
45
- end
50
+ desc "download Windows binaries into #{dist_dir}"
51
+ task :download => download_tasks
46
52
 
47
- download_tasks = download_tasks.collect do |task|
48
- "windows:downloader:download:#{task}"
53
+ task :after
54
+ end
55
+ desc "download Windows binaries"
56
+ task :download => ["windows:downloader:before",
57
+ "windows:downloader:download",
58
+ "windows:downloader:after"]
49
59
  end
50
- desc "download Windows binaries into #{dist_dir}"
51
- task :download => download_tasks
60
+ end
52
61
 
53
- task :after
62
+ private
63
+ def dist_dir
64
+ @package.windows.absolute_binary_dir
54
65
  end
55
- desc "download Windows binaries"
56
- task :download => ["windows:downloader:before",
57
- "windows:downloader:download",
58
- "windows:downloader:after"]
59
- end
60
- end
61
66
 
62
- def dist_dir
63
- @package.windows.absolute_binary_dir
64
- end
67
+ def packages
68
+ @package.windows.packages
69
+ end
65
70
 
66
- def packages
67
- @package.windows.packages
68
- end
71
+ def dependencies
72
+ @package.windows.dependencies
73
+ end
69
74
 
70
- def dependencies
71
- @package.windows.dependencies
72
- end
75
+ def build_architecture_suffix
76
+ @package.windows.build_architecture_suffix
77
+ end
73
78
 
74
- def build_architecture_suffix
75
- @package.windows.build_architecture_suffix
76
- end
79
+ def download_package(package)
80
+ suffix = build_architecture_suffix
81
+ version_page_url = "#{URL_BASE}/#{suffix}/#{package}"
82
+ version_page = agent.get(version_page_url)
83
+ latest_version_link = version_page.links.sort_by do |link|
84
+ if /\A(\d+\.\d+)\/\z/ =~ link.href
85
+ $1.split(/\./).collect {|component| component.to_i}
86
+ else
87
+ [-1]
88
+ end
89
+ end.last
90
+
91
+ escaped_package = Regexp.escape(package)
92
+ latest_version_page = latest_version_link.click
93
+ latest_version = latest_version_page.links.collect do |link|
94
+ case link.href
95
+ when /#{escaped_package}_([\d\.\-]+)_#{suffix}\.zip\z/,
96
+ /#{escaped_package}-([\d\.\-]+)-#{suffix}\.zip\z/, # old
97
+ /#{escaped_package}-([\d\.\-]+)\.zip\z/ # old
98
+ version = $1
99
+ normalized_version = version.split(/[\.\-]/).collect do |component|
100
+ component.to_i
101
+ end
102
+ [normalized_version, version]
103
+ else
104
+ [[-1], nil]
105
+ end
106
+ end.sort_by do |normalized_version, version|
107
+ normalized_version
108
+ end.last[1]
77
109
 
78
- def download_package(package)
79
- suffix = build_architecture_suffix
80
- version_page_url = "#{URL_BASE}/#{suffix}/#{package}"
81
- version_page = agent.get(version_page_url)
82
- latest_version_link = version_page.links.sort_by do |link|
83
- if /\A(\d+\.\d+)\/\z/ =~ link.href
84
- $1.split(/\./).collect {|component| component.to_i}
85
- else
86
- [-1]
87
- end
88
- end.last
89
-
90
- escaped_package = Regexp.escape(package)
91
- latest_version_page = latest_version_link.click
92
- latest_version = latest_version_page.links.collect do |link|
93
- case link.href
94
- when /#{escaped_package}_([\d\.\-]+)_#{suffix}\.zip\z/,
95
- /#{escaped_package}-([\d\.\-]+)-#{suffix}\.zip\z/, # old
96
- /#{escaped_package}-([\d\.\-]+)\.zip\z/ # old
97
- version = $1
98
- normalized_version = version.split(/[\.\-]/).collect do |component|
99
- component.to_i
110
+ if latest_version.nil?
111
+ raise "can't find package: <#{package}>:<#{version_page_url}>"
112
+ end
113
+ escaped_latest_version = Regexp.escape(latest_version)
114
+ latest_version_page.links.each do |link|
115
+ case link.href
116
+ when /#{escaped_package}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/,
117
+ /#{escaped_package}(?:-dev)?-#{escaped_latest_version}-#{suffix}\.zip\z/, # old
118
+ /#{escaped_package}(?:-dev)?-#{escaped_latest_version}\.zip\z/ # old
119
+ click_zip_link(link)
120
+ end
100
121
  end
101
- [normalized_version, version]
102
- else
103
- [[-1], nil]
104
122
  end
105
- end.sort_by do |normalized_version, version|
106
- normalized_version
107
- end.last[1]
108
123
 
109
- if latest_version.nil?
110
- raise "can't find package: <#{package}>:<#{version_page_url}>"
111
- end
112
- escaped_latest_version = Regexp.escape(latest_version)
113
- latest_version_page.links.each do |link|
114
- case link.href
115
- when /#{escaped_package}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/,
116
- /#{escaped_package}(?:-dev)?-#{escaped_latest_version}-#{suffix}\.zip\z/, # old
117
- /#{escaped_package}(?:-dev)?-#{escaped_latest_version}\.zip\z/ # old
118
- click_zip_link(link)
124
+ def download_dependency(dependency)
125
+ suffix = build_architecture_suffix
126
+ dependency_version = "any"
127
+ dependency_version_re = /[\d\.\-]+/
128
+ if dependency.is_a?(Array)
129
+ dependency, dependency_version = dependency
130
+ dependency_version_re = /#{Regexp.escape(dependency_version)}/
131
+ end
132
+ escaped_dependency = Regexp.escape(dependency)
133
+ dependencies_url = "#{URL_BASE}/dependencies"
134
+ dependencies_page = agent.get(dependencies_url)
135
+ latest_version = dependencies_page.links.collect do |link|
136
+ case link.href
137
+ when /\A#{escaped_dependency}_(#{dependency_version_re})_#{suffix}\.zip\z/
138
+ version = $1
139
+ [version.split(/[\.\-]/).collect {|component| component.to_i}, version]
140
+ else
141
+ [[-1], nil]
142
+ end
143
+ end.sort_by do |normalized_version, version|
144
+ normalized_version
145
+ end.last[1]
146
+
147
+ if latest_version.nil?
148
+ message = "can't find dependency package: " +
149
+ "<#{dependency}>(#{dependency_version}):<#{dependencies_url}>"
150
+ raise message
151
+ end
152
+ escaped_latest_version = Regexp.escape(latest_version)
153
+ dependencies_page.links.each do |link|
154
+ case link.href
155
+ when /\A#{escaped_dependency}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/
156
+ click_zip_link(link)
157
+ end
158
+ end
119
159
  end
120
- end
121
- end
122
160
 
123
- def download_dependency(dependency)
124
- suffix = build_architecture_suffix
125
- dependency_version = "any"
126
- dependency_version_re = /[\d\.\-]+/
127
- if dependency.is_a?(Array)
128
- dependency, dependency_version = dependency
129
- dependency_version_re = /#{Regexp.escape(dependency_version)}/
130
- end
131
- escaped_dependency = Regexp.escape(dependency)
132
- dependencies_url = "#{URL_BASE}/dependencies"
133
- dependencies_page = agent.get(dependencies_url)
134
- latest_version = dependencies_page.links.collect do |link|
135
- case link.href
136
- when /\A#{escaped_dependency}_(#{dependency_version_re})_#{suffix}\.zip\z/
137
- version = $1
138
- [version.split(/[\.\-]/).collect {|component| component.to_i}, version]
139
- else
140
- [[-1], nil]
161
+ private
162
+ def agent
163
+ @agent ||= Mechanize.new
141
164
  end
142
- end.sort_by do |normalized_version, version|
143
- normalized_version
144
- end.last[1]
145
-
146
- if latest_version.nil?
147
- message = "can't find dependency package: " +
148
- "<#{dependency}>(#{dependency_version}):<#{dependencies_url}>"
149
- raise message
150
- end
151
- escaped_latest_version = Regexp.escape(latest_version)
152
- dependencies_page.links.each do |link|
153
- case link.href
154
- when /\A#{escaped_dependency}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/
155
- click_zip_link(link)
156
- end
157
- end
158
- end
159
-
160
- private
161
- def agent
162
- @agent ||= Mechanize.new
163
- end
164
165
 
165
- def click_zip_link(link)
166
- zip = link.click
167
- Dir.chdir(dist_dir) do
168
- open(zip.filename, "wb") do |file|
169
- file.print(zip.body)
170
- end
171
- system("unzip", "-o", zip.filename)
172
- Dir.glob("lib/pkgconfig/*.pc") do |pc_path|
173
- pc = File.read(pc_path)
174
- pc = pc.gsub(/\Aprefix=.+$/) {"prefix=#{dist_dir}"}
175
- File.open(pc_path, "w") do |pc_file|
176
- pc_file.print(pc)
166
+ def click_zip_link(link)
167
+ zip = link.click
168
+ Dir.chdir(dist_dir) do
169
+ open(zip.filename, "wb") do |file|
170
+ file.print(zip.body)
171
+ end
172
+ system("unzip", "-o", zip.filename)
173
+ Dir.glob("lib/pkgconfig/*.pc") do |pc_path|
174
+ pc = File.read(pc_path)
175
+ pc = pc.gsub(/\Aprefix=.+$/) {"prefix=#{dist_dir}"}
176
+ File.open(pc_path, "w") do |pc_file|
177
+ pc_file.print(pc)
178
+ end
179
+ end
177
180
  end
178
181
  end
179
182
  end
@@ -151,8 +151,16 @@ def find_gem_spec(package)
151
151
  end
152
152
  end
153
153
 
154
+ def setup_homebrew_libffi
155
+ return unless package_platform == :homebrew
156
+
157
+ PKGConfig.add_path("/usr/local/opt/libffi/lib/pkgconfig")
158
+ end
159
+
154
160
  #add_depend_package("glib2", "ext/glib2", "/...../ruby-gnome2")
155
161
  def add_depend_package(target_name, target_srcdir, top_srcdir, options={})
162
+ setup_homebrew_libffi if target_name == "gobject-introspection"
163
+
156
164
  gem_spec = find_gem_spec(target_name)
157
165
  if gem_spec
158
166
  target_source_dir = File.join(gem_spec.full_gem_path, "ext/#{target_name}")
@@ -410,34 +418,6 @@ def make_version_header(app_name, pkgname, dir = "src")
410
418
  out.close
411
419
  end
412
420
 
413
- def check_ruby_func
414
- #Other options
415
- ruby_header = "ruby.h"
416
- have_func("rb_define_alloc_func", ruby_header) # for ruby-1.8
417
- have_func("rb_block_proc", ruby_header) # for ruby-1.8
418
-
419
- STDOUT.print("checking for new allocation framework... ") # for ruby-1.7
420
- if Object.respond_to? :allocate
421
- STDOUT.print "yes\n"
422
- $defs << "-DHAVE_OBJECT_ALLOCATE"
423
- else
424
- STDOUT.print "no\n"
425
- end
426
-
427
- STDOUT.print("checking for attribute assignment... ") # for ruby-1.7
428
- STDOUT.flush
429
- if defined? try_compile and try_compile <<SRC
430
- #include "ruby.h"
431
- #include "node.h"
432
- int node_attrasgn = (int)NODE_ATTRASGN;
433
- SRC
434
- STDOUT.print "yes\n"
435
- $defs << "-DHAVE_NODE_ATTRASGN"
436
- else
437
- STDOUT.print "no\n"
438
- end
439
- end
440
-
441
421
  def add_obj(name)
442
422
  ensure_objs
443
423
  $objs << name unless $objs.index(name)
@@ -617,6 +597,9 @@ def required_pkg_config_package(package_info, native_package_info=nil)
617
597
  else
618
598
  required_package_info = [package_info]
619
599
  end
600
+ if required_package_info.include?("gobject-introspection-1.0")
601
+ setup_homebrew_libffi
602
+ end
620
603
  return true if PKGConfig.have_package(*required_package_info)
621
604
 
622
605
  native_package_info ||= {}
@@ -635,8 +618,6 @@ end
635
618
  add_include_path.call("sitearchdir")
636
619
  add_include_path.call("vendorarchdir")
637
620
 
638
- check_ruby_func
639
-
640
621
  if /mingw/ =~ RUBY_PLATFORM
641
622
  $ruby.gsub!('\\', '/')
642
623
  end
@@ -16,82 +16,173 @@
16
16
 
17
17
  class TestGLibBinding < Test::Unit::TestCase
18
18
  include GLibTestUtils
19
+ sub_test_case "bind_property" do
20
+ class DataObjectDefault < GLib::Object
21
+ type_register
19
22
 
20
- class DataObject < GLib::Object
21
- type_register
22
-
23
- install_property(GLib::Param::Int.new("source", # name
24
- "Source", # nick
25
- "The source data", # blurb
26
- 0, # min
27
- 100, # max
28
- 0, # default
29
- GLib::Param::READABLE |
30
- GLib::Param::WRITABLE))
31
- install_property(GLib::Param::Int.new("target", # name
32
- "Target", # nick
33
- "The target data", # blurb
34
- 0, # min
35
- 100, # max
36
- 0, # default
37
- GLib::Param::READABLE |
38
- GLib::Param::WRITABLE))
39
-
40
- attr_reader :source, :target
41
- def initialize
42
- @source = 0
43
- @target = 0
44
- super
45
- end
46
-
47
- def source=(value)
48
- @source = value
49
- notify("source")
50
- end
51
-
52
- def target=(value)
53
- @target = value
54
- notify("target")
23
+ install_property(GLib::Param::Int.new("source", # name
24
+ "Source", # nick
25
+ "The source data", # blurb
26
+ 0, # min
27
+ 100, # max
28
+ 0, # default
29
+ GLib::Param::READABLE |
30
+ GLib::Param::WRITABLE))
31
+ install_property(GLib::Param::Int.new("target", # name
32
+ "Target", # nick
33
+ "The target data", # blurb
34
+ 0, # min
35
+ 100, # max
36
+ 0, # default
37
+ GLib::Param::READABLE |
38
+ GLib::Param::WRITABLE))
39
+
40
+ attr_reader :source, :target
41
+ def initialize
42
+ @source = 0
43
+ @target = 0
44
+ super
45
+ end
46
+
47
+ def source=(value)
48
+ @source = value
49
+ notify("source")
50
+ end
51
+
52
+ def target=(value)
53
+ @target = value
54
+ notify("target")
55
+ end
55
56
  end
56
- end
57
57
 
58
- setup do
59
- only_glib_version(2, 26, 0)
60
- end
58
+ setup do
59
+ only_glib_version(2, 26, 0)
60
+ end
61
61
 
62
- setup do
63
- @source = DataObject.new
64
- @target = DataObject.new
65
- @binding = @source.bind_property("source", @target, "target", :default)
66
- end
62
+ setup do
63
+ @source = DataObjectDefault.new
64
+ @target = DataObjectDefault.new
65
+ @binding = @source.bind_property("source", @target, "target", :default)
66
+ end
67
67
 
68
- test "#source" do
69
- assert_equal(@source, @binding.source)
70
- end
68
+ test "#source" do
69
+ assert_equal(@source, @binding.source)
70
+ end
71
71
 
72
- test "#source_property" do
73
- assert_equal("source", @binding.source_property)
74
- end
72
+ test "#source_property" do
73
+ assert_equal("source", @binding.source_property)
74
+ end
75
75
 
76
- test "#target" do
77
- assert_equal(@target, @binding.target)
78
- end
76
+ test "#target" do
77
+ assert_equal(@target, @binding.target)
78
+ end
79
79
 
80
- test "#target_property" do
81
- assert_equal("target", @binding.target_property)
82
- end
80
+ test "#target_property" do
81
+ assert_equal("target", @binding.target_property)
82
+ end
83
83
 
84
- test "#flags" do
85
- assert_equal(GLib::BindingFlags::DEFAULT, @binding.flags)
84
+ test "#flags" do
85
+ assert_equal(GLib::BindingFlags::DEFAULT, @binding.flags)
86
+ end
87
+
88
+ test "#unbind" do
89
+ only_glib_version(2, 38, 0)
90
+ assert_equal(0, @target.target)
91
+ @source.source = 10
92
+ assert_equal(10, @target.target)
93
+ @binding.unbind
94
+ @source.source = 20
95
+ assert_equal(10, @target.target)
96
+ end
86
97
  end
98
+ sub_test_case "bind_property_full" do
99
+ class DataObjectBidir < GLib::Object
100
+ type_register
101
+
102
+ install_property(GLib::Param::Int.new("source", # name
103
+ "Source", # nick
104
+ "The source data", # blurb
105
+ 0, # min
106
+ 100, # max
107
+ 0, # default
108
+ GLib::Param::READABLE |
109
+ GLib::Param::WRITABLE))
110
+ install_property(GLib::Param::String.new("target", # name
111
+ "Target", # nick
112
+ "The target data", # blurb
113
+ "", # default
114
+ GLib::Param::READABLE |
115
+ GLib::Param::WRITABLE))
116
+
117
+ attr_reader :source, :target
118
+ def initialize
119
+ @source = 0
120
+ @target = "nan"
121
+ super
122
+ end
87
123
 
88
- test "#unbind" do
89
- only_glib_version(2, 38, 0)
90
- assert_equal(0, @target.target)
91
- @source.source = 10
92
- assert_equal(10, @target.target)
93
- @binding.unbind
94
- @source.source = 20
95
- assert_equal(10, @target.target)
124
+ def source=(value)
125
+ @source = value
126
+ notify("source")
127
+ end
128
+
129
+ def target=(value)
130
+ @target = value
131
+ notify("target")
132
+ end
133
+ end
134
+
135
+ setup do
136
+ only_glib_version(2, 26, 0)
137
+ end
138
+
139
+ setup do
140
+ @source = DataObjectBidir.new
141
+ @target = DataObjectBidir.new
142
+ transform_to_callback = proc do |source_value|
143
+ source_value.to_s
144
+ end
145
+
146
+ transform_from_callback = proc do |target_value|
147
+ target_value.to_i
148
+ end
149
+
150
+ @binding = @source.bind_property("source", @target, "target",
151
+ :bidirectional,
152
+ :transform_to => transform_to_callback,
153
+ :transform_from => transform_from_callback)
154
+ end
155
+
156
+ test "#source" do
157
+ assert_equal(@source, @binding.source)
158
+ end
159
+
160
+ test "#source_property" do
161
+ assert_equal("source", @binding.source_property)
162
+ end
163
+
164
+ test "#target" do
165
+ assert_equal(@target, @binding.target)
166
+ end
167
+
168
+ test "#target_property" do
169
+ assert_equal("target", @binding.target_property)
170
+ end
171
+
172
+ test "#flags" do
173
+ assert_equal(GLib::BindingFlags::BIDIRECTIONAL, @binding.flags)
174
+ end
175
+
176
+ test "#unbind" do
177
+ only_glib_version(2, 38, 0)
178
+ assert_equal("nan", @target.target)
179
+ @source.source = 10
180
+ assert_equal("10", @target.target)
181
+ @target.target = "30"
182
+ assert_equal(30, @source.source)
183
+ @binding.unbind
184
+ @source.source = 20
185
+ assert_equal("30", @target.target)
186
+ end
96
187
  end
97
188
  end