]>
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 |
b11b49f3 | 49 | %token T_PREV T_CURR T_TEST T_UNKNOWN |
aa1e3b4d RC |
50 | %token MD5 INSTALLEDSIZE MAINTAINER PRIORITY |
51 | %token DESCTAG DESCRIPTION FILESIZE ARCHITECTURE SOURCEPACKAGE MD5LINE | |
52 | %token RECOMMENDS PREDEPENDS | |
53 | %token SUGGESTS CONFLICTS REPLACES PROVIDES PACKAGENAME STRTOEOL PARAGRAPH LEX_EOF | |
54 | %token EMAIL COMMA OR NL AT | |
55 | %token OPENBRACE CLOSEBRACE EQUAL GT LT GTEQUAL LTEQUAL | |
233a3e17 | 56 | %token BINARYPACKAGE BUILDDEPENDS STANDARDSVERSION FORMAT DIRECTORY FILES |
23c9e63c DD |
57 | |
58 | %% | |
59 | ||
60 | whole_file | |
61 | : setup_headers packages | |
62 | ; | |
63 | ||
aa1e3b4d RC |
64 | setup_headers: /* empty */ |
65 | | setup_headers header | |
66 | ; | |
67 | ||
68 | header /* non-empty */ | |
69 | : SETUP_TIMESTAMP STRING { iniBuilder->buildTimestamp ($2); } NL | |
70 | | SETUP_VERSION STRING { iniBuilder->buildVersion ($2); } NL | |
71 | ; | |
72 | ||
73 | packages: /* empty */ | |
74 | | packages packageseparator package | |
75 | ; | |
76 | ||
77 | packageseparator: /* empty */ | |
78 | | packageseparator NL | |
79 | ; | |
80 | ||
81 | package /* non-empty */ | |
82 | : packagename NL packagedata | |
83 | ; | |
84 | ||
85 | packagename /* non-empty */ | |
86 | : AT STRING { iniBuilder->buildPackage ($2); } | |
87 | | PACKAGENAME STRING { iniBuilder->buildPackage ($2); } | |
88 | ; | |
89 | ||
90 | packagedata: /* empty */ | |
91 | | packagedata singleitem | |
92 | ; | |
93 | ||
94 | singleitem /* non-empty */ | |
95 | : PACKAGEVERSION STRING NL { iniBuilder->buildPackageVersion ($2); } | |
96 | | SDESC STRING NL { iniBuilder->buildPackageSDesc($2); } | |
97 | | LDESC STRING NL { iniBuilder->buildPackageLDesc($2); } | |
98 | | T_PREV NL { iniBuilder->buildPackageTrust (TRUST_PREV); } | |
99 | | T_CURR NL { iniBuilder->buildPackageTrust (TRUST_CURR); } | |
100 | | T_TEST NL { iniBuilder->buildPackageTrust (TRUST_TEST); } | |
101 | | T_UNKNOWN NL { iniBuilder->buildPackageTrust (TRUST_UNKNOWN);} | |
102 | | PRIORITY STRING NL { iniBuilder->buildPriority ($2); } | |
103 | | INSTALLEDSIZE STRING NL { iniBuilder->buildInstalledSize ($2); } | |
104 | | MAINTAINER STRING NL { iniBuilder->buildMaintainer ($2); } | |
105 | | ARCHITECTURE STRING NL { iniBuilder->buildArchitecture ($2); } | |
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 | |
233a3e17 | 116 | | BINARYPACKAGE { /* TODO */ } 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 | |
233a3e17 RC |
124 | | BUILDDEPENDS { /* todo */ } versionedpackagelist NL |
125 | | FILES NL SourceFilesList | |
aa1e3b4d RC |
126 | | DESCTAG mlinedesc |
127 | | LEX_EOF { YYACCEPT; } | |
128 | | error { yyerror (String("unrecognized line ") | |
129 | + yylineno | |
130 | + " (do you have the latest setup?)"); | |
131 | } | |
132 | ; | |
133 | ||
134 | categories: /* empty */ | |
135 | | categories STRING { iniBuilder->buildPackageCategory ($2); } | |
136 | ; | |
137 | ||
aa1e3b4d RC |
138 | installmeta: /* empty */ |
139 | | STRING installMD5 { iniBuilder->buildInstallSize($1); } | |
140 | ; | |
141 | ||
142 | installMD5: /* empty */ | |
143 | | MD5 { iniBuilder->buildInstallMD5 ((unsigned char *)$1);} | |
23c9e63c DD |
144 | ; |
145 | ||
aa1e3b4d RC |
146 | sourceMD5: /* empty */ |
147 | | MD5 { iniBuilder->buildSourceMD5 ((unsigned char *)$1); } | |
23c9e63c DD |
148 | ; |
149 | ||
aa1e3b4d RC |
150 | source /* non-empty */ |
151 | : STRING { iniBuilder->buildSourceName ($1); } versioninfo | |
23c9e63c DD |
152 | ; |
153 | ||
aa1e3b4d RC |
154 | versioninfo: /* empty */ |
155 | | OPENBRACE STRING CLOSEBRACE { iniBuilder->buildSourceNameVersion ($2); } | |
23c9e63c DD |
156 | ; |
157 | ||
aa1e3b4d RC |
158 | mlinedesc: /* empty */ |
159 | | mlinedesc STRTOEOL NL { iniBuilder->buildDescription ($2); } | |
160 | | mlinedesc STRTOEOL PARAGRAPH { iniBuilder->buildDescription ($2); } | |
23c9e63c DD |
161 | ; |
162 | ||
aa1e3b4d RC |
163 | packagelist /* non-empty */ |
164 | : packagelist COMMA { iniBuilder->buildPackageListAndNode(); } packageentry | |
165 | | { iniBuilder->buildPackageListAndNode(); } packageentry | |
23c9e63c DD |
166 | ; |
167 | ||
aa1e3b4d RC |
168 | packageentry /* empty not allowed */ |
169 | : STRING { iniBuilder->buildPackageListOrNode($1); } | |
170 | | packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } | |
38c97581 CF |
171 | ; |
172 | ||
aa1e3b4d RC |
173 | versionedpackagelist /* non-empty */ |
174 | : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
175 | | versionedpackagelist listseparator { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
8f53e82a RC |
176 | ; |
177 | ||
3c196821 RC |
178 | versionedpackagelistsp /* non-empty */ |
179 | : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
180 | | versionedpackagelistsp { iniBuilder->buildPackageListAndNode(); } versionedpackageentry | |
181 | ; | |
182 | ||
aa1e3b4d RC |
183 | |
184 | listseparator /* non-empty */ | |
185 | : COMMA | |
186 | | COMMA NL | |
187 | ; | |
188 | ||
189 | versionedpackageentry /* empty not allowed */ | |
190 | : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria | |
191 | | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria | |
192 | ; | |
193 | ||
194 | versioncriteria: /* empty */ | |
195 | | OPENBRACE operator STRING CLOSEBRACE { iniBuilder->buildPackageListOperatorVersion ($3); } | |
196 | ; | |
197 | ||
198 | operator /* non-empty */ | |
199 | : EQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::Equals); } | |
200 | | LT { iniBuilder->buildPackageListOperator (PackageSpecification::LessThan); } | |
201 | | GT { iniBuilder->buildPackageListOperator (PackageSpecification::MoreThan); } | |
202 | | LTEQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::LessThanEquals); } | |
203 | | GTEQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::MoreThanEquals); } | |
204 | ; | |
205 | ||
233a3e17 RC |
206 | SourceFilesList: /* empty */ |
207 | | SourceFilesList MD5 STRING STRING NL | |
208 | ; | |
209 | ||
23c9e63c | 210 | %% |