glib2 3.3.8 → 3.3.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -429,6 +429,30 @@ rbgobj_gtype_to_ruby_class(GType gtype)
429
429
  return cinfo ? cinfo->klass : Qnil;
430
430
  }
431
431
 
432
+ GType
433
+ rbgobj_gtype_from_ruby(VALUE rb_gtype)
434
+ {
435
+ ID id_gtype;
436
+
437
+ if (RB_TYPE_P(rb_gtype, RUBY_T_STRING)) {
438
+ GType gtype;
439
+ gtype = g_type_from_name(RVAL2CSTR(rb_gtype));
440
+ if (gtype == G_TYPE_INVALID) {
441
+ rb_raise(rb_eArgError,
442
+ "unknown GType name: <%s>",
443
+ RVAL2CSTR(rb_gtype));
444
+ }
445
+ return gtype;
446
+ }
447
+
448
+ CONST_ID(id_gtype, "gtype");
449
+ if (rb_respond_to(rb_gtype, id_gtype)) {
450
+ rb_gtype = rb_funcall(rb_gtype, id_gtype, 0);
451
+ }
452
+
453
+ return NUM2ULONG(rb_gtype);
454
+ }
455
+
432
456
  VALUE
433
457
  rbgobj_define_class(GType gtype, const gchar *name, VALUE module,
434
458
  RGMarkFunc mark, RGFreeFunc free, VALUE parent)
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2011-2019 Ruby-GNOME Project Team
4
4
  * Copyright (C) 2002,2003 Masahiro Sakai
5
5
  *
6
6
  * This library is free software; you can redistribute it and/or
@@ -22,13 +22,21 @@
22
22
  #include "rbgprivate.h"
23
23
 
24
24
  /**********************************************************************/
25
- #define RG_TARGET_NAMESPACE rbgobj_cValue
25
+ static VALUE rb_cGLibValue;
26
+
27
+ #define RG_TARGET_NAMESPACE rb_cGLibValue
26
28
  #define _SELF(self) RVAL2GVALUE(self)
27
29
 
28
30
  static ID id_to_s;
29
31
  static GQuark qRValueToGValueFunc;
30
32
  static GQuark qGValueToRValueFunc;
31
33
 
34
+ gboolean
35
+ rbg_is_value(VALUE object)
36
+ {
37
+ return RVAL2CBOOL(rb_obj_is_kind_of(object, RG_TARGET_NAMESPACE));
38
+ }
39
+
32
40
  void
33
41
  rbgobj_register_r2g_func(GType gtype, RValueToGValueFunc func)
34
42
  {
@@ -395,8 +403,6 @@ rg_to_s(VALUE self)
395
403
  void
396
404
  Init_gobject_gvalue(void)
397
405
  {
398
- VALUE RG_TARGET_NAMESPACE;
399
-
400
406
  id_to_s = rb_intern("to_s");
401
407
  qRValueToGValueFunc = g_quark_from_static_string("__ruby_r2g_func__");
402
408
  qGValueToRValueFunc = g_quark_from_static_string("__ruby_g2r_func__");
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011-2019 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2011-2019 Ruby-GNOME Project Team
4
4
  * Copyright (C) 2006 Sjoerd Simons
5
5
  *
6
6
  * This library is free software; you can redistribute it and/or
@@ -63,11 +63,11 @@ value_array_from_ruby_body(VALUE value)
63
63
  }
64
64
 
65
65
  static G_GNUC_NORETURN VALUE
66
- value_array_from_ruby_rescue(VALUE value)
66
+ value_array_from_ruby_rescue(VALUE value, VALUE error)
67
67
  {
68
68
  g_value_array_free(((struct value_array_from_ruby_args *)value)->result);
69
69
 
70
- rb_exc_raise(rb_errinfo());
70
+ rb_exc_raise(error);
71
71
  }
72
72
 
73
73
  static void
@@ -1,7 +1,7 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011-2018 Ruby-GNOME2 Project Team
4
- * Copyright (C) 2003,2006 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2011-2019 Ruby-GNOME Project Team
4
+ * Copyright (C) 2003,2006 Ruby-GNOME Project Team
5
5
  * Copyright (C) 2002,2003 Masahiro Sakai
6
6
  *
7
7
  * This library is free software; you can redistribute it and/or
@@ -192,6 +192,7 @@ extern const RGObjClassInfo *rbgobj_lookup_class_by_gtype_full(GType gtype,
192
192
  VALUE parent,
193
193
  gboolean create_object);
194
194
  extern VALUE rbgobj_gtype_to_ruby_class(GType gtype);
195
+ extern GType rbgobj_gtype_from_ruby(VALUE rb_gtype);
195
196
  extern VALUE rbgobj_define_class(GType gtype, const gchar* name, VALUE module,
196
197
  RGMarkFunc mark, RGFreeFunc free, VALUE parent);
197
198
  extern VALUE rbgobj_define_class_dynamic(const gchar* gtype_name,
@@ -305,8 +306,10 @@ extern VALUE rbgobj_flags_alloc_func(VALUE klass);
305
306
  extern GType g_source_get_type(void);
306
307
  #endif
307
308
 
308
- #define G_TYPE_POLL_FD (g_poll_fd_get_type())
309
- extern GType g_poll_fd_get_type(void);
309
+ #if !GLIB_CHECK_VERSION(2, 36, 0)
310
+ #define G_TYPE_POLLFD (g_pollfd_get_type())
311
+ extern GType g_pollfd_get_type(void);
312
+ #endif
310
313
 
311
314
  /* rbglib_keyfile.c */
312
315
  #if !GLIB_CHECK_VERSION(2,31,2)
@@ -332,6 +335,7 @@ typedef struct {
332
335
 
333
336
  extern void rbgobj_convert_define(const RGConvertTable *table);
334
337
 
338
+
335
339
  G_END_DECLS
336
340
 
337
341
  #include "rbgcompat.h"
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2007-2019 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2007-2019 Ruby-GNOME Project Team
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -23,7 +23,6 @@
23
23
  /*
24
24
  * CentOS 6: GLib 2.28
25
25
  * CentOS 7: GLib 2.50
26
- * Ubuntu 14.04: GLib 2.40
27
26
  * Ubuntu 16.04: GLib 2.48
28
27
  * Ubuntu 18.04: GLib 2.54
29
28
  */
@@ -1,7 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
- * Copyright (C) 2007 Ruby-GNOME2 Project
3
+ * Copyright (C) 2007-2019 Ruby-GNOME2 Project Team
5
4
  *
6
5
  * This library is free software; you can redistribute it and/or
7
6
  * modify it under the terms of the GNU Lesser General Public
@@ -82,8 +81,9 @@ exec_callback(VALUE data)
82
81
  }
83
82
 
84
83
  static VALUE
85
- process_request(CallbackRequest *request)
84
+ process_request(void *user_data)
86
85
  {
86
+ CallbackRequest *request = user_data;
87
87
  g_mutex_lock(request->done_mutex);
88
88
  request->result = rbgutil_protect(exec_callback, (VALUE)request);
89
89
  g_cond_signal(request->done_cond);
@@ -93,7 +93,7 @@ process_request(CallbackRequest *request)
93
93
  }
94
94
 
95
95
  static VALUE
96
- mainloop(void)
96
+ mainloop(G_GNUC_UNUSED void *user_data)
97
97
  {
98
98
  for (;;) {
99
99
  CallbackRequest *request;
@@ -168,6 +168,7 @@ GType #{@enum_name}_get_type (void);
168
168
  end
169
169
  @targets << [path, EnumDefinition.parse(data, g_type_prefix, options)]
170
170
  end
171
+ @preamble = options[:preamble]
171
172
  end
172
173
 
173
174
  def create_enums(meth) # :nodoc:
@@ -186,6 +187,7 @@ GType #{@enum_name}_get_type (void);
186
187
  # Create a C source as a String.
187
188
  def create_c
188
189
  ret = "\n/* Generated by glib-mkenums.rb ($Id$) */ \n\n"
190
+ ret << "#{@preamble}\n" if @preamble
189
191
  ret << %Q[#include "#{@target_filename}.h"\n]
190
192
  @include_files.each do |file|
191
193
  ret << "#include <#{file}>\n"
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2018 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2018-2019 Ruby-GNOME Project Team
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -20,4 +20,10 @@ module GLib
20
20
  define_deprecated_singleton_method :remove,
21
21
  warn: "Use 'GLib::Source.remove(id)'."
22
22
  end
23
+
24
+ class Param
25
+ extend GLib::Deprecatable
26
+ define_deprecated_const(:PRIVATE, :STATIC_NAME)
27
+ define_deprecated_method(:private?, :static_name?)
28
+ end
23
29
  end
@@ -0,0 +1,478 @@
1
+ # Copyright (C) 2003-2019 Ruby-GNOME Project Team
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+
17
+ require 'English'
18
+ require 'mkmf'
19
+ require 'pkg-config'
20
+ require 'glib-mkenums'
21
+ require "native-package-installer"
22
+
23
+ $CFLAGS += " #{ENV['CFLAGS']}" if ENV['CFLAGS']
24
+
25
+ def gcc?
26
+ CONFIG["GCC"] == "yes"
27
+ end
28
+
29
+ def disable_optimization_build_flag(flags)
30
+ if gcc?
31
+ RbConfig.expand(flags.dup).gsub(/(^|\s)?-O\d(\s|$)?/, '\\1-O0\\2')
32
+ else
33
+ flags
34
+ end
35
+ end
36
+
37
+ def enable_debug_build_flag(flags)
38
+ if gcc?
39
+ expanded_flags = RbConfig.expand(flags.dup)
40
+ debug_option_pattern = /(^|\s)-g\d?(\s|$)/
41
+ if debug_option_pattern =~ expanded_flags
42
+ expanded_flags.gsub(debug_option_pattern, '\\1-g3\\2')
43
+ else
44
+ flags + " -g3"
45
+ end
46
+ else
47
+ flags
48
+ end
49
+ end
50
+
51
+ checking_for(checking_message("--enable-debug-build option")) do
52
+ enable_debug_build = enable_config("debug-build", false)
53
+ if enable_debug_build
54
+ $CFLAGS = disable_optimization_build_flag($CFLAGS)
55
+ $CFLAGS = enable_debug_build_flag($CFLAGS)
56
+
57
+ $CXXFLAGS = disable_optimization_build_flag($CXXFLAGS)
58
+ $CXXFLAGS = enable_debug_build_flag($CXXFLAGS)
59
+ end
60
+ enable_debug_build
61
+ end
62
+
63
+ def try_compiler_option(opt, &block)
64
+ checking_for "#{opt} option to compiler" do
65
+ if try_compile '', opt + " -Werror", &block
66
+ $CFLAGS += " #{opt}"
67
+ true
68
+ else
69
+ false
70
+ end
71
+ end
72
+ end
73
+
74
+ try_compiler_option '-Wall'
75
+ try_compiler_option '-Waggregate-return'
76
+ try_compiler_option '-Wcast-align'
77
+ # NOTE: Generates way too many false positives.
78
+ # try_compiler_option '-Wconversion'
79
+ try_compiler_option '-Wextra'
80
+ try_compiler_option '-Wformat=2'
81
+ try_compiler_option '-Winit-self'
82
+ # NOTE: This generates warnings for functions defined in ruby.h.
83
+ # try_compiler_option '-Winline'
84
+ try_compiler_option '-Wlarger-than-65500'
85
+ try_compiler_option '-Wmissing-declarations'
86
+ try_compiler_option '-Wmissing-format-attribute'
87
+ try_compiler_option '-Wmissing-include-dirs'
88
+ try_compiler_option '-Wmissing-noreturn'
89
+ try_compiler_option '-Wmissing-prototypes'
90
+ try_compiler_option '-Wnested-externs'
91
+ try_compiler_option '-Wold-style-definition'
92
+ try_compiler_option '-Wpacked'
93
+ try_compiler_option '-Wp,-D_FORTIFY_SOURCE=2'
94
+ try_compiler_option '-Wpointer-arith'
95
+ # NOTE: ruby.h and intern.h have too many of these.
96
+ # try_compiler_option '-Wredundant-decls'
97
+ # NOTE: Complains about index, for example.
98
+ # try_compiler_option '-Wshadow'
99
+ try_compiler_option '-Wundef'
100
+ # NOTE: Incredible amounts of false positives.
101
+ #try_compiler_option '-Wunreachable-code'
102
+ try_compiler_option '-Wout-of-line-declaration'
103
+ try_compiler_option '-Wunsafe-loop-optimizations'
104
+ try_compiler_option '-Wwrite-strings'
105
+
106
+ if /-Wl,--no-undefined/ =~ $LDFLAGS.to_s
107
+ $LDFLAGS.gsub!(/-Wl,--no-undefined/, '')
108
+ end
109
+
110
+ include_path = nil
111
+ if ENV['GTK_BASEPATH'] and /cygwin/ !~ RUBY_PLATFORM
112
+ include_path = (ENV['GTK_BASEPATH'] + "\\INCLUDE").gsub("\\", "/")
113
+ # $hdrdir += " -I#{include_path} "
114
+ $INCFLAGS += " -I#{include_path} "
115
+ end
116
+
117
+ def windows_platform?
118
+ /cygwin|mingw|mswin/ === RUBY_PLATFORM
119
+ end
120
+
121
+ # For backward compatibility
122
+ def setup_windows(target_name, base_dir=nil)
123
+ checking_for(checking_message("Windows")) do
124
+ windows_platform?
125
+ end
126
+ end
127
+ # For backward compatibility
128
+ def setup_win32(*args, &block)
129
+ setup_windows(*args, &block)
130
+ end
131
+
132
+ def find_gem_spec(package)
133
+ begin
134
+ Gem::Specification.find_by_name(package)
135
+ rescue LoadError
136
+ nil
137
+ end
138
+ end
139
+
140
+ def setup_homebrew
141
+ checking_for(checking_message("Homebrew")) do
142
+ platform = NativePackageInstaller::Platform.detect
143
+ if platform.is_a?(NativePackageInstaller::Platform::Homebrew)
144
+ libffi_prefix = `brew --prefix libffi`.chomp
145
+ PKGConfig.add_path("#{libffi_prefix}/lib/pkgconfig")
146
+ true
147
+ else
148
+ false
149
+ end
150
+ end
151
+ end
152
+
153
+ setup_homebrew
154
+
155
+ #add_depend_package("glib2", "ext/glib2", "/...../ruby-gnome2")
156
+ def add_depend_package(target_name, target_srcdir, top_srcdir, options={})
157
+ gem_spec = find_gem_spec(target_name)
158
+ if gem_spec
159
+ target_source_dir = File.join(gem_spec.full_gem_path, "ext/#{target_name}")
160
+ target_build_dir = target_source_dir
161
+ add_depend_package_path(target_name,
162
+ target_source_dir,
163
+ target_build_dir)
164
+ end
165
+
166
+ [top_srcdir,
167
+ File.join(top_srcdir, target_name),
168
+ $configure_args['--topdir'],
169
+ File.join($configure_args['--topdir'], target_name)].each do |topdir|
170
+ topdir = File.expand_path(topdir)
171
+ target_source_dir_full_path = File.join(topdir, target_srcdir)
172
+
173
+ top_build_dir = options[:top_build_dir] || topdir
174
+ target_build_dir = options[:target_build_dir] || target_srcdir
175
+ target_build_dir_full_path = File.join(top_build_dir, target_build_dir)
176
+ unless File.exist?(target_build_dir_full_path)
177
+ target_build_dir_full_path = File.join(top_build_dir, target_srcdir)
178
+ end
179
+ unless File.exist?(target_build_dir_full_path)
180
+ target_build_dir_full_path = File.join(topdir, target_build_dir)
181
+ end
182
+ unless File.exist?(target_build_dir_full_path)
183
+ target_build_dir_full_path = File.join(topdir, target_srcdir)
184
+ end
185
+ add_depend_package_path(target_name,
186
+ target_source_dir_full_path,
187
+ target_build_dir_full_path)
188
+ end
189
+ end
190
+
191
+ def add_depend_package_path(target_name, target_source_dir, target_build_dir)
192
+ if File.exist?(target_source_dir)
193
+ $INCFLAGS = "-I#{target_source_dir} #{$INCFLAGS}"
194
+ end
195
+
196
+ return unless File.exist?(target_build_dir)
197
+ if target_source_dir != target_build_dir
198
+ $INCFLAGS = "-I#{target_build_dir} #{$INCFLAGS}"
199
+ end
200
+
201
+ library_base_name = target_name.gsub(/-/, "_")
202
+ case RUBY_PLATFORM
203
+ when /cygwin|mingw/
204
+ $libs << " " << File.join(target_build_dir, "#{library_base_name}.so")
205
+ when /mswin/
206
+ $DLDFLAGS << " /libpath:#{target_build_dir}"
207
+ $libs << " #{library_base_name}-$(arch).lib"
208
+ end
209
+ end
210
+
211
+ def add_distcleanfile(file)
212
+ $distcleanfiles ||= []
213
+ $distcleanfiles << file
214
+ end
215
+
216
+ def create_pkg_config_file(package_name, c_package,
217
+ version=nil, pc_file_name=nil)
218
+ pc_file_name ||= "#{package_name.downcase.sub(/\//, '-')}.pc"
219
+ version ||= ruby_gnome_version || PKGConfig.modversion(c_package)
220
+
221
+ puts "creating #{pc_file_name}"
222
+
223
+ File.open(pc_file_name, 'w') do |pc_file|
224
+ if package_name.nil?
225
+ c_module_name = PKGConfig.name(c_package)
226
+ package_name = "Ruby/#{c_module_name}" if c_module_name
227
+ end
228
+ pc_file.puts("Name: #{package_name}") if package_name
229
+
230
+ description = PKGConfig.description(c_package)
231
+ pc_file.puts("Description: Ruby bindings for #{description}") if description
232
+ pc_file.printf("Version: #{version}")
233
+ end
234
+
235
+ add_distcleanfile(pc_file_name)
236
+ end
237
+
238
+ def ruby_gnome_version(glib_source_directory=nil)
239
+ glib_source_directory ||= File.join(File.dirname(__FILE__), "..",
240
+ "ext", "glib2")
241
+ rbglib_h = File.join(glib_source_directory, "rbglib.h")
242
+ return nil unless File.exist?(rbglib_h)
243
+
244
+ version = nil
245
+ File.open(rbglib_h) do |h_file|
246
+ version_info = {}
247
+ h_file.each_line do |line|
248
+ case line
249
+ when /\A#define RBGLIB_(MAJOR|MINOR|MICRO)_VERSION\s+(\d+)/
250
+ version_info[$1] = $2
251
+ end
252
+ end
253
+ version_info = [version_info["MAJOR"],
254
+ version_info["MINOR"],
255
+ version_info["MICRO"]].compact
256
+ version = version_info.join(".") if version_info.size == 3
257
+ end
258
+
259
+ version
260
+ end
261
+
262
+ def ruby_gnome2_version(*args)
263
+ warn("ruby_gnome2_version is deprecated. Use ruby_gnome_version instead.")
264
+ ruby_gnome_version(*args)
265
+ end
266
+
267
+ def ensure_objs
268
+ return unless $objs.nil?
269
+
270
+ source_dir = '$(srcdir)'
271
+ RbConfig.expand(source_dir)
272
+
273
+ pattern = "*.{#{SRC_EXT.join(',')}}"
274
+ srcs = Dir[File.join(source_dir, pattern)]
275
+ srcs |= Dir[File.join(".", pattern)]
276
+ $objs = srcs.collect do |f|
277
+ File.basename(f, ".*") + ".o"
278
+ end.uniq
279
+ end
280
+
281
+ def create_makefile_at_srcdir(pkg_name, srcdir, defs = nil)
282
+ base_dir = File.basename(Dir.pwd)
283
+ last_common_index = srcdir.rindex(base_dir)
284
+ if last_common_index
285
+ builddir = srcdir[(last_common_index + base_dir.size + 1)..-1]
286
+ end
287
+ builddir ||= "."
288
+ FileUtils.mkdir_p(builddir)
289
+
290
+ Dir.chdir(builddir) do
291
+ yield if block_given?
292
+
293
+ $defs << defs if defs
294
+ ensure_objs
295
+ create_makefile(pkg_name, srcdir)
296
+ end
297
+ end
298
+
299
+ def run_make_in_sub_dirs_command(command, sub_dirs)
300
+ if /mswin/ =~ RUBY_PLATFORM
301
+ sub_dirs.collect do |dir|
302
+ <<-EOM.chmop
303
+ @cd #{dir}
304
+ @nmake -nologo DESTDIR=$(DESTDIR) #{command}
305
+ @cd ..
306
+ EOM
307
+ end.join("\n")
308
+ else
309
+ sub_dirs.collect do |dir|
310
+ "\t@cd #{dir}; $(MAKE) #{command}"
311
+ end.join("\n")
312
+ end
313
+ end
314
+
315
+ def create_top_makefile(sub_dirs=["src"])
316
+ File.open("Makefile", "w") do |makefile|
317
+ makefile.print(<<-EOM)
318
+ all:
319
+ #{run_make_in_sub_dirs_command("all", sub_dirs)}
320
+
321
+ install:
322
+ #{run_make_in_sub_dirs_command("install", sub_dirs)}
323
+
324
+ site-install:
325
+ #{run_make_in_sub_dirs_command("site-install", sub_dirs)}
326
+
327
+ clean:
328
+ #{run_make_in_sub_dirs_command("clean", sub_dirs)}
329
+ EOM
330
+
331
+ if /mswin/ =~ RUBY_PLATFORM
332
+ makefile.print(<<-EOM)
333
+ @if exist extconf.h del extconf.h
334
+ @if exist conftest.* del conftest.*
335
+ @if exist *.lib del *.lib
336
+ @if exist *~ del *~
337
+ @if exist mkmf.log del mkmf.log
338
+ EOM
339
+ else
340
+ makefile.print(<<-EOM)
341
+
342
+ distclean: clean
343
+ #{run_make_in_sub_dirs_command("distclean", sub_dirs)}
344
+ @rm -f Makefile extconf.h conftest.*
345
+ @rm -f core *~ mkmf.log
346
+ EOM
347
+ end
348
+ end
349
+ end
350
+
351
+ # This is used for the library which doesn't support version info.
352
+ def make_version_header(app_name, pkgname, dir = "src")
353
+ version = PKGConfig.modversion(pkgname).split(/\./)
354
+ (0..2).each do |v|
355
+ version[v] = "0" unless version[v]
356
+ if /\A(\d+)/ =~ version[v]
357
+ number = $1
358
+ tag = $POSTMATCH
359
+ unless tag.empty?
360
+ version[v] = number
361
+ version[3] = tag
362
+ end
363
+ end
364
+ end
365
+ filename = "rb#{app_name.downcase}version.h"
366
+
367
+ puts "creating #{filename}"
368
+
369
+ add_distcleanfile(filename)
370
+
371
+ FileUtils.mkdir_p(dir)
372
+ out = File.open(File.join(dir, filename), "w")
373
+
374
+ version_definitions = []
375
+ ["MAJOR", "MINOR", "MICRO", "TAG"].each_with_index do |type, i|
376
+ _version = version[i]
377
+ next if _version.nil?
378
+ version_definitions << "#define #{app_name}_#{type}_VERSION (#{_version})"
379
+ end
380
+ out.print %Q[/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
381
+ /************************************************
382
+
383
+ #{filename} -
384
+
385
+ This file was generated by mkmf-gnome.rb.
386
+
387
+ ************************************************/
388
+
389
+ #ifndef __RB#{app_name}_VERSION_H__
390
+ #define __RB#{app_name}_VERSION_H__
391
+
392
+ #{version_definitions.join("\n")}
393
+
394
+ #define #{app_name}_CHECK_VERSION(major,minor,micro) \\
395
+ (#{app_name}_MAJOR_VERSION > (major) || \\
396
+ (#{app_name}_MAJOR_VERSION == (major) && #{app_name}_MINOR_VERSION > (minor)) || \\
397
+ (#{app_name}_MAJOR_VERSION == (major) && #{app_name}_MINOR_VERSION == (minor) && \\
398
+ #{app_name}_MICRO_VERSION >= (micro)))
399
+
400
+
401
+ #endif /* __RB#{app_name}_VERSION_H__ */
402
+ ]
403
+ out.close
404
+ end
405
+
406
+ def add_obj(name)
407
+ ensure_objs
408
+ $objs << name unless $objs.index(name)
409
+ end
410
+
411
+ def glib_mkenums(prefix, files, g_type_prefix, include_files, options={})
412
+ add_distcleanfile(prefix + ".h")
413
+ add_distcleanfile(prefix + ".c")
414
+ GLib::MkEnums.create(prefix, files, g_type_prefix, include_files, options)
415
+ add_obj("#{prefix}.o")
416
+ end
417
+
418
+ def check_cairo(options={})
419
+ rcairo_source_dir = options[:rcairo_source_dir]
420
+ if rcairo_source_dir.nil?
421
+ rcairo_source_base_dir = "rcairo"
422
+ top_dir = options[:top_dir]
423
+ if top_dir
424
+ rcairo_source_dir = File.join(top_dir, "..", rcairo_source_base_dir)
425
+ end
426
+ end
427
+
428
+ if rcairo_source_dir and !File.exist?(rcairo_source_dir)
429
+ rcairo_source_dir = nil
430
+ end
431
+ if rcairo_source_dir.nil?
432
+ cairo_gem_spec = find_gem_spec("cairo")
433
+ rcairo_source_dir = cairo_gem_spec.full_gem_path if cairo_gem_spec
434
+ end
435
+
436
+ unless rcairo_source_dir.nil?
437
+ options = {}
438
+ build_dir = "tmp/#{RUBY_PLATFORM}/cairo/#{RUBY_VERSION}"
439
+ if File.exist?(File.join(rcairo_source_dir, build_dir))
440
+ options[:target_build_dir] = build_dir
441
+ end
442
+ add_depend_package("cairo", "ext/cairo", rcairo_source_dir, options)
443
+ end
444
+
445
+ PKGConfig.have_package("cairo") and have_header("rb_cairo.h")
446
+ end
447
+
448
+ def install_missing_native_package(native_package_info)
449
+ NativePackageInstaller.install(native_package_info)
450
+ end
451
+
452
+ def required_pkg_config_package(package_info, native_package_info=nil)
453
+ if package_info.is_a?(Array)
454
+ required_package_info = package_info
455
+ else
456
+ required_package_info = [package_info]
457
+ end
458
+ return true if PKGConfig.have_package(*required_package_info)
459
+
460
+ native_package_info ||= {}
461
+ return false unless install_missing_native_package(native_package_info)
462
+
463
+ PKGConfig.have_package(*required_package_info)
464
+ end
465
+
466
+ add_include_path = Proc.new do |dir_variable|
467
+ value = RbConfig::CONFIG[dir_variable]
468
+ if value and File.exist?(value)
469
+ $INCFLAGS << " -I$(#{dir_variable}) "
470
+ end
471
+ end
472
+
473
+ add_include_path.call("sitearchdir")
474
+ add_include_path.call("vendorarchdir")
475
+
476
+ if /mingw/ =~ RUBY_PLATFORM
477
+ $ruby.gsub!('\\', '/')
478
+ end