]>
Commit | Line | Data |
---|---|---|
23c9e63c DD |
1 | %{ |
2 | /* | |
3 | * Copyright (c) 2000, Red Hat, Inc. | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify | |
6 | * it under the terms of the GNU General Public License as published by | |
7 | * the Free Software Foundation; either version 2 of the License, or | |
8 | * (at your option) any later version. | |
9 | * | |
10 | * A copy of the GNU General Public License can be found at | |
11 | * http://www.gnu.org/ | |
12 | * | |
13 | * Written by DJ Delorie <dj@cygnus.com> | |
14 | * | |
15 | */ | |
16 | ||
17 | /* Parse the setup.ini files. inilex.l provides the tokens for this. */ | |
18 | ||
b11b49f3 | 19 | #include <stdio.h> |
23c9e63c | 20 | #include <stdlib.h> |
cb2a4b55 | 21 | #include <string.h> |
23c9e63c | 22 | |
55e204f6 | 23 | #include "win32.h" |
23c9e63c DD |
24 | #include "ini.h" |
25 | #include "iniparse.h" | |
076654e7 | 26 | #include "PackageTrust.h" |
0af2d779 | 27 | |
6391823e | 28 | extern int yyerror (String const &s); |
341988b9 | 29 | int yylex (); |
23c9e63c | 30 | |
13d27274 DD |
31 | #include "port.h" |
32 | ||
076654e7 | 33 | #include "IniDBBuilder.h" |
bb849dbd | 34 | |
b11b49f3 | 35 | #define YYERROR_VERBOSE 1 |
0d4e0aad | 36 | #define YYINITDEPTH 1000 |
b11b49f3 DD |
37 | /*#define YYDEBUG 1*/ |
38 | ||
076654e7 | 39 | IniDBBuilder *iniBuilder; |
b11b49f3 | 40 | extern int yylineno; |
23c9e63c | 41 | |
bb849dbd | 42 | void add_correct_version(); |
23c9e63c DD |
43 | %} |
44 | ||
aa1e3b4d | 45 | %token STRING |
f6100b6f | 46 | %token SETUP_TIMESTAMP SETUP_VERSION PACKAGEVERSION INSTALL SOURCE SDESC LDESC |
3c196821 | 47 | %token CATEGORY DEPENDS REQUIRES |
c46a33a9 | 48 | %token APATH PPATH INCLUDE_SETUP EXCLUDE_PACKAGE DOWNLOAD_URL |
b1ff53ed | 49 | %token T_PREV T_CURR T_TEST |
aa1e3b4d RC |
50 | %token MD5 INSTALLEDSIZE MAINTAINER PRIORITY |
51 | %token DESCTAG DESCRIPTION FILESIZE ARCHITECTURE SOURCEPACKAGE MD5LINE | |
52 | %token RECOMMENDS PREDEPENDS | |
b1ff53ed | 53 | %token SUGGESTS CONFLICTS REPLACES PROVIDES PACKAGENAME STRTOEOL PARAGRAPH |
aa1e3b4d RC |
54 | %token EMAIL COMMA OR NL AT |
55 | %token OPENBRACE CLOSEBRACE EQUAL GT LT GTEQUAL LTEQUAL | |
b1ff53ed | 56 | %token OPENSQUARE CLOSESQUARE |
233a3e17 | 57 | %token BINARYPACKAGE BUILDDEPENDS STANDARDSVERSION FORMAT DIRECTORY FILES |
23c9e63c DD |
58 | |
59 | %% | |
60 | ||
61 | whole_file | |
b1ff53ed | 62 | : setup_headers packageseparator packages |
23c9e63c DD |
63 | ; |
64 | ||
aa1e3b4d RC |
65 | setup_headers: /* empty */ |
66 | | setup_headers header | |
67 | ; | |
68 | ||
69 | header /* non-empty */ | |
70 | : SETUP_TIMESTAMP STRING { iniBuilder->buildTimestamp ($2); } NL | |
71 | | SETUP_VERSION STRING { iniBuilder->buildVersion ($2); } NL | |
72 | ; | |
73 | ||
74 | packages: /* empty */ | |
b1ff53ed | 75 | | packages package packageseparator |
aa1e3b4d RC |
76 | ; |
77 | ||
78 | packageseparator: /* empty */ | |
79 | | packageseparator NL | |
80 | ; | |
81 | ||
82 | package /* non-empty */ | |
83 | : packagename NL packagedata | |
84 | ; | |
85 | ||
86 | packagename /* non-empty */ | |
87 | : AT STRING { iniBuilder->buildPackage ($2); } | |
88 | | PACKAGENAME STRING { iniBuilder->buildPackage ($2); } | |
89 | ; | |
90 | ||
91 | packagedata: /* empty */ | |
92 | | packagedata singleitem | |
93 | ; | |
94 | ||
95 | singleitem /* non-empty */ | |
96 | : PACKAGEVERSION STRING NL { iniBuilder->buildPackageVersion ($2); } | |
97 | | SDESC STRING NL { iniBuilder->buildPackageSDesc($2); } | |
98 | | LDESC STRING NL { iniBuilder->buildPackageLDesc($2); } | |
99 | | T_PREV NL { iniBuilder->buildPackageTrust (TRUST_PREV); } | |
100 | | T_CURR NL { iniBuilder->buildPackageTrust (TRUST_CURR); } | |
101 | | T_TEST NL { iniBuilder->buildPackageTrust (TRUST_TEST); } | |
aa1e3b4d RC |
102 | | PRIORITY STRING NL { iniBuilder->buildPriority ($2); } |
103 | | INSTALLEDSIZE STRING NL { iniBuilder->buildInstalledSize ($2); } | |
104 | | MAINTAINER STRING NL { iniBuilder->buildMaintainer ($2); } | |
b1ff53ed | 105 | | ARCHITECTURE packagearchspec NL { iniBuilder->buildArchitecture ($2); } |
aa1e3b4d | 106 | | FILESIZE STRING NL { iniBuilder->buildInstallSize($2); } |
233a3e17 RC |
107 | | FORMAT STRING NL { /* TODO */ } |
108 | | DIRECTORY STRING NL { /* TODO */ } | |
109 | | STANDARDSVERSION STRING NL { /* TODO */ } | |
aa1e3b4d RC |
110 | | MD5LINE MD5 NL { iniBuilder->buildInstallMD5 ((unsigned char *)$2); } |
111 | | SOURCEPACKAGE source NL | |
112 | | CATEGORY categories NL | |
aa1e3b4d RC |
113 | | INSTALL STRING { iniBuilder->buildPackageInstall ($2); } installmeta NL |
114 | | SOURCE STRING STRING sourceMD5 NL {iniBuilder->buildPackageSource ($2, $3);} | |
115 | | PROVIDES { iniBuilder->buildBeginProvides(); } packagelist NL | |
b1ff53ed | 116 | | BINARYPACKAGE { iniBuilder->buildBeginBinary (); } packagelist NL |
aa1e3b4d RC |
117 | | CONFLICTS { iniBuilder->buildBeginConflicts(); } versionedpackagelist NL |
118 | | DEPENDS { iniBuilder->buildBeginDepends(); } versionedpackagelist NL | |
3c196821 | 119 | | REQUIRES { iniBuilder->buildBeginDepends(); }versionedpackagelistsp NL |
aa1e3b4d RC |
120 | | PREDEPENDS { iniBuilder->buildBeginPreDepends(); } versionedpackagelist NL |
121 | | RECOMMENDS { iniBuilder->buildBeginRecommends(); } versionedpackagelist NL | |
122 | | SUGGESTS { iniBuilder->buildBeginSuggests(); } versionedpackagelist NL | |
123 | | REPLACES { iniBuilder->buildBeginReplaces(); } versionedpackagelist NL | |
b1ff53ed | 124 | | BUILDDEPENDS { iniBuilder->buildBeginBuildDepends(); } versionedpackagelist NL |
233a3e17 | 125 | | FILES NL SourceFilesList |
aa1e3b4d | 126 | | DESCTAG mlinedesc |
aa1e3b4d RC |
127 | | error { yyerror (String("unrecognized line ") |
128 | + yylineno | |
129 | + " (do you have the latest setup?)"); | |
130 | } | |
131 | ; | |
132 | ||
b1ff53ed RC |
133 | packagearchspec: /* empty */ |
134 | | packagearchspec STRING { iniBuilder->buildArchitecture ($2); } | |
135 | ; | |
136 | ||
aa1e3b4d RC |
137 | categories: /* empty */ |
138 | | categories STRING { iniBuilder->buildPackageCategory ($2); } | |
139 | ; | |
140 | ||
aa1e3b4d RC |
141 | installmeta: /* empty */ |
142 | | STRING installMD5 { iniBuilder->buildInstallSize($1); } | |
143 | ; | |
144 | ||
145 | installMD5: /* empty */ | |
146 | | MD5 { iniBuilder->buildInstallMD5 ((unsigned char *)$1);} | |
23c9e63c DD |
147 | ; |
148 | ||
aa1e3b4d RC |
149 | sourceMD5: /* empty */ |
150 | | MD5 { iniBuilder->buildSourceMD5 ((unsigned char *)$1); } | |
23c9e63c DD |
151 | ; |
152 | ||
aa1e3b4d RC |
153 | source /* non-empty */ |
154 | : STRING { iniBuilder->buildSourceName ($1); } versioninfo | |
23c9e63c DD |
155 | ; |
156 | ||
aa1e3b4d RC |
157 | versioninfo: /* empty */ |
158 | | OPENBRACE STRING CLOSEBRACE { iniBuilder->buildSourceNameVersion ($2); } | |
23c9e63c DD |
159 | ; |
160 | ||
aa1e3b4d RC |
161 | mlinedesc: /* empty */ |
162 | | mlinedesc STRTOEOL NL { iniBuilder->buildDescription ($2); } | |
163 | | mlinedesc STRTOEOL PARAGRAPH { iniBuilder->buildDescription ($2); } | |
23c9e63c DD |
164 | ; |
165 | ||
aa1e3b4d RC |
166 | packagelist /* non-empty */ |
167 | : packagelist COMMA { iniBuilder->buildPackageListAndNode(); } packageentry | |
168 | | { iniBuilder->buildPackageListAndNode(); } packageentry | |
23c9e63c DD |
169 | ; |
170 | ||
aa1e3b4d | 171 | packageentry /* empty not allowed */ |
b1ff53ed | 172 | : STRING { iniBuilder->buildPackageListOrNode($1); } |
aa1e3b4d | 173 | | packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } |
38c97581 CF |
174 | ; |
175 | ||
aa1e3b4d RC |
176 | versionedpackagelist /* non-empty */ |
177 | : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
178 | | versionedpackagelist listseparator { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
8f53e82a RC |
179 | ; |
180 | ||
3c196821 RC |
181 | versionedpackagelistsp /* non-empty */ |
182 | : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
183 | | versionedpackagelistsp { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
184 | ; | |
185 | ||
aa1e3b4d | 186 | |
b1ff53ed RC |
187 | listseparator: /* empty */ |
188 | | COMMA | |
aa1e3b4d RC |
189 | | COMMA NL |
190 | ; | |
191 | ||
192 | versionedpackageentry /* empty not allowed */ | |
b1ff53ed RC |
193 | : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria architecture |
194 | | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria architecture | |
aa1e3b4d RC |
195 | ; |
196 | ||
197 | versioncriteria: /* empty */ | |
198 | | OPENBRACE operator STRING CLOSEBRACE { iniBuilder->buildPackageListOperatorVersion ($3); } | |
199 | ; | |
200 | ||
201 | operator /* non-empty */ | |
202 | : EQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::Equals); } | |
203 | | LT { iniBuilder->buildPackageListOperator (PackageSpecification::LessThan); } | |
204 | | GT { iniBuilder->buildPackageListOperator (PackageSpecification::MoreThan); } | |
205 | | LTEQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::LessThanEquals); } | |
206 | | GTEQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::MoreThanEquals); } | |
207 | ; | |
208 | ||
b1ff53ed RC |
209 | architecture: /* empty */ |
210 | | OPENSQUARE architecturelist CLOSESQUARE | |
211 | ; | |
212 | ||
213 | architecturelist: /* empty */ | |
214 | | architecturelist STRING | |
215 | ; | |
216 | ||
217 | ||
233a3e17 RC |
218 | SourceFilesList: /* empty */ |
219 | | SourceFilesList MD5 STRING STRING NL | |
220 | ; | |
221 | ||
23c9e63c | 222 | %% |