Mercurial > pidgin.yaz
annotate plugins/perl/perl.c @ 12871:2422097a7a5e
[gaim-migrate @ 15223]
Whitespace in some .c and .h files that I hadn't had a reason to touch before,
this is it's own commit mostly to show how easy it was to get perl plugins to
support individual plugin pref frames, as opposed to just one for all the
loaded perl plugins.
And some whitespace that I missed in Conversation.xs.
committer: Tailor Script <tailor@pidgin.im>
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Sat, 14 Jan 2006 07:12:46 +0000 |
parents | cdd941172951 |
children | 59ff3e1c874e |
rev | line source |
---|---|
5205 | 1 /* |
2 * gaim | |
3 * | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
4 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> |
5205 | 5 * |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program 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 | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 */ | |
6235 | 20 #ifdef HAVE_CONFIG_H |
21 #include <config.h> | |
8138
3e8592b95f68
[gaim-migrate @ 8844]
Christian Hammond <chipx86@chipx86.com>
parents:
8095
diff
changeset
|
22 # ifdef HAVE_LIMITS_H |
3e8592b95f68
[gaim-migrate @ 8844]
Christian Hammond <chipx86@chipx86.com>
parents:
8095
diff
changeset
|
23 # include <limits.h> |
3e8592b95f68
[gaim-migrate @ 8844]
Christian Hammond <chipx86@chipx86.com>
parents:
8095
diff
changeset
|
24 # ifndef NAME_MAX |
3e8592b95f68
[gaim-migrate @ 8844]
Christian Hammond <chipx86@chipx86.com>
parents:
8095
diff
changeset
|
25 # define NAME_MAX _POSIX_NAME_MAX |
3e8592b95f68
[gaim-migrate @ 8844]
Christian Hammond <chipx86@chipx86.com>
parents:
8095
diff
changeset
|
26 # endif |
3e8592b95f68
[gaim-migrate @ 8844]
Christian Hammond <chipx86@chipx86.com>
parents:
8095
diff
changeset
|
27 # endif |
6235 | 28 #endif |
29 | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
30 #ifdef DEBUG |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
31 # undef DEBUG |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
32 #endif |
5205 | 33 |
34 #undef PACKAGE | |
35 | |
36 #define group perl_group | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
37 |
5205 | 38 #ifdef _WIN32 |
39 /* This took me an age to figure out.. without this __declspec(dllimport) | |
40 * will be ignored. | |
41 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
42 # define HASATTRIBUTE |
5205 | 43 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
44 |
5205 | 45 #include <EXTERN.h> |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
46 |
5205 | 47 #ifndef _SEM_SEMUN_UNDEFINED |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
48 # define HAS_UNION_SEMUN |
5205 | 49 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
50 |
5205 | 51 #include <perl.h> |
52 #include <XSUB.h> | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
53 |
5205 | 54 #ifndef _WIN32 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
55 # include <sys/mman.h> |
5205 | 56 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
57 |
5205 | 58 #undef PACKAGE |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
59 |
5205 | 60 #ifndef _WIN32 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
61 # include <dirent.h> |
5205 | 62 #else |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
63 /* We're using perl's win32 port of this */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
64 # define dirent direct |
5205 | 65 #endif |
66 | |
67 #undef group | |
68 | |
69 /* perl module support */ | |
70 #ifdef OLD_PERL | |
71 extern void boot_DynaLoader _((CV * cv)); | |
72 #else | |
73 extern void boot_DynaLoader _((pTHX_ CV * cv)); /* perl is so wacky */ | |
74 #endif | |
75 | |
76 #undef _ | |
77 #ifdef DEBUG | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
78 # undef DEBUG |
5205 | 79 #endif |
80 #ifdef _WIN32 | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
81 # undef pipe |
5205 | 82 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
83 |
6575
87a0fb97d3b9
[gaim-migrate @ 7097]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6549
diff
changeset
|
84 #ifdef _WIN32 |
87a0fb97d3b9
[gaim-migrate @ 7097]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6549
diff
changeset
|
85 #define _WIN32DEP_H_ |
87a0fb97d3b9
[gaim-migrate @ 7097]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6549
diff
changeset
|
86 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
87 #include "internal.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
88 #include "debug.h" |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
89 #include "plugin.h" |
6531
7c42b8ca3222
[gaim-migrate @ 7048]
Christian Hammond <chipx86@chipx86.com>
parents:
6527
diff
changeset
|
90 #include "signals.h" |
9943 | 91 #include "version.h" |
5205 | 92 |
6526
e162c765fe21
[gaim-migrate @ 7043]
Christian Hammond <chipx86@chipx86.com>
parents:
6525
diff
changeset
|
93 #include "perl-common.h" |
6522
0c5233faceb8
[gaim-migrate @ 7039]
Christian Hammond <chipx86@chipx86.com>
parents:
6520
diff
changeset
|
94 #include "perl-handlers.h" |
0c5233faceb8
[gaim-migrate @ 7039]
Christian Hammond <chipx86@chipx86.com>
parents:
6520
diff
changeset
|
95 |
5205 | 96 #define PERL_PLUGIN_ID "core-perl" |
97 | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
98 typedef struct |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
99 { |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
100 GaimPlugin *plugin; |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
101 char *package; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
102 char *load_sub; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
103 char *unload_sub; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
104 } GaimPerlScript; |
5205 | 105 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
106 PerlInterpreter *my_perl = NULL; |
5205 | 107 |
108 static void | |
109 #ifdef OLD_PERL | |
110 xs_init() | |
111 #else | |
112 xs_init(pTHX) | |
113 #endif | |
114 { | |
115 char *file = __FILE__; | |
116 | |
117 /* This one allows dynamic loading of perl modules in perl | |
118 scripts by the 'use perlmod;' construction*/ | |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
119 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); |
5205 | 120 } |
121 | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
122 static void |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
123 perl_init(void) |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
124 { |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
125 /* changed the name of the variable from load_file to |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
126 perl_definitions since now it does much more than defining |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
127 the load_file sub. Moreover, deplaced the initialisation to |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
128 the xs_init function. (TheHobbit) */ |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
129 char *perl_args[] = { "", "-e", "0", "-w" }; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
130 char perl_definitions[] = |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
131 { |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
132 /* We use to function one to load a file the other to |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
133 execute the string obtained from the first and holding |
8735
92cbf9713795
[gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents:
8138
diff
changeset
|
134 the file contents. This allows to have a really local $/ |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
135 without introducing temp variables to hold the old |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
136 value. Just a question of style:) */ |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
137 "package Gaim::PerlLoader;" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
138 "use Symbol;" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
139 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
140 "sub load_file {" |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
141 "my $f_name=shift;" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
142 "local $/=undef;" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
143 "open FH,$f_name or return \"__FAILED__\";" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
144 "$_=<FH>;" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
145 "close FH;" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
146 "return $_;" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
147 "}" |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
148 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
149 "sub destroy_package {" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
150 "eval { $_[0]->UNLOAD() if $_[0]->can('UNLOAD'); };" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
151 "Symbol::delete_package($_[0]);" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
152 "}" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
153 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
154 "sub load_n_eval {" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
155 "my ($f_name, $package) = @_;" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
156 "destroy_package($package);" |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
157 "my $strin=load_file($f_name);" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
158 "return 2 if($strin eq \"__FAILED__\");" |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
159 "my $eval = qq{package $package; $strin;};" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
160 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
161 "{" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
162 " eval $eval;" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
163 "}" |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
164 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
165 "if($@) {" |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
166 /*" #something went wrong\n"*/ |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
167 "die(\"Errors loading file $f_name: $@\");" |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
168 "}" |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
169 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
170 "return 0;" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
171 "}" |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
172 }; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
173 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
174 my_perl = perl_alloc(); |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
175 PERL_SET_CONTEXT(my_perl); |
11290 | 176 PL_perl_destruct_level = 1; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
177 perl_construct(my_perl); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
178 #ifdef DEBUG |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
179 perl_parse(my_perl, xs_init, 4, perl_args, NULL); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
180 #else |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
181 perl_parse(my_perl, xs_init, 3, perl_args, NULL); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
182 #endif |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
183 #ifdef HAVE_PERL_EVAL_PV |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
184 eval_pv(perl_definitions, TRUE); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
185 #else |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
186 perl_eval_pv(perl_definitions, TRUE); /* deprecated */ |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
187 #endif |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
188 perl_run(my_perl); |
5205 | 189 } |
190 | |
191 static void | |
192 perl_end(void) | |
193 { | |
6520
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
194 if (my_perl == NULL) |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
195 return; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
196 |
11290 | 197 PL_perl_destruct_level = 1; |
198 PERL_SET_CONTEXT(my_perl); | |
6520
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
199 perl_eval_pv( |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
200 "foreach my $lib (@DynaLoader::dl_modules) {" |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
201 "if ($lib =~ /^Gaim\\b/) {" |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
202 "$lib .= '::deinit();';" |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
203 "eval $lib;" |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
204 "}" |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
205 "}", |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
206 TRUE); |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
207 |
11290 | 208 PL_perl_destruct_level = 1; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
209 PERL_SET_CONTEXT(my_perl); |
6520
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
210 perl_destruct(my_perl); |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
211 perl_free(my_perl); |
2e2593d95121
[gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
6508
diff
changeset
|
212 my_perl = NULL; |
5205 | 213 } |
214 | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
215 void |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
216 gaim_perl_callXS(void (*subaddr)(pTHX_ CV *cv), CV *cv, SV **mark) |
5205 | 217 { |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
218 dSP; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
219 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
220 PUSHMARK(mark); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
221 (*subaddr)(aTHX_ cv); |
5205 | 222 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
223 PUTBACK; |
5205 | 224 } |
225 | |
226 static gboolean | |
227 probe_perl_plugin(GaimPlugin *plugin) | |
228 { | |
229 /* XXX This would be much faster if I didn't create a new | |
230 * PerlInterpreter every time I probed a plugin */ | |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
231 |
5205 | 232 PerlInterpreter *prober = perl_alloc(); |
233 char *argv[] = {"", plugin->path }; | |
234 gboolean status = TRUE; | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
235 HV *plugin_info; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
236 PERL_SET_CONTEXT(prober); |
11290 | 237 PL_perl_destruct_level = 1; |
5205 | 238 perl_construct(prober); |
11290 | 239 |
5922 | 240 perl_parse(prober, xs_init, 2, argv, NULL); |
11290 | 241 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
242 perl_run(prober); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
243 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
244 plugin_info = perl_get_hv("PLUGIN_INFO", FALSE); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
245 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
246 if (plugin_info == NULL) |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
247 status = FALSE; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
248 else if (!hv_exists(plugin_info, "perl_api_version", |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
249 strlen("perl_api_version")) || |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
250 !hv_exists(plugin_info, "name", strlen("name")) || |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
251 !hv_exists(plugin_info, "load", strlen("load"))) { |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
252 /* Not a valid plugin. */ |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
253 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
254 status = FALSE; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
255 } else { |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
256 SV **key; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
257 int perl_api_ver; |
5205 | 258 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
259 key = hv_fetch(plugin_info, "perl_api_version", |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
260 strlen("perl_api_version"), 0); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
261 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
262 perl_api_ver = SvIV(*key); |
5205 | 263 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
264 if (perl_api_ver != 2) |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
265 status = FALSE; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
266 else { |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
267 GaimPluginInfo *info; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
268 GaimPerlScript *gps; |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
269 char *basename; |
6678
eb95f31fa4eb
[gaim-migrate @ 7203]
Christian Hammond <chipx86@chipx86.com>
parents:
6636
diff
changeset
|
270 STRLEN len; |
5205 | 271 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
272 gaim_debug(GAIM_DEBUG_INFO, "perl", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
273 "Found plugin info\n"); |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
274 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
275 info = g_new0(GaimPluginInfo, 1); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
276 gps = g_new0(GaimPerlScript, 1); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
277 |
9943 | 278 info->magic = GAIM_PLUGIN_MAGIC; |
279 info->major_version = GAIM_MAJOR_VERSION; | |
280 info->minor_version = GAIM_MINOR_VERSION; | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
281 info->type = GAIM_PLUGIN_STANDARD; |
5205 | 282 |
283 info->dependencies = g_list_append(info->dependencies, | |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
284 PERL_PLUGIN_ID); |
5205 | 285 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
286 gps->plugin = plugin; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
287 |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
288 basename = g_path_get_basename(plugin->path); |
11170 | 289 gaim_perl_normalize_script_name(basename); |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
290 gps->package = g_strdup_printf("Gaim::Script::%s", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
291 basename); |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
292 g_free(basename); |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
293 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
294 /* We know this one exists. */ |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
295 key = hv_fetch(plugin_info, "name", strlen("name"), 0); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
296 info->name = g_strdup(SvPV(*key, len)); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
297 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
298 if ((key = hv_fetch(plugin_info, "GTK_UI", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
299 strlen("GTK_UI"), 0))) |
11170 | 300 info->ui_requirement = GAIM_GTK_PLUGIN_TYPE; |
301 | |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
302 if ((key = hv_fetch(plugin_info, "url", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
303 strlen("url"), 0))) |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
304 info->homepage = g_strdup(SvPV(*key, len)); |
11170 | 305 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
306 if ((key = hv_fetch(plugin_info, "author", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
307 strlen("author"), 0))) |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
308 info->author = g_strdup(SvPV(*key, len)); |
5205 | 309 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
310 if ((key = hv_fetch(plugin_info, "summary", |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
311 strlen("summary"), 0))) |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
312 info->summary = g_strdup(SvPV(*key, len)); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
313 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
314 if ((key = hv_fetch(plugin_info, "description", |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
315 strlen("description"), 0))) |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
316 info->description = g_strdup(SvPV(*key, len)); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
317 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
318 if ((key = hv_fetch(plugin_info, "version", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
319 strlen("version"), 0))) |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
320 info->version = g_strdup(SvPV(*key, len)); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
321 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
322 if ((key = hv_fetch(plugin_info, "load", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
323 strlen("load"), 0))) |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
324 gps->load_sub = g_strdup_printf("%s::%s", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
325 gps->package, |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
326 SvPV(*key, len)); |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
327 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
328 if ((key = hv_fetch(plugin_info, "unload", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
329 strlen("unload"), 0))) |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
330 gps->unload_sub = g_strdup_printf("%s::%s", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
331 gps->package, |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
332 SvPV(*key, len)); |
5205 | 333 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
334 /********************************************************/ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
335 /* Only one of the next two options should be present */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
336 /* */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
337 /* prefs_info - Uses non-GUI (read GTK) gaim API calls */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
338 /* and creates a GaimPluginPrefInfo type. */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
339 /* */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
340 /* gtk_prefs_info - Requires gtk2-perl be installed by */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
341 /* the user and he must create a GtkWidget */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
342 /* representing the plugin preferences */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
343 /* page. */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
344 /********************************************************/ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
345 if ((key = hv_fetch(plugin_info, "prefs_info", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
346 strlen("prefs_info"), 0))) { |
11842 | 347 char *tmp = g_strdup_printf("%s::%s", gps->package, SvPV(*key, len)); |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
348 /* key now is the name of the Perl sub that |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
349 * will create a frame for us */ |
11842 | 350 info->prefs_info = gaim_perl_plugin_pref(tmp); |
351 g_free(tmp); | |
11123 | 352 } |
11170 | 353 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
354 if ((key = hv_fetch(plugin_info, "gtk_prefs_info", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
355 strlen("gtk_prefs_info"), 0))) { |
11842 | 356 char *tmp = g_strdup_printf("%s::%s", gps->package, SvPV(*key, len)); |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
357 /* key now is the name of the Perl sub that |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
358 * will create a frame for us */ |
11842 | 359 info->ui_info = gaim_perl_gtk_plugin_pref(tmp); |
360 g_free(tmp); | |
11170 | 361 } |
362 | |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
363 /********************************************************/ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
364 /* */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
365 /* plugin_action - This is given to the plugin info */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
366 /* as the action GList. There are two */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
367 /* parts so the user can set the title */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
368 /* as it will appear in the plugin */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
369 /* action menu. The name is extracted */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
370 /* and then the callback perl sub's */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
371 /* name both of which then are handled */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
372 /* by an internal gaim_perl function */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
373 /* that sets up the single cb function */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
374 /* which is then inserted into 'info'. */ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
375 /********************************************************/ |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
376 if ((key = hv_fetch(plugin_info, "plugin_action_label", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
377 strlen("plugin_action_label"), 0))) { |
11170 | 378 gaim_perl_plugin_action_label = g_strdup(SvPV(*key, len)); |
379 } | |
380 | |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
381 if ((key = hv_fetch(plugin_info, "plugin_action", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
382 strlen("plugin_action"), 0))) { |
11170 | 383 gaim_perl_plugin_action_callback_sub = g_strdup_printf("%s::%s", gps->package, SvPV(*key, len)); |
384 info->actions = gaim_perl_plugin_action; | |
385 } | |
11123 | 386 |
5205 | 387 plugin->info = info; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
388 info->extra_info = gps; |
5205 | 389 |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
390 status = gaim_plugin_register(plugin); |
5205 | 391 } |
392 } | |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
393 |
11290 | 394 PL_perl_destruct_level = 1; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
395 PERL_SET_CONTEXT(prober); |
5205 | 396 perl_destruct(prober); |
397 perl_free(prober); | |
398 return status; | |
399 } | |
400 | |
401 static gboolean | |
402 load_perl_plugin(GaimPlugin *plugin) | |
403 { | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
404 GaimPerlScript *gps = (GaimPerlScript *)plugin->info->extra_info; |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
405 char *atmp[3] = { plugin->path, NULL, NULL }; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
406 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
407 if (gps == NULL || gps->load_sub == NULL) |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
408 return FALSE; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
409 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
410 gaim_debug(GAIM_DEBUG_INFO, "perl", "Loading perl script\n"); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
411 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
412 if (my_perl == NULL) |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
413 perl_init(); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
414 |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
415 plugin->handle = gps; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
416 |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
417 atmp[1] = gps->package; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
418 |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
419 PERL_SET_CONTEXT(my_perl); |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
420 execute_perl("Gaim::PerlLoader::load_n_eval", 2, atmp); |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
421 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
422 { |
11318 | 423 dSP; |
11290 | 424 PERL_SET_CONTEXT(my_perl); |
11318 | 425 SPAGAIN; |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
426 ENTER; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
427 SAVETMPS; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
428 PUSHMARK(sp); |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
429 XPUSHs(sv_2mortal(gaim_perl_bless_object(plugin, |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
430 "Gaim::Plugin"))); |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
431 PUTBACK; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
432 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
433 perl_call_pv(gps->load_sub, G_EVAL | G_SCALAR); |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
434 SPAGAIN; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
435 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
436 if (SvTRUE(ERRSV)) { |
6678
eb95f31fa4eb
[gaim-migrate @ 7203]
Christian Hammond <chipx86@chipx86.com>
parents:
6636
diff
changeset
|
437 STRLEN len; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
438 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
439 gaim_debug(GAIM_DEBUG_ERROR, "perl", |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
440 "Perl function %s exited abnormally: %s\n", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
441 gps->load_sub, SvPV(ERRSV, len)); |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
442 } |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
443 |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
444 PUTBACK; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
445 FREETMPS; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
446 LEAVE; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
447 } |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
448 |
5205 | 449 return TRUE; |
450 } | |
451 | |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
452 static void |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
453 destroy_package(const char *package) |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
454 { |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
455 dSP; |
11318 | 456 PERL_SET_CONTEXT(my_perl); |
457 SPAGAIN; | |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
458 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
459 ENTER; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
460 SAVETMPS; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
461 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
462 PUSHMARK(SP); |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
463 XPUSHs(sv_2mortal(newSVpv(package, strlen(package)))); |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
464 PUTBACK; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
465 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
466 perl_call_pv("Gaim::PerlLoader::destroy_package", |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
467 G_VOID | G_EVAL | G_DISCARD); |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
468 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
469 SPAGAIN; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
470 |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
471 PUTBACK; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
472 FREETMPS; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
473 LEAVE; |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
474 } |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
475 |
5205 | 476 static gboolean |
477 unload_perl_plugin(GaimPlugin *plugin) | |
478 { | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
479 GaimPerlScript *gps = (GaimPerlScript *)plugin->info->extra_info; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
480 |
9578
7cd7da72c872
[gaim-migrate @ 10421]
Christian Hammond <chipx86@chipx86.com>
parents:
8993
diff
changeset
|
481 if (gps == NULL) |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
482 return FALSE; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
483 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
484 gaim_debug(GAIM_DEBUG_INFO, "perl", "Unloading perl script\n"); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
485 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
486 if (gps->unload_sub != NULL) { |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
487 dSP; |
11318 | 488 PERL_SET_CONTEXT(my_perl); |
489 SPAGAIN; | |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
490 ENTER; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
491 SAVETMPS; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
492 PUSHMARK(sp); |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
493 XPUSHs(sv_2mortal(gaim_perl_bless_object(plugin, |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
494 "Gaim::Plugin"))); |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
495 PUTBACK; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
496 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
497 perl_call_pv(gps->unload_sub, G_EVAL | G_SCALAR); |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
498 SPAGAIN; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
499 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
500 if (SvTRUE(ERRSV)) { |
6678
eb95f31fa4eb
[gaim-migrate @ 7203]
Christian Hammond <chipx86@chipx86.com>
parents:
6636
diff
changeset
|
501 STRLEN len; |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
502 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
503 gaim_debug(GAIM_DEBUG_ERROR, "perl", |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
504 "Perl function %s exited abnormally: %s\n", |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
505 gps->load_sub, SvPV(ERRSV, len)); |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
506 } |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
507 |
6536
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
508 PUTBACK; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
509 FREETMPS; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
510 LEAVE; |
9767117bc47e
[gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents:
6531
diff
changeset
|
511 } |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
512 |
6549
ed796f756237
[gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents:
6536
diff
changeset
|
513 gaim_perl_signal_clear_for_plugin(plugin); |
6522
0c5233faceb8
[gaim-migrate @ 7039]
Christian Hammond <chipx86@chipx86.com>
parents:
6520
diff
changeset
|
514 gaim_perl_timeout_clear_for_plugin(plugin); |
5205 | 515 |
6636
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
516 destroy_package(gps->package); |
452c62a92963
[gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents:
6575
diff
changeset
|
517 |
5205 | 518 return TRUE; |
519 } | |
520 | |
521 static void | |
522 destroy_perl_plugin(GaimPlugin *plugin) | |
523 { | |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
524 if (plugin->info != NULL) |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
525 { |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
526 GaimPerlScript *gps; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
527 |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
528 g_free(plugin->info->name); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
529 g_free(plugin->info->version); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
530 g_free(plugin->info->summary); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
531 g_free(plugin->info->description); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
532 g_free(plugin->info->author); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
533 g_free(plugin->info->homepage); |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
534 |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
535 gps = (GaimPerlScript *)plugin->info->extra_info; |
12871
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
536 if (gps != NULL) { |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
537 g_free(gps->load_sub); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
538 g_free(gps->unload_sub); |
2422097a7a5e
[gaim-migrate @ 15223]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11842
diff
changeset
|
539 g_free(gps->package); |
6508
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
540 g_free(gps); |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
541 plugin->info->extra_info = NULL; |
cbd24b37350d
[gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
542 } |
5205 | 543 } |
544 } | |
545 | |
546 static gboolean | |
11033
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
547 plugin_load(GaimPlugin *plugin) |
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
548 { |
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
549 return TRUE; |
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
550 } |
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
551 |
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
552 static gboolean |
5205 | 553 plugin_unload(GaimPlugin *plugin) |
554 { | |
555 perl_end(); | |
556 | |
557 return TRUE; | |
558 } | |
559 | |
560 static GaimPluginLoaderInfo loader_info = | |
561 { | |
562 NULL, /**< exts */ | |
563 probe_perl_plugin, /**< probe */ | |
564 load_perl_plugin, /**< load */ | |
565 unload_perl_plugin, /**< unload */ | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
566 destroy_perl_plugin /**< destroy */ |
5205 | 567 }; |
568 | |
569 static GaimPluginInfo info = | |
570 { | |
9943 | 571 GAIM_PLUGIN_MAGIC, |
572 GAIM_MAJOR_VERSION, | |
573 GAIM_MINOR_VERSION, | |
5205 | 574 GAIM_PLUGIN_LOADER, /**< type */ |
575 NULL, /**< ui_requirement */ | |
576 0, /**< flags */ | |
577 NULL, /**< dependencies */ | |
578 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
579 | |
580 PERL_PLUGIN_ID, /**< id */ | |
581 N_("Perl Plugin Loader"), /**< name */ | |
582 VERSION, /**< version */ | |
583 N_("Provides support for loading perl plugins."), /**< summary */ | |
584 N_("Provides support for loading perl plugins."), /**< description */ | |
585 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ | |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6235
diff
changeset
|
586 GAIM_WEBSITE, /**< homepage */ |
5205 | 587 |
11033
50224ac8184d
[gaim-migrate @ 12919]
Etan Reisner <pidgin@unreliablesource.net>
parents:
9943
diff
changeset
|
588 plugin_load, /**< load */ |
5205 | 589 plugin_unload, /**< unload */ |
590 NULL, /**< destroy */ | |
591 | |
592 NULL, /**< ui_info */ | |
8993 | 593 &loader_info, /**< extra_info */ |
594 NULL, | |
595 NULL | |
5205 | 596 }; |
597 | |
598 static void | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5775
diff
changeset
|
599 init_plugin(GaimPlugin *plugin) |
5205 | 600 { |
601 loader_info.exts = g_list_append(loader_info.exts, "pl"); | |
602 } | |
603 | |
6063 | 604 GAIM_INIT_PLUGIN(perl, init_plugin, info) |