#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include "win32.h"
#include "ini.h"
#include "iniparse.h"
+#include "PackageTrust.h"
+
+extern int yyerror (String const &s);
+int yylex ();
#include "port.h"
+#include "IniDBBuilder.h"
+
#define YYERROR_VERBOSE 1
+#define YYINITDEPTH 1000
/*#define YYDEBUG 1*/
-static Package *cp;
-static int trust;
-extern unsigned int setup_timestamp;
-extern char *setup_version;
+IniDBBuilder *iniBuilder;
extern int yylineno;
-#define cpt (cp->info+trust)
-
+void add_correct_version();
%}
%token STRING
-%token SETUP_TIMESTAMP SETUP_VERSION VERSION INSTALL SOURCE SDESC LDESC
+%token SETUP_TIMESTAMP SETUP_VERSION PACKAGEVERSION INSTALL SOURCE SDESC LDESC
+%token CATEGORY REQUIRES
+%token APATH PPATH INCLUDE_SETUP EXCLUDE_PACKAGE DOWNLOAD_URL
%token T_PREV T_CURR T_TEST T_UNKNOWN
+%token MD5
%%
;
setup_header
- : SETUP_TIMESTAMP STRING '\n' { setup_timestamp = strtoul ($2, 0, 0); }
- | SETUP_VERSION STRING '\n' { setup_version = _strdup ($2); }
+ : SETUP_TIMESTAMP STRING '\n' { iniBuilder->buildTimestamp ($2); }
+ | SETUP_VERSION STRING '\n' { iniBuilder->buildVersion ($2); }
+ | '\n'
| error { yyerror ("unrecognized line in setup.ini headers (do you have the latest setup?)"); } '\n'
;
;
package
- : '@' STRING '\n' { new_package($2); }
+ : '@' STRING '\n' { iniBuilder->buildPackage ($2);}
lines
- | '\n'
;
lines
- : simple_line '\n' lines
+ : lines '\n' simple_line
| simple_line
;
simple_line
- : VERSION STRING { cpt->version = $2; }
- | SDESC STRING { cp->sdesc = $2; }
- | LDESC STRING { cp->ldesc = $2; }
- | INSTALL STRING STRING { cpt->install = $2;
- cpt->install_size = atoi($3); }
- | SOURCE STRING STRING { cpt->source = $2;
- cpt->source_size = atoi($3); }
- | T_PREV { trust = TRUST_PREV; }
- | T_CURR { trust = TRUST_CURR; }
- | T_TEST { trust = TRUST_TEST; }
- | T_UNKNOWN { trust = TRUST_UNKNOWN; }
+ : PACKAGEVERSION STRING { iniBuilder->buildPackageVersion ($2); }
+ | SDESC STRING { iniBuilder->buildPackageSDesc($2); }
+ | LDESC STRING { iniBuilder->buildPackageLDesc($2); }
+ | CATEGORY categories
+ | REQUIRES requires
+ | INSTALL STRING STRING MD5 { iniBuilder->buildPackageInstall ($2, $3, (unsigned char *)$4); }
+ | INSTALL STRING STRING { iniBuilder->buildPackageInstall ($2, $3); }
+ | SOURCE STRING STRING MD5 { iniBuilder->buildPackageSource ($2, $3, (unsigned char *)$4); }
+ | SOURCE STRING STRING { iniBuilder->buildPackageSource ($2, $3); }
+ | T_PREV { iniBuilder->buildPackageTrust (TRUST_PREV); }
+ | T_CURR { iniBuilder->buildPackageTrust (TRUST_CURR); }
+ | T_TEST { iniBuilder->buildPackageTrust (TRUST_TEST); }
+ | T_UNKNOWN { iniBuilder->buildPackageTrust (TRUST_UNKNOWN); }
| /* empty */
- | error '\n' { yylineno --;
- yyerror ("unrecognized line in package %s (do you have the latest setup?)", cp->name);
- yylineno ++;
- }
+ | error { yyerror (String("unrecognized line ") + yylineno + " (do you have the latest setup?)");
+ }
;
-%%
+requires
+ : STRING { iniBuilder->buildPackageRequirement($1); } requires
+ | STRING { iniBuilder->buildPackageRequirement($1); }
+ ;
-Package *package = 0;
-int npackages = 0;
-static int maxpackages = 0;
-
-Package *
-new_package (char *name)
-{
- if (npackages >= maxpackages)
- {
- maxpackages += 10;
- if (package)
- package = (Package *) realloc (package, maxpackages * sizeof (Package));
- else
- package = (Package *) malloc (maxpackages * sizeof (Package));
- }
- cp = package + npackages;
- npackages ++;
-
- memset (cp, 0, sizeof (Package));
- cp->name = name;
-
- trust = TRUST_CURR;
-
- return cp;
-}
+categories
+ : STRING { iniBuilder->buildPackageCategory ($1); } categories
+ | STRING { iniBuilder->buildPackageCategory ($1); }
+ ;
+
+%%