glib2 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. data/ChangeLog +3023 -0
  2. data/README +28 -0
  3. data/Rakefile +87 -0
  4. data/extconf.rb +61 -0
  5. data/sample/bookmarkfile.rb +66 -0
  6. data/sample/completion.rb +45 -0
  7. data/sample/idle.rb +41 -0
  8. data/sample/iochannel.rb +44 -0
  9. data/sample/keyfile.rb +62 -0
  10. data/sample/shell.rb +36 -0
  11. data/sample/spawn.rb +25 -0
  12. data/sample/timeout.rb +28 -0
  13. data/sample/timeout2.rb +35 -0
  14. data/sample/timer.rb +40 -0
  15. data/sample/type-register.rb +103 -0
  16. data/sample/type-register2.rb +104 -0
  17. data/sample/utils.rb +54 -0
  18. data/src/glib-enum-types.c +1032 -0
  19. data/src/glib-enum-types.h +140 -0
  20. data/src/lib/glib-mkenums.rb +199 -0
  21. data/src/lib/glib2.rb +220 -0
  22. data/src/lib/mkmf-gnome2.rb +390 -0
  23. data/src/lib/pkg-config.rb +137 -0
  24. data/src/rbgcompat.h +30 -0
  25. data/src/rbglib.c +320 -0
  26. data/src/rbglib.h +96 -0
  27. data/src/rbglib_bookmarkfile.c +595 -0
  28. data/src/rbglib_completion.c +192 -0
  29. data/src/rbglib_convert.c +195 -0
  30. data/src/rbglib_error.c +95 -0
  31. data/src/rbglib_fileutils.c +83 -0
  32. data/src/rbglib_i18n.c +44 -0
  33. data/src/rbglib_int64.c +157 -0
  34. data/src/rbglib_iochannel.c +883 -0
  35. data/src/rbglib_keyfile.c +846 -0
  36. data/src/rbglib_maincontext.c +917 -0
  37. data/src/rbglib_mainloop.c +87 -0
  38. data/src/rbglib_messages.c +150 -0
  39. data/src/rbglib_pollfd.c +111 -0
  40. data/src/rbglib_shell.c +68 -0
  41. data/src/rbglib_source.c +190 -0
  42. data/src/rbglib_spawn.c +345 -0
  43. data/src/rbglib_threads.c +51 -0
  44. data/src/rbglib_timer.c +127 -0
  45. data/src/rbglib_unicode.c +611 -0
  46. data/src/rbglib_utils.c +386 -0
  47. data/src/rbglib_win32.c +136 -0
  48. data/src/rbgobj_boxed.c +251 -0
  49. data/src/rbgobj_closure.c +337 -0
  50. data/src/rbgobj_convert.c +167 -0
  51. data/src/rbgobj_enums.c +961 -0
  52. data/src/rbgobj_fundamental.c +30 -0
  53. data/src/rbgobj_object.c +892 -0
  54. data/src/rbgobj_param.c +390 -0
  55. data/src/rbgobj_paramspecs.c +305 -0
  56. data/src/rbgobj_signal.c +963 -0
  57. data/src/rbgobj_strv.c +61 -0
  58. data/src/rbgobj_type.c +851 -0
  59. data/src/rbgobj_typeinstance.c +121 -0
  60. data/src/rbgobj_typeinterface.c +148 -0
  61. data/src/rbgobj_typemodule.c +66 -0
  62. data/src/rbgobj_typeplugin.c +49 -0
  63. data/src/rbgobj_value.c +313 -0
  64. data/src/rbgobj_valuearray.c +59 -0
  65. data/src/rbgobj_valuetypes.c +298 -0
  66. data/src/rbgobject.c +406 -0
  67. data/src/rbgobject.h +265 -0
  68. data/src/rbgprivate.h +88 -0
  69. data/src/rbgutil.c +222 -0
  70. data/src/rbgutil.h +82 -0
  71. data/src/rbgutil_callback.c +231 -0
  72. data/test/glib-test-init.rb +6 -0
  73. data/test/glib-test-utils.rb +12 -0
  74. data/test/run-test.rb +25 -0
  75. data/test/test_enum.rb +99 -0
  76. data/test/test_file_utils.rb +15 -0
  77. data/test/test_glib2.rb +120 -0
  78. data/test/test_iochannel.rb +275 -0
  79. data/test/test_key_file.rb +38 -0
  80. data/test/test_mkenums.rb +25 -0
  81. data/test/test_signal.rb +20 -0
  82. data/test/test_timeout.rb +28 -0
  83. data/test/test_unicode.rb +369 -0
  84. data/test/test_utils.rb +37 -0
  85. data/test/test_win32.rb +13 -0
  86. metadata +165 -0
@@ -0,0 +1,386 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /**********************************************************************
3
+
4
+ rbglib_utils.c -
5
+
6
+ $Author: ggc $
7
+ $Date: 2007/07/13 16:07:28 $
8
+
9
+ Copyright (C) 2004 Ruby-GNOME2 Project Team
10
+ Copyright (C) 2004 Pascal Terjan
11
+
12
+ **********************************************************************/
13
+
14
+ #include "rbgprivate.h"
15
+
16
+ #if GLIB_CHECK_VERSION(2,2,0)
17
+ static VALUE
18
+ rbglib_m_application_name(self)
19
+ VALUE self;
20
+ {
21
+ return CSTR2RVAL(g_get_application_name());
22
+ }
23
+
24
+ static VALUE
25
+ rbglib_m_set_application_name(self, application_name)
26
+ VALUE self, application_name;
27
+ {
28
+ g_set_prgname(NIL_P(application_name) ? NULL : RVAL2CSTR(application_name));
29
+ return self;
30
+ }
31
+ #endif
32
+
33
+ static VALUE
34
+ rbglib_m_prgname(self)
35
+ VALUE self;
36
+ {
37
+ return CSTR2RVAL(g_get_prgname());
38
+ }
39
+
40
+ static VALUE
41
+ rbglib_m_set_prgname(self, prgname)
42
+ VALUE self, prgname;
43
+ {
44
+ g_set_prgname(NIL_P(prgname) ? NULL : RVAL2CSTR(prgname));
45
+ return self;
46
+ }
47
+
48
+ static VALUE
49
+ rbglib_m_env(self, variable)
50
+ VALUE self, variable;
51
+ {
52
+ return CSTR2RVAL(g_getenv(RVAL2CSTR(variable)));
53
+ }
54
+
55
+ #if GLIB_CHECK_VERSION(2,4,0)
56
+ static VALUE
57
+ rbglib_m_setenv(self, variable, value, overwrite)
58
+ VALUE self, variable, value, overwrite;
59
+ {
60
+ return CBOOL2RVAL(g_setenv(RVAL2CSTR(variable),
61
+ NIL_P(value) ? NULL : RVAL2CSTR(value),
62
+ RVAL2CBOOL(overwrite)));
63
+ }
64
+
65
+ static VALUE
66
+ rbglib_m_unsetenv(self, variable)
67
+ VALUE self, variable;
68
+ {
69
+ g_unsetenv(RVAL2CSTR(variable));
70
+ return self;
71
+ }
72
+ #endif
73
+
74
+ #if GLIB_CHECK_VERSION(2,8,0)
75
+ #if HAVE_G_LISTENV
76
+ static VALUE
77
+ rbglib_m_listenv(self)
78
+ VALUE self;
79
+ {
80
+ gchar** c_list;
81
+ gchar** c_var;
82
+ VALUE r_list = rb_ary_new();
83
+ c_list = g_listenv();
84
+ c_var = c_list;
85
+ while(*c_var) {
86
+ rb_ary_push(r_list, rb_str_new2(*(c_var++)));
87
+ }
88
+ g_strfreev(c_list);
89
+ return r_list;
90
+ }
91
+ #endif
92
+
93
+ static VALUE
94
+ rbglib_m_host_name(self)
95
+ VALUE self;
96
+ {
97
+ return CSTR2RVAL(g_get_host_name());
98
+ }
99
+ #endif
100
+
101
+ static VALUE
102
+ rbglib_m_user_name(self)
103
+ VALUE self;
104
+ {
105
+ return CSTR2RVAL(g_get_user_name());
106
+ }
107
+
108
+ static VALUE
109
+ rbglib_m_real_name(self)
110
+ VALUE self;
111
+ {
112
+ return CSTR2RVAL(g_get_real_name());
113
+ }
114
+
115
+ #if GLIB_CHECK_VERSION(2, 6, 0)
116
+ static VALUE
117
+ rbglib_m_user_cache_dir(VALUE self)
118
+ {
119
+ return CSTR2RVAL(g_get_user_cache_dir());
120
+ }
121
+
122
+ static VALUE
123
+ rbglib_m_user_data_dir(VALUE self)
124
+ {
125
+ return CSTR2RVAL(g_get_user_data_dir());
126
+ }
127
+
128
+ static VALUE
129
+ rbglib_m_user_config_dir(VALUE self)
130
+ {
131
+ return CSTR2RVAL(g_get_user_config_dir());
132
+ }
133
+
134
+ static VALUE
135
+ strv_to_array(const gchar * const *strv)
136
+ {
137
+ VALUE array;
138
+
139
+ array = rb_ary_new();
140
+ for (; *strv; strv++) {
141
+ rb_ary_push(array, CSTR2RVAL(*strv));
142
+ }
143
+
144
+ return array;
145
+ }
146
+
147
+ static VALUE
148
+ rbglib_m_system_data_dirs(VALUE self)
149
+ {
150
+ return strv_to_array(g_get_system_data_dirs());
151
+ }
152
+
153
+ static VALUE
154
+ rbglib_m_system_config_dirs(VALUE self)
155
+ {
156
+ return strv_to_array(g_get_system_config_dirs());
157
+ }
158
+ #endif
159
+
160
+ #if GLIB_CHECK_VERSION(2, 14, 0)
161
+ static VALUE
162
+ rbglib_m_get_user_special_dir(VALUE self, VALUE directory)
163
+ {
164
+ return CSTR2RVAL(g_get_user_special_dir(RVAL2GENUM(directory,
165
+ G_TYPE_USER_DIRECTORY)));
166
+ }
167
+ #endif
168
+
169
+ static VALUE
170
+ rbglib_m_home_dir(self)
171
+ VALUE self;
172
+ {
173
+ return CSTR2RVAL(g_get_home_dir());
174
+ }
175
+
176
+ static VALUE
177
+ rbglib_m_tmp_dir(self)
178
+ VALUE self;
179
+ {
180
+ return CSTR2RVAL(g_get_tmp_dir());
181
+ }
182
+
183
+ static VALUE
184
+ rbglib_m_current_dir(self)
185
+ VALUE self;
186
+ {
187
+ gchar* dir = g_get_current_dir();
188
+ VALUE ret = CSTR2RVAL(dir);
189
+ g_free(dir);
190
+ return ret;
191
+ }
192
+
193
+ static VALUE
194
+ rbglib_m_path_is_absolute(self, fname)
195
+ VALUE self, fname;
196
+ {
197
+ return CBOOL2RVAL(g_path_is_absolute(RVAL2CSTR(fname)));
198
+ }
199
+
200
+ static VALUE
201
+ rbglib_m_path_skip_root(self, fname)
202
+ VALUE self, fname;
203
+ {
204
+ return CSTR2RVAL(g_path_skip_root(RVAL2CSTR(fname)));
205
+ }
206
+
207
+ static VALUE
208
+ rbglib_m_path_get_basename(self, fname)
209
+ VALUE self, fname;
210
+ {
211
+ return CSTR2RVAL(g_path_get_basename(RVAL2CSTR(fname)));
212
+ }
213
+
214
+ static VALUE
215
+ rbglib_m_path_get_dirname(self, fname)
216
+ VALUE self, fname;
217
+ {
218
+ return CSTR2RVAL(g_path_get_dirname(RVAL2CSTR(fname)));
219
+ }
220
+
221
+ /*
222
+ Use File.join()
223
+ gchar* g_build_filename (const gchar *first_element,
224
+ ...);
225
+ gchar* g_build_filenamev (gchar **args);
226
+ gchar* g_build_path (const gchar *separator,
227
+ const gchar *first_element,
228
+ ...);
229
+ gchar* g_build_pathv (const gchar *separator,
230
+ gchar **args);
231
+ */
232
+
233
+ static VALUE
234
+ rbglib_m_find_program_in_path(self, program)
235
+ VALUE self, program;
236
+ {
237
+ gchar* path = g_find_program_in_path(RVAL2CSTR(program));
238
+ VALUE ret = CSTR2RVAL(path);
239
+ g_free(path);
240
+ return ret;
241
+ }
242
+
243
+ static VALUE
244
+ rbglib_m_bit_nth_lsf(self, mask, nth_bit)
245
+ VALUE self, mask, nth_bit;
246
+ {
247
+ return INT2NUM(g_bit_nth_lsf(NUM2ULONG(mask), NUM2INT(nth_bit)));
248
+ }
249
+
250
+ static VALUE
251
+ rbglib_m_bit_nth_msf(self, mask, nth_bit)
252
+ VALUE self, mask, nth_bit;
253
+ {
254
+ return INT2NUM(g_bit_nth_msf(NUM2ULONG(mask), NUM2INT(nth_bit)));
255
+ }
256
+
257
+ static VALUE
258
+ rbglib_m_bit_storage(self, number)
259
+ VALUE self, number;
260
+ {
261
+ return UINT2NUM(g_bit_storage(NUM2ULONG(number)));
262
+ }
263
+
264
+ static VALUE
265
+ rbglib_m_spaced_primes_closest(self, num)
266
+ VALUE self, num;
267
+ {
268
+ return UINT2NUM(g_spaced_primes_closest(NUM2UINT(num)));
269
+ }
270
+
271
+ /*
272
+ Use at_exit of ruby instead.
273
+ void g_atexit (GVoidFunc func);
274
+ */
275
+
276
+ static VALUE
277
+ rbglib_m_parse_debug_string(self, string, keys)
278
+ VALUE self, string, keys;
279
+ {
280
+ gint i, nkeys;
281
+ VALUE ary, ret;
282
+ GDebugKey* gkeys;
283
+
284
+ Check_Type(keys, T_HASH);
285
+ ary = rb_funcall(keys, rb_intern("to_a"), 0);
286
+ nkeys = RARRAY_LEN(ary);
287
+ gkeys = g_new(GDebugKey, nkeys);
288
+ for (i = 0; i < nkeys; i++) {
289
+ gkeys[i].key = RVAL2CSTR(RARRAY_PTR(RARRAY_PTR(ary)[i])[0]);
290
+ gkeys[i].value = NUM2UINT(RARRAY_PTR(RARRAY_PTR(ary)[i])[1]);
291
+ }
292
+
293
+ ret = UINT2NUM(g_parse_debug_string(RVAL2CSTR(string), gkeys, nkeys));
294
+ g_free(gkeys);
295
+ return ret;
296
+ }
297
+
298
+ /*
299
+ void (*GVoidFunc) (void);
300
+ void (*GFreeFunc) (gpointer data);
301
+
302
+ Don't need them.
303
+ void g_qsort_with_data (gconstpointer pbase,
304
+ gint total_elems,
305
+ gsize size,
306
+ GCompareDataFunc compare_func,
307
+ gpointer user_data);
308
+
309
+ void g_nullify_pointer (gpointer *nullify_location);
310
+ */
311
+
312
+ static VALUE
313
+ rbglib_m_check_version(self, major, minor, micro)
314
+ VALUE self, major, minor, micro;
315
+ {
316
+ return CBOOL2RVAL(glib_major_version > NUM2UINT(major) ||
317
+ (glib_major_version == NUM2UINT(major) &&
318
+ glib_minor_version > NUM2UINT(minor)) ||
319
+ (glib_major_version == NUM2UINT(major) &&
320
+ glib_minor_version == NUM2UINT(minor) &&
321
+ glib_micro_version >= NUM2UINT(micro)));
322
+ }
323
+
324
+ void
325
+ Init_glib_utils()
326
+ {
327
+ /* glib/gutils.h */
328
+ #if GLIB_CHECK_VERSION(2, 14, 0)
329
+ G_DEF_CLASS(G_TYPE_USER_DIRECTORY, "UserDirectory", mGLib);
330
+ G_DEF_CONSTANTS(mGLib, G_TYPE_USER_DIRECTORY, "G_");
331
+ #endif
332
+
333
+ #if GLIB_CHECK_VERSION(2,2,0)
334
+ rb_define_module_function(mGLib, "application_name", rbglib_m_application_name, 0);
335
+ rb_define_module_function(mGLib, "set_application_name", rbglib_m_set_application_name, 1);
336
+ #endif
337
+ rb_define_module_function(mGLib, "prgname", rbglib_m_prgname, 0);
338
+ rb_define_module_function(mGLib, "set_prgname", rbglib_m_set_prgname, 1);
339
+ rb_define_module_function(mGLib, "getenv", rbglib_m_env, 1);
340
+ #if GLIB_CHECK_VERSION(2,4,0)
341
+ rb_define_module_function(mGLib, "setenv", rbglib_m_setenv, 2);
342
+ rb_define_module_function(mGLib, "unsetenv", rbglib_m_unsetenv, 1);
343
+ #endif
344
+ #if GLIB_CHECK_VERSION(2,8,0)
345
+ #if HAVE_G_LISTENV
346
+ rb_define_module_function(mGLib, "listenv", rbglib_m_listenv, 0);
347
+ #endif
348
+ rb_define_module_function(mGLib, "host_name", rbglib_m_host_name, 0);
349
+ #endif
350
+ rb_define_module_function(mGLib, "user_name", rbglib_m_user_name, 0);
351
+ rb_define_module_function(mGLib, "real_name", rbglib_m_real_name, 0);
352
+
353
+ #if GLIB_CHECK_VERSION(2, 6, 0)
354
+ rb_define_module_function(mGLib, "user_cache_dir",
355
+ rbglib_m_user_cache_dir, 0);
356
+ rb_define_module_function(mGLib, "user_data_dir",
357
+ rbglib_m_user_data_dir, 0);
358
+ rb_define_module_function(mGLib, "user_config_dir",
359
+ rbglib_m_user_config_dir, 0);
360
+ rb_define_module_function(mGLib, "system_data_dirs",
361
+ rbglib_m_system_data_dirs, 0);
362
+ rb_define_module_function(mGLib, "system_config_dirs",
363
+ rbglib_m_system_config_dirs, 0);
364
+ #endif
365
+ #if GLIB_CHECK_VERSION(2, 14, 0)
366
+ rb_define_module_function(mGLib, "get_user_special_dir",
367
+ rbglib_m_get_user_special_dir, 1);
368
+ #endif
369
+ rb_define_module_function(mGLib, "home_dir", rbglib_m_home_dir, 0);
370
+ rb_define_module_function(mGLib, "tmp_dir", rbglib_m_tmp_dir, 0);
371
+ rb_define_module_function(mGLib, "current_dir", rbglib_m_current_dir, 0);
372
+
373
+ rb_define_module_function(mGLib, "path_is_absolute?", rbglib_m_path_is_absolute, 1);
374
+ rb_define_module_function(mGLib, "path_skip_root", rbglib_m_path_skip_root, 1);
375
+ rb_define_module_function(mGLib, "path_get_basename", rbglib_m_path_get_basename, 1);
376
+ rb_define_module_function(mGLib, "path_get_dirname", rbglib_m_path_get_dirname, 1);
377
+ rb_define_module_function(mGLib, "find_program_in_path", rbglib_m_find_program_in_path, 1);
378
+ rb_define_module_function(mGLib, "bit_nth_lsf", rbglib_m_bit_nth_lsf, 2);
379
+ rb_define_module_function(mGLib, "bit_nth_msf", rbglib_m_bit_nth_msf, 2);
380
+ rb_define_module_function(mGLib, "bit_storage", rbglib_m_bit_storage, 1);
381
+ rb_define_module_function(mGLib, "spaced_primes_closest", rbglib_m_spaced_primes_closest, 1);
382
+ rb_define_module_function(mGLib, "parse_debug_string", rbglib_m_parse_debug_string, 2);
383
+ rb_define_module_function(mGLib, "check_version?", rbglib_m_check_version, 3);
384
+
385
+ }
386
+
@@ -0,0 +1,136 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /**********************************************************************
3
+
4
+ rbglib_win32.c -
5
+
6
+ $Author: mutoh $
7
+ $Date: 2006/12/26 15:49:16 $
8
+
9
+ Copyright (C) 2006 Kouhei Sutou
10
+
11
+ **********************************************************************/
12
+
13
+ #include "rbgprivate.h"
14
+ #include "rbglib.h"
15
+ #include <glib/gwin32.h>
16
+
17
+ #ifdef G_OS_WIN32
18
+ static VALUE
19
+ rbglib_m_win32_error_message(self, error)
20
+ VALUE self, error;
21
+ {
22
+ return CSTR2RVAL2(g_win32_error_message(NUM2INT(error)));
23
+ }
24
+
25
+ static VALUE
26
+ rbglib_m_win32_locale(self)
27
+ VALUE self;
28
+ {
29
+ return CSTR2RVAL2(g_win32_getlocale());
30
+ }
31
+
32
+ static VALUE
33
+ rbglib_m_win32_locale_deprecated(self)
34
+ VALUE self;
35
+ {
36
+ rb_warn("GLib.win32_locale() is deprecated. Use GLib::Win32.locale instead");
37
+ return rbglib_m_win32_locale(self);
38
+ }
39
+
40
+ static VALUE
41
+ rbglib_m_win32_get_package_installation_directory(self, package, dll_name)
42
+ VALUE self, package, dll_name;
43
+ {
44
+ return CSTR2RVAL2(g_win32_get_package_installation_directory(RVAL2CSTR(package),
45
+ RVAL2CSTR(dll_name)));
46
+ }
47
+
48
+ static VALUE
49
+ rbglib_m_get_package_installation_subdirectory(self, package, dll_name, subdir)
50
+ VALUE self, package, dll_name, subdir;
51
+ {
52
+ return CSTR2RVAL2(g_win32_get_package_installation_subdirectory(RVAL2CSTR(package),
53
+ RVAL2CSTR(dll_name),
54
+ RVAL2CSTR(subdir)));
55
+ }
56
+
57
+ #if GLIB_CHECK_VERSION(2,6,0)
58
+ static VALUE
59
+ rbglib_m_get_windows_version(self)
60
+ VALUE self;
61
+ {
62
+ return UINT2NUM(g_win32_get_windows_version());
63
+ }
64
+ #endif
65
+
66
+ #if GLIB_CHECK_VERSION(2,8,0)
67
+ static VALUE
68
+ rbglib_m_win32_locale_filename_from_utf8(self, utf8_filename)
69
+ VALUE self, utf8_filename;
70
+ {
71
+ return CSTR2RVAL2(g_win32_locale_filename_from_utf8(RVAL2CSTR(utf8_filename)));
72
+ }
73
+
74
+ static VALUE
75
+ rbglib_m_win32_locale_filename_from_utf8_deprecated(self)
76
+ VALUE self;
77
+ {
78
+ rb_warn("GLib.win32_locale_filename_from_utf8() is deprecated. Use GLib::Win32.locale_filename_from_utf8 instead");
79
+ return rbglib_m_win32_locale_filename_from_utf8(self);
80
+ }
81
+
82
+ #endif
83
+
84
+ # if GLIB_CHECK_VERSION(2, 16, 0)
85
+ static VALUE
86
+ rbglib_m_win32_get_package_installation_directory_of_module(int argc,
87
+ VALUE *argv,
88
+ VALUE self)
89
+ {
90
+ VALUE rb_module;
91
+ gchar *directory;
92
+ gpointer hmodule;
93
+
94
+ rb_scan_args(argc, argv, "01", &rb_module);
95
+ if (NIL_P(rb_module))
96
+ hmodule = NULL;
97
+ else
98
+ hmodule = GINT_TO_POINTER(NUM2INT(rb_module));
99
+
100
+ directory = g_win32_get_package_installation_directory_of_module(hmodule);
101
+ return CSTR2RVAL_FREE(directory);
102
+ }
103
+ # endif
104
+ #endif
105
+
106
+ void
107
+ Init_glib_win32()
108
+ {
109
+ #ifdef G_OS_WIN32
110
+ /* glib/gwin32.h */
111
+ VALUE mWin32 = rb_define_module_under(mGLib, "Win32");
112
+
113
+ rb_define_module_function(mWin32, "error_message", rbglib_m_win32_error_message, 1);
114
+ rb_define_module_function(mWin32, "locale", rbglib_m_win32_locale, 0);
115
+ rb_define_module_function(mWin32, "get_package_installation_directory", rbglib_m_win32_get_package_installation_directory, 2);
116
+ rb_define_module_function(mWin32, "get_package_installation_subdirectory", rbglib_m_get_package_installation_subdirectory, 3);
117
+ rb_define_module_function(mWin32, "version", rbglib_m_get_windows_version, 0);
118
+ /* Deprecated */
119
+ rb_define_module_function(mGLib, "win32_locale", rbglib_m_win32_locale_deprecated, 0);
120
+
121
+ # if GLIB_CHECK_VERSION(2,8,0)
122
+ rb_define_module_function(mWin32, "locale_filename_from_utf8",
123
+ rbglib_m_win32_locale_filename_from_utf8, 1);
124
+ /* Deprecated */
125
+ rb_define_module_function(mGLib, "win32_locale_filename_from_utf8",
126
+ rbglib_m_win32_locale_filename_from_utf8_deprecated, 1);
127
+ # endif
128
+
129
+ # if GLIB_CHECK_VERSION(2, 16, 0)
130
+ rb_define_module_function(mWin32,
131
+ "get_package_installation_directory_of_module",
132
+ rbglib_m_win32_get_package_installation_directory_of_module,
133
+ -1);
134
+ # endif
135
+ #endif
136
+ }