]> cygwin.com Git - cygwin-apps/setup.git/blob - iniparse.yy
* prereq.cc (PrereqChecker::getUnmetString): Improve dependency list
[cygwin-apps/setup.git] / iniparse.yy
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
19 #include <string>
20 #include "win32.h"
21 #include "ini.h"
22 #include "iniparse.h"
23 #include "PackageTrust.h"
24
25 extern int yyerror (const std::string& s);
26 int yylex ();
27
28 #include "IniDBBuilder.h"
29
30 #define YYERROR_VERBOSE 1
31 #define YYINITDEPTH 1000
32 /*#define YYDEBUG 1*/
33
34 IniDBBuilder *iniBuilder;
35 extern int yylineno;
36
37 void add_correct_version();
38 %}
39
40 %token STRING
41 %token SETUP_TIMESTAMP SETUP_VERSION PACKAGEVERSION INSTALL SOURCE SDESC LDESC
42 %token CATEGORY DEPENDS REQUIRES
43 %token APATH PPATH INCLUDE_SETUP EXCLUDE_PACKAGE DOWNLOAD_URL
44 %token T_PREV T_CURR T_TEST
45 %token MD5 INSTALLEDSIZE MAINTAINER PRIORITY
46 %token DESCTAG DESCRIPTION FILESIZE ARCHITECTURE SOURCEPACKAGE MD5LINE
47 %token RECOMMENDS PREDEPENDS
48 %token SUGGESTS CONFLICTS REPLACES PROVIDES PACKAGENAME STRTOEOL PARAGRAPH
49 %token EMAIL COMMA OR NL AT
50 %token OPENBRACE CLOSEBRACE EQUAL GT LT GTEQUAL LTEQUAL
51 %token OPENSQUARE CLOSESQUARE
52 %token BINARYPACKAGE BUILDDEPENDS STANDARDSVERSION FORMAT DIRECTORY FILES
53 %token MESSAGE
54
55 %%
56
57 whole_file
58 : setup_headers packageseparator packages
59 ;
60
61 setup_headers: /* empty */
62 | setup_headers header
63 ;
64
65 header /* non-empty */
66 : SETUP_TIMESTAMP STRING { iniBuilder->buildTimestamp ($2); } NL
67 | SETUP_VERSION STRING { iniBuilder->buildVersion ($2); } NL
68 ;
69
70 packages: /* empty */
71 | packages package packageseparator
72 ;
73
74 packageseparator: /* empty */
75 | packageseparator NL
76 ;
77
78 package /* non-empty */
79 : packagename NL packagedata
80 ;
81
82 packagename /* non-empty */
83 : AT STRING { iniBuilder->buildPackage ($2); }
84 | PACKAGENAME STRING { iniBuilder->buildPackage ($2); }
85 ;
86
87 packagedata: /* empty */
88 | packagedata singleitem
89 ;
90
91 singleitem /* non-empty */
92 : PACKAGEVERSION STRING NL { iniBuilder->buildPackageVersion ($2); }
93 | SDESC STRING NL { iniBuilder->buildPackageSDesc($2); }
94 | LDESC STRING NL { iniBuilder->buildPackageLDesc($2); }
95 | T_PREV NL { iniBuilder->buildPackageTrust (TRUST_PREV); }
96 | T_CURR NL { iniBuilder->buildPackageTrust (TRUST_CURR); }
97 | T_TEST NL { iniBuilder->buildPackageTrust (TRUST_TEST); }
98 | PRIORITY STRING NL { iniBuilder->buildPriority ($2); }
99 | INSTALLEDSIZE STRING NL { iniBuilder->buildInstalledSize ($2); }
100 | MAINTAINER STRING NL { iniBuilder->buildMaintainer ($2); }
101 | ARCHITECTURE packagearchspec NL { iniBuilder->buildArchitecture ($2); }
102 | FILESIZE STRING NL { iniBuilder->buildInstallSize($2); }
103 | FORMAT STRING NL { /* TODO */ }
104 | DIRECTORY STRING NL { /* TODO */ }
105 | STANDARDSVERSION STRING NL { /* TODO */ }
106 | MD5LINE MD5 NL { iniBuilder->buildInstallMD5 ((unsigned char *)$2); }
107 | SOURCEPACKAGE source NL
108 | CATEGORY categories NL
109 | INSTALL STRING { iniBuilder->buildPackageInstall ($2); } installmeta NL
110 | SOURCE STRING STRING sourceMD5 NL {iniBuilder->buildPackageSource ($2, $3);}
111 | PROVIDES { iniBuilder->buildBeginProvides(); } packagelist NL
112 | BINARYPACKAGE { iniBuilder->buildBeginBinary (); } packagelist NL
113 | CONFLICTS { iniBuilder->buildBeginConflicts(); } versionedpackagelist NL
114 | DEPENDS { iniBuilder->buildBeginDepends(); } versionedpackagelist NL
115 | REQUIRES { iniBuilder->buildBeginDepends(); }versionedpackagelistsp NL
116 | PREDEPENDS { iniBuilder->buildBeginPreDepends(); } versionedpackagelist NL
117 | RECOMMENDS { iniBuilder->buildBeginRecommends(); } versionedpackagelist NL
118 | SUGGESTS { iniBuilder->buildBeginSuggests(); } versionedpackagelist NL
119 | REPLACES { iniBuilder->buildBeginReplaces(); } versionedpackagelist NL
120 | BUILDDEPENDS { iniBuilder->buildBeginBuildDepends(); } versionedpackagelist NL
121 | FILES NL SourceFilesList
122 | MESSAGE STRING STRING NL { iniBuilder->buildMessage ($2, $3); }
123 | DESCTAG mlinedesc
124 | error { yyerror (std::string("unrecognized line ")
125 + stringify(yylineno)
126 + " (do you have the latest setup?)");
127 }
128 ;
129
130 packagearchspec: /* empty */
131 | packagearchspec STRING { iniBuilder->buildArchitecture ($2); }
132 ;
133
134 categories: /* empty */
135 | categories STRING { iniBuilder->buildPackageCategory ($2); }
136 ;
137
138 installmeta: /* empty */
139 | STRING installMD5 { iniBuilder->buildInstallSize($1); }
140 ;
141
142 installMD5: /* empty */
143 | MD5 { iniBuilder->buildInstallMD5 ((unsigned char *)$1);}
144 ;
145
146 sourceMD5: /* empty */
147 | MD5 { iniBuilder->buildSourceMD5 ((unsigned char *)$1); }
148 ;
149
150 source /* non-empty */
151 : STRING { iniBuilder->buildSourceName ($1); } versioninfo
152 ;
153
154 versioninfo: /* empty */
155 | OPENBRACE STRING CLOSEBRACE { iniBuilder->buildSourceNameVersion ($2); }
156 ;
157
158 mlinedesc: /* empty */
159 | mlinedesc STRTOEOL NL { iniBuilder->buildDescription ($2); }
160 | mlinedesc STRTOEOL PARAGRAPH { iniBuilder->buildDescription ($2); }
161 ;
162
163 packagelist /* non-empty */
164 : packagelist COMMA { iniBuilder->buildPackageListAndNode(); } packageentry
165 | { iniBuilder->buildPackageListAndNode(); } packageentry
166 ;
167
168 packageentry /* empty not allowed */
169 : STRING { iniBuilder->buildPackageListOrNode($1); }
170 | packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); }
171 ;
172
173 versionedpackagelist /* non-empty */
174 : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
175 | versionedpackagelist listseparator { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
176 ;
177
178 versionedpackagelistsp /* non-empty */
179 : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
180 | versionedpackagelistsp { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
181 ;
182
183
184 listseparator: /* empty */
185 | COMMA
186 | COMMA NL
187 ;
188
189 versionedpackageentry /* empty not allowed */
190 : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria architecture
191 | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria architecture
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
206 architecture: /* empty */
207 | OPENSQUARE architecturelist CLOSESQUARE
208 ;
209
210 architecturelist: /* empty */
211 | architecturelist STRING
212 ;
213
214
215 SourceFilesList: /* empty */
216 | SourceFilesList MD5 STRING STRING { iniBuilder->buildSourceFile ((unsigned char *)$2, $3, $4); } NL
217 ;
218
219 %%
This page took 0.046662 seconds and 5 git commands to generate.