--- 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 @@
const gchar gplugin_perl_definitions[] = {
- "package GPlugin::Loader;"
+ "package GPlugin::PerlLoader;" - "sub gplugin_load_file {"
"open FH, $filename or return \"__FAILED__\";"
- "sub gplugin_destroy_package {"
- "if $_[0]->can('UNLOAD') {"
+ "sub destroy_package {" + "eval { $_[0]->UNLOAD() if $_[0]->can('UNLOAD'); };" "Symbol::delete_package($_[0]);"
+ "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: $@\");" --- 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" @@ -52,19 +53,21 @@
const gchar *sub = "gplugin_query";
PERL_SET_CONTEXT(interp);
- call_pv("gplugin_query", G_SCALAR);
+ call_pv(sub, G_EVAL | G_SCALAR); + g_message("sinfo: %p", 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);
const gchar *msg = "unknown";
@@ -125,6 +128,9 @@
+ //eval_pv(gplugin_perl_definitions, TRUE); + ret = perl_run(interp); + g_message("ret: %d", ret); info = gplugin_perl_query(interp);