]> cygwin.com Git - cygwin-apps/setup.git/blame - iniparse.y
2002-07-10 Robert Collins <rbtcollins@hotmail.com>
[cygwin-apps/setup.git] / iniparse.y
CommitLineData
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 28extern int yyerror (String const &s);
341988b9 29int 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 39IniDBBuilder *iniBuilder;
b11b49f3 40extern int yylineno;
23c9e63c 41
bb849dbd 42void 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
60whole_file
61 : setup_headers packages
62 ;
63
aa1e3b4d
RC
64setup_headers: /* empty */
65 | setup_headers header
66 ;
67
68header /* non-empty */
69 : SETUP_TIMESTAMP STRING { iniBuilder->buildTimestamp ($2); } NL
70 | SETUP_VERSION STRING { iniBuilder->buildVersion ($2); } NL
71 ;
72
73packages: /* empty */
74 | packages packageseparator package
75 ;
76
77packageseparator: /* empty */
78 | packageseparator NL
79 ;
80
81package /* non-empty */
82 : packagename NL packagedata
83 ;
84
85packagename /* non-empty */
86 : AT STRING { iniBuilder->buildPackage ($2); }
87 | PACKAGENAME STRING { iniBuilder->buildPackage ($2); }
88 ;
89
90packagedata: /* empty */
91 | packagedata singleitem
92 ;
93
94singleitem /* 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
134categories: /* empty */
135 | categories STRING { iniBuilder->buildPackageCategory ($2); }
136 ;
137
aa1e3b4d
RC
138installmeta: /* empty */
139 | STRING installMD5 { iniBuilder->buildInstallSize($1); }
140 ;
141
142installMD5: /* empty */
143 | MD5 { iniBuilder->buildInstallMD5 ((unsigned char *)$1);}
23c9e63c
DD
144 ;
145
aa1e3b4d
RC
146sourceMD5: /* empty */
147 | MD5 { iniBuilder->buildSourceMD5 ((unsigned char *)$1); }
23c9e63c
DD
148 ;
149
aa1e3b4d
RC
150source /* non-empty */
151 : STRING { iniBuilder->buildSourceName ($1); } versioninfo
23c9e63c
DD
152 ;
153
aa1e3b4d
RC
154versioninfo: /* empty */
155 | OPENBRACE STRING CLOSEBRACE { iniBuilder->buildSourceNameVersion ($2); }
23c9e63c
DD
156 ;
157
aa1e3b4d
RC
158mlinedesc: /* empty */
159 | mlinedesc STRTOEOL NL { iniBuilder->buildDescription ($2); }
160 | mlinedesc STRTOEOL PARAGRAPH { iniBuilder->buildDescription ($2); }
23c9e63c
DD
161 ;
162
aa1e3b4d
RC
163packagelist /* non-empty */
164 : packagelist COMMA { iniBuilder->buildPackageListAndNode(); } packageentry
165 | { iniBuilder->buildPackageListAndNode(); } packageentry
23c9e63c
DD
166 ;
167
aa1e3b4d
RC
168packageentry /* empty not allowed */
169 : STRING { iniBuilder->buildPackageListOrNode($1); }
170 | packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); }
38c97581
CF
171 ;
172
aa1e3b4d
RC
173versionedpackagelist /* non-empty */
174 : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
175 | versionedpackagelist listseparator { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
8f53e82a
RC
176 ;
177
3c196821
RC
178versionedpackagelistsp /* non-empty */
179 : { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
180 | versionedpackagelistsp { iniBuilder->buildPackageListAndNode(); } versionedpackageentry
181 ;
182
aa1e3b4d
RC
183
184listseparator /* non-empty */
185 : COMMA
186 | COMMA NL
187 ;
188
189versionedpackageentry /* empty not allowed */
190 : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria
191 | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria
192 ;
193
194versioncriteria: /* empty */
195 | OPENBRACE operator STRING CLOSEBRACE { iniBuilder->buildPackageListOperatorVersion ($3); }
196 ;
197
198operator /* 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
206SourceFilesList: /* empty */
207 | SourceFilesList MD5 STRING STRING NL
208 ;
209
23c9e63c 210%%
This page took 0.056776 seconds and 5 git commands to generate.