]> 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 7f0a42472aabfbc7b13f7898931cb83539f65299..009b53c4543e4b86aa8db3cfa2d4b59072c199a6 100644 (file)
 #include <string.h>
 
 #include "win32.h"
-#include "package_db.h"
-#include "category.h"
 #include "ini.h"
 #include "iniparse.h"
-#include "filemanip.h"
+#include "PackageTrust.h"
 
-extern "C" int yyerror (char const *s, ...);
+extern int yyerror (String  const &s);
 int yylex ();
 
 #include "port.h"
 
-#include "package_meta.h"
-#include "package_version.h"
-#include "cygpackage.h"
+#include "IniDBBuilder.h"
 
 #define YYERROR_VERBOSE 1
+#define YYINITDEPTH 1000
 /*#define YYDEBUG 1*/
 
-static packagemeta *cp = 0;
-extern unsigned int setup_timestamp;
-extern char *setup_version;
+IniDBBuilder *iniBuilder;
 extern int yylineno;
 
-char * parse_mirror = 0;
-static cygpackage *cpv = 0;
-static int trust;
-
 void add_correct_version();
-void process_src (cygpackage *, packagesource &src, char *, char*, char* = 0);
 %}
 
 %token STRING
@@ -71,8 +61,8 @@ setup_headers
  ;
 
 setup_header
- : SETUP_TIMESTAMP STRING '\n' { setup_timestamp = strtoul ($2, 0, 0); }
- | SETUP_VERSION STRING '\n' { setup_version = new char [strlen($2) + 1];strcpy (setup_version, $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'
  ;
@@ -83,123 +73,42 @@ packages
  ;
 
 package
- : '@' STRING '\n'             {packagedb db; cp = &db.packages.registerbykey($2); cpv = new cygpackage ($2); trust = TRUST_CURR;}
+ : '@' STRING '\n'             { iniBuilder->buildPackage ($2);}
    lines
  ;
 
 lines
- : simple_line '\n' lines
+ : lines '\n' simple_line
  | simple_line
  ;
 
 simple_line
- : PACKAGEVERSION STRING       { cpv->set_canonical_version ($2); 
-                                 add_correct_version ();}
- | SDESC STRING                        { cpv->set_sdesc ($2); }
- | LDESC STRING                        { cpv->set_ldesc ($2); }
+ : PACKAGEVERSION STRING       { iniBuilder->buildPackageVersion ($2); }
+ | SDESC STRING                        { iniBuilder->buildPackageSDesc($2); }
+ | LDESC STRING                        { iniBuilder->buildPackageLDesc($2); }
  | CATEGORY categories
  | REQUIRES requires
- | INSTALL STRING STRING MD5    { process_src (cpv, cpv->bin, $2, $3, $4); }
- | INSTALL STRING STRING       { process_src (cpv, cpv->bin, $2, $3); }
- | SOURCE STRING STRING MD5    { process_src (cpv, cpv->src, $2, $3, $4); }
- | SOURCE STRING STRING                { process_src (cpv, cpv->src, $2, $3); }
- | T_PREV                      { trust = TRUST_PREV; cpv = new cygpackage (cp->name); }
- | T_CURR                      { trust = TRUST_CURR; cpv = new cygpackage (cp->name); }
- | T_TEST                      { trust = TRUST_TEST; cpv = new cygpackage (cp->name); }
- | 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.cstr_oneuse());
-               yylineno ++;
-             }
+ | error { yyerror (String("unrecognized line ") + yylineno + " (do you have the latest setup?)");
+       }
  ;
 
 requires
- : STRING                      { cpv->new_requirement($1); } requires
- | STRING                      { cpv->new_requirement($1); }
+ : STRING                      { iniBuilder->buildPackageRequirement($1); } requires
+ | STRING                      { iniBuilder->buildPackageRequirement($1); }
  ;
 
 categories
- : STRING                      { packagedb db; cp->add_category (db.categories.registerbykey ($1));
-                               } categories
- | STRING                      { packagedb db; cp->add_category (db.categories.registerbykey ($1)); }
+ : STRING                      { iniBuilder->buildPackageCategory ($1); } categories
+ | STRING                      { iniBuilder->buildPackageCategory ($1); }
  ;
 
 %%
-
-void
-add_correct_version()
-{
-  int merged = 0;
-  for (size_t n = 1; !merged && n <= cp->versions.number (); n++)
-      if (!cp->versions[n]->Canonical_version().casecompare(cpv->Canonical_version()))
-      {
-       /* ASSUMPTIONS:
-          categories and requires are consistent for the same version across
-          all mirrors
-          */
-       /* Copy the binary mirror across if this site claims to have an install */
-       if (cpv->bin.sites.number ())
-         cp->versions[n]->bin.sites.registerbykey (cpv->bin.sites[1]->key);
-       /* Ditto for src */
-       if (cpv->src.sites.number ())
-         cp->versions[n]->src.sites.registerbykey (cpv->src.sites[1]->key);
-       /* Copy the descriptions across */
-       if (cpv->SDesc ().size() && !cp->versions[n]->SDesc ().size())
-         cp->versions[n]->set_sdesc (cpv->SDesc ());
-       if (cpv->LDesc ().size() && !cp->versions[n]->LDesc ().size())
-         cp->versions[n]->set_ldesc (cpv->LDesc ());
-       cpv = (cygpackage *)cp->versions[n];
-       merged = 1;
-      }
-    if (!merged)
-    cp->add_version (*cpv);
-  /* trust setting */
-  switch (trust)
-  {
-    case TRUST_CURR:
-      if (cp->currtimestamp < setup_timestamp)
-      {
-       cp->currtimestamp = setup_timestamp;
-       cp->curr = cpv;
-      }
-    break;
-    case TRUST_PREV:
-    if (cp->prevtimestamp < setup_timestamp)
-    {
-        cp->prevtimestamp = setup_timestamp;
-         cp->prev = cpv;
-    }
-    break;
-    case TRUST_TEST:
-    if (cp->exptimestamp < setup_timestamp)
-    {
-        cp->exptimestamp = setup_timestamp;
-       cp->exp = cpv;
-    }
-    break;
-  }
-}
-
-void
-process_src (cygpackage *cpv, packagesource &src, char *path, char*size, char*md5 )
-{ 
-  if (!cpv->Canonical_version ().size())
-    {
-      fileparse f;
-        if (parse_filename (path, f))
-         {
-           cpv->set_canonical_version (f.ver);
-           add_correct_version ();
-         }
-    }
-  
-  if (!src.size)
-    {
-      src.size = atoi(size);
-      src.set_canonical (path);
-    }
-  if (md5 && !src.md5.isSet())
-    src.md5.set((unsigned char *)md5);
-  src.sites.registerbykey (parse_mirror);
-}
This page took 0.030558 seconds and 5 git commands to generate.