From a10abcc2bf24b060a15701e5fd6311275e3715fd Mon Sep 17 00:00:00 2001 From: jbj Date: Wed, 14 Jul 1999 16:52:52 +0000 Subject: [PATCH] Merge Christian's preliminary perl bindings. CVS patchset: 3158 CVS date: 1999/07/14 16:52:52 --- perl/.cvsignore | 5 + perl/check | 36 ++ perl/constant.c | 1643 +++++++++++++++++++++++++++++++++++++++++++++++++++++ perl/foo.i386.rpm | Bin 0 -> 47815 bytes perl/junk.xs | 55 ++ perl/rpm.pm | 117 ++++ perl/rpm.xs | 234 ++++++++ perl/test.pl | 37 ++ perl/typemap | 7 + 9 files changed, 2134 insertions(+) create mode 100644 perl/.cvsignore create mode 100755 perl/check create mode 100644 perl/constant.c create mode 100644 perl/foo.i386.rpm create mode 100644 perl/junk.xs create mode 100644 perl/rpm.pm create mode 100644 perl/rpm.xs create mode 100644 perl/test.pl create mode 100644 perl/typemap diff --git a/perl/.cvsignore b/perl/.cvsignore new file mode 100644 index 0000000..deb5b15 --- /dev/null +++ b/perl/.cvsignore @@ -0,0 +1,5 @@ +rpm.bs +rpm.c +pm_to_blib +Makefile +blib diff --git a/perl/check b/perl/check new file mode 100755 index 0000000..9a1cd74 --- /dev/null +++ b/perl/check @@ -0,0 +1,36 @@ +#!/usr/bin/perl + +use ExtUtils::testlib; +use rpm; + +my $testfile = "foo.i386.rpm"; + +my $header = rpm::Header($testfile); + +if ($header) { + my @foo_test = (); + my %foo_test = (); + my $key; + + print "call to the header function SUCCEEDED\n"; + @foo_test = $header->ItemByVal(1081); + print "values returned ", @foo_test, "\n\n\n"; + + %foo_test = $header->List(); + foreach $key (sort keys %foo_test) { + my $foo_it; + print "Item [$key] has [", scalar @{$foo_test{$key}}, "] values: "; + foreach $foo_it (@{$foo_test{$key}}) { + print "[$foo_it] "; + } + print "\n"; + } + + print "The number of header tags is: ", scalar $header->Tags(), "\n"; + +} else { + print "call to the header function FAILED\n"; +} + + + diff --git a/perl/constant.c b/perl/constant.c new file mode 100644 index 0000000..847dd77 --- /dev/null +++ b/perl/constant.c @@ -0,0 +1,1643 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include +#include +#include +#include + +static int +not_here(char *s) +{ + croak("%s not implemented on this architecture", s); + return -1; +} + +double +constant(char *name, int arg) +{ + errno = 0; + switch (*name) { + case 'A': + break; + case 'B': + break; + case 'C': + break; + case 'D': + break; + case 'E': + break; + case 'F': + break; + case 'G': + break; + case 'H': + break; + case 'I': + break; + case 'J': + break; + case 'K': + break; + case 'L': + break; + case 'M': + break; + case 'N': + break; + case 'O': + break; + case 'P': + break; + case 'Q': + if (strEQ(name, "QUERY_FOR_CONFIG")) +#ifdef QUERY_FOR_CONFIG + return QUERY_FOR_CONFIG; +#else + goto not_there; +#endif + if (strEQ(name, "QUERY_FOR_DOCS")) +#ifdef QUERY_FOR_DOCS + return QUERY_FOR_DOCS; +#else + goto not_there; +#endif + if (strEQ(name, "QUERY_FOR_DUMPFILES")) +#ifdef QUERY_FOR_DUMPFILES + return QUERY_FOR_DUMPFILES; +#else + goto not_there; +#endif + if (strEQ(name, "QUERY_FOR_LIST")) +#ifdef QUERY_FOR_LIST + return QUERY_FOR_LIST; +#else + goto not_there; +#endif + if (strEQ(name, "QUERY_FOR_STATE")) +#ifdef QUERY_FOR_STATE + return QUERY_FOR_STATE; +#else + goto not_there; +#endif + break; + case 'R': + if (strEQ(name, "RPMERR_BADARG")) +#ifdef RPMERR_BADARG + return RPMERR_BADARG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_BADDEV")) +#ifdef RPMERR_BADDEV + return RPMERR_BADDEV; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_BADFILENAME")) +#ifdef RPMERR_BADFILENAME + return RPMERR_BADFILENAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_BADMAGIC")) +#ifdef RPMERR_BADMAGIC + return RPMERR_BADMAGIC; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_BADRELOCATE")) +#ifdef RPMERR_BADRELOCATE + return RPMERR_BADRELOCATE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_BADSIGTYPE")) +#ifdef RPMERR_BADSIGTYPE + return RPMERR_BADSIGTYPE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_BADSPEC")) +#ifdef RPMERR_BADSPEC + return RPMERR_BADSPEC; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_CHOWN")) +#ifdef RPMERR_CHOWN + return RPMERR_CHOWN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_CPIO")) +#ifdef RPMERR_CPIO + return RPMERR_CPIO; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_CREATE")) +#ifdef RPMERR_CREATE + return RPMERR_CREATE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_DBCORRUPT")) +#ifdef RPMERR_DBCORRUPT + return RPMERR_DBCORRUPT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_DBGETINDEX")) +#ifdef RPMERR_DBGETINDEX + return RPMERR_DBGETINDEX; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_DBOPEN")) +#ifdef RPMERR_DBOPEN + return RPMERR_DBOPEN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_DBPUTINDEX")) +#ifdef RPMERR_DBPUTINDEX + return RPMERR_DBPUTINDEX; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_EXEC")) +#ifdef RPMERR_EXEC + return RPMERR_EXEC; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_FILECONFLICT")) +#ifdef RPMERR_FILECONFLICT + return RPMERR_FILECONFLICT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_FLOCK")) +#ifdef RPMERR_FLOCK + return RPMERR_FLOCK; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_FORK")) +#ifdef RPMERR_FORK + return RPMERR_FORK; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_GDBMOPEN")) +#ifdef RPMERR_GDBMOPEN + return RPMERR_GDBMOPEN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_GDBMREAD")) +#ifdef RPMERR_GDBMREAD + return RPMERR_GDBMREAD; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_GDBMWRITE")) +#ifdef RPMERR_GDBMWRITE + return RPMERR_GDBMWRITE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_GZIP")) +#ifdef RPMERR_GZIP + return RPMERR_GZIP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_INTERNAL")) +#ifdef RPMERR_INTERNAL + return RPMERR_INTERNAL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_LDD")) +#ifdef RPMERR_LDD + return RPMERR_LDD; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_MKDIR")) +#ifdef RPMERR_MKDIR + return RPMERR_MKDIR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_MTAB")) +#ifdef RPMERR_MTAB + return RPMERR_MTAB; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NEWPACKAGE")) +#ifdef RPMERR_NEWPACKAGE + return RPMERR_NEWPACKAGE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NOCREATEDB")) +#ifdef RPMERR_NOCREATEDB + return RPMERR_NOCREATEDB; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NOGROUP")) +#ifdef RPMERR_NOGROUP + return RPMERR_NOGROUP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NORELOCATE")) +#ifdef RPMERR_NORELOCATE + return RPMERR_NORELOCATE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NOSPACE")) +#ifdef RPMERR_NOSPACE + return RPMERR_NOSPACE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NOSPEC")) +#ifdef RPMERR_NOSPEC + return RPMERR_NOSPEC; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NOTSRPM")) +#ifdef RPMERR_NOTSRPM + return RPMERR_NOTSRPM; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_NOUSER")) +#ifdef RPMERR_NOUSER + return RPMERR_NOUSER; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_OLDDB")) +#ifdef RPMERR_OLDDB + return RPMERR_OLDDB; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_OLDDBCORRUPT")) +#ifdef RPMERR_OLDDBCORRUPT + return RPMERR_OLDDBCORRUPT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_OLDDBMISSING")) +#ifdef RPMERR_OLDDBMISSING + return RPMERR_OLDDBMISSING; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_OLDPACKAGE")) +#ifdef RPMERR_OLDPACKAGE + return RPMERR_OLDPACKAGE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_PKGINSTALLED")) +#ifdef RPMERR_PKGINSTALLED + return RPMERR_PKGINSTALLED; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_READERROR")) +#ifdef RPMERR_READERROR + return RPMERR_READERROR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_RENAME")) +#ifdef RPMERR_RENAME + return RPMERR_RENAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_RMDIR")) +#ifdef RPMERR_RMDIR + return RPMERR_RMDIR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_RPMRC")) +#ifdef RPMERR_RPMRC + return RPMERR_RPMRC; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_SCRIPT")) +#ifdef RPMERR_SCRIPT + return RPMERR_SCRIPT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_SIGGEN")) +#ifdef RPMERR_SIGGEN + return RPMERR_SIGGEN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_STAT")) +#ifdef RPMERR_STAT + return RPMERR_STAT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_UNKNOWNARCH")) +#ifdef RPMERR_UNKNOWNARCH + return RPMERR_UNKNOWNARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_UNKNOWNOS")) +#ifdef RPMERR_UNKNOWNOS + return RPMERR_UNKNOWNOS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_UNLINK")) +#ifdef RPMERR_UNLINK + return RPMERR_UNLINK; +#else + goto not_there; +#endif + if (strEQ(name, "RPMERR_UNMATCHEDIF")) +#ifdef RPMERR_UNMATCHEDIF + return RPMERR_UNMATCHEDIF; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_CONFIG")) +#ifdef RPMFILE_CONFIG + return RPMFILE_CONFIG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_DOC")) +#ifdef RPMFILE_DOC + return RPMFILE_DOC; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_DONOTUSE")) +#ifdef RPMFILE_DONOTUSE + return RPMFILE_DONOTUSE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_GHOST")) +#ifdef RPMFILE_GHOST + return RPMFILE_GHOST; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_LICENSE")) +#ifdef RPMFILE_LICENSE + return RPMFILE_LICENSE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_MISSINGOK")) +#ifdef RPMFILE_MISSINGOK + return RPMFILE_MISSINGOK; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_NOREPLACE")) +#ifdef RPMFILE_NOREPLACE + return RPMFILE_NOREPLACE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_README")) +#ifdef RPMFILE_README + return RPMFILE_README; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_SPECFILE")) +#ifdef RPMFILE_SPECFILE + return RPMFILE_SPECFILE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_STATE_NETSHARED")) +#ifdef RPMFILE_STATE_NETSHARED + return RPMFILE_STATE_NETSHARED; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_STATE_NORMAL")) +#ifdef RPMFILE_STATE_NORMAL + return RPMFILE_STATE_NORMAL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_STATE_NOTINSTALLED")) +#ifdef RPMFILE_STATE_NOTINSTALLED + return RPMFILE_STATE_NOTINSTALLED; +#else + goto not_there; +#endif + if (strEQ(name, "RPMFILE_STATE_REPLACED")) +#ifdef RPMFILE_STATE_REPLACED + return RPMFILE_STATE_REPLACED; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_BINARY")) +#ifdef RPMLEAD_BINARY + return RPMLEAD_BINARY; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_MAGIC0")) +#ifdef RPMLEAD_MAGIC0 + return RPMLEAD_MAGIC0; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_MAGIC1")) +#ifdef RPMLEAD_MAGIC1 + return RPMLEAD_MAGIC1; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_MAGIC2")) +#ifdef RPMLEAD_MAGIC2 + return RPMLEAD_MAGIC2; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_MAGIC3")) +#ifdef RPMLEAD_MAGIC3 + return RPMLEAD_MAGIC3; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_SIZE")) +#ifdef RPMLEAD_SIZE + return RPMLEAD_SIZE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMLEAD_SOURCE")) +#ifdef RPMLEAD_SOURCE + return RPMLEAD_SOURCE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_ALTNAME")) +#ifdef RPMMESS_ALTNAME + return RPMMESS_ALTNAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_BACKUP")) +#ifdef RPMMESS_BACKUP + return RPMMESS_BACKUP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_DEBUG")) +#ifdef RPMMESS_DEBUG + return RPMMESS_DEBUG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_ERROR")) +#ifdef RPMMESS_ERROR + return RPMMESS_ERROR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_FATALERROR")) +#ifdef RPMMESS_FATALERROR + return RPMMESS_FATALERROR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_NORMAL")) +#ifdef RPMMESS_NORMAL + return RPMMESS_NORMAL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_PREREQLOOP")) +#ifdef RPMMESS_PREREQLOOP + return RPMMESS_PREREQLOOP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_QUIET")) +#ifdef RPMMESS_QUIET + return RPMMESS_QUIET; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_VERBOSE")) +#ifdef RPMMESS_VERBOSE + return RPMMESS_VERBOSE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMMESS_WARNING")) +#ifdef RPMMESS_WARNING + return RPMMESS_WARNING; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_DISKSPACE")) +#ifdef RPMPROB_FILTER_DISKSPACE + return RPMPROB_FILTER_DISKSPACE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_FORCERELOCATE")) +#ifdef RPMPROB_FILTER_FORCERELOCATE + return RPMPROB_FILTER_FORCERELOCATE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_IGNOREARCH")) +#ifdef RPMPROB_FILTER_IGNOREARCH + return RPMPROB_FILTER_IGNOREARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_IGNOREOS")) +#ifdef RPMPROB_FILTER_IGNOREOS + return RPMPROB_FILTER_IGNOREOS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_OLDPACKAGE")) +#ifdef RPMPROB_FILTER_OLDPACKAGE + return RPMPROB_FILTER_OLDPACKAGE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_REPLACENEWFILES")) +#ifdef RPMPROB_FILTER_REPLACENEWFILES + return RPMPROB_FILTER_REPLACENEWFILES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_REPLACEOLDFILES")) +#ifdef RPMPROB_FILTER_REPLACEOLDFILES + return RPMPROB_FILTER_REPLACEOLDFILES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMPROB_FILTER_REPLACEPKG")) +#ifdef RPMPROB_FILTER_REPLACEPKG + return RPMPROB_FILTER_REPLACEPKG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_ANY")) +#ifdef RPMSENSE_ANY + return RPMSENSE_ANY; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_CONFLICTS")) +#ifdef RPMSENSE_CONFLICTS + return RPMSENSE_CONFLICTS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_EQUAL")) +#ifdef RPMSENSE_EQUAL + return RPMSENSE_EQUAL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_GREATER")) +#ifdef RPMSENSE_GREATER + return RPMSENSE_GREATER; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_LESS")) +#ifdef RPMSENSE_LESS + return RPMSENSE_LESS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_OBSOLETES")) +#ifdef RPMSENSE_OBSOLETES + return RPMSENSE_OBSOLETES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_PREREQ")) +#ifdef RPMSENSE_PREREQ + return RPMSENSE_PREREQ; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_PROVIDES")) +#ifdef RPMSENSE_PROVIDES + return RPMSENSE_PROVIDES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_SENSEMASK")) +#ifdef RPMSENSE_SENSEMASK + return RPMSENSE_SENSEMASK; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_SERIAL")) +#ifdef RPMSENSE_SERIAL + return RPMSENSE_SERIAL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_TRIGGER")) +#ifdef RPMSENSE_TRIGGER + return RPMSENSE_TRIGGER; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_TRIGGERIN")) +#ifdef RPMSENSE_TRIGGERIN + return RPMSENSE_TRIGGERIN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_TRIGGERPOSTUN")) +#ifdef RPMSENSE_TRIGGERPOSTUN + return RPMSENSE_TRIGGERPOSTUN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSENSE_TRIGGERUN")) +#ifdef RPMSENSE_TRIGGERUN + return RPMSENSE_TRIGGERUN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_GPG")) +#ifdef RPMSIGTAG_GPG + return RPMSIGTAG_GPG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_LEMD5_1")) +#ifdef RPMSIGTAG_LEMD5_1 + return RPMSIGTAG_LEMD5_1; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_LEMD5_2")) +#ifdef RPMSIGTAG_LEMD5_2 + return RPMSIGTAG_LEMD5_2; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_MD5")) +#ifdef RPMSIGTAG_MD5 + return RPMSIGTAG_MD5; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_PGP")) +#ifdef RPMSIGTAG_PGP + return RPMSIGTAG_PGP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_PGP5")) +#ifdef RPMSIGTAG_PGP5 + return RPMSIGTAG_PGP5; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIGTAG_SIZE")) +#ifdef RPMSIGTAG_SIZE + return RPMSIGTAG_SIZE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIG_BAD")) +#ifdef RPMSIG_BAD + return RPMSIG_BAD; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIG_NOKEY")) +#ifdef RPMSIG_NOKEY + return RPMSIG_NOKEY; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIG_NOTTRUSTED")) +#ifdef RPMSIG_NOTTRUSTED + return RPMSIG_NOTTRUSTED; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIG_OK")) +#ifdef RPMSIG_OK + return RPMSIG_OK; +#else + goto not_there; +#endif + if (strEQ(name, "RPMSIG_UNKNOWN")) +#ifdef RPMSIG_UNKNOWN + return RPMSIG_UNKNOWN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_ARCH")) +#ifdef RPMTAG_ARCH + return RPMTAG_ARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_ARCHIVESIZE")) +#ifdef RPMTAG_ARCHIVESIZE + return RPMTAG_ARCHIVESIZE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_AUTOPROV")) +#ifdef RPMTAG_AUTOPROV + return RPMTAG_AUTOPROV; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_AUTOREQ")) +#ifdef RPMTAG_AUTOREQ + return RPMTAG_AUTOREQ; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_AUTOREQPROV")) +#ifdef RPMTAG_AUTOREQPROV + return RPMTAG_AUTOREQPROV; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BROKENMD5")) +#ifdef RPMTAG_BROKENMD5 + return RPMTAG_BROKENMD5; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDARCHS")) +#ifdef RPMTAG_BUILDARCHS + return RPMTAG_BUILDARCHS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDCONFLICTS")) +#ifdef RPMTAG_BUILDCONFLICTS + return RPMTAG_BUILDCONFLICTS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDHOST")) +#ifdef RPMTAG_BUILDHOST + return RPMTAG_BUILDHOST; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDMACROS")) +#ifdef RPMTAG_BUILDMACROS + return RPMTAG_BUILDMACROS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDPREREQ")) +#ifdef RPMTAG_BUILDPREREQ + return RPMTAG_BUILDPREREQ; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDREQUIRES")) +#ifdef RPMTAG_BUILDREQUIRES + return RPMTAG_BUILDREQUIRES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDROOT")) +#ifdef RPMTAG_BUILDROOT + return RPMTAG_BUILDROOT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_BUILDTIME")) +#ifdef RPMTAG_BUILDTIME + return RPMTAG_BUILDTIME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CAPABILITY")) +#ifdef RPMTAG_CAPABILITY + return RPMTAG_CAPABILITY; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CHANGELOG")) +#ifdef RPMTAG_CHANGELOG + return RPMTAG_CHANGELOG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CHANGELOGNAME")) +#ifdef RPMTAG_CHANGELOGNAME + return RPMTAG_CHANGELOGNAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CHANGELOGTEXT")) +#ifdef RPMTAG_CHANGELOGTEXT + return RPMTAG_CHANGELOGTEXT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CHANGELOGTIME")) +#ifdef RPMTAG_CHANGELOGTIME + return RPMTAG_CHANGELOGTIME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CONFLICTFLAGS")) +#ifdef RPMTAG_CONFLICTFLAGS + return RPMTAG_CONFLICTFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CONFLICTNAME")) +#ifdef RPMTAG_CONFLICTNAME + return RPMTAG_CONFLICTNAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_CONFLICTVERSION")) +#ifdef RPMTAG_CONFLICTVERSION + return RPMTAG_CONFLICTVERSION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_COOKIE")) +#ifdef RPMTAG_COOKIE + return RPMTAG_COOKIE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_COPYRIGHT")) +#ifdef RPMTAG_COPYRIGHT + return RPMTAG_COPYRIGHT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_DEFAULTPREFIX")) +#ifdef RPMTAG_DEFAULTPREFIX + return RPMTAG_DEFAULTPREFIX; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_DESCRIPTION")) +#ifdef RPMTAG_DESCRIPTION + return RPMTAG_DESCRIPTION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_DISTRIBUTION")) +#ifdef RPMTAG_DISTRIBUTION + return RPMTAG_DISTRIBUTION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_DOCDIR")) +#ifdef RPMTAG_DOCDIR + return RPMTAG_DOCDIR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EPOCH")) +#ifdef RPMTAG_EPOCH + return RPMTAG_EPOCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXCLUDE")) +#ifdef RPMTAG_EXCLUDE + return RPMTAG_EXCLUDE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXCLUDEARCH")) +#ifdef RPMTAG_EXCLUDEARCH + return RPMTAG_EXCLUDEARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXCLUDEOS")) +#ifdef RPMTAG_EXCLUDEOS + return RPMTAG_EXCLUDEOS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXCLUSIVE")) +#ifdef RPMTAG_EXCLUSIVE + return RPMTAG_EXCLUSIVE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXCLUSIVEARCH")) +#ifdef RPMTAG_EXCLUSIVEARCH + return RPMTAG_EXCLUSIVEARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXCLUSIVEOS")) +#ifdef RPMTAG_EXCLUSIVEOS + return RPMTAG_EXCLUSIVEOS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_EXTERNAL_TAG")) +#ifdef RPMTAG_EXTERNAL_TAG + return RPMTAG_EXTERNAL_TAG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEDEVICES")) +#ifdef RPMTAG_FILEDEVICES + return RPMTAG_FILEDEVICES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEFLAGS")) +#ifdef RPMTAG_FILEFLAGS + return RPMTAG_FILEFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEGIDS")) +#ifdef RPMTAG_FILEGIDS + return RPMTAG_FILEGIDS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEGROUPNAME")) +#ifdef RPMTAG_FILEGROUPNAME + return RPMTAG_FILEGROUPNAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEINODES")) +#ifdef RPMTAG_FILEINODES + return RPMTAG_FILEINODES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILELANGS")) +#ifdef RPMTAG_FILELANGS + return RPMTAG_FILELANGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILELINKTOS")) +#ifdef RPMTAG_FILELINKTOS + return RPMTAG_FILELINKTOS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEMD5S")) +#ifdef RPMTAG_FILEMD5S + return RPMTAG_FILEMD5S; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEMODES")) +#ifdef RPMTAG_FILEMODES + return RPMTAG_FILEMODES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEMTIMES")) +#ifdef RPMTAG_FILEMTIMES + return RPMTAG_FILEMTIMES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILENAMES")) +#ifdef RPMTAG_FILENAMES + return RPMTAG_FILENAMES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILERDEVS")) +#ifdef RPMTAG_FILERDEVS + return RPMTAG_FILERDEVS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILESIZES")) +#ifdef RPMTAG_FILESIZES + return RPMTAG_FILESIZES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILESTATES")) +#ifdef RPMTAG_FILESTATES + return RPMTAG_FILESTATES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEUIDS")) +#ifdef RPMTAG_FILEUIDS + return RPMTAG_FILEUIDS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEUSERNAME")) +#ifdef RPMTAG_FILEUSERNAME + return RPMTAG_FILEUSERNAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_FILEVERIFYFLAGS")) +#ifdef RPMTAG_FILEVERIFYFLAGS + return RPMTAG_FILEVERIFYFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_GIF")) +#ifdef RPMTAG_GIF + return RPMTAG_GIF; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_GROUP")) +#ifdef RPMTAG_GROUP + return RPMTAG_GROUP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_ICON")) +#ifdef RPMTAG_ICON + return RPMTAG_ICON; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_INSTALLPREFIX")) +#ifdef RPMTAG_INSTALLPREFIX + return RPMTAG_INSTALLPREFIX; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_INSTALLTIME")) +#ifdef RPMTAG_INSTALLTIME + return RPMTAG_INSTALLTIME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_INSTPREFIXES")) +#ifdef RPMTAG_INSTPREFIXES + return RPMTAG_INSTPREFIXES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_LICENSE")) +#ifdef RPMTAG_LICENSE + return RPMTAG_LICENSE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_NAME")) +#ifdef RPMTAG_NAME + return RPMTAG_NAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_NOPATCH")) +#ifdef RPMTAG_NOPATCH + return RPMTAG_NOPATCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_NOSOURCE")) +#ifdef RPMTAG_NOSOURCE + return RPMTAG_NOSOURCE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_OBSOLETES")) +#ifdef RPMTAG_OBSOLETES + return RPMTAG_OBSOLETES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_ORIGFILENAMES")) +#ifdef RPMTAG_ORIGFILENAMES + return RPMTAG_ORIGFILENAMES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_OS")) +#ifdef RPMTAG_OS + return RPMTAG_OS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PACKAGER")) +#ifdef RPMTAG_PACKAGER + return RPMTAG_PACKAGER; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PATCH")) +#ifdef RPMTAG_PATCH + return RPMTAG_PATCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_POSTIN")) +#ifdef RPMTAG_POSTIN + return RPMTAG_POSTIN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_POSTINPROG")) +#ifdef RPMTAG_POSTINPROG + return RPMTAG_POSTINPROG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_POSTUN")) +#ifdef RPMTAG_POSTUN + return RPMTAG_POSTUN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_POSTUNPROG")) +#ifdef RPMTAG_POSTUNPROG + return RPMTAG_POSTUNPROG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PREFIXES")) +#ifdef RPMTAG_PREFIXES + return RPMTAG_PREFIXES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PREIN")) +#ifdef RPMTAG_PREIN + return RPMTAG_PREIN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PREINPROG")) +#ifdef RPMTAG_PREINPROG + return RPMTAG_PREINPROG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PREREQ")) +#ifdef RPMTAG_PREREQ + return RPMTAG_PREREQ; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PREUN")) +#ifdef RPMTAG_PREUN + return RPMTAG_PREUN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PREUNPROG")) +#ifdef RPMTAG_PREUNPROG + return RPMTAG_PREUNPROG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_PROVIDES")) +#ifdef RPMTAG_PROVIDES + return RPMTAG_PROVIDES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_RELEASE")) +#ifdef RPMTAG_RELEASE + return RPMTAG_RELEASE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_REQUIREFLAGS")) +#ifdef RPMTAG_REQUIREFLAGS + return RPMTAG_REQUIREFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_REQUIRENAME")) +#ifdef RPMTAG_REQUIRENAME + return RPMTAG_REQUIRENAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_REQUIREVERSION")) +#ifdef RPMTAG_REQUIREVERSION + return RPMTAG_REQUIREVERSION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_ROOT")) +#ifdef RPMTAG_ROOT + return RPMTAG_ROOT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_RPMVERSION")) +#ifdef RPMTAG_RPMVERSION + return RPMTAG_RPMVERSION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_SERIAL")) +#ifdef RPMTAG_SERIAL + return RPMTAG_SERIAL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_SIZE")) +#ifdef RPMTAG_SIZE + return RPMTAG_SIZE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_SOURCE")) +#ifdef RPMTAG_SOURCE + return RPMTAG_SOURCE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_SOURCEPACKAGE")) +#ifdef RPMTAG_SOURCEPACKAGE + return RPMTAG_SOURCEPACKAGE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_SOURCERPM")) +#ifdef RPMTAG_SOURCERPM + return RPMTAG_SOURCERPM; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_SUMMARY")) +#ifdef RPMTAG_SUMMARY + return RPMTAG_SUMMARY; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERFLAGS")) +#ifdef RPMTAG_TRIGGERFLAGS + return RPMTAG_TRIGGERFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERIN")) +#ifdef RPMTAG_TRIGGERIN + return RPMTAG_TRIGGERIN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERINDEX")) +#ifdef RPMTAG_TRIGGERINDEX + return RPMTAG_TRIGGERINDEX; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERNAME")) +#ifdef RPMTAG_TRIGGERNAME + return RPMTAG_TRIGGERNAME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERPOSTUN")) +#ifdef RPMTAG_TRIGGERPOSTUN + return RPMTAG_TRIGGERPOSTUN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERSCRIPTPROG")) +#ifdef RPMTAG_TRIGGERSCRIPTPROG + return RPMTAG_TRIGGERSCRIPTPROG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERSCRIPTS")) +#ifdef RPMTAG_TRIGGERSCRIPTS + return RPMTAG_TRIGGERSCRIPTS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERUN")) +#ifdef RPMTAG_TRIGGERUN + return RPMTAG_TRIGGERUN; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_TRIGGERVERSION")) +#ifdef RPMTAG_TRIGGERVERSION + return RPMTAG_TRIGGERVERSION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_URL")) +#ifdef RPMTAG_URL + return RPMTAG_URL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_VENDOR")) +#ifdef RPMTAG_VENDOR + return RPMTAG_VENDOR; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_VERIFYSCRIPT")) +#ifdef RPMTAG_VERIFYSCRIPT + return RPMTAG_VERIFYSCRIPT; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_VERIFYSCRIPTPROG")) +#ifdef RPMTAG_VERIFYSCRIPTPROG + return RPMTAG_VERIFYSCRIPTPROG; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_VERSION")) +#ifdef RPMTAG_VERSION + return RPMTAG_VERSION; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTAG_XPM")) +#ifdef RPMTAG_XPM + return RPMTAG_XPM; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_ALLFILES")) +#ifdef RPMTRANS_FLAG_ALLFILES + return RPMTRANS_FLAG_ALLFILES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_BUILD_PROBS")) +#ifdef RPMTRANS_FLAG_BUILD_PROBS + return RPMTRANS_FLAG_BUILD_PROBS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_JUSTDB")) +#ifdef RPMTRANS_FLAG_JUSTDB + return RPMTRANS_FLAG_JUSTDB; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_KEEPOBSOLETE")) +#ifdef RPMTRANS_FLAG_KEEPOBSOLETE + return RPMTRANS_FLAG_KEEPOBSOLETE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_NODOCS")) +#ifdef RPMTRANS_FLAG_NODOCS + return RPMTRANS_FLAG_NODOCS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_NOSCRIPTS")) +#ifdef RPMTRANS_FLAG_NOSCRIPTS + return RPMTRANS_FLAG_NOSCRIPTS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_NOTRIGGERS")) +#ifdef RPMTRANS_FLAG_NOTRIGGERS + return RPMTRANS_FLAG_NOTRIGGERS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMTRANS_FLAG_TEST")) +#ifdef RPMTRANS_FLAG_TEST + return RPMTRANS_FLAG_TEST; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVAR_INCLUDE")) +#ifdef RPMVAR_INCLUDE + return RPMVAR_INCLUDE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVAR_MACROFILES")) +#ifdef RPMVAR_MACROFILES + return RPMVAR_MACROFILES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVAR_NUM")) +#ifdef RPMVAR_NUM + return RPMVAR_NUM; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVAR_OPTFLAGS")) +#ifdef RPMVAR_OPTFLAGS + return RPMVAR_OPTFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVAR_PROVIDES")) +#ifdef RPMVAR_PROVIDES + return RPMVAR_PROVIDES; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_ALL")) +#ifdef RPMVERIFY_ALL + return RPMVERIFY_ALL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_FILESIZE")) +#ifdef RPMVERIFY_FILESIZE + return RPMVERIFY_FILESIZE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_GROUP")) +#ifdef RPMVERIFY_GROUP + return RPMVERIFY_GROUP; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_LINKTO")) +#ifdef RPMVERIFY_LINKTO + return RPMVERIFY_LINKTO; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_LSTATFAIL")) +#ifdef RPMVERIFY_LSTATFAIL + return RPMVERIFY_LSTATFAIL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_MD5")) +#ifdef RPMVERIFY_MD5 + return RPMVERIFY_MD5; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_MODE")) +#ifdef RPMVERIFY_MODE + return RPMVERIFY_MODE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_MTIME")) +#ifdef RPMVERIFY_MTIME + return RPMVERIFY_MTIME; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_NONE")) +#ifdef RPMVERIFY_NONE + return RPMVERIFY_NONE; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_RDEV")) +#ifdef RPMVERIFY_RDEV + return RPMVERIFY_RDEV; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_READFAIL")) +#ifdef RPMVERIFY_READFAIL + return RPMVERIFY_READFAIL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_READLINKFAIL")) +#ifdef RPMVERIFY_READLINKFAIL + return RPMVERIFY_READLINKFAIL; +#else + goto not_there; +#endif + if (strEQ(name, "RPMVERIFY_USER")) +#ifdef RPMVERIFY_USER + return RPMVERIFY_USER; +#else + goto not_there; +#endif + if (strEQ(name, "RPM_MACHTABLE_BUILDARCH")) +#ifdef RPM_MACHTABLE_BUILDARCH + return RPM_MACHTABLE_BUILDARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPM_MACHTABLE_BUILDOS")) +#ifdef RPM_MACHTABLE_BUILDOS + return RPM_MACHTABLE_BUILDOS; +#else + goto not_there; +#endif + if (strEQ(name, "RPM_MACHTABLE_COUNT")) +#ifdef RPM_MACHTABLE_COUNT + return RPM_MACHTABLE_COUNT; +#else + goto not_there; +#endif + if (strEQ(name, "RPM_MACHTABLE_INSTARCH")) +#ifdef RPM_MACHTABLE_INSTARCH + return RPM_MACHTABLE_INSTARCH; +#else + goto not_there; +#endif + if (strEQ(name, "RPM_MACHTABLE_INSTOS")) +#ifdef RPM_MACHTABLE_INSTOS + return RPM_MACHTABLE_INSTOS; +#else + goto not_there; +#endif + break; + case 'S': + break; + case 'T': + break; + case 'U': + break; + case 'V': + if (strEQ(name, "VERIFY_DEPS")) +#ifdef VERIFY_DEPS + return VERIFY_DEPS; +#else + goto not_there; +#endif + if (strEQ(name, "VERIFY_FILES")) +#ifdef VERIFY_FILES + return VERIFY_FILES; +#else + goto not_there; +#endif + if (strEQ(name, "VERIFY_MD5")) +#ifdef VERIFY_MD5 + return VERIFY_MD5; +#else + goto not_there; +#endif + if (strEQ(name, "VERIFY_SCRIPT")) +#ifdef VERIFY_SCRIPT + return VERIFY_SCRIPT; +#else + goto not_there; +#endif + break; + case 'W': + break; + case 'X': + break; + case 'Y': + break; + case 'Z': + break; + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + diff --git a/perl/foo.i386.rpm b/perl/foo.i386.rpm new file mode 100644 index 0000000000000000000000000000000000000000..9a575f5625be2cf3eb7b3bfdf8cc3500e56a9c23 GIT binary patch literal 47815 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%0A^PUQMm{g>FE$w(Eb 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 N{{xE-3j5ra0RY=;B{l#6 literal 0 HcmV?d00001 diff --git a/perl/junk.xs b/perl/junk.xs new file mode 100644 index 0000000..0513a0f --- /dev/null +++ b/perl/junk.xs @@ -0,0 +1,55 @@ +/* + * This file includes misc functions that were once implemented and retired + * later in the process + * + * $Id: junk.xs,v 1.1 1999/07/14 16:52:52 jbj Exp $ + */ + +SV * +HeaderRawItem(header, item) + Header * header + int item + PREINIT: + int_32 count, type; + int rc; + void * value; + AV * array; + char ** src; + CODE: + rc = headerGetEntry(*header, item, &type, &value, &count); + RETVAL = &PL_sv_undef; + if (rc != 0) { + switch(type) { + case RPM_CHAR_TYPE: + RETVAL = newSViv((char) (int)value); + break; + case RPM_INT8_TYPE: + RETVAL = newSViv((int_8) (int) value); + break; + case RPM_INT16_TYPE: + RETVAL = newSViv((int_16) (int) value); + break; + case RPM_INT32_TYPE: + RETVAL = newSViv((int_32)value); + break; + case RPM_STRING_TYPE: + RETVAL = newSVpv((char *)value, 0); + break; + case RPM_BIN_TYPE: + /* XXX: this looks mostly unused - how do we deal with it? */ + break; + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + /* we have to build an array first */ + array = newAV(); + src = (char **) value; + while (count--) { + av_push(array, newSVpv(*src++, 0)); + } + RETVAL = newRV_inc((SV*)array); + free(value); + break; + } + } + OUTPUT: + RETVAL diff --git a/perl/rpm.pm b/perl/rpm.pm new file mode 100644 index 0000000..63ee94a --- /dev/null +++ b/perl/rpm.pm @@ -0,0 +1,117 @@ +package rpm; + +use strict; +use Carp; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); + +require Exporter; +require DynaLoader; +require AutoLoader; + +@ISA = qw(Exporter DynaLoader); +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. +@EXPORT = qw( + +); +$VERSION = '0.01'; + +sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. If a constant is not found then control is passed + # to the AUTOLOAD in AutoLoader. + + my $constname; + ($constname = $AUTOLOAD) =~ s/.*:://; + croak "& not defined" if $constname eq 'constant'; + my $val = constant($constname, @_ ? $_[0] : 0); + if ($! != 0) { + if ($! =~ /Invalid/) { + $AutoLoader::AUTOLOAD = $AUTOLOAD; + goto &AutoLoader::AUTOLOAD; + } + else { + croak "Your vendor has not defined rpm macro $constname"; + } + } + no strict 'refs'; + *$AUTOLOAD = sub () { $val }; + goto &$AUTOLOAD; +} + +bootstrap rpm $VERSION; + +# Preloaded methods go here. + +sub HeaderPtr::ItemByName { + my $header = shift; + my $item = shift; + my $item_index = shift; + + if (defined $item_index) { + return @{$header->ItemByNameRef($item)}[$item_index]; + } else { + return @{$header->ItemByNameRef($item)}; + } +} + +sub HeaderPtr::ItemByVal { + my $header = shift; + my $item = shift; + my $item_index = shift; + + if (defined $item_index) { + return @{$header->ItemByValRef($item)}[$item_index]; + } else { + return @{$header->ItemByValRef($item)}; + } +} + +sub HeaderPtr::List { + my $header = shift; + + return %{$header->ListRef()}; +} + +sub HeaderPtr::Tags { + my $header = shift; + + return @{$header->TagsRef()}; +} + +# Autoload methods go after =cut, and are processed by the autosplit program. + +1; +__END__ +# Below is the stub of documentation for your module. You better edit it! + +=head1 NAME + +rpm - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use rpm; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for rpm was created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head1 Exported constants + + +=head1 AUTHOR + +Cristian Gafton, gafton@redhat.com + +=head1 SEE ALSO + +perl(1), rpm(8). + +=cut diff --git a/perl/rpm.xs b/perl/rpm.xs new file mode 100644 index 0000000..463dca2 --- /dev/null +++ b/perl/rpm.xs @@ -0,0 +1,234 @@ +/* + * Perl interface to rpmlib + * + * $Id: rpm.xs,v 1.1 1999/07/14 16:52:52 jbj Exp $ + */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +extern double constant(char *name, int arg); + +MODULE = rpm PACKAGE = rpm + +PROTOTYPES: ENABLE + +double +constant(name,arg) + char * name + int arg + +Header * +Header(package) + const char * package + PREINIT: + FD_t file_desc = NULL; + int rc; + int isSource; + int had_error = 0; + CODE: + New(1,RETVAL,1,Header); + file_desc = fdOpen(package, O_RDONLY, 0); + if (file_desc != NULL && RETVAL != NULL) { + rc = rpmReadPackageHeader(file_desc, RETVAL, &isSource, NULL, NULL); + if (rc != 0) { + had_error++; + } + if (file_desc != NULL) { + fdClose(file_desc); + } + } else { + had_error++; + } + ST(0) = sv_newmortal(); + if (had_error) { + ST(0) = &PL_sv_undef; + } else { + sv_setref_pv(ST(0), "HeaderPtr", (void*)RETVAL); + } + + +MODULE = rpm PACKAGE = HeaderPtr PREFIX = Header + +AV * +HeaderItemByValRef(header, item) + Header * header + int item + PREINIT: + int_32 count, type; + int rc; + void * value; + char ** src; + AV * array; +CODE: + rc = headerGetEntry(*header, item, &type, &value, &count); + array = newAV(); + if (rc != 0) { + switch(type) { + case RPM_CHAR_TYPE: + av_push(array, newSViv((char) (int) value)); + break; + case RPM_INT8_TYPE: + av_push(array, newSViv((int_8) (int) value)); + break; + case RPM_INT16_TYPE: + av_push(array, newSViv((int_16) (int) value)); + break; + case RPM_INT32_TYPE: + av_push(array, newSViv((int_32)value)); + break; + case RPM_STRING_TYPE: + av_push(array, newSVpv((char *)value, 0)); + break; + case RPM_BIN_TYPE: + /* XXX: this looks mostly unused - how do we deal with it? */ + break; + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + src = (char **) value; + while (count--) { + av_push(array, newSVpv(*src++, 0)); + } + free(value); + break; + } + } + RETVAL = array; + OUTPUT: + RETVAL + +AV * +HeaderItemByNameRef(header, tag) + Header * header + const char * tag + PREINIT: + int_32 count, type, item = -1; + int rc, i; + void * value; + char ** src; + AV * array; + CODE: + /* walk first through the list of items and get the proper value */ + for (i = 0; i < rpmTagTableSize; i++) { + if (strcasecmp(tag, rpmTagTable[i].name) == 0) { + item = rpmTagTable[i].val; + break; + } + } + rc = headerGetEntry(*header, item, &type, &value, &count); + array = newAV(); + if (rc != 0) { + switch(type) { + case RPM_CHAR_TYPE: + av_push(array, newSViv((char) (int) value)); + break; + case RPM_INT8_TYPE: + av_push(array, newSViv((int_8) (int) value)); + break; + case RPM_INT16_TYPE: + av_push(array, newSViv((int_16) (int) value)); + break; + case RPM_INT32_TYPE: + av_push(array, newSViv((int_32)value)); + break; + case RPM_STRING_TYPE: + av_push(array, newSVpv((char *)value, 0)); + break; + case RPM_BIN_TYPE: + /* XXX: this looks mostly unused - how do we deal with it? */ + break; + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + src = (char **) value; + while (count--) { + av_push(array, newSVpv(*src++, 0)); + } + free(value); + break; + } + } + RETVAL = array; + OUTPUT: + RETVAL + + +HV * +HeaderListRef(header) + Header * header + PREINIT: + HeaderIterator iterator; + int_32 tag, type, count; + void *value; + CODE: + RETVAL = newHV(); + iterator = headerInitIterator(*header); + while (headerNextIterator(iterator, &tag, &type, &value, &count)) { + SV ** sv; + AV * array; + char ** src; + char * tagStr = tagName(tag); + array = newAV(); + switch(type) { + case RPM_CHAR_TYPE: + av_push(array, newSViv((char) (int) value)); + break; + case RPM_INT8_TYPE: + av_push(array, newSViv((int_8) (int) value)); + break; + case RPM_INT16_TYPE: + av_push(array, newSViv((int_16) (int) value)); + break; + case RPM_INT32_TYPE: + av_push(array, newSViv((int_32)value)); + break; + case RPM_STRING_TYPE: + av_push(array, newSVpv((char *)value, 0)); + break; + case RPM_BIN_TYPE: + /* XXX: this looks mostly unused - how do we deal with it? */ + break; + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + /* we have to build an array first */ + src = (char **) value; + while (count--) { + av_push(array, newSVpv(*src++, 0)); + } + free(value); + break; + } + sv = hv_store(RETVAL, tagStr, strlen(tagStr), newRV_inc((SV*)array), 0); + } + headerFreeIterator(iterator); + OUTPUT: + RETVAL + +AV * +HeaderTagsRef(header) + Header * header + PREINIT: + HeaderIterator iterator; + int_32 tag, type; + void *value; + CODE: + RETVAL = newAV(); + iterator = headerInitIterator(*header); + while (headerNextIterator(iterator, &tag, &type, &value, NULL)) { + av_push(RETVAL, newSVpv(tagName(tag), 0)); + if (type == RPM_STRING_ARRAY_TYPE || type == RPM_I18NSTRING_TYPE) + free(value); + } + headerFreeIterator(iterator); + OUTPUT: + RETVAL diff --git a/perl/test.pl b/perl/test.pl new file mode 100644 index 0000000..7a750a5 --- /dev/null +++ b/perl/test.pl @@ -0,0 +1,37 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..6\n"; } +END {print "not ok 1\n" unless $loaded;} +use rpm; +$loaded = 1; +print "ok 1\n"; + +######################### End of black magic. + +# Insert your test code below (better if it prints "ok 13" +# (correspondingly "not ok 13") depending on the success of chunk 13 +# of the test code): + +my $valid_package = "foo.i386.rpm"; + +# we should be able to open a valid file +print rpm::Header($valid_package) ? "ok 2" : "not ok 2", "\n"; + +# we should not be able to read stuff from an invalid file +print rpm::Header("this is not a valid package") ? "not ok 3" : "ok 3", "\n"; + +# in the test file we have there are exactly 42 headers +print scalar rpm::Header($valid_package)->Tags() == 42 ? "ok 4" : "not ok 4", "\n"; + +# there are exactly 4 files in the package +print scalar rpm::Header($valid_package)->ItemByName('Filenames') == 4 ? "ok 5" : "not ok 5", "\n"; + +# item 1000 should be the name of the package +print scalar rpm::Header($valid_package)->ItemByVal(1000) eq "xemacs-extras" ? "ok 6" : "not ok 6", "\n"; + diff --git a/perl/typemap b/perl/typemap new file mode 100644 index 0000000..4413d2b --- /dev/null +++ b/perl/typemap @@ -0,0 +1,7 @@ +/* $Id: typemap,v 1.1 1999/07/14 16:52:52 jbj Exp $ */ + +TYPEMAP + +Header * T_PTROBJ +const char * T_PV + -- 2.7.4