CFLAGS=-DDEBUG -I/usr/include/python2.7/ `pkg-config --cflags glib-2.0` `xml2-config --cflags`
LINKFLAGS=`pkg-config --libs glib-2.0` `xml2-config --libs` -lrpm
-all: package.so xml_dump.so parsehdr.so
+all: package.so xml_dump.so parsehdr.so parsepkg.so
test: main
$(SWIG) -python -Wall parsehdr.i
gcc $(CFLAGS) -c parsehdr.c parsehdr_wrap.c
+parsepkg.o parsepkg_wrap.o: parsepkg.c parsepkg.h
+ $(SWIG) -python -Wall parsepkg.i
+ gcc $(CFLAGS) -c parsepkg.c parsepkg_wrap.c
+
# Object files
misc.o: misc.c misc.h
parsehdr.so: parsehdr_wrap.o parsehdr.o package.o xml_dump.o misc.o
ld $(LINKFLAGS) -shared misc.o parsehdr_wrap.o parsehdr.o package.o xml_dump.o xml_dump_primary.o xml_dump_filelists.o xml_dump_other.o -o _parsehdr.so
+parsepkg.so: parsepkg_wrap.o parsepkg.o parsehdr.o package.o xml_dump.o misc.o
+ ld $(LINKFLAGS) -shared misc.o parsepkg_wrap.o parsepkg.o parsehdr.o package.o xml_dump.o xml_dump_primary.o xml_dump_filelists.o xml_dump_other.o -o _parsepkg.so
+
# Main
main: package.o xml_dump.o xml_dump_primary.o xml_dump_filelists.o xml_dump_other.o
--- /dev/null
+#include <glib.h>
+#include <rpm/rpmfi.h>
+#include "parsehdr.h"
+#include "xml_dump.h"
+#include "misc.h"
+#include "parsehdr.h"
+
+
+struct XmlStruct xml_from_package_file(const char *filename, const char *checksum_type,
+ const char *location_href, const char *location_base, int changelog_limit,
+ gint64 hdr_start, gint64 hdr_end)
+{
+ struct XmlStruct result;
+ result.primary = NULL;
+ result.filelists = NULL;
+ result.other = NULL;
+
+ //
+ // Get header
+ //
+
+ // Create transaction
+ rpmts ts = NULL;
+ rpmReadConfigFiles(NULL, NULL);
+ ts = rpmtsCreate();
+
+ // Open rpm file
+ FD_t fd = NULL;
+ fd = Fopen(filename, "r.ufdio");
+ if (!fd) {
+ perror("Fopen");
+ return result;
+ }
+
+ // Read package
+ Header hdr;
+ int rc = rpmReadPackageFile(ts, fd, NULL, &hdr);
+ if (rc != RPMRC_OK) {
+ switch (rc) {
+ case RPMRC_NOKEY:
+ //printf("rpmReadpackageFile: Public key is unavaliable\n");
+ break;
+ case RPMRC_NOTTRUSTED:
+ //printf("rpmReadpackageFile: Signature is OK, but key is not trusted\n");
+ break;
+ default:
+ perror("rpmReadPackageFile");
+ return result;
+ }
+ }
+
+ //
+ // Get file stat
+ //
+
+ gint64 mtime = 0;
+ gint64 size = 0;
+ char *checksum = "abcdefghijklmnop";
+ //char *location_href = NULL;
+ //char *location_base = NULL;
+ //int changelog_limit = 5;
+ //gint64 hdr_start = 10;
+ //gint64 hdr_end = 22;
+
+ //
+ // Gen XML
+ //
+
+ Package *pkg = parse_header(hdr, mtime, size, checksum, checksum_type, location_href,
+ location_base, changelog_limit, hdr_start, hdr_end);
+
+ result.primary = xml_dump_primary(pkg, NULL);
+ result.filelists = xml_dump_filelists(pkg, NULL);
+ result.other = xml_dump_other(pkg, NULL);
+ return result;
+}
--- /dev/null
+#ifndef __PARSEPKG__
+#define __PARSEPKG__
+
+#include <rpm/rpmlib.h>
+#include <glib.h>
+#include "package.h"
+#include "xml_dump.h"
+
+/*
+Package *parse_package(Header hdr, gint64 mtime, gint64 size, const char *checksum, const char *checksum_type,
+ const char *location_href, const char *location_base,
+ int changelog_limit, gint64 hdr_start, gint64 hdr_end);
+*/
+struct XmlStruct xml_from_package_file(const char *filename, const char *checksum_type,
+ const char *location_href, const char *location_base,
+ int changelog_limit, gint64 hdr_start, gint64 hdr_end);
+
+#endif /* __PARSEPKG__ */