gplugin/gplugin

this appears to maybe be working.. ish?
feature/perl-loader
2015-10-12, Gary Kramlich
7655920e36f5
Parents e6096aab1791
Children 8c987c79cc28
this appears to maybe be working.. ish?
--- a/perl/gplugin-perl-defs.h Tue Oct 06 23:20:05 2015 -0500
+++ b/perl/gplugin-perl-defs.h Mon Oct 12 23:22:47 2015 -0500
@@ -20,28 +20,35 @@
#include <glib.h>
const gchar gplugin_perl_definitions[] = {
- "package GPlugin::Loader;"
+ "package GPlugin::PerlLoader;"
"use Symbol;"
- "sub gplugin_load_file {"
+ "sub load_file {"
"my $filename = shift;"
- "local $/=undef;"
+ "local $/ = undef;"
"open FH, $filename or return \"__FAILED__\";"
"$_ = <FH>;"
"close FH;"
"return $_;"
"}"
- "sub gplugin_destroy_package {"
- "eval {"
- "if $_[0]->can('UNLOAD') {"
- "$_[0]->UNLOAD();"
- "}"
- "};"
+ "sub destroy_package {"
+ "eval { $_[0]->UNLOAD() if $_[0]->can('UNLOAD'); };"
"Symbol::delete_package($_[0]);"
"}"
- "sub gplugin_eval {"
+ "sub eval_file {"
+ "my ($filename, $package) = @_;"
+ "destroy_package($package);"
+ "my $res = load_file($filename);"
+ "return 2 if($res eq \"__FAILED__\");"
+ "my $eval = qq{package $package; $res;};"
+
+ "{"
+ "die(\"Errors loading file $file_name: $@\");"
+ "}"
+
+ "return 0;"
"}"
};
--- a/perl/gplugin-perl-loader.c Tue Oct 06 23:20:05 2015 -0500
+++ b/perl/gplugin-perl-loader.c Mon Oct 12 23:22:47 2015 -0500
@@ -16,6 +16,7 @@
*/
#include "gplugin-perl-loader.h"
+#include "gplugin-perl-defs.h"
#include <EXTERN.h>
#include <perl.h>
@@ -52,19 +53,21 @@
const gchar *sub = "gplugin_query";
SV *sinfo = NULL;
+ dSP;
PERL_SET_CONTEXT(interp);
- dSP;
+ SPAGAIN;
ENTER;
SAVETMPS;
PUSHMARK(sp);
PUTBACK;
- call_pv("gplugin_query", G_SCALAR);
+ call_pv(sub, G_EVAL | G_SCALAR);
SPAGAIN;
sinfo = POPs;
PUTBACK;
FREETMPS;
LEAVE;
+ g_message("sinfo: %p", sinfo);
return sinfo;
}
@@ -83,9 +86,9 @@
{
GPluginPluginInfo *info = NULL;
PerlInterpreter *interp = NULL;
- const gchar *args[] = { "", filename };
+ const gchar *args[] = { "", "-e", "0", "-w", filename};
gchar **argv = (gchar **)args;
- gint argc = 2, ret = 0;
+ gint argc = 5, ret = 0;
g_message("filename: %s", filename);
@@ -103,7 +106,7 @@
PL_perl_destruct_level = 1; /* perl_construct resets this to 0 */
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
- ret = perl_parse(interp, gplugin_perl_loader_xsinit, argc, args, NULL);
+ ret = perl_parse(interp, gplugin_perl_loader_xsinit, argc, argv, NULL);
g_message("ret: %d", ret);
if(ret != 0) {
const gchar *msg = "unknown";
@@ -125,6 +128,9 @@
return NULL;
}
+ //eval_pv(gplugin_perl_definitions, TRUE);
+ ret = perl_run(interp);
+ g_message("ret: %d", ret);
info = gplugin_perl_query(interp);