annotate plugins/perl/perl.c @ 7694:6a9acef3b867

[gaim-migrate @ 8339] Committing this now so that I don't accidentally destroy it again. We're going WYSIWYG, folks. This is the beginning of it. Don't bother trying to tell me what doesn't work yet. This is just a sneak-peek. Bold, Italics, and Underline work fairly well. The toggle buttons in the tooltips won't necessarily be accurate yet, and things will get screwed up if you say, start typing, make something bold, then go back to before where you started typing and type there. It'll all be fixed eventually. NOTE: I am not liable for any sexual arousal caused by using this code committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Tue, 02 Dec 2003 07:33:42 +0000
parents eb95f31fa4eb
children 4396d1088273
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /*
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * gaim
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
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
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * (at your option) any later version.
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 *
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * GNU General Public License for more details.
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 *
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 */
6235
1049dd7e976e [gaim-migrate @ 6728]
Mark Doliner <mark@kingant.net>
parents: 6100
diff changeset
20 #ifdef HAVE_CONFIG_H
1049dd7e976e [gaim-migrate @ 6728]
Mark Doliner <mark@kingant.net>
parents: 6100
diff changeset
21 #include <config.h>
1049dd7e976e [gaim-migrate @ 6728]
Mark Doliner <mark@kingant.net>
parents: 6100
diff changeset
22 #endif
1049dd7e976e [gaim-migrate @ 6728]
Mark Doliner <mark@kingant.net>
parents: 6100
diff changeset
23
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
24 #ifdef DEBUG
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
25 # undef DEBUG
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
26 #endif
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 #undef PACKAGE
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
30
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31 #define group perl_group
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
32
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33 #ifdef _WIN32
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 /* This took me an age to figure out.. without this __declspec(dllimport)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 * will be ignored.
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 */
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
37 # define HASATTRIBUTE
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38 #endif
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
39
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 #include <EXTERN.h>
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
41
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 #ifndef _SEM_SEMUN_UNDEFINED
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
43 # define HAS_UNION_SEMUN
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 #endif
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
45
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46 #include <perl.h>
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 #include <XSUB.h>
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
48
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 #ifndef _WIN32
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
50 # include <sys/mman.h>
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 #endif
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
52
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53 #undef PACKAGE
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
54
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 #ifndef _WIN32
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
56 # include <dirent.h>
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 #else
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
58 /* We're using perl's win32 port of this */
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
59 # define dirent direct
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60 #endif
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
61
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62 #undef group
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 /* perl module support */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 #ifdef OLD_PERL
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66 extern void boot_DynaLoader _((CV * cv));
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 #else
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 extern void boot_DynaLoader _((pTHX_ CV * cv)); /* perl is so wacky */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69 #endif
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 #undef _
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72 #ifdef DEBUG
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
73 # undef DEBUG
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 #endif
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 #ifdef _WIN32
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
76 # undef pipe
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
77 #endif
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
78
6575
87a0fb97d3b9 [gaim-migrate @ 7097]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6549
diff changeset
79 #ifdef _WIN32
87a0fb97d3b9 [gaim-migrate @ 7097]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6549
diff changeset
80 #define _WIN32DEP_H_
87a0fb97d3b9 [gaim-migrate @ 7097]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6549
diff changeset
81 #endif
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
82 #include "internal.h"
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
83 #include "debug.h"
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
84 #include "plugin.h"
6531
7c42b8ca3222 [gaim-migrate @ 7048]
Christian Hammond <chipx86@chipx86.com>
parents: 6527
diff changeset
85 #include "signals.h"
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86
6526
e162c765fe21 [gaim-migrate @ 7043]
Christian Hammond <chipx86@chipx86.com>
parents: 6525
diff changeset
87 #include "perl-common.h"
6522
0c5233faceb8 [gaim-migrate @ 7039]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
88 #include "perl-handlers.h"
0c5233faceb8 [gaim-migrate @ 7039]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
89
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90 #define PERL_PLUGIN_ID "core-perl"
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
92 typedef struct
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
93 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
94 GaimPlugin *plugin;
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
95 char *package;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
96 char *load_sub;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
97 char *unload_sub;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
99 } GaimPerlScript;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
102 PerlInterpreter *my_perl = NULL;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104 static void
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
105 #ifdef OLD_PERL
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
106 xs_init()
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
107 #else
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
108 xs_init(pTHX)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
109 #endif
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110 {
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111 char *file = __FILE__;
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
112
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113 /* This one allows dynamic loading of perl modules in perl
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
114 scripts by the 'use perlmod;' construction*/
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
115 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
116 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
117
6485
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
118
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
119 static void
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
120 perl_init(void)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
121 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
122 /* changed the name of the variable from load_file to
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
123 perl_definitions since now it does much more than defining
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
124 the load_file sub. Moreover, deplaced the initialisation to
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
125 the xs_init function. (TheHobbit)*/
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
126 char *perl_args[] = { "", "-e", "0", "-w" };
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
127 char perl_definitions[] =
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
128 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
129 /* 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
130 execute the string obtained from the first and holding
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
131 the file conents. This allows to have a realy local $/
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
132 without introducing temp variables to hold the old
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
133 value. Just a question of style:) */
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
134 "package Gaim::PerlLoader;"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
135 "use Symbol;"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
136
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
137 "sub load_file {"
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
138 "my $f_name=shift;"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
139 "local $/=undef;"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
140 "open FH,$f_name or return \"__FAILED__\";"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
141 "$_=<FH>;"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
142 "close FH;"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
143 "return $_;"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
144 "}"
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
145
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
146 "sub destroy_package {"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
147 "eval { $_[0]->UNLOAD() if $_[0]->can('UNLOAD'); };"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
148 "Symbol::delete_package($_[0]);"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
149 "}"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
150
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
151 "sub load_n_eval {"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
152 "my ($f_name, $package) = @_;"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
153 "destroy_package($package);"
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
154 "my $strin=load_file($f_name);"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
155 "return 2 if($strin eq \"__FAILED__\");"
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
156 "my $eval = qq{package $package; $strin;};"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
157
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
158 "{"
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
159 " eval $eval;"
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 "if($@) {"
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
163 /*" #something went wrong\n"*/
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
164 "die(\"Errors loading file $f_name: $@\");"
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
165 "}"
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
166
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
167 "return 0;"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
168 "}"
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
169 };
6485
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
170
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
171 my_perl = perl_alloc();
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
172 perl_construct(my_perl);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
173 #ifdef DEBUG
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
174 perl_parse(my_perl, xs_init, 4, perl_args, NULL);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
175 #else
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
176 perl_parse(my_perl, xs_init, 3, perl_args, NULL);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
177 #endif
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
178 #ifdef HAVE_PERL_EVAL_PV
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
179 eval_pv(perl_definitions, TRUE);
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_eval_pv(perl_definitions, TRUE); /* deprecated */
6485
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
182 #endif
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
183
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
184 perl_run(my_perl);
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
185 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
186
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
187 static void
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
188 perl_end(void)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189 {
6520
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
190 if (my_perl == NULL)
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
191 return;
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
192
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
193 perl_eval_pv(
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
194 "foreach my $lib (@DynaLoader::dl_modules) {"
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
195 "if ($lib =~ /^Gaim\\b/) {"
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
196 "$lib .= '::deinit();';"
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
197 "eval $lib;"
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
198 "}"
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
199 "}",
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
200 TRUE);
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
201
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
202 perl_destruct(my_perl);
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
203 perl_free(my_perl);
2e2593d95121 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents: 6508
diff changeset
204 my_perl = NULL;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
207 void
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
208 gaim_perl_callXS(void (*subaddr)(pTHX_ CV *cv), CV *cv, SV **mark)
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209 {
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
210 dSP;
6485
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
211
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
212 PUSHMARK(mark);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
213 (*subaddr)(aTHX_ cv);
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
214
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
215 PUTBACK;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
218 static void
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
219 normalize_script_name(char *name)
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
220 {
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
221 char *c;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
222
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
223 c = strrchr(name, '.');
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
224
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
225 if (c != NULL)
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
226 *c = '\0';
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
227
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
228 for (c = name; *c != '\0'; c++)
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
229 {
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
230 if (*c == '_' && !g_ascii_isalnum(*c))
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
231 *c = '_';
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
232 }
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
233 }
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
234
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
235 static gboolean
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
236 probe_perl_plugin(GaimPlugin *plugin)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
237 {
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
238 /* XXX This would be much faster if I didn't create a new
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
239 * PerlInterpreter every time I probed a plugin */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
240 PerlInterpreter *prober = perl_alloc();
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
241 char *argv[] = {"", plugin->path };
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
242 gboolean status = TRUE;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
243 HV *plugin_info;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
244
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
245 perl_construct(prober);
5922
83507b72ae6d [gaim-migrate @ 6362]
Luke Schierer <lschiere@pidgin.im>
parents: 5912
diff changeset
246 perl_parse(prober, xs_init, 2, argv, NULL);
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
247 perl_run(prober);
6485
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
248
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
249 plugin_info = perl_get_hv("PLUGIN_INFO", FALSE);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
250
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
251 if (plugin_info == NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
252 status = FALSE;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
253 else if (!hv_exists(plugin_info, "perl_api_version",
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
254 strlen("perl_api_version")) ||
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
255 !hv_exists(plugin_info, "name", strlen("name")) ||
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
256 !hv_exists(plugin_info, "load", strlen("load")))
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
257 {
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
258 /* Not a valid plugin. */
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
259
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
260 status = FALSE;
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 else
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
263 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
264 SV **key;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
265 int perl_api_ver;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
266
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
267 key = hv_fetch(plugin_info, "perl_api_version",
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
268 strlen("perl_api_version"), 0);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
269
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
270 perl_api_ver = SvIV(*key);
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
271
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
272 if (perl_api_ver != 2)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
273 status = FALSE;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
274 else
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
275 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
276 GaimPluginInfo *info;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
277 GaimPerlScript *gps;
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
278 char *basename;
6678
eb95f31fa4eb [gaim-migrate @ 7203]
Christian Hammond <chipx86@chipx86.com>
parents: 6636
diff changeset
279 STRLEN len;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
280
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
281 gaim_debug(GAIM_DEBUG_INFO, "perl", "Found plugin info\n");
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
282
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
283 info = g_new0(GaimPluginInfo, 1);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
284 gps = g_new0(GaimPerlScript, 1);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
285
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
286 info->api_version = 2;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
287 info->type = GAIM_PLUGIN_STANDARD;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
288
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
289 info->dependencies = g_list_append(info->dependencies,
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
290 PERL_PLUGIN_ID);
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
291
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
292 gps->plugin = plugin;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
293
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
294 basename = g_path_get_basename(plugin->path);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
295 normalize_script_name(basename);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
296 gps->package = g_strdup_printf("Gaim::Script::%s", basename);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
297 g_free(basename);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
298
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
299 /* We know this one exists. */
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
300 key = hv_fetch(plugin_info, "name", strlen("name"), 0);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
301 info->name = g_strdup(SvPV(*key, len));
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
302
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
303 if ((key = hv_fetch(plugin_info, "url", strlen("url"), 0)))
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
304 info->homepage = g_strdup(SvPV(*key, len));
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
305
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
306 if ((key = hv_fetch(plugin_info, "author", strlen("author"), 0)))
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
307 info->author = g_strdup(SvPV(*key, len));
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
308
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
309 if ((key = hv_fetch(plugin_info, "summary",
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
310 strlen("summary"), 0)))
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
311 info->summary = g_strdup(SvPV(*key, len));
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
312
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
313 if ((key = hv_fetch(plugin_info, "description",
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
314 strlen("description"), 0)))
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
315 info->description = g_strdup(SvPV(*key, len));
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
316
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
317 if ((key = hv_fetch(plugin_info, "version", strlen("version"), 0)))
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
318 info->version = g_strdup(SvPV(*key, len));
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
319
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
320 if ((key = hv_fetch(plugin_info, "load", strlen("load"), 0)))
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
321 gps->load_sub = g_strdup_printf("%s::%s", gps->package,
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
322 SvPV(*key, len));
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
323
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
324 if ((key = hv_fetch(plugin_info, "unload", strlen("unload"), 0)))
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
325 gps->unload_sub = g_strdup_printf("%s::%s", gps->package,
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
326 SvPV(*key, len));
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
327
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
328 plugin->info = info;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
329 info->extra_info = gps;
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
330
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
331 status = gaim_plugin_register(plugin);
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
332 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
333 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
334
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
335 perl_destruct(prober);
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
336 perl_free(prober);
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
337
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
338 return status;
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
339 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
340
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
341 static gboolean
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
342 load_perl_plugin(GaimPlugin *plugin)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
343 {
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
344 GaimPerlScript *gps = (GaimPerlScript *)plugin->info->extra_info;
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
345 char *atmp[3] = { plugin->path, NULL, NULL };
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
346
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
347 if (gps == NULL || gps->load_sub == NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
348 return FALSE;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
349
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
350 gaim_debug(GAIM_DEBUG_INFO, "perl", "Loading perl script\n");
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
351
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
352 if (my_perl == NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
353 perl_init();
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
354
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
355 plugin->handle = gps;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
356
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
357 atmp[1] = gps->package;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
358
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
359 execute_perl("Gaim::PerlLoader::load_n_eval", 2, atmp);
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
360
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
361 {
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
362 dSP;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
363 ENTER;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
364 SAVETMPS;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
365 PUSHMARK(sp);
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
366 XPUSHs(sv_2mortal(gaim_perl_bless_object(plugin, "Gaim::Plugin")));
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
367 PUTBACK;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
368
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
369 perl_call_pv(gps->load_sub, G_EVAL | G_SCALAR);
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
370 SPAGAIN;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
371
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
372 if (SvTRUE(ERRSV)) {
6678
eb95f31fa4eb [gaim-migrate @ 7203]
Christian Hammond <chipx86@chipx86.com>
parents: 6636
diff changeset
373 STRLEN len;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
374
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
375 gaim_debug(GAIM_DEBUG_ERROR, "perl",
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
376 "Perl function %s exited abnormally: %s\n",
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
377 gps->load_sub, SvPV(ERRSV, len));
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
378 }
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
379
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
380 PUTBACK;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
381 FREETMPS;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
382 LEAVE;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
383 }
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
384
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
385 return TRUE;
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
386 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
387
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
388 static void
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
389 destroy_package(const char *package)
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
390 {
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
391 dSP;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
392
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
393 ENTER;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
394 SAVETMPS;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
395
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
396 PUSHMARK(SP);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
397 XPUSHs(sv_2mortal(newSVpv(package, strlen(package))));
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
398 PUTBACK;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
399
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
400 perl_call_pv("Gaim::PerlLoader::destroy_package",
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
401 G_VOID | G_EVAL | G_DISCARD);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
402
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
403 SPAGAIN;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
404
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
405 PUTBACK;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
406 FREETMPS;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
407 LEAVE;
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
408 }
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
409
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
410 static gboolean
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
411 unload_perl_plugin(GaimPlugin *plugin)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
412 {
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
413 GaimPerlScript *gps = (GaimPerlScript *)plugin->info->extra_info;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
414
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
415 if (gps == NULL || gps->unload_sub == NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
416 return FALSE;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
417
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
418 gaim_debug(GAIM_DEBUG_INFO, "perl", "Unloading perl script\n");
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
419
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
420 {
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
421 dSP;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
422 ENTER;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
423 SAVETMPS;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
424 PUSHMARK(sp);
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
425 XPUSHs(sv_2mortal(gaim_perl_bless_object(plugin, "Gaim::Plugin")));
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
426 PUTBACK;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
427
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
428 perl_call_pv(gps->unload_sub, G_EVAL | G_SCALAR);
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
429 SPAGAIN;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
430
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
431 if (SvTRUE(ERRSV)) {
6678
eb95f31fa4eb [gaim-migrate @ 7203]
Christian Hammond <chipx86@chipx86.com>
parents: 6636
diff changeset
432 STRLEN len;
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
433
6536
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
434 gaim_debug(GAIM_DEBUG_ERROR, "perl",
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
435 "Perl function %s exited abnormally: %s\n",
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
436 gps->load_sub, SvPV(ERRSV, len));
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
437 }
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 PUTBACK;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
440 FREETMPS;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
441 LEAVE;
9767117bc47e [gaim-migrate @ 7053]
Christian Hammond <chipx86@chipx86.com>
parents: 6531
diff changeset
442 }
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
443
6549
ed796f756237 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6536
diff changeset
444 gaim_perl_signal_clear_for_plugin(plugin);
6522
0c5233faceb8 [gaim-migrate @ 7039]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
445 gaim_perl_timeout_clear_for_plugin(plugin);
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
446
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
447 destroy_package(gps->package);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
448
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
449 return TRUE;
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
450 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
451
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
452 static void
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
453 destroy_perl_plugin(GaimPlugin *plugin)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
454 {
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
455 if (plugin->info != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
456 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
457 GaimPerlScript *gps;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
458
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
459 if (plugin->info->name != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
460 g_free(plugin->info->name);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
461
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
462 if (plugin->info->version != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
463 g_free(plugin->info->version);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
464
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
465 if (plugin->info->summary != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
466 g_free(plugin->info->summary);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
467
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
468 if (plugin->info->description != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
469 g_free(plugin->info->description);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
470
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
471 if (plugin->info->author != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
472 g_free(plugin->info->author);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
473
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
474 if (plugin->info->homepage != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
475 g_free(plugin->info->homepage);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
476
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
477 gps = (GaimPerlScript *)plugin->info->extra_info;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
478
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
479 if (gps != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
480 {
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
481 if (gps->load_sub != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
482 g_free(gps->load_sub);
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 if (gps->unload_sub != NULL)
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
485 g_free(gps->unload_sub);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
486
6636
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
487 if (gps->package != NULL)
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
488 g_free(gps->package);
452c62a92963 [gaim-migrate @ 7161]
Christian Hammond <chipx86@chipx86.com>
parents: 6575
diff changeset
489
6508
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
490 g_free(gps);
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
491 plugin->info->extra_info = NULL;
cbd24b37350d [gaim-migrate @ 7025]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
492 }
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
493 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
494 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
495
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
496 static gboolean
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
497 plugin_unload(GaimPlugin *plugin)
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
498 {
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
499 perl_end();
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
500
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
501 return TRUE;
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
502 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
503
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
504 static GaimPluginLoaderInfo loader_info =
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
505 {
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
506 NULL, /**< exts */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
507
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
508 probe_perl_plugin, /**< probe */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
509 load_perl_plugin, /**< load */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
510 unload_perl_plugin, /**< unload */
6485
70d5122bc3ff [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
511 destroy_perl_plugin /**< destroy */
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
512 };
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
513
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
514 static GaimPluginInfo info =
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
515 {
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
516 2, /**< api_version */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
517 GAIM_PLUGIN_LOADER, /**< type */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
518 NULL, /**< ui_requirement */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
519 0, /**< flags */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
520 NULL, /**< dependencies */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
521 GAIM_PRIORITY_DEFAULT, /**< priority */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
522
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
523 PERL_PLUGIN_ID, /**< id */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
524 N_("Perl Plugin Loader"), /**< name */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
525 VERSION, /**< version */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
526 N_("Provides support for loading perl plugins."), /**< summary */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
527 N_("Provides support for loading perl plugins."), /**< description */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
528 "Christian Hammond <chipx86@gnupdate.org>", /**< author */
6371
8f94cce8faa5 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6235
diff changeset
529 GAIM_WEBSITE, /**< homepage */
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
530
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
531 NULL, /**< load */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
532 plugin_unload, /**< unload */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
533 NULL, /**< destroy */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
534
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
535 NULL, /**< ui_info */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
536 &loader_info /**< extra_info */
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
537 };
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
538
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
539 static void
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5775
diff changeset
540 init_plugin(GaimPlugin *plugin)
5205
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
541 {
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
542 loader_info.exts = g_list_append(loader_info.exts, "pl");
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
543 }
fefad67de2c7 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
544
6063
5239a3b4ab33 [gaim-migrate @ 6513]
Nathan Walp <nwalp@pidgin.im>
parents: 6036
diff changeset
545 GAIM_INIT_PLUGIN(perl, init_plugin, info)