aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Thauvin <nanardon@mandriva.org>2006-01-19 11:36:57 +0000
committerOlivier Thauvin <nanardon@mandriva.org>2006-01-19 11:36:57 +0000
commitea0efef5a8e321c5950b1c27f08966fe8ed19ecd (patch)
treee4cd8fcf9e1501d4faa6414b7c08af86fe9a46f2
parentc15e844f1a386540669911b7155de90c8e705c13 (diff)
downloadperl-URPM-ea0efef5a8e321c5950b1c27f08966fe8ed19ecd.tar
perl-URPM-ea0efef5a8e321c5950b1c27f08966fe8ed19ecd.tar.gz
perl-URPM-ea0efef5a8e321c5950b1c27f08966fe8ed19ecd.tar.bz2
perl-URPM-ea0efef5a8e321c5950b1c27f08966fe8ed19ecd.tar.xz
perl-URPM-ea0efef5a8e321c5950b1c27f08966fe8ed19ecd.zip
- add Urpm_spec2srcheader(): return header of src.rpm from a specfile
-rw-r--r--Makefile.PL2
-rw-r--r--URPM.xs28
-rw-r--r--t/parse.t8
3 files changed, 36 insertions, 2 deletions
diff --git a/Makefile.PL b/Makefile.PL
index 748876e..14dfd3f 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -54,7 +54,7 @@ WriteMakefile(
CCFLAGS => '-Wall',
OPTIMIZE => '-O3 -fomit-frame-pointer -fno-exceptions -pipe -s -ffast-math -fexpensive-optimizations',
VERSION_FROM => 'URPM.pm',
- LIBS => [ '-lrpm -lrpmio -lrpmdb -lpopt -lz' ],
+ LIBS => [ '-lrpm -lrpmio -lrpmdb -lrpmbuild -lpopt -lz' ],
INC => '-I/usr/include/rpm',
dist => { COMPRESS => "bzip2", SUFFIX => ".bz2" },
realclean => { FILES => "t/RPMS/noarch/*" },
diff --git a/URPM.xs b/URPM.xs
index dbc9108..b05d410 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -34,6 +34,7 @@
#include <rpm/rpmps.h>
#include <rpm/rpmpgp.h>
#include <rpm/rpmcli.h>
+#include <rpm/rpmbuild.h>
struct s_Package {
char *info;
@@ -3646,6 +3647,33 @@ Urpm_stream2header(fp)
}
void
+Urpm_spec2srcheader(specfile)
+ char *specfile
+ PREINIT:
+ rpmts ts = rpmtsCreate();
+ URPM__Package pkg;
+ Spec spec = NULL;
+ PPCODE:
+#define SPEC_ANYARCH 1
+#define SPEC_FORCE 1
+ if (!parseSpec(ts, specfile, "/", NULL, 0, NULL, NULL, SPEC_ANYARCH, SPEC_FORCE)) {
+ spec = rpmtsSetSpec(ts, NULL);
+ if ( ! spec->sourceHeader)
+ initSourceHeader(spec);
+ pkg = (URPM__Package)malloc(sizeof(struct s_Package));
+ memset(pkg, 0, sizeof(struct s_Package));
+ pkg->h = headerLink(spec->sourceHeader);
+ SV *sv_pkg;
+ EXTEND(SP, 1);
+ sv_pkg = sv_newmortal();
+ sv_setref_pv(sv_pkg, "URPM::Package", (void*)pkg);
+ PUSHs(sv_pkg);
+ spec = freeSpec(spec);
+ }
+ ts = rpmtsFree(ts);
+
+
+void
expand(name)
char * name
PPCODE:
diff --git a/t/parse.t b/t/parse.t
index 9bcc24c..afe59b3 100644
--- a/t/parse.t
+++ b/t/parse.t
@@ -4,7 +4,7 @@
use strict;
use warnings;
-use Test::More tests => 24;
+use Test::More tests => 26;
use MDV::Packdrakeng;
use URPM;
use URPM::Build;
@@ -62,3 +62,9 @@ ok(URPM::rpmvercmp("1:1-1mdk", "2:1-1mdk") == -1, "epoch 1 vs 2 = -1");
ok($pkg->queryformat("%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}") eq "test-rpm-1.0-1mdk.noarch");
close $hdfh;
}
+
+{
+ my $pkg = URPM::spec2srcheader("test-rpm.spec");
+ ok(defined $pkg, "Parsing a spec works");
+ ok($pkg->get_tag(1000) eq 'test-rpm');
+}