version 1.3, 1998/05/04 02:52:56
|
version 1.4, 1998/05/08 04:38:21
|
Line 18
|
Line 18
|
|
|
#include "rpm2html.h" |
#include "rpm2html.h" |
#include "rpmdata.h" |
#include "rpmdata.h" |
#include "parser.h" |
|
#include "tree.h" |
|
#include "rdf.h" |
|
#include "html.h" |
#include "html.h" |
|
|
|
#include "rdf_api.h" |
|
#include "rdf.h" |
|
|
/* |
/* |
* Open an RDF file call the parser to create a XML tree |
* Open an RDF file call the parser to create a XML tree |
* Then walk the tree and build an rpmData structure for |
* Then walk the tree and build an rpmData structure for |
Line 33 rpmDataPtr rpmOpenRdf(char *nameRpm, rpm
|
Line 33 rpmDataPtr rpmOpenRdf(char *nameRpm, rpm
|
} |
} |
|
|
/* |
/* |
* Create and RDF file containing the description for the |
* Create and RDF file containing the description for the given RPM data. |
* given RPM data. |
|
*/ |
*/ |
void dumpRpmRdf(rpmDataPtr rpm, rpmSubdirPtr tree) { |
void dumpRpmRdf(rpmDataPtr rpm, rpmSubdirPtr tree) { |
struct tm * tstruct; |
struct tm * tstruct; |
rpmDirPtr dir = rpm->dir; |
rpmDirPtr dir = rpm->dir; |
char *base = dir->dir; |
char *base = dir->dir; |
FILE *rdf; |
|
int i; |
int i; |
char buf[1000]; |
char buf[10000]; |
|
char file[1000]; |
|
rdfSchema rdf; |
|
rdfNamespace rpmNs; |
|
rdfDescription desc; |
|
rdfBag bag; |
|
|
if (rpm2html_rdf_dir != NULL) base = rpm2html_rdf_dir; |
if (rpm2html_rdf_dir != NULL) base = rpm2html_rdf_dir; |
|
|
if ((dir->subdir != NULL) && (dir->subdir[0] != '\0')) { |
if ((dir->subdir != NULL) && (dir->subdir[0] != '\0')) { |
if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) |
if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) |
sprintf(buf, "%s/%s/%s/%s.rdf", base, dir->subdir, |
sprintf(file, "%s/%s/%s/%s.rdf", base, dir->subdir, |
rpm->subdir, rpmName(rpm)); |
rpm->subdir, rpmName(rpm)); |
else |
else |
sprintf(buf, "%s/%s/%s.rdf", base, dir->subdir, rpmName(rpm)); |
sprintf(file, "%s/%s/%s.rdf", base, dir->subdir, rpmName(rpm)); |
} else { |
} else { |
if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) |
if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) |
sprintf(buf, "%s/%s/%s.rdf", base, rpm->subdir, rpmName(rpm)); |
sprintf(file, "%s/%s/%s.rdf", base, rpm->subdir, rpmName(rpm)); |
else |
else |
sprintf(buf, "%s/%s.rdf", base, rpmName(rpm)); |
sprintf(file, "%s/%s.rdf", base, rpmName(rpm)); |
} |
} |
|
|
if (checkDate(buf, rpm->stamp)) return; |
if (checkDate(file, rpm->stamp)) return; |
if (verbose > 1) { |
if (verbose > 1) { |
printf("Dumping %s\n", buf); |
printf("Dumping %s\n", file); |
} |
} |
rdf = fopen(buf, "w"); |
|
if (rdf == NULL) { |
/* |
fprintf(stderr, "Couldn't save to file %s: %s\n", |
* build the RDF document tree |
buf, strerror(errno)); |
* Note : the order is not important but following the rpmData |
return; |
* structure order is easier to check. |
} |
*/ |
fprintf(rdf, "<?XML version=\"1.0\">\n"); |
rdf = rdfNewSchema(); |
fprintf(rdf, "<?namespace href =\"http://www.w3.org/TR/WD-rdf-syntax#/\" AS = \"RDF\"?>\n"); |
rpmNs = rdfNewNamespace(rdf, "http://www.rpm.org/", "RPM"); |
fprintf(rdf, "<?namespace href =\"http://www.rpm.org/\" AS = \"RPM\"?>\n"); |
|
fprintf(rdf, "<RDF:RDF>\n"); |
|
fprintf(rdf, "<RDF:Description RDF:HREF=\""); |
|
if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) { |
if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) { |
if (dir->mirrors[0] != NULL) |
if (dir->mirrors[0] != NULL) |
fprintf(rdf, "%s/%s/%s\">\n", |
sprintf(buf, "%s/%s/%s", |
dir->mirrors[0], rpm->subdir, rpm->filename); |
dir->mirrors[0], rpm->subdir, rpm->filename); |
else |
else |
fprintf(rdf, "%s/%s/%s\">\n", |
sprintf(buf, "%s/%s/%s", |
dir->ftp, rpm->subdir, rpm->filename); |
dir->ftp, rpm->subdir, rpm->filename); |
} else { |
} else { |
if (dir->mirrors[0] != NULL) |
if (dir->mirrors[0] != NULL) |
fprintf(rdf, "%s/%s\">\n", |
sprintf(buf, "%s/%s", |
dir->mirrors[0], rpm->filename); |
dir->mirrors[0], rpm->filename); |
else |
else |
fprintf(rdf, "%s/%s\">\n", |
sprintf(buf, "%s/%s", |
dir->ftp, rpm->filename); |
dir->ftp, rpm->filename); |
} |
} |
fprintf(rdf, "<RPM:Name>%s</RPM:Name>\n", rpm->name); |
desc = rdfAddDescription(rdf, NULL, buf); |
fprintf(rdf, "<RPM:Version>%s</RPM:Version>\n", rpm->version); |
|
fprintf(rdf, "<RPM:Release>%s</RPM:Release>\n", rpm->release); |
rdfSetValue(desc, "Name", rpmNs, rpm->name); |
|
rdfSetValue(desc, "Version", rpmNs, rpm->version); |
|
rdfSetValue(desc, "Release", rpmNs, rpm->release); |
|
if (rpm->url) |
|
rdfSetValue(desc, "URL", rpmNs, rpm->url); |
|
if (rpm->arch) |
|
rdfSetValue(desc, "Arch", rpmNs, rpm->arch); |
|
if (rpm->os) |
|
rdfSetValue(desc, "Os", rpmNs, rpm->os); |
if (rpm->distribution) |
if (rpm->distribution) |
fprintf(rdf, "<RPM:Distribution>%s</RPM:Distribution>\n", |
rdfSetValue(desc, "Distribution", rpmNs, rpm->distribution); |
rpm->distribution); |
|
if (rpm->vendor) |
if (rpm->vendor) |
fprintf(rdf, "<RPM:Vendor>%s</RPM:Vendor>\n", rpm->vendor); |
rdfSetValue(desc, "Vendor", rpmNs, rpm->vendor); |
fprintf(rdf, "<RPM:Size>%d</RPM:Size>\n", rpm->size); |
if (rpm->packager) |
if (rpm->url) |
rdfSetValue(desc, "Packager", rpmNs, rpm->packager); |
fprintf(rdf, "<RPM:URL>%s</RPM:URL>\n", rpm->url); |
if (rpm->group) |
|
rdfSetValue(desc, "Group", rpmNs, rpm->group); |
|
if (rpm->summary) |
|
rdfSetValue(desc, "Summary", rpmNs, rpm->summary); |
|
if (rpm->description) |
|
rdfSetValue(desc, "Description", rpmNs, rpm->description); |
|
if (rpm->copyright) |
|
rdfSetValue(desc, "Copyright", rpmNs, rpm->copyright); |
|
if (rpm->changelog) |
|
rdfSetValue(desc, "Changelog", rpmNs, rpm->changelog); |
|
if (rpm->srcrpm) { |
|
if (dir->ftpsrc) { |
|
sprintf(buf, "%s/%s", dir->ftpsrc, rpm->srcrpm); |
|
rdfSetValue(desc, "Sources", rpmNs, buf); |
|
} else { |
|
rdfSetValue(desc, "Sources", rpmNs, rpm->srcrpm); |
|
} |
|
} |
tstruct = localtime(&(rpm->date)); |
tstruct = localtime(&(rpm->date)); |
#ifdef HAVE_STRFTIME |
#ifdef HAVE_STRFTIME |
strftime(buf, sizeof(buf) - 1, "%c", tstruct); |
strftime(buf, sizeof(buf) - 1, "%c", tstruct); |
#else |
#else |
#error "no strftime, please check !" |
#error "no strftime, please check !" |
#endif |
#endif |
fprintf(rdf, "<RPM:BuildDate>%s</RPM:BuildDate>\n", buf); |
rdfSetValue(desc, "BuildDate", rpmNs, buf); |
|
sprintf(buf, "%d", rpm->size); |
|
rdfSetValue(desc, "Size", rpmNs, buf); |
if (rpm->host) |
if (rpm->host) |
fprintf(rdf, "<RPM:BuildHost>%s</RPM:BuildHost>\n", rpm->host); |
rdfSetValue(desc, "BuildHost", rpmNs, rpm->host); |
if (rpm->group) |
|
fprintf(rdf, "<RPM:Group>%s</RPM:Group>\n", rpm->group); |
|
if (rpm->packager) |
|
fprintf(rdf, "<RPM:Packager>%s</RPM:Packager>\n", rpm->packager); |
|
if (dir->ftpsrc) { |
|
fprintf(rdf, "<RPM:Sources>%s/%s</RPM:Sources>\n", |
|
dir->ftpsrc, rpm->srcrpm); |
|
} else { |
|
fprintf(rdf, "<RPM:Sources>%s</RPM:Sources>\n", |
|
rpm->srcrpm); |
|
} |
|
if (rpm->summary) |
|
fprintf(rdf, "<RPM:Summary>%s</RPM:Summary>\n", rpm->summary); |
|
if (rpm->description) |
|
fprintf(rdf, "<RPM:Description>\n%s\n</RPM:Description>\n", |
|
rpm->description); |
|
if (rpm->copyright) |
|
fprintf(rdf, "<RPM:Copyright>%s</RPM:Copyright>\n", |
|
rpm->copyright); |
|
if (rpm->nb_resources > 0) { |
if (rpm->nb_resources > 0) { |
fprintf(rdf, "<RPM:Provides>\n"); |
bag = rdfBagCreate(rdf, desc, "Provides", rpmNs); |
fprintf(rdf, "<RDF:Bag>\n"); |
|
for (i = 0;i < rpm->nb_resources;i++) { |
for (i = 0;i < rpm->nb_resources;i++) { |
fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n", |
rdfBagAddValue(bag, "Resource", rpmNs, |
rpm->resources[i]->name); |
rpm->resources[i]->name, NULL); |
} |
} |
fprintf(rdf, "</RDF:Bag>\n"); |
|
fprintf(rdf, "</RPM:Provides>\n"); |
|
} |
} |
if (rpm->nb_requires > 0) { |
if (rpm->nb_requires > 0) { |
fprintf(rdf, "<RPM:Requires>\n"); |
bag = rdfBagCreate(rdf, desc, "Requires", rpmNs); |
fprintf(rdf, "<RDF:Bag>\n"); |
|
for (i = 0;i < rpm->nb_requires;i++) { |
for (i = 0;i < rpm->nb_requires;i++) { |
fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n", |
rdfBagAddValue(bag, "Resource", rpmNs, |
rpm->requires[i]->name); |
rpm->requires[i]->name, NULL); |
} |
} |
fprintf(rdf, "</RDF:Bag>\n"); |
|
fprintf(rdf, "</RPM:Requires>\n"); |
|
} |
} |
if (rpm->filelist) |
if (rpm->filelist) |
fprintf(rdf, "<RPM:Files>\n%s\n</RPM:Files>\n", rpm->filelist); |
rdfSetValue(desc, "Files", rpmNs, rpm->filelist); |
fprintf(rdf, "</RDF:Description>\n"); |
|
fprintf(rdf, "</RDF:RDF>\n"); |
/* |
fclose(rdf); |
* Save the RDF file and cleanup the tree. |
|
*/ |
|
rdfWrite(rdf, file); |
|
rdfDestroySchema(rdf); |
} |
} |
|
|