Annotation of rpm2html/rpm2html.c, revision 1.38
1.1 veillard 1: /*
2: * rpm2html.c : Application to generate an HTML view of an ensemble
3: * of RPM packages.
4: *
1.25 veillard 5: * See Copyright for the status of this software.
1.1 veillard 6: *
1.38 ! veillard 7: * $Id: rpm2html.c,v 1.37 2000/01/15 14:52:18 daniel Exp $
1.1 veillard 8: */
9:
1.9 veillard 10: #include <config.h>
1.1 veillard 11: #include <sys/types.h>
12: #include <sys/stat.h>
1.9 veillard 13: #ifdef HAVE_FCNTL_H
1.1 veillard 14: #include <fcntl.h>
1.9 veillard 15: #endif
1.1 veillard 16: #include <stdio.h>
17: #include <stdlib.h>
18: #include <string.h>
1.9 veillard 19: #ifdef HAVE_UNISTD_H
1.1 veillard 20: #include <unistd.h>
1.9 veillard 21: #endif
22: #include <time.h>
1.11 veillard 23:
1.21 veillard 24: #include <ctype.h>
25: #include <errno.h>
1.11 veillard 26: #include <rpm/rpmlib.h>
1.1 veillard 27:
1.4 veillard 28: #include "rpm2html.h"
1.1 veillard 29: #include "rpmdata.h"
30: #include "html.h"
1.23 veillard 31: #include "rdf.h"
1.28 daniel 32: #include "tree.h"
1.12 veillard 33: #include "language.h"
1.1 veillard 34:
1.33 daniel 35: void usage(const char *argv0) {
36: fprintf(stderr, "%s %s : Web page generator for RPM packages\n",
37: RPM2HTML_NAME, RPM2HTML_VER);
38: fprintf(stderr,
39: "usage : %s [-q/-v] [-force] [-lang msgfile] configfile1 [configfile2 ...]\n",
40: argv0);
41: fprintf(stderr, " or %s [-dumplang msgfile]\n", argv0);
42: exit(1);
43: }
44:
1.1 veillard 45: int main(int argc, char *argv[]) {
1.17 veillard 46: rpmDataPtr list = NULL;
1.1 veillard 47: int i;
1.8 veillard 48: time_t start_time;
1.12 veillard 49: int nb_config_files = 0;
1.13 veillard 50: char host[200];
1.16 veillard 51: int mask;
1.1 veillard 52:
1.8 veillard 53: start_time = time(NULL);
1.13 veillard 54: gethostname(host, sizeof(host));
1.24 veillard 55: currentTime = time(NULL);
1.13 veillard 56: rpm2html_rpm2html_thishost = &host[0];
57:
1.35 daniel 58:
59: #if defined(HAVE_RPM_RPMIO_H) /* XXX hack to detect rpm 3.0 */
60: rpmReadConfigFiles(NULL, NULL);
61: #else
1.13 veillard 62: rpmReadConfigFiles(NULL, NULL, NULL, 0); /* rcfile, arch, os !!!! */
1.35 daniel 63: #endif
1.12 veillard 64:
1.16 veillard 65: /*
66: * Ensure that all files and directories created a world readable !
67: */
68: mask = umask(022);
69:
1.12 veillard 70: for (i = 1; i < argc ; i++) {
1.33 daniel 71: if (argv[i][0] == '-') {
72: while (argv[i][0] == '-') argv[i]++;
73: if (!strcmp(argv[i], "lang")) {
74: i++;
75: if (i >= argc) break;
76: readLanguageFile(argv[i]);
77: } else if (!strcmp(argv[i], "dumplang")) {
78: i++;
79: if (i >= argc) break;
80: writeLanguageFile(argv[i]);
81: return(0);
82: } else if (!strcmp(argv[i], "force")) {
83: force++;
84: } else if (!strcmp(argv[i], "v")) {
85: rpm2htmlVerbose++;
86: } else if (!strcmp(argv[i], "q")) {
87: rpm2htmlVerbose = 0;
88: } else {
89: fprintf(stderr, "Unknown option: %s\n", argv[i]);
90: usage(argv[0]);
91: }
1.12 veillard 92: } else {
1.13 veillard 93: if (readConfigFile(argv[i]) >= 0) {
1.23 veillard 94: if (rpm2html_dump_html != 0) dumpDirIcon();
1.19 veillard 95:
1.13 veillard 96: /*
97: * A config file has been found and parsed.
98: * Scan the directories, dump the results
99: * and reinitialize.
100: */
101: nb_config_files++;
1.17 veillard 102: list = rpmDirScanAll();
1.22 httpng 103: if (rpm2html_dump_html != 0) {
104: if (rpm2html_files != 0) {
105: dumpAllRessHtml(0);
1.38 ! veillard 106: rpmNameSort(&list, 0);
1.37 daniel 107: dumpRpmByName(rpmSoftwareList, 0); /* Modif. by A. Gibert */
1.38 ! veillard 108: rpmDistribSort(&list, 0);
1.22 httpng 109: dumpRpmByDistribs(list, 0);
1.38 ! veillard 110: rpmGroupSort(&list, 0);
1.37 daniel 111: dumpRpmByGroups(rpmSoftwareList, 0); /* Modif. by A. Gibert */
1.38 ! veillard 112: rpmVendorSort(&list, 0);
1.22 httpng 113: dumpRpmByVendors(list, 0);
1.38 ! veillard 114: rpmDateSort(&list, 0);
1.22 httpng 115: dumpRpmByDate(list, 0);
116: dumpIndex(start_time, 0);
117: }
118: if (rpm2html_install_files != 0) {
119: dumpAllRessHtml(1);
1.38 ! veillard 120: rpmNameSort(&list, 1);
1.37 daniel 121: dumpRpmByName(rpmSoftwareList, 1); /* Modif. by A. Gibert */
1.38 ! veillard 122: rpmDistribSort(&list, 1);
1.22 httpng 123: dumpRpmByDistribs(list, 1);
1.38 ! veillard 124: rpmGroupSort(&list, 1);
1.37 daniel 125: dumpRpmByGroups(rpmSoftwareList, 1); /* Modif. by A. Gibert */
1.38 ! veillard 126: rpmVendorSort(&list, 1);
1.22 httpng 127: dumpRpmByVendors(list, 1);
1.38 ! veillard 128: rpmDateSort(&list, 1);
1.22 httpng 129: dumpRpmByDate(list, 1);
130: dumpIndex(start_time, 1);
131: }
1.32 daniel 132: }
133: if (rpm2html_dump_rdf_resources) {
134: dumpAllResRdf();
135: dumpAproposRdf();
136: dumpDistListRdf();
137: rpmDirCleanupAll();
1.13 veillard 138: }
1.36 daniel 139: if (rpm2htmlVerbose) {
140: printf(
141: "To see the result of the indexing point your Web browser to:\n");
142: if (rpm2html_rpm2html_thishost == NULL)
143: printf("\thttp://localhost%s/\n", rpm2html_url);
144: else
145: printf("\thttp://%s%s/\n", rpm2html_rpm2html_thishost,
146: rpm2html_url);
147: }
1.13 veillard 148: reinitialize();
149: }
1.12 veillard 150: }
151: }
1.16 veillard 152:
153: /*
154: * reset the umask
155: */
156: umask(mask);
1.12 veillard 157:
1.33 daniel 158: if (nb_config_files == 0) usage(argv[0]);
1.34 daniel 159: debugMemoryDump();
1.5 veillard 160:
1.1 veillard 161: return(0);
162: }
163:
Webmaster