glib2 3.4.3 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/ext/glib2/extconf.rb +1 -5
  4. data/ext/glib2/glib-enum-types.c +1233 -0
  5. data/ext/glib2/glib-enum-types.h +154 -0
  6. data/ext/glib2/glib2.def +2 -0
  7. data/ext/glib2/rbglib-bytes.c +1 -5
  8. data/ext/glib2/rbglib-gc.c +98 -52
  9. data/ext/glib2/rbglib-variant-type.c +1 -5
  10. data/ext/glib2/rbglib-variant.c +6 -7
  11. data/ext/glib2/rbglib.c +68 -1
  12. data/ext/glib2/rbglib.h +13 -3
  13. data/ext/glib2/rbglib_bookmarkfile.c +1 -1
  14. data/ext/glib2/rbglib_datetime.c +1 -5
  15. data/ext/glib2/rbglib_error.c +39 -12
  16. data/ext/glib2/rbglib_fileutils.c +1 -17
  17. data/ext/glib2/rbglib_iochannel.c +4 -4
  18. data/ext/glib2/rbglib_keyfile.c +1 -35
  19. data/ext/glib2/rbglib_maincontext.c +6 -32
  20. data/ext/glib2/rbglib_mainloop.c +2 -17
  21. data/ext/glib2/rbglib_matchinfo.c +1 -5
  22. data/ext/glib2/rbglib_messages.c +4 -5
  23. data/ext/glib2/rbglib_pollfd.c +1 -25
  24. data/ext/glib2/rbglib_regex.c +1 -13
  25. data/ext/glib2/rbglib_source.c +1 -39
  26. data/ext/glib2/rbglib_spawn.c +5 -10
  27. data/ext/glib2/rbglib_spawnerror.c +2 -2
  28. data/ext/glib2/rbglib_threads.c +2 -15
  29. data/ext/glib2/rbglib_timezone.c +1 -5
  30. data/ext/glib2/rbglib_unichar.c +46 -5
  31. data/ext/glib2/rbglib_unicode.c +1 -18
  32. data/ext/glib2/rbglib_utils.c +1 -14
  33. data/ext/glib2/rbglib_win32.c +3 -7
  34. data/ext/glib2/rbgobj_binding.c +1 -7
  35. data/ext/glib2/rbgobj_boxed.c +1 -1
  36. data/ext/glib2/rbgobj_closure.c +22 -9
  37. data/ext/glib2/rbgobj_enums.c +3 -2
  38. data/ext/glib2/rbgobj_flags.c +1 -1
  39. data/ext/glib2/rbgobj_object.c +117 -106
  40. data/ext/glib2/rbgobj_param.c +3 -9
  41. data/ext/glib2/rbgobj_paramspecs.c +6 -24
  42. data/ext/glib2/rbgobj_signal.c +105 -93
  43. data/ext/glib2/rbgobj_strv.c +2 -2
  44. data/ext/glib2/rbgobj_type.c +58 -67
  45. data/ext/glib2/rbgobj_typeinterface.c +38 -2
  46. data/ext/glib2/rbgobj_value.c +23 -8
  47. data/ext/glib2/rbgobj_valuetypes.c +14 -62
  48. data/ext/glib2/rbgobject.c +4 -6
  49. data/ext/glib2/rbgobject.h +2 -27
  50. data/ext/glib2/rbgprivate.h +10 -6
  51. data/ext/glib2/rbgutil.h +3 -2
  52. data/ext/glib2/rbgutil_callback.c +30 -27
  53. data/lib/glib2/deprecated.rb +22 -1
  54. data/lib/glib2.rb +54 -3
  55. data/lib/mkmf-gnome.rb +7 -6
  56. data/test/glib-test-utils.rb +22 -3
  57. data/test/run-test.rb +49 -15
  58. data/test/test-binding.rb +1 -11
  59. data/test/test-bytes.rb +1 -5
  60. data/test/test-date-time.rb +1 -3
  61. data/test/{glib-test-init.rb → test-error.rb} +25 -3
  62. data/test/test-file-utils.rb +1 -32
  63. data/test/test-iochannel.rb +3 -5
  64. data/test/test-key-file.rb +5 -6
  65. data/test/test-match-info.rb +1 -5
  66. data/test/test-regex.rb +1 -5
  67. data/test/test-source.rb +1 -14
  68. data/test/test-spawn.rb +4 -1
  69. data/test/test-time-zone.rb +1 -5
  70. data/test/test-timeout.rb +2 -3
  71. data/test/test-unicode.rb +16 -12
  72. data/test/test-utils.rb +2 -8
  73. data/test/test-variant-type.rb +1 -3
  74. data/test/test-win32.rb +6 -6
  75. metadata +6 -5
  76. data/ext/glib2/rbgobj_valuearray.c +0 -100
@@ -1,7 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011-2019 Ruby-GNOME Project Team
4
- * Copyright (C) 2003,2006 Ruby-GNOME Project Team
3
+ * Copyright (C) 2003-2021 Ruby-GNOME Project Team
5
4
  * Copyright (C) 2002,2003 Masahiro Sakai
6
5
  *
7
6
  * This library is free software; you can redistribute it and/or
@@ -206,6 +205,7 @@ extern void rbgobj_register_mark_func(GType gtype, RGMarkFunc mark);
206
205
  extern void rbgobj_register_free_func(GType gtype, RGFreeFunc free);
207
206
  extern VALUE rbgobj_cType;
208
207
  extern VALUE rbgobj_gtype_new(GType gtype);
208
+ /* Deprecated. Use rbgobj_gtype_from_ruby() instead. */
209
209
  extern GType rbgobj_gtype_get(VALUE obj);
210
210
 
211
211
  /* rbgobj_signal.c */
@@ -292,31 +292,6 @@ extern VALUE rbgobj_enum_alloc_func(VALUE klass);
292
292
  extern VALUE rbgobj_flags_alloc_func(VALUE klass);
293
293
 
294
294
 
295
- /* rbglib_mainloop.c */
296
- #if !GLIB_CHECK_VERSION(2,30,0)
297
- #define G_TYPE_MAIN_LOOP (g_main_loop_get_type())
298
- extern GType g_main_loop_get_type(void);
299
- #endif
300
-
301
- /* rbglib_maincontext.c */
302
- #if !GLIB_CHECK_VERSION(2,30,0)
303
- #define G_TYPE_MAIN_CONTEXT (g_main_context_get_type())
304
- #define G_TYPE_SOURCE (g_source_get_type())
305
- extern GType g_main_context_get_type(void);
306
- extern GType g_source_get_type(void);
307
- #endif
308
-
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
313
-
314
- /* rbglib_keyfile.c */
315
- #if !GLIB_CHECK_VERSION(2,31,2)
316
- #define G_TYPE_KEY_FILE (g_key_file_get_type())
317
- extern GType g_key_file_get_type(void);
318
- #endif
319
-
320
295
  /* rbgobj_convert.c */
321
296
  typedef struct {
322
297
  GType type;
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2007-2019 Ruby-GNOME Project Team
3
+ * Copyright (C) 2007-2021 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
@@ -21,12 +21,13 @@
21
21
  #pragma once
22
22
 
23
23
  /*
24
- * CentOS 6: GLib 2.28
25
24
  * CentOS 7: GLib 2.50
25
+ * CentOS 8: GLib 2.56
26
26
  * Ubuntu 16.04: GLib 2.48
27
- * Ubuntu 18.04: GLib 2.54
27
+ * Ubuntu 18.04: GLib 2.56
28
+ * Ubuntu 20.04: GLib 2.64
28
29
  */
29
- #define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_28
30
+ #define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_48
30
31
 
31
32
  #include "rbgobject.h"
32
33
 
@@ -42,6 +43,10 @@
42
43
  # define G_VALUE_INIT { 0, { { 0 } } }
43
44
  #endif
44
45
 
46
+ #ifndef RUBY_TYPED_FROZEN_SHAREABLE
47
+ # define RUBY_TYPED_FROZEN_SHAREABLE 0
48
+ #endif
49
+
45
50
  G_BEGIN_DECLS
46
51
 
47
52
  typedef struct {
@@ -58,7 +63,7 @@ typedef struct {
58
63
  GType type;
59
64
  } boxed_holder;
60
65
 
61
- G_GNUC_INTERNAL extern GStaticPrivate rg_polling_key;
66
+ G_GNUC_INTERNAL extern GPrivate rg_polling_key;
62
67
  G_GNUC_INTERNAL extern rb_encoding *rbg_filename_encoding;
63
68
 
64
69
  extern VALUE rbgobj_cEnum;
@@ -181,7 +186,6 @@ G_GNUC_INTERNAL void Init_gobject_gvalue(void);
181
186
  G_GNUC_INTERNAL void Init_gobject_gvaluetypes(void);
182
187
  G_GNUC_INTERNAL void Init_gobject_gboxed(void);
183
188
  G_GNUC_INTERNAL void Init_gobject_gstrv(void);
184
- G_GNUC_INTERNAL void Init_gobject_value_array(void);
185
189
  G_GNUC_INTERNAL void Init_gobject_genumflags(void);
186
190
  G_GNUC_INTERNAL void Init_gobject_genums(void);
187
191
  G_GNUC_INTERNAL void Init_gobject_gflags(void);
data/ext/glib2/rbgutil.h CHANGED
@@ -1,7 +1,7 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2011-2015 Ruby-GNOME2 Project Team
4
- * Copyright (C) 2002,2003 Masao Mutoh
3
+ * Copyright (C) 2011-2022 Ruby-GNOME Project Team
4
+ * Copyright (C) 2002,2003 Masao Mutoh
5
5
  *
6
6
  * This library is free software; you can redistribute it and/or
7
7
  * modify it under the terms of the GNU Lesser General Public
@@ -92,6 +92,7 @@ extern void rbg_define_singleton_method(VALUE obj, const char *name, VALUE (*fun
92
92
  extern VALUE rbgutil_def_setters(VALUE klass);
93
93
  extern void rbgutil_set_properties(VALUE self, VALUE hash);
94
94
  extern VALUE rbgutil_protect(VALUE (*proc) (VALUE), VALUE data);
95
+ extern void rbgutil_on_callback_error(VALUE error);
95
96
  extern VALUE rbgutil_invoke_callback(VALUE (*func)(VALUE), VALUE arg);
96
97
  extern void rbgutil_start_callback_dispatch_thread(void);
97
98
  extern void rbgutil_stop_callback_dispatch_thread(void);
@@ -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-2022 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
@@ -49,10 +49,16 @@ rbgutil_protect(VALUE (*func) (VALUE), VALUE data)
49
49
  VALUE ret = rb_protect(func, data, &state);
50
50
  VALUE e = rb_errinfo();
51
51
  if (state && !NIL_P(e))
52
- rb_funcall(mGLib, id_exit_application, 2, e, INT2NUM(EXIT_FAILURE));
52
+ rbgutil_on_callback_error(e);
53
53
  return ret;
54
54
  }
55
55
 
56
+ void
57
+ rbgutil_on_callback_error(VALUE error)
58
+ {
59
+ rb_funcall(mGLib, id_exit_application, 2, error, INT2NUM(EXIT_FAILURE));
60
+ }
61
+
56
62
  /**********************************************************************/
57
63
 
58
64
  #ifdef HAVE_NATIVETHREAD
@@ -61,11 +67,11 @@ typedef struct _CallbackRequest {
61
67
  VALUE (*function)(VALUE);
62
68
  VALUE argument;
63
69
  VALUE result;
64
- GMutex *done_mutex;
65
- GCond *done_cond;
70
+ GMutex done_mutex;
71
+ GCond done_cond;
66
72
  } CallbackRequest;
67
73
 
68
- static GMutex *callback_dispatch_thread_mutex = NULL;
74
+ static GMutex callback_dispatch_thread_mutex;
69
75
  static GAsyncQueue *callback_request_queue = NULL;
70
76
  static ID id_callback_dispatch_thread;
71
77
  static gint callback_pipe_fds[2] = {-1, -1};
@@ -84,10 +90,10 @@ static VALUE
84
90
  process_request(void *user_data)
85
91
  {
86
92
  CallbackRequest *request = user_data;
87
- g_mutex_lock(request->done_mutex);
93
+ g_mutex_lock(&(request->done_mutex));
88
94
  request->result = rbgutil_protect(exec_callback, (VALUE)request);
89
- g_cond_signal(request->done_cond);
90
- g_mutex_unlock(request->done_mutex);
95
+ g_cond_signal(&(request->done_cond));
96
+ g_mutex_unlock(&(request->done_mutex));
91
97
 
92
98
  return Qnil;
93
99
  }
@@ -146,30 +152,30 @@ invoke_callback_in_ruby_thread(VALUE (*func)(VALUE), VALUE arg)
146
152
  {
147
153
  CallbackRequest request;
148
154
 
149
- g_mutex_lock(callback_dispatch_thread_mutex);
155
+ g_mutex_lock(&callback_dispatch_thread_mutex);
150
156
  if (callback_pipe_fds[0] == -1) {
151
157
  g_error("Please call rbgutil_start_callback_dispatch_thread() "
152
158
  "to dispatch a callback from non-ruby thread before "
153
159
  "callbacks are requested from non-ruby thread.");
154
- g_mutex_unlock(callback_dispatch_thread_mutex);
160
+ g_mutex_unlock(&callback_dispatch_thread_mutex);
155
161
  return Qnil;
156
162
  }
157
163
 
158
164
  request.function = func;
159
165
  request.argument = arg;
160
166
  request.result = Qnil;
161
- request.done_mutex = g_mutex_new();
162
- request.done_cond = g_cond_new();
167
+ g_mutex_init(&(request.done_mutex));
168
+ g_cond_init(&(request.done_cond));
163
169
 
164
- g_mutex_lock(request.done_mutex);
170
+ g_mutex_lock(&(request.done_mutex));
165
171
  queue_callback_request(&request);
166
- g_mutex_unlock(callback_dispatch_thread_mutex);
172
+ g_mutex_unlock(&callback_dispatch_thread_mutex);
167
173
 
168
- g_cond_wait(request.done_cond, request.done_mutex);
169
- g_mutex_unlock(request.done_mutex);
174
+ g_cond_wait(&(request.done_cond), &(request.done_mutex));
175
+ g_mutex_unlock(&(request.done_mutex));
170
176
 
171
- g_cond_free(request.done_cond);
172
- g_mutex_free(request.done_mutex);
177
+ g_cond_clear(&(request.done_cond));
178
+ g_mutex_clear(&(request.done_mutex));
173
179
 
174
180
 
175
181
  return request.result;
@@ -195,7 +201,7 @@ rbgutil_invoke_callback(VALUE (*func)(VALUE), VALUE arg)
195
201
  {
196
202
  #ifdef HAVE_NATIVETHREAD
197
203
  if (ruby_native_thread_p()) {
198
- if (!GPOINTER_TO_INT(g_static_private_get(&rg_polling_key))) {
204
+ if (!GPOINTER_TO_INT(g_private_get(&rg_polling_key))) {
199
205
  return rbgutil_protect(func, arg);
200
206
  }
201
207
  # ifdef HAVE_RB_THREAD_CALL_WITH_GVL
@@ -221,7 +227,7 @@ rbgutil_start_callback_dispatch_thread(void)
221
227
  #ifdef HAVE_NATIVETHREAD
222
228
  VALUE callback_dispatch_thread;
223
229
 
224
- g_mutex_lock(callback_dispatch_thread_mutex);
230
+ g_mutex_lock(&callback_dispatch_thread_mutex);
225
231
  callback_dispatch_thread = rb_ivar_get(mGLib, id_callback_dispatch_thread);
226
232
  if (NIL_P(callback_dispatch_thread)) {
227
233
  if (pipe(callback_pipe_fds) == -1)
@@ -231,7 +237,7 @@ rbgutil_start_callback_dispatch_thread(void)
231
237
  rb_ivar_set(mGLib, id_callback_dispatch_thread,
232
238
  callback_dispatch_thread);
233
239
  }
234
- g_mutex_unlock(callback_dispatch_thread_mutex);
240
+ g_mutex_unlock(&callback_dispatch_thread_mutex);
235
241
  #endif
236
242
  }
237
243
 
@@ -241,13 +247,13 @@ rbgutil_stop_callback_dispatch_thread(void)
241
247
  #ifdef HAVE_NATIVETHREAD
242
248
  VALUE callback_dispatch_thread;
243
249
 
244
- g_mutex_lock(callback_dispatch_thread_mutex);
250
+ g_mutex_lock(&callback_dispatch_thread_mutex);
245
251
  callback_dispatch_thread = rb_ivar_get(mGLib, id_callback_dispatch_thread);
246
252
  if (!NIL_P(callback_dispatch_thread)) {
247
253
  queue_callback_request(NULL);
248
254
  rb_ivar_set(mGLib, id_callback_dispatch_thread, Qnil);
249
255
  }
250
- g_mutex_unlock(callback_dispatch_thread_mutex);
256
+ g_mutex_unlock(&callback_dispatch_thread_mutex);
251
257
  #endif
252
258
  }
253
259
 
@@ -260,13 +266,10 @@ Init_gutil_callback(void)
260
266
  rb_eRuntimeError);
261
267
 
262
268
  #ifdef HAVE_NATIVETHREAD
263
- if (!g_thread_supported())
264
- g_thread_init(NULL);
265
-
266
269
  id_callback_dispatch_thread = rb_intern("callback_dispatch_thread");
267
270
  rb_ivar_set(mGLib, id_callback_dispatch_thread, Qnil);
268
271
 
269
272
  callback_request_queue = g_async_queue_new();
270
- callback_dispatch_thread_mutex = g_mutex_new();
273
+ g_mutex_init(&callback_dispatch_thread_mutex);
271
274
  #endif
272
275
  }
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2018-2019 Ruby-GNOME Project Team
1
+ # Copyright (C) 2018-2021 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
@@ -26,4 +26,25 @@ module GLib
26
26
  define_deprecated_const(:PRIVATE, :STATIC_NAME)
27
27
  define_deprecated_method(:private?, :static_name?)
28
28
  end
29
+
30
+ class SpawnError
31
+ extend GLib::Deprecatable
32
+ define_deprecated_const(:E2BIG, :TOO_BIG)
33
+ end
34
+
35
+ module Unicode
36
+ extend GLib::Deprecatable
37
+ define_deprecated_singleton_method(
38
+ :canonical_decomposition,
39
+ warn: "Use 'GLib::UniChar.decompose(char)'.") do |_, char|
40
+ UniChar.decompose(char)
41
+ end
42
+ end
43
+
44
+ extend GLib::Deprecatable
45
+ define_deprecated_singleton_method(
46
+ :format_size_for_display,
47
+ warn: "Use 'GLib.format_size(size, flags: :iec_units)'.") do |_, size|
48
+ format_size(size, flags: :iec_units)
49
+ end
29
50
  end
data/lib/glib2.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2005-2019 Ruby-GNOME Project Team
1
+ # Copyright (C) 2005-2021 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
@@ -117,17 +117,68 @@ end
117
117
  require "glib2.so"
118
118
 
119
119
  module GLib
120
+ SIGNAL_HANDLER_PREFIX = "signal_do_"
121
+ VIRTUAL_FUNCTION_IMPLEMENTATION_PREFIX = "virtual_do_"
122
+
120
123
  module MetaInterface
121
124
  class << self
122
- def signal_callback(klass, id)
125
+ def signal_callback(klass, name)
123
126
  lambda do |instance, *args|
124
- klass.instance_method(id).bind(instance).call(*args)
127
+ method_name = "#{SIGNAL_HANDLER_PREFIX}#{name}"
128
+ klass.instance_method(method_name).bind(instance).call(*args)
125
129
  end
126
130
  end
127
131
  end
128
132
  end
129
133
 
130
134
  class Instantiatable
135
+ class << self
136
+ def method_added(name)
137
+ result = super
138
+ check_new_method(name)
139
+ result
140
+ end
141
+
142
+ def include(*modules, &block)
143
+ result = super
144
+ modules.each do |mod|
145
+ next if mod.is_a?(Interface)
146
+ mod.public_instance_methods(false).each do |name|
147
+ check_new_method(name)
148
+ end
149
+ mod.protected_instance_methods(false).each do |name|
150
+ check_new_method(name)
151
+ end
152
+ mod.private_instance_methods(false).each do |name|
153
+ check_new_method(name)
154
+ end
155
+ end
156
+ result
157
+ end
158
+
159
+ private
160
+ def check_new_method(name)
161
+ case name.to_s
162
+ when /\A#{Regexp.escape(SIGNAL_HANDLER_PREFIX)}/o
163
+ signal_name = $POSTMATCH
164
+ begin
165
+ signal_ = signal(signal_name)
166
+ rescue NoSignalError
167
+ return
168
+ end
169
+ return unless signal_.class != self
170
+ signal_handler_attach(signal_, name.to_s) do |instance, *args|
171
+ instance.__send__(name, *args)
172
+ end
173
+ when /\A#{Regexp.escape(VIRTUAL_FUNCTION_IMPLEMENTATION_PREFIX)}/o
174
+ ancestors.each do |klass|
175
+ next unless klass.respond_to?(:implement_virtual_function)
176
+ return if klass.implement_virtual_function(self, name)
177
+ end
178
+ end
179
+ end
180
+ end
181
+
131
182
  private
132
183
  def create_signal_handler(signal_name, callback)
133
184
  callback
data/lib/mkmf-gnome.rb CHANGED
@@ -37,11 +37,11 @@ end
37
37
  def enable_debug_build_flag(flags)
38
38
  if gcc?
39
39
  expanded_flags = RbConfig.expand(flags.dup)
40
- debug_option_pattern = /(^|\s)-g\d?(\s|$)/
40
+ debug_option_pattern = /(^|\s)-g(?:gdb)?\d?(\s|$)/
41
41
  if debug_option_pattern =~ expanded_flags
42
- expanded_flags.gsub(debug_option_pattern, '\\1-g3\\2')
42
+ expanded_flags.gsub(debug_option_pattern, '\\1-ggdb3\\2')
43
43
  else
44
- flags + " -g3"
44
+ flags + " -ggdb3"
45
45
  end
46
46
  else
47
47
  flags
@@ -72,9 +72,10 @@ def try_compiler_option(opt, &block)
72
72
  end
73
73
 
74
74
  try_compiler_option '-Wall'
75
- try_compiler_option '-Waggregate-return'
75
+ # NOTE: This generates warnings for functions defined in ruby.h.
76
+ # try_compiler_option '-Waggregate-return'
76
77
  try_compiler_option '-Wcast-align'
77
- # NOTE: Generates way too many false positives.
78
+ # NOTE: This generates way too many false positives.
78
79
  # try_compiler_option '-Wconversion'
79
80
  try_compiler_option '-Wextra'
80
81
  try_compiler_option '-Wformat=2'
@@ -198,7 +199,7 @@ def add_depend_package_path(target_name, target_source_dir, target_build_dir)
198
199
  $INCFLAGS = "-I#{target_build_dir} #{$INCFLAGS}"
199
200
  end
200
201
 
201
- library_base_name = target_name.gsub(/-/, "_")
202
+ library_base_name = File.basename(target_source_dir).gsub(/-/, "_")
202
203
  case RUBY_PLATFORM
203
204
  when /cygwin|mingw/
204
205
  $libs << " " << File.join(target_build_dir, "#{library_base_name}.so")
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2015-2022 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
@@ -14,6 +14,12 @@
14
14
  # License along with this library; if not, write to the Free Software
15
15
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
+ require "pathname"
18
+
19
+ require "test-unit"
20
+
21
+ require "glib2"
22
+
17
23
  module GLibTestUtils
18
24
  private
19
25
  def only_glib_version(major, minor, micro)
@@ -22,7 +28,20 @@ module GLibTestUtils
22
28
  end
23
29
  end
24
30
 
25
- def only_win32
26
- omit("Only for Win32 platform") unless GLib.os_win32?
31
+ def only_windows
32
+ omit("Only for Windows platform") unless GLib.os_win32?
33
+ end
34
+
35
+ def only_not_windows
36
+ omit("Not for Windows platform") if GLib.os_win32?
37
+ end
38
+
39
+ def only_not_scl
40
+ omit("Not for SCL environment") if ENV["SCL"]
41
+ end
42
+
43
+ def normalize_path(path)
44
+ return path unless File::ALT_SEPARATOR
45
+ path.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
27
46
  end
28
47
  end
data/test/run-test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (C) 2015-2020 Ruby-GNOME Project Team
3
+ # Copyright (C) 2015-2021 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
@@ -16,23 +16,57 @@
16
16
  # License along with this library; if not, write to the Free Software
17
17
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
 
19
- test_dir = File.expand_path(File.join(__dir__))
20
- source_dir = File.expand_path(File.join(test_dir, ".."))
21
- build_dir = File.expand_path(".")
19
+ require "fileutils"
22
20
 
23
- $LOAD_PATH.unshift(source_dir)
24
- require_relative "glib-test-init"
21
+ def run_test(test_dir, dependencies)
22
+ $VERBOSE = true
25
23
 
26
- if File.exist?("#{build_dir}/Makefile") and system("which make > /dev/null")
27
- system("cd #{build_dir.dump} && make > /dev/null") or exit(1)
28
- end
24
+ ruby_gnome_build_dir = ENV["RUBY_GNOME_BUILD_DIR"]
25
+ ruby_gnome_build_dir ||= File.expand_path("..")
26
+ ruby_gnome_source_dir = File.expand_path("../..", test_dir)
27
+
28
+ dependencies.each do |dependency|
29
+ source_dir = File.join(ruby_gnome_source_dir, dependency)
30
+ build_dir = File.join(ruby_gnome_build_dir, dependency)
31
+ makefile = File.join(build_dir, "Makefile")
32
+ if File.exist?(makefile)
33
+ system("make", "-C", build_dir, "-j", out: IO::NULL) or exit(false)
34
+ $LOAD_PATH.unshift(File.join(build_dir, "ext", dependency))
35
+ end
36
+ $LOAD_PATH.unshift(File.join(source_dir, "lib"))
37
+ end
29
38
 
30
- $LOAD_PATH.unshift(File.join(build_dir, "ext", "glib2"))
31
- $LOAD_PATH.unshift(File.join(source_dir, "lib"))
39
+ source_fixture_dir = File.join(test_dir, "fixture")
40
+ if File.exist?(source_fixture_dir)
41
+ target_name = File.basename(File.expand_path("..", test_dir))
42
+ build_fixture_dir = File.join(ruby_gnome_build_dir,
43
+ target_name,
44
+ "test",
45
+ "fixture")
46
+ unless source_fixture_dir == build_fixture_dir
47
+ FileUtils.rm_rf(build_fixture_dir)
48
+ FileUtils.mkdir_p(File.dirname(build_fixture_dir))
49
+ FileUtils.cp_r(source_fixture_dir, build_fixture_dir)
50
+ end
51
+ Dir.chdir(build_fixture_dir) do
52
+ if File.exist?("Rakefile")
53
+ system("rake") or exit(false)
54
+ end
55
+ end
56
+ end
32
57
 
33
- $LOAD_PATH.unshift(test_dir)
34
- require_relative "glib-test-utils"
58
+ require_relative "glib-test-utils"
35
59
 
36
- require "glib2"
60
+ if block_given?
61
+ context = {
62
+ build_fixture_dir: build_fixture_dir,
63
+ }
64
+ yield(context)
65
+ end
37
66
 
38
- exit(Test::Unit::AutoRunner.run(true, test_dir))
67
+ exit(Test::Unit::AutoRunner.run(true, test_dir))
68
+ end
69
+
70
+ if $PROGRAM_NAME == __FILE__
71
+ run_test(__dir__, ["glib2"])
72
+ end
data/test/test-binding.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2015-2021 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
@@ -55,10 +55,6 @@ class TestGLibBinding < Test::Unit::TestCase
55
55
  end
56
56
  end
57
57
 
58
- setup do
59
- only_glib_version(2, 26, 0)
60
- end
61
-
62
58
  setup do
63
59
  @source = DataObjectDefault.new
64
60
  @target = DataObjectDefault.new
@@ -86,7 +82,6 @@ class TestGLibBinding < Test::Unit::TestCase
86
82
  end
87
83
 
88
84
  test "#unbind" do
89
- only_glib_version(2, 38, 0)
90
85
  assert_equal(0, @target.target)
91
86
  @source.source = 10
92
87
  assert_equal(10, @target.target)
@@ -132,10 +127,6 @@ class TestGLibBinding < Test::Unit::TestCase
132
127
  end
133
128
  end
134
129
 
135
- setup do
136
- only_glib_version(2, 26, 0)
137
- end
138
-
139
130
  setup do
140
131
  @source = DataObjectBidir.new
141
132
  @target = DataObjectBidir.new
@@ -174,7 +165,6 @@ class TestGLibBinding < Test::Unit::TestCase
174
165
  end
175
166
 
176
167
  test "#unbind" do
177
- only_glib_version(2, 38, 0)
178
168
  assert_equal("nan", @target.target)
179
169
  @source.source = 10
180
170
  assert_equal("10", @target.target)
data/test/test-bytes.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2017-2019 Ruby-GNOME Project Team
1
+ # Copyright (C) 2017-2021 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
@@ -17,10 +17,6 @@
17
17
  class TestGLibBytes < Test::Unit::TestCase
18
18
  include GLibTestUtils
19
19
 
20
- setup do
21
- only_glib_version(2, 32, 0)
22
- end
23
-
24
20
  sub_test_case ".try_convert" do
25
21
  def test_nil
26
22
  assert_nil(GLib::Bytes.try_convert(nil))
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2016-2017 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2016-2021 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
@@ -76,7 +76,6 @@ class TestDateTime < Test::Unit::TestCase
76
76
  end
77
77
 
78
78
  test "timezone: local time zone" do
79
- only_glib_version(2, 34, 0)
80
79
  time = Time.now
81
80
  tz = GLib::TimeZone.local
82
81
  datetime = GLib::DateTime.new(:timezone => tz,
@@ -95,7 +94,6 @@ class TestDateTime < Test::Unit::TestCase
95
94
  end
96
95
 
97
96
  test "timezone: UTC time zone" do
98
- only_glib_version(2, 34, 0)
99
97
  time = Time.now.utc
100
98
  tz = GLib::TimeZone.utc
101
99
  datetime = GLib::DateTime.new(:timezone => tz,
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2020 Ruby-GNOME Project Team
1
+ # Copyright (C) 2021 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
@@ -14,6 +14,28 @@
14
14
  # License along with this library; if not, write to the Free Software
15
15
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
- $VERBOSE = true
17
+ class TestError < Test::Unit::TestCase
18
+ sub_test_case("error class") do
19
+ def test_code
20
+ assert_equal(nil,
21
+ GLib::BookmarkFileError.new.code)
22
+ end
18
23
 
19
- require "test-unit"
24
+ def test_domain
25
+ assert_equal("g-bookmark-file-error-quark",
26
+ GLib::BookmarkFileError.new.domain)
27
+ end
28
+ end
29
+
30
+ sub_test_case("error code class") do
31
+ def test_code
32
+ assert_equal(GLib::BookmarkFileError::READ,
33
+ GLib::BookmarkFileError::Read.new.code)
34
+ end
35
+
36
+ def test_domain
37
+ assert_equal("g-bookmark-file-error-quark",
38
+ GLib::BookmarkFileError::Read.new.domain)
39
+ end
40
+ end
41
+ end