glib2 1.1.9 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +26 -4
- data/ext/glib2/glib2.def +3 -1
- data/ext/glib2/rbgcompat.h +0 -15
- data/ext/glib2/rbglib.h +11 -3
- data/ext/glib2/rbglib_source.c +6 -1
- data/ext/glib2/rbglib_win32.c +0 -17
- data/ext/glib2/rbgobj_boxed.c +65 -48
- data/ext/glib2/rbgobj_convert.c +29 -14
- data/ext/glib2/rbgobj_value.c +42 -0
- data/ext/glib2/rbgobject.c +7 -4
- data/ext/glib2/rbgobject.h +15 -9
- data/lib/gnome2-raketask.rb +6 -1
- data/lib/gnome2-win32-binary-build-task.rb +40 -10
- metadata +5 -6
- data/ext/glib2/rbgobj_fundamental.c +0 -43
data/Rakefile
CHANGED
@@ -3,21 +3,25 @@
|
|
3
3
|
$LOAD_PATH.unshift("./lib")
|
4
4
|
require 'gnome2-raketask'
|
5
5
|
|
6
|
+
libffi_lib_dir = nil
|
7
|
+
libffi_include_dir = nil
|
8
|
+
|
6
9
|
package = GNOME2Package.new do |_package|
|
10
|
+
libffi_lib_dir = File.join(_package.win32.absolute_binary_dir, "lib")
|
11
|
+
libffi_include_dir = File.join(_package.win32.absolute_binary_dir, "include")
|
12
|
+
|
7
13
|
_package.summary = "Ruby/GLib2 is a Ruby binding of GLib-2.x."
|
8
14
|
_package.description = "Ruby/GLib2 is a Ruby binding of GLib-2.x."
|
9
15
|
_package.dependency.gem.runtime = [["pkg-config", ">= 0"]]
|
10
16
|
_package.dependency.gem.development = [["test-unit", ">= 2"]]
|
11
17
|
_package.win32.packages = []
|
12
18
|
_package.win32.dependencies = ["zlib", "libffi", "gettext-runtime"]
|
13
|
-
libffi_lib_dir = File.join(_package.win32.absolute_binary_dir, "lib")
|
14
|
-
libffi_include_dir = File.join(libffi_lib_dir, "libffi-3.0.6", "include")
|
15
19
|
_package.win32.build_packages = [
|
16
20
|
{
|
17
21
|
:name => "glib",
|
18
22
|
:download_site => :gnome,
|
19
23
|
:label => "GLib",
|
20
|
-
:version => "2.
|
24
|
+
:version => "2.34.3",
|
21
25
|
:configure_args => [
|
22
26
|
"LIBFFI_CFLAGS=-I#{libffi_include_dir}",
|
23
27
|
"LIBFFI_LIBS=-L#{libffi_lib_dir} -lffi",
|
@@ -57,7 +61,7 @@ package = GNOME2Package.new do |_package|
|
|
57
61
|
:name => "glib-networking",
|
58
62
|
:download_site => :gnome,
|
59
63
|
:label => "glib-networking",
|
60
|
-
:version => "2.
|
64
|
+
:version => "2.34.2",
|
61
65
|
:configure_args => [
|
62
66
|
"--without-libproxy",
|
63
67
|
"--without-gnome-proxy",
|
@@ -68,3 +72,21 @@ package = GNOME2Package.new do |_package|
|
|
68
72
|
]
|
69
73
|
end
|
70
74
|
package.define_tasks
|
75
|
+
|
76
|
+
namespace :win32 do
|
77
|
+
namespace :libffi do
|
78
|
+
namespace :header do
|
79
|
+
desc "Move libffi headers to include/"
|
80
|
+
task :fix do
|
81
|
+
libffi_version = "libffi-3.0.6"
|
82
|
+
mv(Dir.glob(File.join(libffi_lib_dir, libffi_version, "include", "*.h")),
|
83
|
+
libffi_include_dir)
|
84
|
+
rm_rf(File.join(libffi_lib_dir, libffi_version))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
namespace :downloader do
|
90
|
+
task :after => ["win32:libffi:header:fix"]
|
91
|
+
end
|
92
|
+
end
|
data/ext/glib2/glib2.def
CHANGED
@@ -21,8 +21,11 @@ EXPORTS
|
|
21
21
|
rbgobj_gobject_initialize
|
22
22
|
rbgobj_boxed_create
|
23
23
|
rbgobj_boxed_get
|
24
|
+
rbgobj_boxed_get_default
|
24
25
|
rbgobj_boxed_not_copy_obj
|
25
26
|
rbgobj_make_boxed
|
27
|
+
rbgobj_make_boxed_raw
|
28
|
+
rbgobj_make_boxed_default
|
26
29
|
rbgobj_add_abstract_but_create_instance_class
|
27
30
|
rbgobj_gtype_get
|
28
31
|
rbgobj_gtype_new
|
@@ -120,7 +123,6 @@ EXPORTS
|
|
120
123
|
rbgerr_define_gerror
|
121
124
|
rbgerr_gerror2exception
|
122
125
|
rbgobj_convert_define
|
123
|
-
rbgobj_fund_define_fundamental
|
124
126
|
rbgobj_gc_mark_gvalue
|
125
127
|
rbgobj_gc_mark_instance
|
126
128
|
rbglib_num_to_uint64
|
data/ext/glib2/rbgcompat.h
CHANGED
@@ -24,21 +24,6 @@
|
|
24
24
|
|
25
25
|
G_BEGIN_DECLS
|
26
26
|
|
27
|
-
typedef struct {
|
28
|
-
GType type;
|
29
|
-
VALUE (*get_superclass)(void);
|
30
|
-
void (*type_init_hook)(VALUE);
|
31
|
-
void (*rvalue2gvalue)(VALUE val, GValue *result);
|
32
|
-
VALUE (*gvalue2rvalue)(const GValue *);
|
33
|
-
void (*initialize)(VALUE, gpointer);
|
34
|
-
gpointer (*robj2instance)(VALUE);
|
35
|
-
VALUE (*instance2robj)(gpointer);
|
36
|
-
} RGFundamental;
|
37
|
-
|
38
|
-
#define G_DEF_FUNDAMENTAL(f) (rbgobj_fund_define_fundamental(f))
|
39
|
-
|
40
|
-
extern void rbgobj_fund_define_fundamental(RGFundamental *fundamental);
|
41
|
-
|
42
27
|
G_END_DECLS
|
43
28
|
|
44
29
|
#endif
|
data/ext/glib2/rbglib.h
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011-
|
3
|
+
* Copyright (C) 2011-2013 Ruby-GNOME2 Project Team
|
4
4
|
* Copyright (C) 2002-2005 Ruby-GNOME2 Project
|
5
5
|
* Copyright (C) 2002,2003 Masahiro Sakai
|
6
6
|
*
|
@@ -34,8 +34,8 @@ extern "C" {
|
|
34
34
|
#endif /* __cplusplus */
|
35
35
|
|
36
36
|
#define RBGLIB_MAJOR_VERSION 1
|
37
|
-
#define RBGLIB_MINOR_VERSION
|
38
|
-
#define RBGLIB_MICRO_VERSION
|
37
|
+
#define RBGLIB_MINOR_VERSION 2
|
38
|
+
#define RBGLIB_MICRO_VERSION 0
|
39
39
|
|
40
40
|
#ifndef RSTRING_PTR
|
41
41
|
# define RSTRING_PTR(s) (RSTRING(s)->ptr)
|
@@ -55,6 +55,14 @@ extern "C" {
|
|
55
55
|
typedef int GPid;
|
56
56
|
#endif
|
57
57
|
|
58
|
+
#ifndef G_SOURCE_REMOVE
|
59
|
+
# define G_SOURCE_REMOVE FALSE
|
60
|
+
#endif
|
61
|
+
|
62
|
+
#ifndef G_SOURCE_CONTINUE
|
63
|
+
# define G_SOURCE_CONTINUE TRUE
|
64
|
+
#endif
|
65
|
+
|
58
66
|
#define RBG_INSPECT(object) (rbg_rval_inspect(object))
|
59
67
|
|
60
68
|
#define RVAL2CSTR(v) (rbg_rval2cstr(&(v)))
|
data/ext/glib2/rbglib_source.c
CHANGED
@@ -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-2013 Ruby-GNOME2 Project Team
|
4
4
|
* Copyright (C) 2005 Masao Mutoh
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
@@ -171,6 +171,11 @@ Init_glib_source(void)
|
|
171
171
|
|
172
172
|
id_call = rb_intern("call");
|
173
173
|
|
174
|
+
rb_define_const(RG_TARGET_NAMESPACE,
|
175
|
+
"REMOVE", CBOOL2RVAL(G_SOURCE_REMOVE));
|
176
|
+
rb_define_const(RG_TARGET_NAMESPACE,
|
177
|
+
"CONTINUE", CBOOL2RVAL(G_SOURCE_CONTINUE));
|
178
|
+
|
174
179
|
RG_DEF_METHOD(attach, -1);
|
175
180
|
#if GLIB_CHECK_VERSION(2,12,0)
|
176
181
|
RG_DEF_METHOD_P(destroyed, 0);
|
data/ext/glib2/rbglib_win32.c
CHANGED
@@ -45,21 +45,6 @@ rbglib_m_win32_locale_deprecated(VALUE self)
|
|
45
45
|
return rg_s_locale(self);
|
46
46
|
}
|
47
47
|
|
48
|
-
static VALUE
|
49
|
-
rg_s_get_package_installation_directory(VALUE self, VALUE package, VALUE dll_name)
|
50
|
-
{
|
51
|
-
return CSTR2RVAL_FREE(g_win32_get_package_installation_directory(RVAL2CSTR(package),
|
52
|
-
RVAL2CSTR(dll_name)));
|
53
|
-
}
|
54
|
-
|
55
|
-
static VALUE
|
56
|
-
rg_s_get_package_installation_subdirectory(VALUE self, VALUE package, VALUE dll_name, VALUE subdir)
|
57
|
-
{
|
58
|
-
return CSTR2RVAL_FREE(g_win32_get_package_installation_subdirectory(RVAL2CSTR(package),
|
59
|
-
RVAL2CSTR(dll_name),
|
60
|
-
RVAL2CSTR(subdir)));
|
61
|
-
}
|
62
|
-
|
63
48
|
#if GLIB_CHECK_VERSION(2,6,0)
|
64
49
|
static VALUE
|
65
50
|
rg_s_version(VALUE self)
|
@@ -116,8 +101,6 @@ Init_glib_win32(void)
|
|
116
101
|
|
117
102
|
RG_DEF_SMETHOD(error_message, 1);
|
118
103
|
RG_DEF_SMETHOD(locale, 0);
|
119
|
-
RG_DEF_SMETHOD(get_package_installation_directory, 2);
|
120
|
-
RG_DEF_SMETHOD(get_package_installation_subdirectory, 3);
|
121
104
|
RG_DEF_SMETHOD(version, 0);
|
122
105
|
/* Deprecated */
|
123
106
|
rbg_define_singleton_method(mGLib, "win32_locale", rbglib_m_win32_locale_deprecated, 0);
|
data/ext/glib2/rbgobj_boxed.c
CHANGED
@@ -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-2013 Ruby-GNOME2 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
|
@@ -55,14 +55,14 @@ boxed_free(boxed_holder *holder)
|
|
55
55
|
static VALUE
|
56
56
|
rbgobj_boxed_s_allocate(VALUE klass)
|
57
57
|
{
|
58
|
-
const RGObjClassInfo*
|
59
|
-
boxed_holder*
|
58
|
+
const RGObjClassInfo *cinfo = rbgobj_lookup_class(klass);
|
59
|
+
boxed_holder *holder;
|
60
60
|
VALUE result;
|
61
61
|
|
62
62
|
if (cinfo->gtype == G_TYPE_BOXED)
|
63
63
|
rb_raise(rb_eTypeError, "abstract class");
|
64
64
|
|
65
|
-
result = Data_Make_Struct(klass, boxed_holder,
|
65
|
+
result = Data_Make_Struct(klass, boxed_holder,
|
66
66
|
boxed_mark, boxed_free, holder);
|
67
67
|
holder->type = cinfo->gtype;
|
68
68
|
holder->boxed = NULL;
|
@@ -81,8 +81,8 @@ rg_initialize(VALUE self)
|
|
81
81
|
static VALUE
|
82
82
|
rg_inspect(VALUE self)
|
83
83
|
{
|
84
|
-
boxed_holder*
|
85
|
-
gchar*
|
84
|
+
boxed_holder *holder;
|
85
|
+
gchar *s;
|
86
86
|
VALUE result;
|
87
87
|
|
88
88
|
Data_Get_Struct(self, boxed_holder, holder);
|
@@ -102,8 +102,8 @@ rg_inspect(VALUE self)
|
|
102
102
|
static VALUE
|
103
103
|
rg_initialize_copy(VALUE self, VALUE orig)
|
104
104
|
{
|
105
|
-
boxed_holder*
|
106
|
-
boxed_holder*
|
105
|
+
boxed_holder *holder1;
|
106
|
+
boxed_holder *holder2;
|
107
107
|
|
108
108
|
if (self == orig) return self;
|
109
109
|
|
@@ -134,24 +134,21 @@ rbgobj_boxed_create(VALUE klass)
|
|
134
134
|
|
135
135
|
void
|
136
136
|
rbgobj_boxed_initialize(VALUE obj, gpointer boxed)
|
137
|
-
{
|
138
|
-
boxed_holder*
|
137
|
+
{
|
138
|
+
boxed_holder *holder;
|
139
139
|
Data_Get_Struct(obj, boxed_holder, holder);
|
140
140
|
holder->boxed = g_boxed_copy(holder->type, boxed);
|
141
141
|
holder->own = TRUE;
|
142
142
|
}
|
143
143
|
|
144
144
|
gpointer
|
145
|
-
|
145
|
+
rbgobj_boxed_get_default(VALUE obj, GType gtype)
|
146
146
|
{
|
147
|
-
boxed_holder*
|
148
|
-
|
149
|
-
if (NIL_P(obj))
|
150
|
-
return NULL;
|
147
|
+
boxed_holder *holder;
|
151
148
|
|
152
149
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(obj, GTYPE2CLASS(gtype))))
|
153
150
|
rb_raise(rb_eArgError, "invalid argument %s (expect %s)",
|
154
|
-
rb_class2name(CLASS_OF(obj)),
|
151
|
+
rb_class2name(CLASS_OF(obj)),
|
155
152
|
rb_class2name(GTYPE2CLASS(gtype)));
|
156
153
|
|
157
154
|
Data_Get_Struct(obj, boxed_holder, holder);
|
@@ -161,22 +158,32 @@ rbgobj_boxed_get(VALUE obj, GType gtype)
|
|
161
158
|
return holder->boxed;
|
162
159
|
}
|
163
160
|
|
161
|
+
gpointer
|
162
|
+
rbgobj_boxed_get(VALUE obj, GType gtype)
|
163
|
+
{
|
164
|
+
gpointer boxed = NULL;
|
165
|
+
|
166
|
+
if (NIL_P(obj))
|
167
|
+
return NULL;
|
168
|
+
|
169
|
+
if (rbgobj_convert_robj2instance(gtype, obj, &boxed)) {
|
170
|
+
return boxed;
|
171
|
+
}
|
172
|
+
|
173
|
+
return rbgobj_boxed_get_default(obj, gtype);
|
174
|
+
}
|
175
|
+
|
164
176
|
VALUE
|
165
|
-
|
177
|
+
rbgobj_make_boxed_raw(gpointer p, GType gtype, VALUE klass, gint flags)
|
166
178
|
{
|
167
|
-
const RGObjClassInfo* cinfo;
|
168
179
|
VALUE result;
|
169
|
-
boxed_holder*
|
180
|
+
boxed_holder *holder;
|
170
181
|
|
171
|
-
|
172
|
-
return Qnil;
|
173
|
-
|
174
|
-
cinfo = GTYPE2CINFO(gtype);
|
175
|
-
result = rbgobj_boxed_s_allocate(cinfo->klass);
|
182
|
+
result = rbgobj_boxed_s_allocate(klass);
|
176
183
|
|
177
184
|
Data_Get_Struct(result, boxed_holder, holder);
|
178
185
|
|
179
|
-
if (
|
186
|
+
if (flags & RBGOBJ_BOXED_NOT_COPY) {
|
180
187
|
holder->boxed = p;
|
181
188
|
holder->own = FALSE;
|
182
189
|
} else {
|
@@ -187,43 +194,53 @@ rbgobj_make_boxed(gpointer p, GType gtype)
|
|
187
194
|
return result;
|
188
195
|
}
|
189
196
|
|
197
|
+
VALUE
|
198
|
+
rbgobj_make_boxed_default(gpointer p, GType gtype)
|
199
|
+
{
|
200
|
+
const RGObjClassInfo *cinfo;
|
201
|
+
|
202
|
+
cinfo = GTYPE2CINFO(gtype);
|
203
|
+
return rbgobj_make_boxed_raw(p, gtype, cinfo->klass, cinfo->flags);
|
204
|
+
}
|
205
|
+
|
206
|
+
VALUE
|
207
|
+
rbgobj_make_boxed(gpointer p, GType gtype)
|
208
|
+
{
|
209
|
+
VALUE result;
|
210
|
+
|
211
|
+
if (!p)
|
212
|
+
return Qnil;
|
213
|
+
|
214
|
+
if (rbgobj_convert_instance2robj(gtype, p, &result)) {
|
215
|
+
return result;
|
216
|
+
}
|
217
|
+
|
218
|
+
return rbgobj_make_boxed_default(p, gtype);
|
219
|
+
}
|
220
|
+
|
190
221
|
void
|
191
222
|
rbgobj_boxed_not_copy_obj(GType gtype)
|
192
223
|
{
|
193
|
-
RGObjClassInfo*
|
224
|
+
RGObjClassInfo *cinfo = (RGObjClassInfo *)GTYPE2CINFO(gtype);
|
194
225
|
cinfo->flags |= RBGOBJ_BOXED_NOT_COPY;
|
195
226
|
}
|
196
227
|
|
197
228
|
/**********************************************************************/
|
198
229
|
|
199
230
|
static VALUE
|
200
|
-
boxed_to_ruby(const GValue*
|
231
|
+
boxed_to_ruby(const GValue *from)
|
201
232
|
{
|
202
|
-
gpointer boxed
|
203
|
-
|
204
|
-
|
205
|
-
else
|
206
|
-
return rbgobj_make_boxed(boxed, G_VALUE_TYPE(from));
|
233
|
+
gpointer boxed;
|
234
|
+
boxed = g_value_get_boxed(from);
|
235
|
+
return rbgobj_make_boxed(boxed, G_VALUE_TYPE(from));
|
207
236
|
}
|
208
237
|
|
209
238
|
static void
|
210
|
-
boxed_from_ruby(VALUE from, GValue*
|
239
|
+
boxed_from_ruby(VALUE from, GValue *to)
|
211
240
|
{
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
g_value_set_boxed(to, NULL);
|
216
|
-
return;
|
217
|
-
}
|
218
|
-
|
219
|
-
Data_Get_Struct(from, boxed_holder, holder);
|
220
|
-
|
221
|
-
if (g_type_is_a(holder->type, G_VALUE_TYPE(to)))
|
222
|
-
g_value_set_boxed(to, holder->boxed);
|
223
|
-
else
|
224
|
-
rb_raise(rb_eRuntimeError, "%s is not a subtype of %s",
|
225
|
-
g_type_name(holder->type),
|
226
|
-
g_type_name(G_VALUE_TYPE(to)));
|
241
|
+
gpointer boxed;
|
242
|
+
boxed = rbgobj_boxed_get(from, G_VALUE_TYPE(to));
|
243
|
+
g_value_set_boxed(to, boxed);
|
227
244
|
}
|
228
245
|
|
229
246
|
/**********************************************************************/
|
data/ext/glib2/rbgobj_convert.c
CHANGED
@@ -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-2013 Ruby-GNOME2 Project Team
|
4
4
|
* Copyright (C) 2006 Sjoerd Simons, Masao Mutoh
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
@@ -24,20 +24,35 @@
|
|
24
24
|
|
25
25
|
static GHashTable *tables, *class_to_g_type_map;
|
26
26
|
|
27
|
+
static void
|
28
|
+
rg_convert_table_free(gpointer data)
|
29
|
+
{
|
30
|
+
RGConvertTable *table = data;
|
31
|
+
|
32
|
+
if (table->notify) {
|
33
|
+
table->notify(table->user_data);
|
34
|
+
}
|
35
|
+
g_free(table);
|
36
|
+
}
|
37
|
+
|
27
38
|
void
|
28
39
|
Init_gobject_convert(void)
|
29
40
|
{
|
30
|
-
tables
|
41
|
+
/* TODO: unref the below tables on exit. */
|
42
|
+
tables = g_hash_table_new_full(g_int_hash, g_int_equal, NULL,
|
43
|
+
rg_convert_table_free);
|
31
44
|
class_to_g_type_map = g_hash_table_new(g_int_hash, g_int_equal);
|
32
45
|
}
|
33
46
|
|
34
47
|
void
|
35
|
-
rbgobj_convert_define(RGConvertTable *table)
|
48
|
+
rbgobj_convert_define(const RGConvertTable *table)
|
36
49
|
{
|
37
|
-
|
38
|
-
|
50
|
+
RGConvertTable *copied_table;
|
51
|
+
copied_table = g_memdup(table, sizeof(RGConvertTable));
|
52
|
+
g_hash_table_insert(tables, &(copied_table->type), copied_table);
|
53
|
+
if (copied_table->klass != Qfalse && !NIL_P(copied_table->klass)) {
|
39
54
|
g_hash_table_insert(class_to_g_type_map,
|
40
|
-
&(
|
55
|
+
&(copied_table->klass), &(copied_table->type));
|
41
56
|
}
|
42
57
|
}
|
43
58
|
|
@@ -60,7 +75,7 @@ rbgobj_convert_get_superclass(GType type, VALUE *result)
|
|
60
75
|
|
61
76
|
table = rbgobj_convert_lookup(type);
|
62
77
|
if (table && table->get_superclass) {
|
63
|
-
*result = table->get_superclass();
|
78
|
+
*result = table->get_superclass(table->user_data);
|
64
79
|
return TRUE;
|
65
80
|
}
|
66
81
|
|
@@ -74,7 +89,7 @@ rbgobj_convert_type_init_hook(GType type, VALUE klass)
|
|
74
89
|
|
75
90
|
table = rbgobj_convert_lookup(type);
|
76
91
|
if (table && table->type_init_hook) {
|
77
|
-
table->type_init_hook(klass);
|
92
|
+
table->type_init_hook(klass, table->user_data);
|
78
93
|
return TRUE;
|
79
94
|
}
|
80
95
|
|
@@ -88,7 +103,7 @@ rbgobj_convert_rvalue2gvalue(GType type, VALUE value, GValue *result)
|
|
88
103
|
|
89
104
|
table = rbgobj_convert_lookup(type);
|
90
105
|
if (table && table->rvalue2gvalue) {
|
91
|
-
table->rvalue2gvalue(value, result);
|
106
|
+
table->rvalue2gvalue(value, result, table->user_data);
|
92
107
|
return TRUE;
|
93
108
|
}
|
94
109
|
|
@@ -102,7 +117,7 @@ rbgobj_convert_gvalue2rvalue(GType type, const GValue *value, VALUE *result)
|
|
102
117
|
|
103
118
|
table = rbgobj_convert_lookup(type);
|
104
119
|
if (table && table->gvalue2rvalue) {
|
105
|
-
*result = table->gvalue2rvalue(value);
|
120
|
+
*result = table->gvalue2rvalue(value, table->user_data);
|
106
121
|
return TRUE;
|
107
122
|
}
|
108
123
|
|
@@ -127,7 +142,7 @@ rbgobj_convert_initialize(GType type, VALUE obj, gpointer cobj)
|
|
127
142
|
|
128
143
|
table = rbgobj_convert_lookup(type);
|
129
144
|
if (table && table->initialize) {
|
130
|
-
table->initialize(obj, cobj);
|
145
|
+
table->initialize(obj, cobj, table->user_data);
|
131
146
|
return TRUE;
|
132
147
|
}
|
133
148
|
|
@@ -141,7 +156,7 @@ rbgobj_convert_robj2instance(GType type, VALUE obj, gpointer *result)
|
|
141
156
|
|
142
157
|
table = rbgobj_convert_lookup(type);
|
143
158
|
if (table && table->robj2instance) {
|
144
|
-
*result = table->robj2instance(obj);
|
159
|
+
*result = table->robj2instance(obj, table->user_data);
|
145
160
|
return TRUE;
|
146
161
|
}
|
147
162
|
|
@@ -155,7 +170,7 @@ rbgobj_convert_instance2robj(GType type, gpointer instance, VALUE *result)
|
|
155
170
|
|
156
171
|
table = rbgobj_convert_lookup(type);
|
157
172
|
if (table && table->instance2robj) {
|
158
|
-
*result = table->instance2robj(instance);
|
173
|
+
*result = table->instance2robj(instance, table->user_data);
|
159
174
|
return TRUE;
|
160
175
|
}
|
161
176
|
|
@@ -169,7 +184,7 @@ rbgobj_convert_unref(GType type, gpointer instance)
|
|
169
184
|
|
170
185
|
table = rbgobj_convert_lookup(type);
|
171
186
|
if (table && table->unref) {
|
172
|
-
table->unref(instance);
|
187
|
+
table->unref(instance, table->user_data);
|
173
188
|
return TRUE;
|
174
189
|
}
|
175
190
|
|
data/ext/glib2/rbgobj_value.c
CHANGED
@@ -22,6 +22,8 @@
|
|
22
22
|
#include "rbgprivate.h"
|
23
23
|
|
24
24
|
/**********************************************************************/
|
25
|
+
#define RG_TARGET_NAMESPACE rbgobj_cValue
|
26
|
+
#define _SELF(self) RVAL2GVALUE(self)
|
25
27
|
|
26
28
|
static ID id_to_s;
|
27
29
|
static GQuark qRValueToGValueFunc;
|
@@ -332,10 +334,50 @@ rbgobj_gc_mark_gvalue(GValue* value)
|
|
332
334
|
|
333
335
|
/**********************************************************************/
|
334
336
|
|
337
|
+
static VALUE
|
338
|
+
rg_initialize(VALUE self, VALUE rb_gtype, VALUE rb_value)
|
339
|
+
{
|
340
|
+
GValue value = G_VALUE_INIT;
|
341
|
+
|
342
|
+
g_value_init(&value, NUM2INT(rb_to_int(rb_gtype)));
|
343
|
+
rbgobj_rvalue_to_gvalue(rb_value, &value);
|
344
|
+
G_INITIALIZE(self, &value);
|
345
|
+
g_value_unset(&value);
|
346
|
+
|
347
|
+
return Qnil;
|
348
|
+
}
|
349
|
+
|
350
|
+
static VALUE
|
351
|
+
rg_type(VALUE self)
|
352
|
+
{
|
353
|
+
GValue *value;
|
354
|
+
|
355
|
+
value = _SELF(self);
|
356
|
+
|
357
|
+
return rbgobj_gtype_new(value->g_type);
|
358
|
+
}
|
359
|
+
|
360
|
+
static VALUE
|
361
|
+
rg_value(VALUE self)
|
362
|
+
{
|
363
|
+
GValue *value;
|
364
|
+
|
365
|
+
value = _SELF(self);
|
366
|
+
|
367
|
+
return GVAL2RVAL(value);
|
368
|
+
}
|
369
|
+
|
335
370
|
void
|
336
371
|
Init_gobject_gvalue(void)
|
337
372
|
{
|
373
|
+
VALUE RG_TARGET_NAMESPACE;
|
374
|
+
|
338
375
|
id_to_s = rb_intern("to_s");
|
339
376
|
qRValueToGValueFunc = g_quark_from_static_string("__ruby_r2g_func__");
|
340
377
|
qGValueToRValueFunc = g_quark_from_static_string("__ruby_g2r_func__");
|
378
|
+
|
379
|
+
RG_TARGET_NAMESPACE = G_DEF_CLASS(G_TYPE_VALUE, "Value", mGLib);
|
380
|
+
RG_DEF_METHOD(initialize, 2);
|
381
|
+
RG_DEF_METHOD(type, 0);
|
382
|
+
RG_DEF_METHOD(value, 0);
|
341
383
|
}
|
data/ext/glib2/rbgobject.c
CHANGED
@@ -77,9 +77,10 @@ gpointer
|
|
77
77
|
rbgobj_instance_from_ruby_object(VALUE obj)
|
78
78
|
{
|
79
79
|
GType type;
|
80
|
+
GType fundamental_type;
|
80
81
|
|
81
82
|
if (NIL_P(obj))
|
82
|
-
|
83
|
+
return NULL;
|
83
84
|
|
84
85
|
type = RVAL2GTYPE(obj);
|
85
86
|
if (rbgobj_convert_has_type(type)) {
|
@@ -88,16 +89,18 @@ rbgobj_instance_from_ruby_object(VALUE obj)
|
|
88
89
|
return instance;
|
89
90
|
}
|
90
91
|
|
91
|
-
|
92
|
-
switch (
|
92
|
+
fundamental_type = G_TYPE_FUNDAMENTAL(type);
|
93
|
+
switch (fundamental_type) {
|
93
94
|
case G_TYPE_OBJECT:
|
94
95
|
return rbgobj_get_gobject(obj);
|
96
|
+
case G_TYPE_BOXED:
|
97
|
+
return rbgobj_boxed_get(obj, type);
|
95
98
|
case G_TYPE_PARAM:
|
96
99
|
return rbgobj_get_param_spec(obj);
|
97
100
|
default:
|
98
101
|
{
|
99
102
|
gpointer instance;
|
100
|
-
if (!rbgobj_convert_robj2instance(
|
103
|
+
if (!rbgobj_convert_robj2instance(fundamental_type, obj, &instance)) {
|
101
104
|
rb_raise(rb_eTypeError, "%s isn't supported",
|
102
105
|
rb_class2name(CLASS_OF(obj)));
|
103
106
|
}
|
data/ext/glib2/rbgobject.h
CHANGED
@@ -227,7 +227,11 @@ extern void rbgobj_register_property_getter(GType gtype, const char* prop_name,
|
|
227
227
|
/* rbgobj_boxed.c */
|
228
228
|
extern VALUE rbgobj_boxed_create(VALUE klass); /* deprecated */
|
229
229
|
extern gpointer rbgobj_boxed_get(VALUE obj, GType gtype);
|
230
|
+
extern gpointer rbgobj_boxed_get_default(VALUE obj, GType gtype);
|
230
231
|
extern VALUE rbgobj_make_boxed(gpointer data, GType gtype);
|
232
|
+
extern VALUE rbgobj_make_boxed_raw(gpointer p, GType gtype,
|
233
|
+
VALUE klass, gint flags);
|
234
|
+
extern VALUE rbgobj_make_boxed_default(gpointer data, GType gtype);
|
231
235
|
extern void rbgobj_boxed_not_copy_obj(GType gtype);
|
232
236
|
|
233
237
|
/* rbgobj_enums.c */
|
@@ -267,17 +271,19 @@ extern GType g_poll_fd_get_type(void);
|
|
267
271
|
typedef struct {
|
268
272
|
GType type;
|
269
273
|
VALUE klass;
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
void (*
|
275
|
-
|
276
|
-
|
277
|
-
|
274
|
+
gpointer user_data;
|
275
|
+
GDestroyNotify notify;
|
276
|
+
VALUE (*get_superclass)(gpointer user_data);
|
277
|
+
void (*type_init_hook)(VALUE klass, gpointer user_data);
|
278
|
+
void (*rvalue2gvalue)(VALUE value, GValue *result, gpointer user_data);
|
279
|
+
VALUE (*gvalue2rvalue)(const GValue *value, gpointer user_data);
|
280
|
+
void (*initialize)(VALUE rb_instance, gpointer insntance, gpointer user_data);
|
281
|
+
gpointer (*robj2instance)(VALUE rb_instance, gpointer user_data);
|
282
|
+
VALUE (*instance2robj)(gpointer instance, gpointer user_data);
|
283
|
+
void (*unref)(gpointer instance, gpointer user_data);
|
278
284
|
} RGConvertTable;
|
279
285
|
|
280
|
-
extern void rbgobj_convert_define(RGConvertTable *table);
|
286
|
+
extern void rbgobj_convert_define(const RGConvertTable *table);
|
281
287
|
|
282
288
|
#ifdef __cplusplus
|
283
289
|
}
|
data/lib/gnome2-raketask.rb
CHANGED
@@ -112,8 +112,13 @@ class GNOME2Package
|
|
112
112
|
define_win32_build_task
|
113
113
|
end
|
114
114
|
|
115
|
+
def so_base_name
|
116
|
+
@name.gsub(/-/, "_")
|
117
|
+
end
|
118
|
+
|
115
119
|
def define_win32_extension_task
|
116
|
-
Rake::ExtensionTask.new(
|
120
|
+
Rake::ExtensionTask.new(so_base_name, @spec) do |ext|
|
121
|
+
ext.ext_dir = "ext/#{@name}"
|
117
122
|
ext.cross_compile = true
|
118
123
|
ext.cross_compiling do |spec|
|
119
124
|
if /mingw|mswin/ =~ spec.platform.to_s
|
@@ -64,18 +64,27 @@ class GNOME2Win32BinaryBuildTask
|
|
64
64
|
|
65
65
|
def define_build_tasks
|
66
66
|
namespace :build do
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
prepare_task_names = []
|
68
|
+
namespace :prepare do
|
69
|
+
prepare_task_names << "pkg_config"
|
70
|
+
task :pkg_config do
|
71
|
+
depended_packages = @configuration.build_dependencies
|
72
|
+
use_packages = [@configuration.package.name] + depended_packages
|
73
|
+
pkg_config_path = use_packages.collect do |package|
|
74
|
+
"../#{package}/#{@configuration.relative_binary_dir}/lib/pkgconfig"
|
75
|
+
end
|
76
|
+
ENV["PKG_CONFIG_PATH"] = pkg_config_path.collect do |path|
|
77
|
+
File.expand_path(path)
|
78
|
+
end.join(":")
|
79
|
+
ENV["PKG_CONFIG_LIBDIR"] = rcairo_win32_pkgconfig_path
|
72
80
|
end
|
73
|
-
ENV["PKG_CONFIG_PATH"] = pkg_config_path.collect do |path|
|
74
|
-
File.expand_path(path)
|
75
|
-
end.join(":")
|
76
|
-
ENV["PKG_CONFIG_LIBDIR"] = rcairo_win32_pkgconfig_path
|
77
81
|
end
|
78
82
|
|
83
|
+
full_prepare_task_names = prepare_task_names.collect do |name|
|
84
|
+
"win32:builder:build:prepare:#{name}"
|
85
|
+
end
|
86
|
+
task :prepare => full_prepare_task_names
|
87
|
+
|
79
88
|
build_packages.each do |package|
|
80
89
|
download_task = "win32:builder:download:#{package[:name]}"
|
81
90
|
desc "Build #{package[:label]} and install it into #{dist_dir}."
|
@@ -95,8 +104,11 @@ class GNOME2Win32BinaryBuildTask
|
|
95
104
|
(package[:patches] || []).each do |patch|
|
96
105
|
sh("patch -p1 < #{patches_dir}/#{patch}")
|
97
106
|
end
|
107
|
+
(package[:remove_paths] || []).each do |path|
|
108
|
+
rm_rf(path)
|
109
|
+
end
|
98
110
|
sh("./autogen.sh") if package[:need_autogen]
|
99
|
-
sh("autoreconf
|
111
|
+
sh("autoreconf --install") if package[:need_autoreconf]
|
100
112
|
sh("./configure",
|
101
113
|
"CPPFLAGS=#{cppflags(package)}",
|
102
114
|
"LDFLAGS=#{ldflags(package)}",
|
@@ -163,6 +175,18 @@ class GNOME2Win32BinaryBuildTask
|
|
163
175
|
package_root_dir + "patches"
|
164
176
|
end
|
165
177
|
|
178
|
+
def glib2_dir
|
179
|
+
package_root_dir.parent + "glib2"
|
180
|
+
end
|
181
|
+
|
182
|
+
def glib2_include_path
|
183
|
+
"#{glib2_dir}/vendor/local/include"
|
184
|
+
end
|
185
|
+
|
186
|
+
def glib2_lib_path
|
187
|
+
"#{glib2_dir}/vendor/local/lib"
|
188
|
+
end
|
189
|
+
|
166
190
|
def rcairo_win32_dir
|
167
191
|
package_root_dir.parent.parent + "rcairo.win32"
|
168
192
|
end
|
@@ -194,6 +218,9 @@ class GNOME2Win32BinaryBuildTask
|
|
194
218
|
|
195
219
|
def cppflags(package)
|
196
220
|
include_paths = package[:include_paths] || []
|
221
|
+
if @configuration.build_dependencies.include?("glib2")
|
222
|
+
include_paths += [glib2_include_path]
|
223
|
+
end
|
197
224
|
include_paths += [
|
198
225
|
rcairo_win32_include_path,
|
199
226
|
dist_dir + 'include',
|
@@ -206,6 +233,9 @@ class GNOME2Win32BinaryBuildTask
|
|
206
233
|
|
207
234
|
def ldflags(package)
|
208
235
|
library_paths = package[:library_paths] || []
|
236
|
+
if @configuration.build_dependencies.include?("glib2")
|
237
|
+
library_paths += [glib2_lib_path]
|
238
|
+
end
|
209
239
|
library_paths += [
|
210
240
|
rcairo_win32_lib_path,
|
211
241
|
dist_dir + 'lib',
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glib2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- The Ruby-GNOME2 Project Team
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-01-24 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: pkg-config
|
@@ -102,7 +102,6 @@ files:
|
|
102
102
|
- ext/glib2/rbglib_int64.c
|
103
103
|
- ext/glib2/rbglib_io_constants.c
|
104
104
|
- ext/glib2/glib2.def
|
105
|
-
- ext/glib2/rbgobj_fundamental.c
|
106
105
|
- ext/glib2/rbgcompat.h
|
107
106
|
- ext/glib2/rbgobj_closure.c
|
108
107
|
- ext/glib2/rbgobject.c
|
@@ -1,43 +0,0 @@
|
|
1
|
-
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
-
/*
|
3
|
-
* Copyright (C) 2011 Ruby-GNOME2 Project Team
|
4
|
-
* Copyright (C) 2007 Ruby-GNOME2 Project Team
|
5
|
-
*
|
6
|
-
* This library is free software; you can redistribute it and/or
|
7
|
-
* modify it under the terms of the GNU Lesser General Public
|
8
|
-
* License as published by the Free Software Foundation; either
|
9
|
-
* version 2.1 of the License, or (at your option) any later version.
|
10
|
-
*
|
11
|
-
* This library is distributed in the hope that it will be useful,
|
12
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
-
* Lesser General Public License for more details.
|
15
|
-
*
|
16
|
-
* You should have received a copy of the GNU Lesser General Public
|
17
|
-
* License along with this library; if not, write to the Free Software
|
18
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
-
* MA 02110-1301 USA
|
20
|
-
*/
|
21
|
-
|
22
|
-
#include "rbgobject.h"
|
23
|
-
#include "rbgprivate.h"
|
24
|
-
|
25
|
-
static GList *tables = NULL;
|
26
|
-
|
27
|
-
void
|
28
|
-
rbgobj_fund_define_fundamental(RGFundamental *fundamental)
|
29
|
-
{
|
30
|
-
RGConvertTable *table;
|
31
|
-
|
32
|
-
table = g_new0(RGConvertTable, 1);
|
33
|
-
table->type = fundamental->type;
|
34
|
-
table->get_superclass = fundamental->get_superclass;
|
35
|
-
table->type_init_hook = fundamental->type_init_hook;
|
36
|
-
table->rvalue2gvalue = fundamental->rvalue2gvalue;
|
37
|
-
table->gvalue2rvalue = fundamental->gvalue2rvalue;
|
38
|
-
table->initialize = fundamental->initialize;
|
39
|
-
table->robj2instance = fundamental->robj2instance;
|
40
|
-
table->instance2robj = fundamental->instance2robj;
|
41
|
-
RG_DEF_CONVERSION(table);
|
42
|
-
tables = g_list_prepend(tables, table);
|
43
|
-
}
|