gplugin/gplugin

I think i'm getting closer
feature/perl-loader
2015-03-03, Gary Kramlich
8e01455d9051
Parents f128b841978d
Children b0905629f956
I think i'm getting closer
--- a/perl/gplugin-perl-loader.c Mon Mar 02 01:03:06 2015 -0600
+++ b/perl/gplugin-perl-loader.c Tue Mar 03 00:27:32 2015 -0600
@@ -47,6 +47,30 @@
newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
}
+static GPluginPluginInfo *
+gplugin_perl_query(const gchar *package, PerlInterpreter *interp) {
+ gchar *sub = g_strdup_printf("gplugin_query", package);
+ SV *sinfo = NULL;
+
+ dSP;
+ PERL_SET_CONTEXT(interp);
+ SPAGAIN;
+ ENTER;
+ SAVETMPS;
+ PUSHMARK(sp);
+ PUTBACK;
+ call_pv(sub, G_SCALAR | G_NOARGS);
+ SPAGAIN;
+ sinfo = POPs;
+ PUTBACK;
+
+ g_free(sub);
+
+ g_message("sinfo: %p", sinfo);
+
+ return NULL;
+}
+
/******************************************************************************
* GPluginLoaderInterface API
*****************************************************************************/
@@ -60,10 +84,12 @@
const gchar *filename,
GPLUGIN_UNUSED GError **error)
{
+ GPluginPluginInfo *info = NULL;
PerlInterpreter *interp = NULL;
- const gchar *args[] = { "", filename };
+ const gchar *args[] = { "", "-e", "0", "-w" };
+ gchar *package = NULL;
gchar **argv = (gchar **)args;
- gint argc = 2, ret = 0;
+ gint argc = 4, ret = 0;
g_message("filename: %s", filename);
@@ -90,32 +116,7 @@
return NULL;
}
-/*
- ret = perl_run(interp);
- if(ret != 0) {
- if(error) {
- const gchar *msg = "unknown";
-
- if(SvTRUE(ERRSV))
- msg = SvPVutf8_nolen(ERRSV);
-
- *error = g_error_new(GPLUGIN_DOMAIN, 0,
- "failed to run %s : %s", filename, msg);
- }
-
- perl_destruct(interp);
- perl_free(interp);
-
- return NULL;
- }
-*/
-
- gchar *query_args[] = {NULL,};
-
- g_message("Before call_argv");
- ret = call_argv("gplugin_query", G_EVAL, query_args);
- g_message("call ret: %d", ret);
- g_message("After call_argv");
+ info = gplugin_perl_query(package, interp);
return NULL;
}