Instead of adding sparkly rubt gem's, you ought to teach
%setup to unpack from *.src.rpm's by adding a rpm2cpio layer and
recursing through the unpacked %prep in the *.spec.

The other approach is with rpm -q --yaml onto the *.src.rpm, one
would need to expand the %setup there. But --yaml "works" only
with @rpm5.org.

but nice hack for ruby gem's. just, well, I ain't sure where %setup + ruby gems
ends up, gems WILL download and install "stuff".

hth

73 de Jeff
On Oct 18, 2010, at 7:27 AM, Per Øyvind Karlsen wrote:

>  RPM Package Manager, CVS Repository
>  http://rpm5.org/cvs/
>  ____________________________________________________________________________
> 
>  Server: rpm5.org                         Name:   Per Øyvind Karlsen
>  Root:   /v/rpm/cvs                       Email:  pkarl...@rpm5.org
>  Module: rpm                              Date:   18-Oct-2010 13:27:13
>  Branch: HEAD                             Handle: 2010101811271200
> 
>  Modified files:
>    rpm                     CHANGES
>    rpm/build               parsePrep.c
>    rpm/macros              ruby.in
> 
>  Log:
>    ditch %gem_unpack macro and make %setup automatically handle ruby gem
>    extraction in stead.
> 
>  Summary:
>    Revision    Changes     Path
>    1.3478      +2  -0      rpm/CHANGES
>    2.131       +37 -2      rpm/build/parsePrep.c
>    1.4         +0  -5      rpm/macros/ruby.in
>  ____________________________________________________________________________
> 
>  patch -p0 <<'@@ .'
>  Index: rpm/CHANGES
>  ============================================================================
>  $ cvs diff -u -r1.3477 -r1.3478 CHANGES
>  --- rpm/CHANGES      18 Oct 2010 05:46:19 -0000      1.3477
>  +++ rpm/CHANGES      18 Oct 2010 11:27:12 -0000      1.3478
>  @@ -1,4 +1,6 @@
>   5.3.4 -> 5.4a1:
>  +    proyvind: ditch %gem_unpack macro and make %setup automatically handle
>  +    ruby gem extraction in stead.
>       - jbj: sqlite: fix: permit building without sqlite, <db51/dbsql.h> 
> instead.
>       - jbj: beecrypt: fix: polluted builds due to my brain fart. revert.
>       - jbj: popt: permit builds with --with-popt=internal all over again. 
> todo++.
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/build/parsePrep.c
>  ============================================================================
>  $ cvs diff -u -r2.130 -r2.131 parsePrep.c
>  --- rpm/build/parsePrep.c    16 Mar 2009 21:06:44 -0000      2.130
>  +++ rpm/build/parsePrep.c    18 Oct 2010 11:27:12 -0000      2.131
>  @@ -218,12 +218,13 @@
>   {
>       const char *fn, *Lurlfn;
>       static char buf[BUFSIZ];
>  -    char *taropts;
>  +    char taropts[8];
>       char *t = NULL;
>       struct Source *sp;
>       rpmCompressedMagic compressed = COMPRESSED_NOT;
>       int urltype;
>       const char *tar;
>  +    int rubygem = 0;
> 
>       for (sp = spec->sources; sp != NULL; sp = sp->next) {
>       if ((sp->flags & RPMFILE_SOURCE) && (sp->num == c)) {
>  @@ -235,8 +236,18 @@
>       return NULL;
>       }
> 
>  +    t = rindex(sp->source, '.');
>  +    if(!strcasecmp(t, ".gem"))
>  +    rubygem = 1;
>  +
>  +    t = stpcpy(taropts, "-x");
>       /*...@-internalglobs@*/ /* FIX: shrug */
>  -    taropts = ((rpmIsVerbose() && !quietly) ? "-xvvf" : "-xf");
>  +    if(rpmIsVerbose() && !quietly)
>  +    t = stpcpy(t, "vv");
>  +    if(rubygem)
>  +    t = stpcpy(t, "m");
>  +
>  +    t = stpcpy(t, "f");
>       /*...@=internalglobs@*/
> 
>   #if defined(RPM_VENDOR_OPENPKG) /* splitted-source-directory */
>  @@ -350,6 +361,16 @@
>       t = stpcpy(t, taropts);
>       *t++ = ' ';
>       t = stpcpy(t, fn);
>  +    if(rubygem) {
>  +        t = stpcpy(t,
>  +                "\n"
>  +                "if [ -f data.tar.gz ]; then\n"
>  +                "  tar ");
>  +        t = stpcpy(t, taropts);
>  +        t = stpcpy(t,
>  +                " data.tar.gz\n"
>  +                "fi");
>  +    }
>       }
> 
>       tar = _free(tar);
>  @@ -465,6 +486,20 @@
>       spec->prep = rpmiobAppend(spec->prep, buf, 1);
>       }
> 
>  +    /* check if source is a ruby gem */
>  +    {   struct Source *sp;
>  +    for (sp = spec->sources; sp != NULL; sp = sp->next) {
>  +        if ((sp->flags & RPMFILE_SOURCE) && (sp->num == 0)) {
>  +            break;
>  +        }
>  +    }
>  +    if (sp != NULL) {
>  +        char *t = rindex(sp->source, '.');
>  +        if(!strcasecmp(t, ".gem"))
>  +            createDir = 1;
>  +    }
>  +    }
>  +
>       /* if necessary, create and cd into the proper dir */
>       if (createDir) {
>       char *mkdir_p;
>  @@ .
>  patch -p0 <<'@@ .'
>  Index: rpm/macros/ruby.in
>  ============================================================================
>  $ cvs diff -u -r1.3 -r1.4 ruby.in
>  --- rpm/macros/ruby.in       16 Oct 2010 21:56:34 -0000      1.3
>  +++ rpm/macros/ruby.in       18 Oct 2010 11:27:12 -0000      1.4
>  @@ -22,11 +22,6 @@
>   %ruby_gemdir                %(%{__ruby} -rrbconfig -e 'include Config; 
> print CONFIG["rubylibdir"].sub(CONFIG["ruby_version"], 
> "gems/#{CONFIG["ruby_version"]}")')
>   %ruby_ridir         %(%{__ruby} -rrbconfig -e 'include Config; print 
> File.join(CONFIG["datadir"], "ri", CONFIG["ruby_version"])')
> 
>  -%gem_unpack(n:a:) \
>  -    %{expand: %%global __tar tar -m} \
>  -%setup -q -c -T -a0 %{-n:-n %{-n*}} %{-a:-a %{-a*}} \
>  -%{__tar}zxf data.tar.gz
>  -
>   %__gem_helper %{_usrlibrpm}/gem_helper.rb
> 
>   %gem_build(f:j:) \
>  @@ .
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> CVS Sources Repository                                rpm-...@rpm5.org

______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to