]> cygwin.com Git - cygwin-apps/setup.git/blob - iniparse.y
2003-06-23 Max Bowsher <maxb@ukf.net>
[cygwin-apps/setup.git] / iniparse.y
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 <stdio.h>
20 #include <stdlib.h>
21 #include <string.h>
22
23 #include "win32.h"
24 #include "ini.h"
25 #include "iniparse.h"
26 #include "PackageTrust.h"
27
28 extern int yyerror (String const &s);
29 int yylex ();
30
31 #include "port.h"
32
33 #include "IniDBBuilder.h"
34
35 #define YYERROR_VERBOSE 1
36 #define YYINITDEPTH 1000
37 /*#define YYDEBUG 1*/
38
39 IniDBBuilder *iniBuilder;
40 extern int yylineno;
41
42 void add_correct_version();
43 %}
44
45 %token STRING
46 %token SETUP_TIMESTAMP SETUP_VERSION PACKAGEVERSION INSTALL SOURCE SDESC LDESC
47 %token CATEGORY DEPENDS REQUIRES
48 %token APATH PPATH INCLUDE_SETUP EXCLUDE_PACKAGE DOWNLOAD_URL
49 %token T_PREV T_CURR T_TEST
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
54 %token EMAIL COMMA OR NL AT
55 %token OPENBRACE CLOSEBRACE EQUAL GT LT GTEQUAL LTEQUAL
56 %token OPENSQUARE CLOSESQUARE
57 %token BINARYPACKAGE BUILDDEPENDS STANDARDSVERSION FORMAT DIRECTORY FILES
58
59 %%
60
61 whole_file
62 : setup_headers packageseparator packages
63 ;
64
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 */
75 | packages package packageseparator
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); }
102 | PRIORITY STRING NL { iniBuilder->buildPriority ($2); }
103 | INSTALLEDSIZE STRING NL { iniBuilder->buildInstalledSize ($2); }
104 | MAINTAINER STRING NL { iniBuilder->buildMaintainer ($2); }
105 | ARCHITECTURE packagearchspec NL { iniBuilder->buildArchitecture ($2); }
106 | FILESIZE STRING NL { iniBuilder->buildInstallSize($2); }
107 | FORMAT STRING NL { /* TODO */ }
108 | DIRECTORY STRING NL { /* TODO */ }
109 | STANDARDSVERSION STRING NL { /* TODO */ }
110 | MD5LINE MD5 NL { iniBuilder->buildInstallMD5 ((unsigned char *)$2); }
111 | SOURCEPACKAGE source NL
112 | CATEGORY categories NL
113 | INSTALL STRING { iniBuilder->buildPackageInstall ($2); } installmeta NL
114 | SOURCE STRING STRING sourceMD5 NL {iniBuilder->buildPackageSource ($2, $3);}
115 | PROVIDES { iniBuilder->buildBeginProvides(); } packagelist NL
116 | BINARYPACKAGE { iniBuilder->buildBeginBinary (); } packagelist NL
117 | CONFLICTS { iniBuilder->buildBeginConflicts(); } versionedpackagelist NL
118 | DEPENDS { iniBuilder->buildBeginDepends(); } versionedpackagelist NL
119 | REQUIRES { iniBuilder->buildBeginDepends(); }versionedpackagelistsp NL
120 | PREDEPENDS { iniBuilder->buildBeginPreDepends(); } versionedpackagelist NL
121 | RECOMMENDS { iniBuilder->buildBeginRecommends(); } versionedpackagelist NL
122 | SUGGESTS { iniBuilder->buildBeginSuggests(); } versionedpackagelist NL
123 | REPLACES { iniBuilder->buildBeginReplaces(); } versionedpackagelist NL
124 | BUILDDEPENDS { iniBuilder->buildBeginBuildDepends(); } versionedpackagelist NL
125 | FILES NL SourceFilesList
126 | DESCTAG mlinedesc
127 | error { yyerror (String("unrecognized line ")
128 + yylineno
129 + " (do you have the latest setup?)");
130 }
131 ;
132
133 packagearchspec: /* empty */
134 | packagearchspec STRING { iniBuilder->buildArchitecture ($2); }
135 ;
136
137 categories: /* empty */
138 | categories STRING { iniBuilder->buildPackageCategory ($2); }
139 ;
140
141 installmeta: /* empty */
142 | STRING installMD5 { iniBuilder->buildInstallSize($1); }
143 ;
144
145 installMD5: /* empty */
146 | MD5 { iniBuilder->buildInstallMD5 ((unsigned char *)$1);}
147 ;
148
149 sourceMD5: /* empty */
150 | MD5 { iniBuilder->buildSourceMD5 ((unsigned char *)$1); }
151 ;
152
153 source /* non-empty */
154 : STRING { iniBuilder->buildSourceName ($1); } versioninfo
155 ;
156
157 versioninfo: /* empty */
158 | OPENBRACE STRING CLOSEBRACE { iniBuilder->buildSourceNameVersion ($2); }
159 ;
160
161 mlinedesc: /* empty */
162 | mlinedesc STRTOEOL NL { iniBuilder->buildDescription ($2); }
163 | mlinedesc STRTOEOL PARAGRAPH { iniBuilder->buildDescription ($2); }
164 ;
165
166 packagelist /* non-empty */
167 : packagelist COMMA { iniBuilder->buildPackageListAndNode(); } packageentry
168 | { iniBuilder->buildPackageListAndNode(); } packageentry
169 ;
170
171 packageentry /* empty not allowed */
172 : STRING { iniBuilder->buildPackageListOrNode($1); }
173 | packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); }
174 ;
175
176 versionedpackagelist /* non-empty */
177 : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
178 | versionedpackagelist listseparator { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
179 ;
180
181 versionedpackagelistsp /* non-empty */
182 : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
183 | versionedpackagelistsp { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
184 ;
185
186
187 listseparator: /* empty */
188 | COMMA
189 | COMMA NL
190 ;
191
192 versionedpackageentry /* empty not allowed */
193 : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria architecture
194 | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria architecture
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
209 architecture: /* empty */
210 | OPENSQUARE architecturelist CLOSESQUARE
211 ;
212
213 architecturelist: /* empty */
214 | architecturelist STRING
215 ;
216
217
218 SourceFilesList: /* empty */
219 | SourceFilesList MD5 STRING STRING { iniBuilder->buildSourceFile ((unsigned char *)$2, $3, $4); } NL
220 ;
221
222 %%
This page took 0.039952 seconds and 5 git commands to generate.