6 #define _RPMPERL_INTERNAL
10 #if defined(WITH_PERLEMBED)
24 #define my_perl ((PerlInterpreter *)perl->I)
32 #if defined(WITH_PERLEMBED)
34 PL_perl_destruct_level = 1;
52 if (_rpmperlPool == NULL) {
60 #if defined(WITH_PERLEMBED)
61 EXTERN_C
void xs_init (PerlInterpreter * _my_perl PERL_UNUSED_DECL);
63 EXTERN_C
void boot_DynaLoader (PerlInterpreter* _my_perl, CV* cv);
66 xs_init(PerlInterpreter* _my_perl PERL_UNUSED_DECL)
68 char *
file = (
char *) __FILE__;
72 Perl_newXS(_my_perl,
"DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
76 static const char * _rpmperlI_init =
"\
79 our $io = IO::String->new;\n\
100 #if defined(WITH_PERLEMBED)
101 static const char * _av[] = {
"rpmperl", NULL };
102 static int initialized = 0;
107 if (av == NULL) av = (
char **) _av;
111 {
static const char _perlI_init[] =
"%{?_perlI_init}";
112 const char * s =
rpmExpand(_rpmperlI_init, _perlI_init, NULL);
125 PERL_SYS_INIT3(&argc, (
char ***)&argv, &
environ);
128 perl->I = perl_alloc();
130 PL_perl_destruct_level = 1;
134 xx = perl_parse(
my_perl, xs_init, argc, (
char **)argv, NULL);
135 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
149 fprintf(stderr,
"==> %s(%p,%s)\n", __FUNCTION__, perl, str);
151 if (perl == NULL) perl =
rpmperlI();
154 #if defined(WITH_PERLEMBED)
160 fprintf(stderr,
"==> FIXME #1: %d %s\n",
161 (
int)SvTRUE(ERRSV), SvPV(ERRSV, n_a));
164 retSV = Perl_eval_pv(
my_perl,
"${$io->string_ref}",
TRUE);
166 fprintf(stderr,
"==> FIXME #2: %d %s\n",
167 (
int)SvTRUE(ERRSV), SvPV(ERRSV, n_a));
169 *resultp = SvPV(retSV, n_a);
rpmperl rpmperlLink(rpmperl perl)
Reference a perl interpreter instance.
int argvAppend(ARGV_t *argvp, ARGV_t av)
Append one argv array to another.
static rpmperl rpmperlI(void)
rpmioItem rpmioGetPool(rpmioPool pool, size_t size)
Get unused item from pool, or alloc a new item.
int argvCount(const ARGV_t argv)
Return no.
struct rpmperl_s * rpmperl
ARGV_t argvFree(ARGV_t argv)
Destroy an argv array.
rpmperl rpmperlNew(char **av, uint32_t flags)
Create and load a perl interpreter.
int argvAdd(ARGV_t *argvp, ARGstr_t val)
Add a string to an argv array.
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
const char const bson int mongo_write_concern int flags
enum rpmRC_e rpmRC
RPM return codes.
rpmioPool rpmioNewPool(const char *name, size_t size, int limit, int flags, char *(*dbg)(void *item), void(*init)(void *item), void(*fini)(void *item))
Create a memory pool.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
static rpmperl rpmperlGetPool(rpmioPool pool)
static void rpmperlFini(void *_perl)
rpmRC rpmperlRun(rpmperl perl, const char *str, const char **resultp)
Execute perl string.