RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 13-Apr-2009 00:28:49 Branch: HEAD Handle: 2009041222284801 Modified files: rpm CHANGES rpm/rpmio rpmperl.c rpmpython.c rpmruby.c Log: - perl: attach stdout to macro expansion buffer with IO::String. Summary: Revision Changes Path 1.2919 +1 -0 rpm/CHANGES 2.4 +45 -3 rpm/rpmio/rpmperl.c 2.5 +1 -0 rpm/rpmio/rpmpython.c 2.4 +1 -0 rpm/rpmio/rpmruby.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.2918 -r1.2919 CHANGES --- rpm/CHANGES 12 Apr 2009 19:42:56 -0000 1.2918 +++ rpm/CHANGES 12 Apr 2009 22:28:48 -0000 1.2919 @@ -1,5 +1,6 @@ 5.2a3 -> 5.2a4: + - jbj: perl: attach stdout to macro expansion buffer with IO::String. - rse: use new POPT 1.15 from devtool environment - jbj: tcl: attach rpmtclIO to macro expansion buffer with Tcl_StackChannel. - jbj: ruby: attach $stdout to macro expansion buffer using StringIO. @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmperl.c ============================================================================ $ cvs diff -u -r2.3 -r2.4 rpmperl.c --- rpm/rpmio/rpmperl.c 11 Apr 2009 14:47:13 -0000 2.3 +++ rpm/rpmio/rpmperl.c 12 Apr 2009 22:28:49 -0000 2.4 @@ -46,6 +46,46 @@ return (rpmperl) rpmioGetPool(pool, sizeof(*perl)); } +#if defined(NOTYET) +EXTERN_C void xs_init (pTHX); + +EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); + +EXTERN_C void +xs_init(pTHX) +{ + char *file = __FILE__; + dXSUB_SYS; + + /* DynaLoader is a special case */ + newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); +} + +/*...@unchecked@*/ +static const char * rpmperlInitStringIO = "\ +use RPM::Constant;\n\ +use RPM::Header;\n\ +use RPM::Transaction;\n\ +use RPM::PackageIterator;\n\ +use RPM::Problems;\n\ +use RPM::Files;\n\ +use RPM::Dependencies;\n\ +use RPM::Spec;\n\ +use IO::String;\n\ +$io = IO::String->new;\n\ +select $io;\n\ +"; +#else +#define xs_init NULL +/*...@unchecked@*/ +static const char * rpmperlInitStringIO = "\ +use IO::String;\n\ +$io = IO::String->new;\n\ +select $io;\n\ +"; + +#endif + rpmperl rpmperlNew(const char * fn, int flags) { static char *embedding[] = { "", "-e", "0" }; @@ -56,7 +96,6 @@ perl->fn = xstrdup(fn); perl->flags = flags; - #if defined(WITH_PERLEMBED) perl->I = perl_alloc(); PERL_SET_CONTEXT(my_perl); @@ -64,9 +103,10 @@ perl_construct(my_perl); PL_origalen = 1; /* don't let $0 assignment update proctitle/embedding[0] */ - xx = perl_parse(my_perl, NULL, 3, embedding, NULL); + xx = perl_parse(my_perl, xs_init, 3, embedding, NULL); PL_exit_flags |= PERL_EXIT_DESTRUCT_END; perl_run(my_perl); + (void) rpmperlRun(perl, rpmperlInitStringIO, NULL); #endif return rpmperlLink(perl); @@ -85,8 +125,10 @@ SV * retSV; PERL_SET_CONTEXT(my_perl); retSV = Perl_eval_pv(my_perl, str, TRUE); - if (resultp) + if (resultp) { + retSV = Perl_eval_pv(my_perl, "${$io->string_ref}", TRUE); *resultp = SvPV(retSV, n_a); + } #endif rc = RPMRC_OK; } @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmpython.c ============================================================================ $ cvs diff -u -r2.4 -r2.5 rpmpython.c --- rpm/rpmio/rpmpython.c 12 Apr 2009 17:26:33 -0000 2.4 +++ rpm/rpmio/rpmpython.c 12 Apr 2009 22:28:49 -0000 2.5 @@ -43,6 +43,7 @@ return (rpmpython) rpmioGetPool(pool, sizeof(*python)); } +/*...@unchecked@*/ static const char * rpmpythonInitStringIO = "\ import rpm\n\ import sys\n\ @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmruby.c ============================================================================ $ cvs diff -u -r2.3 -r2.4 rpmruby.c --- rpm/rpmio/rpmruby.c 12 Apr 2009 17:26:33 -0000 2.3 +++ rpm/rpmio/rpmruby.c 12 Apr 2009 22:28:49 -0000 2.4 @@ -54,6 +54,7 @@ return (rpmruby) rpmioGetPool(pool, sizeof(*ruby)); } +/*...@unchecked@*/ static const char * rpmrubyInitStringIO = "\ require 'stringio'\n\ $stdout = StringIO.new($result, \"w+\")\n\ @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org