]> cygwin.com Git - cygwin-apps/setup.git/blobdiff - iniparse.y
2002-05-19 Robert Collins <rbtcollins@hotmail.com>
[cygwin-apps/setup.git] / iniparse.y
index 991407907eae7d0b9c547eb66e618316ec95868c..009b53c4543e4b86aa8db3cfa2d4b59072c199a6 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
+#include "win32.h"
 #include "ini.h"
 #include "iniparse.h"
-#include "win32.h"
-#include "filemanip.h"
+#include "PackageTrust.h"
 
-extern "C" int yyerror (char *s, ...);
-extern "C" int yylex ();
+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
 
 %%
 
@@ -61,8 +61,8 @@ setup_headers
  ;
 
 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'
  ;
@@ -73,153 +73,42 @@ packages
  ;
 
 package
- : '@' STRING '\n'             { new_package($2); }
+ : '@' STRING '\n'             { iniBuilder->buildPackage ($2);}
    lines
  ;
 
 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; }
+ : PACKAGEVERSION STRING       { iniBuilder->buildPackageVersion ($2); }
+ | SDESC STRING                        { iniBuilder->buildPackageSDesc($2); }
+ | LDESC STRING                        { iniBuilder->buildPackageLDesc($2); }
  | CATEGORY categories
  | REQUIRES requires
- | INSTALL STRING STRING       { cpt->install = $2;
-                                 cpt->install_size = atoi($3);
-                                 if (!cpt->version)
-                                   {
-                                     fileparse f;
-                                     if (parse_filename ($2, f))
-                                       cpt->version = strdup (f.ver);
-                                   }
-                               }
- | 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; }
- | EXCLUDE_PACKAGE             { cp->exclude = EXCLUDE_BY_SETUP; }
- | T_UNKNOWN                   { trust = TRUST_UNKNOWN; }
+ | 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                      { new_requirement(cp, $1); } requires
- | STRING                      { new_requirement(cp, $1); }
+ : STRING                      { iniBuilder->buildPackageRequirement($1); } requires
+ | STRING                      { iniBuilder->buildPackageRequirement($1); }
  ;
 
 categories
- : STRING                      { add_category (cp, register_category ($1));
-                               } categories
- | STRING                      { add_category (cp, register_category ($1)); }
+ : STRING                      { iniBuilder->buildPackageCategory ($1); } categories
+ | STRING                      { iniBuilder->buildPackageCategory ($1); }
  ;
 
 %%
-
-Package *package = NULL;
-int npackages = 0;
-static int maxpackages = 0;
-Category *category = NULL;
-int ncategories = 0;
-
-Package *
-new_package (char *name)
-{
-  if (package == NULL)
-    maxpackages = npackages = 0;
-  if (npackages >= maxpackages)
-    {
-      maxpackages += 100;
-      if (package)
-       package = (Package *) realloc (package, (1 + maxpackages) * sizeof (Package));
-      else
-       package = (Package *) malloc ((1 + maxpackages) * sizeof (Package));
-      memset (package + npackages, 0, (1 + maxpackages - npackages) * sizeof (Package));
-    }
-  cp = getpkgbyname (name);
-  if (!cp)
-    {
-      cp = package + npackages;
-      npackages++;
-      cp->name = strdup (name);
-      trust = TRUST_CURR;
-    }
-
-  return cp;
-}
-
-void
-new_requirement (Package *package, char *dependson)
-{
-  Dependency *dp;
-  if (!dependson)
-    return;
-  dp = (Dependency *) malloc (sizeof (Dependency));
-  dp->next = cp->required;
-  dp->package = dependson;
-  cp->required = dp;
-}
-
-Category *
-register_category (char *name)
-{
-  Category *tempcat;
-  if (category == NULL)
-    ncategories = 0;
-  tempcat = getcategorybyname (name);
-  if (!tempcat)
-    {
-      Category *sortcat = category;
-      tempcat = new (Category);
-      memset (tempcat, '\0', sizeof (Category));
-      tempcat->name = strdup (name);
-      if (!sortcat || strcasecmp(sortcat->name, name) > 0)
-       {
-         tempcat->next = category;
-         category = tempcat;
-       }
-      else
-       {
-         tempcat->next = sortcat->next;
-         sortcat->next = tempcat;
-         while (sortcat->next && 
-                strcasecmp(sortcat->next->name, tempcat->name) < 0)
-           {
-             tempcat->next = sortcat->next;
-             sortcat->next = tempcat;
-           }
-       }
-      ncategories++;
-    }
-  return tempcat;
-}
-
-void
-add_category (Package *pkg, Category *cat)
-{
-  /* add a new record for the package list */
-  /* TODO: alpabetical inserts ? */
-  Category *tempcat;
-  CategoryPackage *templink;
-  tempcat = new (Category);
-  memset (tempcat, '\0', sizeof (Category));
-  tempcat->next = pkg->category;
-  tempcat->name = cat->name;
-  pkg->category = tempcat;
-
-  templink = new (CategoryPackage);
-  templink->next = cat->packages;
-  templink->pkgname = pkg->name;
-  cat->packages = templink;
-  /* hack to ensure we allocate enough space */
-  ncategories++; 
-}
This page took 0.028751 seconds and 5 git commands to generate.