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

Reply via email to