Hi all,
I'm writing a simple Inline wrapper to the rpmVersionCompare
function from librpm. The way the rpm headers are made (rpm 4.0.2-8),
I can't compile if I do:
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "INLINE.h"
#include <rpm/rpmlib.h>
I have to do:
#include <rpm/rpmlib.h>
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "INLINE.h"
Is there a way to suppress these 4 default header lines in Inline::C or
insert my own headers in front?
I can get around it like this, but it's not really elegant:
#!/usr/bin/perl
use strict ;
BEGIN {
require Inline::C ;
*Inline::C::validate_ori = \&Inline::C::validate ;
*Inline::C::validate = sub {
my $o = shift ;
$o->{ILSM}{AUTO_INCLUDE} = "/*\n" ;
Inline::C::validate_ori($o, @_) ;
} ;
}
use Inline (
C => 'DATA',
LIBS => '-lrpm -lrpmio -lpopt',
INC => '-I/usr/include/rpm',
AUTO_INCLUDE => "*/",
) ;
sub rpmVersionCompare {
my $fv1 = shift ;
my $fv2 = shift ;
my ($v1, $r1) = split(/-/, $fv1) ;
my ($v2, $r2) = split(/-/, $fv2) ;
return __rpmVersionCompare(
$v1 || "", $r1 || "",
$v2 || "", $r2 || "",
) ;
}
my $v1 = "1.3.23-4" ;
my $v2 = "1.3.9-7" ;
print "$v1 > $v2 ? " . rpmVersionCompare($v1, $v2) . "\n" ;
__END__
__C__
#include <rpm/rpmlib.h>
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "INLINE.h"
int __rpmVersionCompare(char *v1, char *r1, char *v2, char *r2){
Header h1 = headerNew() ;
Header h2 = headerNew() ;
headerAddEntry(h1, RPMTAG_VERSION, RPM_CHAR_TYPE, v1, strlen(v1)) ;
headerAddEntry(h1, RPMTAG_RELEASE, RPM_CHAR_TYPE, r1, strlen(r1)) ;
headerAddEntry(h2, RPMTAG_VERSION, RPM_CHAR_TYPE, v2, strlen(v2)) ;
headerAddEntry(h2, RPMTAG_RELEASE, RPM_CHAR_TYPE, r2, strlen(r2)) ;
return rpmVersionCompare(h1, h2) ;
}
Thanks,
Patrick
---------------------
Patrick LeBoutillier
Laval, Quebec, Canada