Annotation of rpm2html/rpm2html.c, revision 1.40
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.40 ! veillard 7: * $Id: rpm2html.c,v 1.39 2000/07/16 21:37:33 veillard 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.39 veillard 34: #ifdef WITH_SQL
35: #include "sql.h"
36: #endif
1.1 veillard 37:
1.33 daniel 38: void usage(const char *argv0) {
39: fprintf(stderr, "%s %s : Web page generator for RPM packages\n",
40: RPM2HTML_NAME, RPM2HTML_VER);
41: fprintf(stderr,
42: "usage : %s [-q/-v] [-force] [-lang msgfile] configfile1 [configfile2 ...]\n",
43: argv0);
44: fprintf(stderr, " or %s [-dumplang msgfile]\n", argv0);
45: exit(1);
46: }
47:
1.1 veillard 48: int main(int argc, char *argv[]) {
1.17 veillard 49: rpmDataPtr list = NULL;
1.1 veillard 50: int i;
1.8 veillard 51: time_t start_time;
1.12 veillard 52: int nb_config_files = 0;
1.13 veillard 53: char host[200];
1.16 veillard 54: int mask;
1.1 veillard 55:
1.39 veillard 56: #ifdef WITH_SQL
57: if (init_sql("rpmfind", NULL, NULL) < 0) {
58: exit(1);
59: }
60: #endif
1.8 veillard 61: start_time = time(NULL);
1.13 veillard 62: gethostname(host, sizeof(host));
1.24 veillard 63: currentTime = time(NULL);
1.13 veillard 64: rpm2html_rpm2html_thishost = &host[0];
65:
1.35 daniel 66:
67: #if defined(HAVE_RPM_RPMIO_H) /* XXX hack to detect rpm 3.0 */
68: rpmReadConfigFiles(NULL, NULL);
69: #else
1.13 veillard 70: rpmReadConfigFiles(NULL, NULL, NULL, 0); /* rcfile, arch, os !!!! */
1.35 daniel 71: #endif
1.12 veillard 72:
1.16 veillard 73: /*
74: * Ensure that all files and directories created a world readable !
75: */
76: mask = umask(022);
77:
1.12 veillard 78: for (i = 1; i < argc ; i++) {
1.33 daniel 79: if (argv[i][0] == '-') {
80: while (argv[i][0] == '-') argv[i]++;
81: if (!strcmp(argv[i], "lang")) {
82: i++;
83: if (i >= argc) break;
84: readLanguageFile(argv[i]);
85: } else if (!strcmp(argv[i], "dumplang")) {
86: i++;
87: if (i >= argc) break;
88: writeLanguageFile(argv[i]);
89: return(0);
90: } else if (!strcmp(argv[i], "force")) {
91: force++;
92: } else if (!strcmp(argv[i], "v")) {
93: rpm2htmlVerbose++;
94: } else if (!strcmp(argv[i], "q")) {
95: rpm2htmlVerbose = 0;
96: } else {
97: fprintf(stderr, "Unknown option: %s\n", argv[i]);
98: usage(argv[0]);
99: }
1.12 veillard 100: } else {
1.13 veillard 101: if (readConfigFile(argv[i]) >= 0) {
1.23 veillard 102: if (rpm2html_dump_html != 0) dumpDirIcon();
1.19 veillard 103:
1.13 veillard 104: /*
105: * A config file has been found and parsed.
106: * Scan the directories, dump the results
107: * and reinitialize.
108: */
109: nb_config_files++;
1.17 veillard 110: list = rpmDirScanAll();
1.22 httpng 111: if (rpm2html_dump_html != 0) {
112: if (rpm2html_files != 0) {
113: dumpAllRessHtml(0);
1.38 veillard 114: rpmNameSort(&list, 0);
1.37 daniel 115: dumpRpmByName(rpmSoftwareList, 0); /* Modif. by A. Gibert */
1.38 veillard 116: rpmDistribSort(&list, 0);
1.22 httpng 117: dumpRpmByDistribs(list, 0);
1.38 veillard 118: rpmGroupSort(&list, 0);
1.37 daniel 119: dumpRpmByGroups(rpmSoftwareList, 0); /* Modif. by A. Gibert */
1.38 veillard 120: rpmVendorSort(&list, 0);
1.22 httpng 121: dumpRpmByVendors(list, 0);
1.38 veillard 122: rpmDateSort(&list, 0);
1.22 httpng 123: dumpRpmByDate(list, 0);
124: dumpIndex(start_time, 0);
125: }
126: if (rpm2html_install_files != 0) {
127: dumpAllRessHtml(1);
1.38 veillard 128: rpmNameSort(&list, 1);
1.37 daniel 129: dumpRpmByName(rpmSoftwareList, 1); /* Modif. by A. Gibert */
1.38 veillard 130: rpmDistribSort(&list, 1);
1.22 httpng 131: dumpRpmByDistribs(list, 1);
1.38 veillard 132: rpmGroupSort(&list, 1);
1.37 daniel 133: dumpRpmByGroups(rpmSoftwareList, 1); /* Modif. by A. Gibert */
1.38 veillard 134: rpmVendorSort(&list, 1);
1.22 httpng 135: dumpRpmByVendors(list, 1);
1.38 veillard 136: rpmDateSort(&list, 1);
1.22 httpng 137: dumpRpmByDate(list, 1);
138: dumpIndex(start_time, 1);
139: }
1.32 daniel 140: }
141: if (rpm2html_dump_rdf_resources) {
142: dumpAllResRdf();
143: dumpAproposRdf();
144: dumpDistListRdf();
145: rpmDirCleanupAll();
1.13 veillard 146: }
1.40 ! veillard 147: #ifdef WITH_SQL
! 148: sql_check_packages();
! 149: #endif
1.36 daniel 150: if (rpm2htmlVerbose) {
151: printf(
152: "To see the result of the indexing point your Web browser to:\n");
153: if (rpm2html_rpm2html_thishost == NULL)
154: printf("\thttp://localhost%s/\n", rpm2html_url);
155: else
156: printf("\thttp://%s%s/\n", rpm2html_rpm2html_thishost,
157: rpm2html_url);
158: }
1.13 veillard 159: reinitialize();
160: }
1.12 veillard 161: }
162: }
1.16 veillard 163:
164: /*
165: * reset the umask
166: */
167: umask(mask);
1.12 veillard 168:
1.39 veillard 169: #ifdef WITH_SQL
170: if (nb_config_files == 0) {
171: if (readConfigSql() >= 0) {
172: if (rpm2html_dump_html != 0) dumpDirIcon();
173:
174: /*
175: * A config file has been found and parsed.
176: * Scan the directories, dump the results
177: * and reinitialize.
178: */
179: nb_config_files++;
180: list = rpmDirScanAll();
181: if (rpm2html_dump_html != 0) {
182: if (rpm2html_files != 0) {
183: dumpAllRessHtml(0);
184: rpmNameSort(&list, 0);
185: dumpRpmByName(rpmSoftwareList, 0); /* Modif. by A. Gibert */
186: rpmDistribSort(&list, 0);
187: dumpRpmByDistribs(list, 0);
188: rpmGroupSort(&list, 0);
189: dumpRpmByGroups(rpmSoftwareList, 0); /* Modif. by A. Gibert */
190: rpmVendorSort(&list, 0);
191: dumpRpmByVendors(list, 0);
192: rpmDateSort(&list, 0);
193: dumpRpmByDate(list, 0);
194: dumpIndex(start_time, 0);
195: }
196: if (rpm2html_install_files != 0) {
197: dumpAllRessHtml(1);
198: rpmNameSort(&list, 1);
199: dumpRpmByName(rpmSoftwareList, 1); /* Modif. by A. Gibert */
200: rpmDistribSort(&list, 1);
201: dumpRpmByDistribs(list, 1);
202: rpmGroupSort(&list, 1);
203: dumpRpmByGroups(rpmSoftwareList, 1); /* Modif. by A. Gibert */
204: rpmVendorSort(&list, 1);
205: dumpRpmByVendors(list, 1);
206: rpmDateSort(&list, 1);
207: dumpRpmByDate(list, 1);
208: dumpIndex(start_time, 1);
209: }
210: }
211: if (rpm2html_dump_rdf_resources) {
212: dumpAllResRdf();
213: dumpAproposRdf();
214: dumpDistListRdf();
215: rpmDirCleanupAll();
216: }
1.40 ! veillard 217: sql_check_packages();
1.39 veillard 218: if (rpm2htmlVerbose) {
219: printf(
220: "To see the result of the indexing point your Web browser to:\n");
221: if (rpm2html_rpm2html_thishost == NULL)
222: printf("\thttp://localhost%s/\n", rpm2html_url);
223: else
224: printf("\thttp://%s%s/\n", rpm2html_rpm2html_thishost,
225: rpm2html_url);
226: }
227: reinitialize();
228: }
229: }
230: #else
1.33 daniel 231: if (nb_config_files == 0) usage(argv[0]);
1.39 veillard 232: #endif
1.34 daniel 233: debugMemoryDump();
1.5 veillard 234:
1.39 veillard 235: #ifdef WITH_SQL
236: close_sql();
237: #endif
1.1 veillard 238: return(0);
239: }
240:
Webmaster