glib2 3.0.9 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -197,10 +197,26 @@ extern void rbgobj_set_signal_func(VALUE klass, const gchar *sig_name, GValToRVa
197
197
  extern GValToRValSignalFunc rbgobj_get_signal_func(guint signal_id);
198
198
  extern VALUE rbgobj_signal_wrap(guint sig_id);
199
199
 
200
+ typedef struct {
201
+ GValue *return_value;
202
+ guint n_param_values;
203
+ const GValue *param_values;
204
+ VALUE callback;
205
+ VALUE extra_args;
206
+ } RGClosureCallData;
207
+ typedef void (*RGClosureCallFunc)(RGClosureCallData *data);
208
+
209
+ extern void rbgobj_set_signal_call_func(VALUE klass,
210
+ const gchar *signal_name,
211
+ RGClosureCallFunc func);
212
+ extern RGClosureCallFunc rbgobj_get_signal_call_func(guint signal_id);
200
213
 
201
214
  /* rbgobj_closure.c */
202
215
  extern GClosure* g_rclosure_new(VALUE callback_proc, VALUE extra_args,
203
216
  GValToRValSignalFunc func);
217
+ extern GClosure* g_rclosure_new_call(VALUE callback_proc,
218
+ VALUE extra_args,
219
+ RGClosureCallFunc func);
204
220
  extern void g_rclosure_attach(GClosure *closure, VALUE object);
205
221
  extern void g_rclosure_set_tag(GClosure *closure, const gchar *tag);
206
222
 
@@ -138,22 +138,22 @@ rbgutil_key_equal(VALUE rb_key, const char *key)
138
138
  }
139
139
 
140
140
  static gboolean
141
- rbg_interrupt_prepare (G_GNUC_UNUSED GSource *soruce,
142
- G_GNUC_UNUSED gint *timeout)
141
+ rbg_interrupt_prepare (G_GNUC_UNUSED GSource *source,
142
+ G_GNUC_UNUSED gint *timeout)
143
143
  {
144
144
  return rb_thread_interrupted(rb_thread_current());
145
145
  }
146
146
 
147
147
  static gboolean
148
- rbg_interrupt_check (G_GNUC_UNUSED GSource *soruce)
148
+ rbg_interrupt_check (G_GNUC_UNUSED GSource *source)
149
149
  {
150
150
  return rb_thread_interrupted(rb_thread_current());
151
151
  }
152
152
 
153
153
  static gboolean
154
- rbg_interrupt_dispatch (G_GNUC_UNUSED GSource *soruce,
155
- GSourceFunc callback,
156
- gpointer user_data)
154
+ rbg_interrupt_dispatch (G_GNUC_UNUSED GSource *source,
155
+ GSourceFunc callback,
156
+ gpointer user_data)
157
157
  {
158
158
  if (callback) {
159
159
  return callback(user_data);
@@ -33,10 +33,15 @@ module GLib
33
33
  def exit_application(exception, status)
34
34
  msg = exception.message || exception.to_s
35
35
  msg = exception.class.to_s if msg == ""
36
- backtrace = exception.backtrace
37
- $stderr.puts backtrace.shift + ": #{msg}"
36
+ backtrace = exception.backtrace || []
37
+ first_line = backtrace.shift
38
+ if first_line
39
+ $stderr.puts("#{first_line}: #{msg}")
40
+ else
41
+ $stderr.puts(msg)
42
+ end
38
43
  backtrace.each do |v|
39
- $stderr.puts "\t from #{v}"
44
+ $stderr.puts("\t from #{v}")
40
45
  end
41
46
  exit(status)
42
47
  end
@@ -107,6 +107,8 @@ module GNOME2
107
107
  latest_version_freedesktop
108
108
  when :freedesktop_gstreamer
109
109
  latest_version_freedesktop_gstreamer
110
+ when :webkitgtk
111
+ latest_version_webkitgtk
110
112
  else
111
113
  nil
112
114
  end
@@ -127,6 +129,8 @@ module GNOME2
127
129
  base_url << "/#{name}"
128
130
  when :gnu
129
131
  base_url = "http://ftp.gnu.org/pub/gnu/#{name}"
132
+ when :webkitgtk
133
+ base_url = webkitgtk_base_url
130
134
  else
131
135
  base_url = nil
132
136
  end
@@ -145,6 +149,10 @@ module GNOME2
145
149
  "https://gstreamer.freedesktop.org/src"
146
150
  end
147
151
 
152
+ def webkitgtk_base_url
153
+ "https://webkitgtk.org/releases"
154
+ end
155
+
148
156
  def sort_versions(versions)
149
157
  versions.sort_by do |version|
150
158
  version.split(".").collect(&:to_i)
@@ -223,6 +231,22 @@ module GNOME2
223
231
  version.split(".")[1].to_i.odd?
224
232
  end
225
233
 
234
+ def latest_version_webkitgtk
235
+ base_url = webkitgtk_base_url
236
+ versions = []
237
+ open(base_url) do |index|
238
+ index.read.scan(/<a (.+?)>/) do |content,|
239
+ case content
240
+ when /href="#{Regexp.escape(name)}-
241
+ (\d+(?:\.\d+)*)
242
+ \.tar\.#{Regexp.escape(compression_method)}"/x
243
+ versions << $1
244
+ end
245
+ end
246
+ end
247
+ sort_versions(versions).last
248
+ end
249
+
226
250
  class WindowsConfiguration < Struct.new(:build,
227
251
  :include_paths,
228
252
  :library_paths,
@@ -10,341 +10,342 @@ module GNOME2
10
10
  class WindowsBinaryBuildTask
11
11
  include ::Rake::DSL
12
12
 
13
- def initialize(package)
14
- @package = package
15
- end
16
-
17
- def define
18
- namespace :windows do
19
- namespace :builder do
20
- task :before
21
- define_build_tasks
22
- build_tasks = build_packages.collect do |package|
23
- "windows:builder:build:#{package.name}"
24
- end
25
- task :build => build_tasks
26
- task :after
27
- end
28
- desc "Build Windows binaries"
29
- task :build => ["windows:builder:before",
30
- "windows:builder:build",
31
- "windows:builder:after"]
32
- end
33
- end
34
-
35
- def rcairo_windows_binary_base_dir
36
- rcairo_windows_dir + "vendor" + "local"
37
- end
38
-
39
- private
40
- def define_build_tasks
41
- namespace :build do
42
- prepare_task_names = []
43
- namespace :prepare do
44
- prepare_task_names << "pkg_config"
45
- task :pkg_config do
46
- depended_packages = @package.windows.build_dependencies
47
- use_packages = [@package.name] + depended_packages
48
- pkg_config_path = use_packages.collect do |package|
49
- "../#{package}/#{@package.windows.relative_binary_dir}/lib/pkgconfig"
50
- end
51
- ENV["PKG_CONFIG_PATH"] = pkg_config_path.collect do |path|
52
- File.expand_path(path)
53
- end.join(":")
54
- ENV["PKG_CONFIG_LIBDIR"] = rcairo_windows_pkgconfig_path
55
- end
56
-
57
- prepare_task_names << "pkg_config_for_build"
58
- task :pkg_config_for_build do
59
- # XXX: Is it needless?
60
- # ENV["PKG_CONFIG_FOR_BUILD"] = "env - pkg-config"
61
- end
62
- end
63
-
64
- full_prepare_task_names = prepare_task_names.collect do |name|
65
- "windows:builder:build:prepare:#{name}"
66
- end
67
- task :prepare => full_prepare_task_names
68
-
69
- build_packages.each do |package|
70
- namespace package.name do
71
- task :before
72
- download_task = "source:downloader:download:#{package.name}"
73
- built_file = package.windows.built_file
74
- if built_file
75
- built_file = dist_dir + built_file
76
- file built_file.to_s do
77
- ::Rake::Task["windows:builder:build:prepare"].invoke
78
- ::Rake::Task[download_task].invoke
79
- build_package_task_body(package)
80
- end
81
- task :build => built_file.to_s
82
- else
83
- task :build => [:prepare, download_task] do
84
- build_package_task_body(package)
85
- end
86
- end
87
- task :after
88
- end
89
-
90
- prefix = "windows:builder:build:#{package.name}"
91
- desc "Build #{package.label} and install it into #{dist_dir}."
92
- task package.name => [
93
- "#{prefix}:before",
94
- "#{prefix}:build",
95
- "#{prefix}:after",
96
- ]
97
- end
98
- end
99
- end
100
-
101
- def build_package_task_body(package)
102
- package_tmp_dir = @package.tmp_dir + "windows" + package.name
103
- rm_rf(package_tmp_dir)
104
- mkdir_p(package_tmp_dir)
105
-
106
- tar_full_path = @package.download_dir + package.archive_base_name
107
- Dir.chdir(package_tmp_dir.to_s) do
108
- sh("tar", "xf", tar_full_path.to_s)
109
- end
110
-
111
- package_dir_path =
112
- package_tmp_dir + package.base_name + package.base_dir_in_package
113
- Dir.chdir(package_dir_path.to_s) do
114
- package.windows.patches.each do |patch|
115
- sh("patch -p1 < #{@package.patches_dir}/#{patch}")
116
- end
117
- if File.exist?("configure")
118
- configure(package)
119
- else
120
- cmake(package)
121
- end
122
- common_make_args = []
123
- common_make_args << "MAKE=make"
124
- common_make_args << "GLIB_COMPILE_SCHEMAS=glib-compile-schemas"
125
- if package.windows.use_cc_environment_variable?
126
- common_make_args << cc_env(package)
127
- end
128
- add_gobject_introspection_make_args(package, common_make_args)
129
- build_make_args = common_make_args.dup
130
- install_make_args = common_make_args.dup
131
- if package.windows.build_concurrently?
132
- make_n_jobs = ENV["MAKE_N_JOBS"]
133
- build_make_args << "-j#{make_n_jobs}" if make_n_jobs
134
- end
135
- ENV["GREP_OPTIONS"] = "--text"
136
- # ENV["GI_SCANNER_DEBUG"] = "save-temps"
137
- # build_make_args << "--debug"
138
- # build_make_args << "V=1"
139
- sh("nice", "make", *build_make_args) or exit(false)
140
- sh("make", "install", *install_make_args) or exit(false)
141
-
142
- package_license_dir = license_dir + package.name
143
- mkdir_p(package_license_dir)
144
- package_license_files = ["AUTHORS", "COPYING", "COPYING.LIB"]
145
- package_license_files = package_license_files.reject do |file|
146
- not File.exist?(file)
147
- end
148
- cp(package_license_files, package_license_dir)
149
- bundled_packages = package.bundled_packages
150
- bundled_packages.each do |bundled_package|
151
- bundled_package_license_dir = license_dir + bundled_package[:name]
152
- mkdir_p(bundled_package_license_dir)
153
- license_files = bundled_package[:license_files].collect do |file|
154
- File.join(bundled_package[:path], file)
155
- end
156
- cp(license_files, bundled_package_license_dir)
157
- end
158
- end
159
- end
160
-
161
- def configure(package)
162
- sh("./autogen.sh") if package.windows.need_autogen?
163
- sh("autoreconf", "--install", "--force") if package.windows.need_autoreconf?
164
- sh("./configure",
165
- cc_env(package),
166
- dlltool_env,
167
- "CPPFLAGS=#{cppflags(package)}",
168
- "LDFLAGS=#{ldflags(package)}",
169
- "--prefix=#{dist_dir}",
170
- "--host=#{@package.windows.build_host}",
171
- *package.windows.configure_args) or exit(false)
172
- end
173
-
174
- def cmake(package)
175
- sh("cmake",
176
- ".",
177
- "-DCMAKE_INSTALL_PREFIX=#{dist_dir}",
178
- "-DCMAKE_SYSTEM_NAME=Windows",
179
- "-DCMAKE_SYSTEM_PROCESSOR=#{@package.windows.build_architecture}",
180
- "-DCMAKE_C_COMPILER=#{cc(package)}",
181
- "-DCMAKE_CXX_COMPILER=#{cxx(package)}",
182
- *package.windows.cmake_args) or exit(false)
183
- end
184
-
185
- def cc_env(package)
186
- "CC=#{cc(package)}"
187
- end
188
-
189
- def dlltool_env
190
- "DLLTOOL=#{dlltool}"
191
- end
192
-
193
- def build_packages
194
- packages = @package.external_packages.select do |package|
195
- package.windows.build?
196
- end
197
- # For backward compatibility
198
- packages + @package.windows.build_packages
199
- end
200
-
201
- def dist_dir
202
- @package.windows.absolute_binary_dir
203
- end
204
-
205
- def license_dir
206
- dist_dir + "share" + "license"
207
- end
208
-
209
- def glib2_binary_base_dir
210
- @package.glib2_root_dir + "vendor" + "local"
211
- end
212
-
213
- def glib2_include_path
214
- "#{glib2_binary_base_dir}/include"
215
- end
216
-
217
- def glib2_lib_path
218
- "#{glib2_binary_base_dir}/lib"
219
- end
220
-
221
- def rcairo_windows_dir
222
- suffix = @package.windows.build_architecture_suffix
223
- @package.project_root_dir.parent + "rcairo.#{suffix}"
224
- end
225
-
226
- def rcairo_windows_pkgconfig_path
227
- "#{rcairo_windows_binary_base_dir}/lib/pkgconfig"
228
- end
229
-
230
- def rcairo_windows_include_path
231
- "#{rcairo_windows_binary_base_dir}/include"
232
- end
233
-
234
- def rcairo_windows_lib_path
235
- "#{rcairo_windows_binary_base_dir}/lib"
236
- end
237
-
238
- def cc(package)
239
- cc_command_line = [
240
- "#{@package.windows.build_host}-gcc",
241
- *package.windows.cc_args,
242
- ]
243
- cc_command_line.compact.join(" ")
244
- end
245
-
246
- def cxx(package)
247
- cxx_command_line = [
248
- "#{@package.windows.build_host}-g++",
249
- ]
250
- cxx_command_line.compact.join(" ")
251
- end
252
-
253
- def dlltool
254
- "#{@package.windows.build_host}-dlltool"
255
- end
256
-
257
- def cppflags(package)
258
- include_paths = package.windows.include_paths
259
- if @package.windows.build_dependencies.include?("glib2")
260
- include_paths += [glib2_include_path]
261
- end
262
- include_paths += [
263
- rcairo_windows_include_path,
264
- dist_dir + 'include',
265
- ]
266
- cppflags = include_paths.collect do |path|
267
- "-I#{path}"
268
- end
269
- cppflags.join(" ")
270
- end
271
-
272
- def ldflags(package)
273
- library_paths = package.windows.library_paths
274
- if @package.windows.build_dependencies.include?("glib2")
275
- library_paths += [glib2_lib_path]
276
- end
277
- library_paths += [
278
- rcairo_windows_lib_path,
279
- dist_dir + 'lib',
280
- ]
281
- ldflags = library_paths.collect do |path|
282
- "-L#{path}"
283
- end
284
- ldflags.join(" ")
285
- end
286
-
287
- def cmake_root_paths
288
- paths = [
289
- "/usr/#{@package.windows.build_host}",
290
- rcairo_windows_binary_base_dir.to_path,
291
- ]
292
- @package.windows.build_dependencies.each do |package|
293
- paths << "#{@package.project_root_dir}/#{package}/vendor/local"
294
- end
295
- paths
296
- end
297
-
298
- def add_gobject_introspection_make_args(package, common_make_args)
299
- return unless use_gobject_introspection?(package)
300
-
301
- g_ir_scanner = "#{@package.project_root_dir}/gobject-introspection/"
302
- g_ir_scanner << "#{@package.native.relative_binary_dir}/bin/g-ir-scanner"
303
- introspection_scanner = "INTROSPECTION_SCANNER=#{g_ir_scanner}"
304
- common_make_args << introspection_scanner
305
-
306
-
307
- dependencies = [
308
- "gobject-introspection",
309
- @package.name,
310
- ]
311
- dependencies += @package.windows.gobject_introspection_dependencies
312
-
313
- compute_base_dir = lambda do |dependent_package|
314
- "#{@package.project_root_dir}/#{dependent_package}/vendor/local"
315
- end
316
-
317
- gi_base_dir = compute_base_dir.call("gobject-introspection")
318
- introspection_compiler = "INTROSPECTION_COMPILER="
319
- introspection_compiler << "#{gi_base_dir}/bin/g-ir-compiler.exe"
320
- introspection_compiler_args = ""
321
- dependencies.each do |dependent_package|
322
- gir_dir = "#{compute_base_dir.call(dependent_package)}/share/gir-1.0"
323
- introspection_compiler_args << " --includedir=#{gir_dir}"
324
- end
325
- if package.windows.gobject_introspection_compiler_split_args?
326
- common_make_args << introspection_compiler
327
- common_make_args <<
328
- "INTROSPECTION_COMPILER_ARGS=#{introspection_compiler_args}"
329
- common_make_args <<
330
- "INTROSPECTION_COMPILER_OPTS=#{introspection_compiler_args}"
331
- else
332
- introspection_compiler << " #{introspection_compiler_args}"
333
- common_make_args << introspection_compiler
334
- end
335
-
336
- common_make_args << dlltool_env
337
-
338
- data_dirs = dependencies.collect do |dependent_package|
339
- "#{compute_base_dir.call(dependent_package)}/share"
340
- end
341
- common_make_args << "XDG_DATA_DIRS=#{data_dirs.join(File::PATH_SEPARATOR)}"
342
- end
343
-
344
- def use_gobject_introspection?(package)
345
- return false unless package.windows.use_gobject_introspection?
346
- @package.windows.build_dependencies.include?("gobject-introspection")
347
- end
348
- end
349
- end
350
- end
13
+ def initialize(package)
14
+ @package = package
15
+ end
16
+
17
+ def define
18
+ namespace :windows do
19
+ namespace :builder do
20
+ task :before
21
+ define_build_tasks
22
+ build_tasks = build_packages.collect do |package|
23
+ "windows:builder:build:#{package.name}"
24
+ end
25
+ task :build => build_tasks
26
+ task :after
27
+ end
28
+ desc "Build Windows binaries"
29
+ task :build => ["windows:builder:before",
30
+ "windows:builder:build",
31
+ "windows:builder:after"]
32
+ end
33
+ end
34
+
35
+ def rcairo_binary_base_dir
36
+ rcairo_dir + "vendor" + "local"
37
+ end
38
+
39
+ def glib2_binary_base_dir
40
+ @package.glib2_root_dir + "vendor" + "local"
41
+ end
42
+
43
+ def binary_base_dir(package)
44
+ @package.project_root_dir + package + "vendor" + "local"
45
+ end
46
+
47
+ private
48
+ def define_build_tasks
49
+ namespace :build do
50
+ prepare_task_names = []
51
+ namespace :prepare do
52
+ prepare_task_names << "pkg_config"
53
+ task :pkg_config do
54
+ depended_packages = @package.windows.build_dependencies
55
+ use_packages = [@package.name] + depended_packages
56
+ pkg_config_path = use_packages.collect do |package|
57
+ "../#{package}/#{@package.windows.relative_binary_dir}/lib/pkgconfig"
58
+ end
59
+ ENV["PKG_CONFIG_PATH"] = pkg_config_path.collect do |path|
60
+ File.expand_path(path)
61
+ end.join(":")
62
+ ENV["PKG_CONFIG_LIBDIR"] = rcairo_pkgconfig_path
63
+ end
64
+
65
+ prepare_task_names << "pkg_config_for_build"
66
+ task :pkg_config_for_build do
67
+ # XXX: Is it needless?
68
+ # ENV["PKG_CONFIG_FOR_BUILD"] = "env - pkg-config"
69
+ end
70
+ end
71
+
72
+ full_prepare_task_names = prepare_task_names.collect do |name|
73
+ "windows:builder:build:prepare:#{name}"
74
+ end
75
+ task :prepare => full_prepare_task_names
76
+
77
+ build_packages.each do |package|
78
+ namespace package.name do
79
+ task :before
80
+ download_task = "source:downloader:download:#{package.name}"
81
+ built_file = package.windows.built_file
82
+ if built_file
83
+ built_file = dist_dir + built_file
84
+ file built_file.to_s do
85
+ ::Rake::Task["windows:builder:build:prepare"].invoke
86
+ ::Rake::Task[download_task].invoke
87
+ build_package_task_body(package)
88
+ end
89
+ task :build => built_file.to_s
90
+ else
91
+ task :build => [:prepare, download_task] do
92
+ build_package_task_body(package)
93
+ end
94
+ end
95
+ task :after
96
+ end
97
+
98
+ prefix = "windows:builder:build:#{package.name}"
99
+ desc "Build #{package.label} and install it into #{dist_dir}."
100
+ task package.name => [
101
+ "#{prefix}:before",
102
+ "#{prefix}:build",
103
+ "#{prefix}:after",
104
+ ]
105
+ end
106
+ end
107
+ end
108
+
109
+ def build_package_task_body(package)
110
+ package_tmp_dir = @package.tmp_dir + "windows" + package.name
111
+ rm_rf(package_tmp_dir)
112
+ mkdir_p(package_tmp_dir)
113
+
114
+ tar_full_path = @package.download_dir + package.archive_base_name
115
+ Dir.chdir(package_tmp_dir.to_s) do
116
+ sh("tar", "xf", tar_full_path.to_s)
117
+ end
118
+
119
+ package_dir_path =
120
+ package_tmp_dir + package.base_name + package.base_dir_in_package
121
+ Dir.chdir(package_dir_path.to_s) do
122
+ package.windows.patches.each do |patch|
123
+ sh("patch -p1 < #{@package.patches_dir}/#{patch}")
124
+ end
125
+ if File.exist?("configure")
126
+ configure(package)
127
+ else
128
+ cmake(package)
129
+ end
130
+ common_make_args = []
131
+ common_make_args << "MAKE=make"
132
+ common_make_args << "GLIB_COMPILE_SCHEMAS=glib-compile-schemas"
133
+ if package.windows.use_cc_environment_variable?
134
+ common_make_args << cc_env(package)
135
+ end
136
+ add_gobject_introspection_make_args(package, common_make_args)
137
+ build_make_args = common_make_args.dup
138
+ install_make_args = common_make_args.dup
139
+ if package.windows.build_concurrently?
140
+ make_n_jobs = ENV["MAKE_N_JOBS"]
141
+ build_make_args << "-j#{make_n_jobs}" if make_n_jobs
142
+ end
143
+ ENV["GREP_OPTIONS"] = "--text"
144
+ # ENV["GI_SCANNER_DEBUG"] = "save-temps"
145
+ # build_make_args << "--debug"
146
+ # build_make_args << "V=1"
147
+ # build_make_args << "VERBOSE=1"
148
+ sh("nice", "make", *build_make_args) or exit(false)
149
+ sh("make", "install", *install_make_args) or exit(false)
150
+
151
+ package_license_dir = license_dir + package.name
152
+ mkdir_p(package_license_dir)
153
+ package_license_files = ["AUTHORS", "COPYING", "COPYING.LIB"]
154
+ package_license_files = package_license_files.reject do |file|
155
+ not File.exist?(file)
156
+ end
157
+ cp(package_license_files, package_license_dir)
158
+ bundled_packages = package.bundled_packages
159
+ bundled_packages.each do |bundled_package|
160
+ bundled_package_license_dir = license_dir + bundled_package[:name]
161
+ mkdir_p(bundled_package_license_dir)
162
+ license_files = bundled_package[:license_files].collect do |file|
163
+ File.join(bundled_package[:path], file)
164
+ end
165
+ cp(license_files, bundled_package_license_dir)
166
+ end
167
+ end
168
+ end
169
+
170
+ def configure(package)
171
+ sh("./autogen.sh") if package.windows.need_autogen?
172
+ sh("autoreconf", "--install", "--force") if package.windows.need_autoreconf?
173
+ sh("./configure",
174
+ cc_env(package),
175
+ dlltool_env,
176
+ "CPPFLAGS=#{cppflags(package)}",
177
+ "LDFLAGS=#{ldflags(package)}",
178
+ "--prefix=#{dist_dir}",
179
+ "--host=#{@package.windows.build_host}",
180
+ *package.windows.configure_args) or exit(false)
181
+ end
182
+
183
+ def cmake(package)
184
+ sh("cmake",
185
+ ".",
186
+ "-DCMAKE_INSTALL_PREFIX=#{dist_dir}",
187
+ "-DCMAKE_SYSTEM_NAME=Windows",
188
+ "-DCMAKE_SYSTEM_PROCESSOR=#{@package.windows.build_architecture}",
189
+ "-DCMAKE_C_COMPILER=#{cc(package)}",
190
+ "-DCMAKE_CXX_COMPILER=#{cxx(package)}",
191
+ *package.windows.cmake_args) or exit(false)
192
+ end
193
+
194
+ def cc_env(package)
195
+ "CC=#{cc(package)}"
196
+ end
197
+
198
+ def dlltool_env
199
+ "DLLTOOL=#{dlltool}"
200
+ end
201
+
202
+ def build_packages
203
+ packages = @package.external_packages.select do |package|
204
+ package.windows.build?
205
+ end
206
+ # For backward compatibility
207
+ packages + @package.windows.build_packages
208
+ end
209
+
210
+ def dist_dir
211
+ @package.windows.absolute_binary_dir
212
+ end
213
+
214
+ def license_dir
215
+ dist_dir + "share" + "license"
216
+ end
217
+
218
+ def glib2_include_path
219
+ "#{glib2_binary_base_dir}/include"
220
+ end
221
+
222
+ def glib2_lib_path
223
+ "#{glib2_binary_base_dir}/lib"
224
+ end
225
+
226
+ def rcairo_dir
227
+ suffix = @package.windows.build_architecture_suffix
228
+ @package.project_root_dir.parent + "rcairo.#{suffix}"
229
+ end
230
+
231
+ def rcairo_pkgconfig_path
232
+ "#{rcairo_binary_base_dir}/lib/pkgconfig"
233
+ end
234
+
235
+ def rcairo_include_path
236
+ "#{rcairo_binary_base_dir}/include"
237
+ end
238
+
239
+ def rcairo_lib_path
240
+ "#{rcairo_binary_base_dir}/lib"
241
+ end
242
+
243
+ def cc(package)
244
+ cc_command_line = [
245
+ "#{@package.windows.build_host}-gcc",
246
+ *package.windows.cc_args,
247
+ ]
248
+ cc_command_line.compact.join(" ")
249
+ end
250
+
251
+ def cxx(package)
252
+ cxx_command_line = [
253
+ "#{@package.windows.build_host}-g++",
254
+ ]
255
+ cxx_command_line.compact.join(" ")
256
+ end
257
+
258
+ def dlltool
259
+ "#{@package.windows.build_host}-dlltool"
260
+ end
261
+
262
+ def cppflags(package)
263
+ include_paths = package.windows.include_paths
264
+ if @package.windows.build_dependencies.include?("glib2")
265
+ include_paths += [glib2_include_path]
266
+ end
267
+ include_paths += [
268
+ rcairo_include_path,
269
+ dist_dir + 'include',
270
+ ]
271
+ cppflags = include_paths.collect do |path|
272
+ "-I#{path}"
273
+ end
274
+ cppflags.join(" ")
275
+ end
276
+
277
+ def ldflags(package)
278
+ library_paths = package.windows.library_paths
279
+ if @package.windows.build_dependencies.include?("glib2")
280
+ library_paths += [glib2_lib_path]
281
+ end
282
+ library_paths += [
283
+ rcairo_lib_path,
284
+ dist_dir + 'lib',
285
+ ]
286
+ ldflags = library_paths.collect do |path|
287
+ "-L#{path}"
288
+ end
289
+ ldflags.join(" ")
290
+ end
291
+
292
+ def cmake_root_paths
293
+ paths = [
294
+ "/usr/#{@package.windows.build_host}",
295
+ rcairo_binary_base_dir.to_path,
296
+ ]
297
+ @package.windows.build_dependencies.each do |package|
298
+ paths << binary_base_dir(package).to_path
299
+ end
300
+ paths
301
+ end
302
+
303
+ def add_gobject_introspection_make_args(package, common_make_args)
304
+ return unless use_gobject_introspection?(package)
305
+
306
+ g_ir_scanner = "#{@package.project_root_dir}/gobject-introspection/"
307
+ g_ir_scanner << "#{@package.native.relative_binary_dir}/bin/g-ir-scanner"
308
+ introspection_scanner = "INTROSPECTION_SCANNER=#{g_ir_scanner}"
309
+ common_make_args << introspection_scanner
310
+
311
+
312
+ dependencies = [
313
+ "gobject-introspection",
314
+ @package.name,
315
+ ]
316
+ dependencies += @package.windows.gobject_introspection_dependencies
317
+
318
+ gi_base_dir = binary_base_dir("gobject-introspection")
319
+ introspection_compiler = "INTROSPECTION_COMPILER="
320
+ introspection_compiler << "#{gi_base_dir}/bin/g-ir-compiler.exe"
321
+ introspection_compiler_args = ""
322
+ dependencies.each do |dependent_package|
323
+ gir_dir = "#{binary_base_dir(dependent_package)}/share/gir-1.0"
324
+ introspection_compiler_args << " --includedir=#{gir_dir}"
325
+ end
326
+ if package.windows.gobject_introspection_compiler_split_args?
327
+ common_make_args << introspection_compiler
328
+ common_make_args <<
329
+ "INTROSPECTION_COMPILER_ARGS=#{introspection_compiler_args}"
330
+ common_make_args <<
331
+ "INTROSPECTION_COMPILER_OPTS=#{introspection_compiler_args}"
332
+ else
333
+ introspection_compiler << " #{introspection_compiler_args}"
334
+ common_make_args << introspection_compiler
335
+ end
336
+
337
+ common_make_args << dlltool_env
338
+
339
+ data_dirs = dependencies.collect do |dependent_package|
340
+ "#{binary_base_dir(dependent_package)}/share"
341
+ end
342
+ common_make_args << "XDG_DATA_DIRS=#{data_dirs.join(File::PATH_SEPARATOR)}"
343
+ end
344
+
345
+ def use_gobject_introspection?(package)
346
+ return false unless package.windows.use_gobject_introspection?
347
+ @package.windows.build_dependencies.include?("gobject-introspection")
348
+ end
349
+ end
350
+ end
351
+ end