/* * rpm2html.c : Application to generate an HTML view of an ensemble * of RPM packages. * * See Copyright for the status of this software. * * $Id: rpm2html.c,v 1.38 2000/07/13 14:30:15 veillard Exp $ */ #include #include #include #ifdef HAVE_FCNTL_H #include #endif #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include "rpm2html.h" #include "rpmdata.h" #include "html.h" #include "rdf.h" #include "tree.h" #include "language.h" void usage(const char *argv0) { fprintf(stderr, "%s %s : Web page generator for RPM packages\n", RPM2HTML_NAME, RPM2HTML_VER); fprintf(stderr, "usage : %s [-q/-v] [-force] [-lang msgfile] configfile1 [configfile2 ...]\n", argv0); fprintf(stderr, " or %s [-dumplang msgfile]\n", argv0); exit(1); } int main(int argc, char *argv[]) { rpmDataPtr list = NULL; int i; time_t start_time; int nb_config_files = 0; char host[200]; int mask; start_time = time(NULL); gethostname(host, sizeof(host)); currentTime = time(NULL); rpm2html_rpm2html_thishost = &host[0]; #if defined(HAVE_RPM_RPMIO_H) /* XXX hack to detect rpm 3.0 */ rpmReadConfigFiles(NULL, NULL); #else rpmReadConfigFiles(NULL, NULL, NULL, 0); /* rcfile, arch, os !!!! */ #endif /* * Ensure that all files and directories created a world readable ! */ mask = umask(022); for (i = 1; i < argc ; i++) { if (argv[i][0] == '-') { while (argv[i][0] == '-') argv[i]++; if (!strcmp(argv[i], "lang")) { i++; if (i >= argc) break; readLanguageFile(argv[i]); } else if (!strcmp(argv[i], "dumplang")) { i++; if (i >= argc) break; writeLanguageFile(argv[i]); return(0); } else if (!strcmp(argv[i], "force")) { force++; } else if (!strcmp(argv[i], "v")) { rpm2htmlVerbose++; } else if (!strcmp(argv[i], "q")) { rpm2htmlVerbose = 0; } else { fprintf(stderr, "Unknown option: %s\n", argv[i]); usage(argv[0]); } } else { if (readConfigFile(argv[i]) >= 0) { if (rpm2html_dump_html != 0) dumpDirIcon(); /* * A config file has been found and parsed. * Scan the directories, dump the results * and reinitialize. */ nb_config_files++; list = rpmDirScanAll(); if (rpm2html_dump_html != 0) { if (rpm2html_files != 0) { dumpAllRessHtml(0); rpmNameSort(&list, 0); dumpRpmByName(rpmSoftwareList, 0); /* Modif. by A. Gibert */ rpmDistribSort(&list, 0); dumpRpmByDistribs(list, 0); rpmGroupSort(&list, 0); dumpRpmByGroups(rpmSoftwareList, 0); /* Modif. by A. Gibert */ rpmVendorSort(&list, 0); dumpRpmByVendors(list, 0); rpmDateSort(&list, 0); dumpRpmByDate(list, 0); dumpIndex(start_time, 0); } if (rpm2html_install_files != 0) { dumpAllRessHtml(1); rpmNameSort(&list, 1); dumpRpmByName(rpmSoftwareList, 1); /* Modif. by A. Gibert */ rpmDistribSort(&list, 1); dumpRpmByDistribs(list, 1); rpmGroupSort(&list, 1); dumpRpmByGroups(rpmSoftwareList, 1); /* Modif. by A. Gibert */ rpmVendorSort(&list, 1); dumpRpmByVendors(list, 1); rpmDateSort(&list, 1); dumpRpmByDate(list, 1); dumpIndex(start_time, 1); } } if (rpm2html_dump_rdf_resources) { dumpAllResRdf(); dumpAproposRdf(); dumpDistListRdf(); rpmDirCleanupAll(); } if (rpm2htmlVerbose) { printf( "To see the result of the indexing point your Web browser to:\n"); if (rpm2html_rpm2html_thishost == NULL) printf("\thttp://localhost%s/\n", rpm2html_url); else printf("\thttp://%s%s/\n", rpm2html_rpm2html_thishost, rpm2html_url); } reinitialize(); } } } /* * reset the umask */ umask(mask); if (nb_config_files == 0) usage(argv[0]); debugMemoryDump(); return(0); }