From b1ff53edb6f3eeb9550d4d1df6f7558f73ad5a8a Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sat, 13 Jul 2002 00:46:54 +0000 Subject: [PATCH] 2002-07-13 Robert Collins * IniDBBuilder.cc (IniDBBuilder::buildBeginBuildDepends): Implement. (IniDBBuilder::buildBeginBinary): Implement. * IniDBBuilder.h (IniDBBuilder::buildBeginBuildDepends): Declare. (IniDBBuilder::buildBeginBinary): Ditto. * IniDBBuilderPackage.cc (IniDBBuilderPackage::buildBeginBuildDepends): Implement. (IniDBBuilderPackage::buildBeginBinary): Ditto. * IniDBBuilderPackage.h (IniDBBuilderPackage::buildBeginBuildDepends): Declare. (IniDBBuilderPackage::buildBeginBinary): Ditto. * inilex.l: Recognise Build-Depends-Indep, [,], >, < and remove T_UNKNOWN. * iniparse.y: Full support for parsing a debian Sources file in-line in setup.ini. * package_version.cc (packageversion::binaries): Implement. * package_version.h (packageversion::binaries): Declare list of what packages are created from a given source package. (_packageversion::binaries): Ditto. --- ChangeLog | 21 +++++++++++++++++++++ IniDBBuilder.cc | 2 ++ IniDBBuilder.h | 2 ++ IniDBBuilderPackage.cc | 30 ++++++++++++++++++++++++++++++ IniDBBuilderPackage.h | 2 ++ inilex.l | 9 ++++++--- iniparse.y | 40 ++++++++++++++++++++++++++-------------- package_version.cc | 5 +++++ package_version.h | 4 ++-- 9 files changed, 96 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index d78c6cfb..b1a6335f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2002-07-13 Robert Collins + + * IniDBBuilder.cc (IniDBBuilder::buildBeginBuildDepends): Implement. + (IniDBBuilder::buildBeginBinary): Implement. + * IniDBBuilder.h (IniDBBuilder::buildBeginBuildDepends): Declare. + (IniDBBuilder::buildBeginBinary): Ditto. + * IniDBBuilderPackage.cc (IniDBBuilderPackage::buildBeginBuildDepends): + Implement. + (IniDBBuilderPackage::buildBeginBinary): Ditto. + * IniDBBuilderPackage.h (IniDBBuilderPackage::buildBeginBuildDepends): + Declare. + (IniDBBuilderPackage::buildBeginBinary): Ditto. + * inilex.l: Recognise Build-Depends-Indep, [,], >, < and remove + T_UNKNOWN. + * iniparse.y: Full support for parsing a debian Sources file in-line in + setup.ini. + * package_version.cc (packageversion::binaries): Implement. + * package_version.h (packageversion::binaries): Declare list of what + packages are created from a given source package. + (_packageversion::binaries): Ditto. + 2002-07-10 Robert Collins * iniparse.y: Add basis for support for parsing a debian Sources file. diff --git a/IniDBBuilder.cc b/IniDBBuilder.cc index c1f92c7e..c370df95 100644 --- a/IniDBBuilder.cc +++ b/IniDBBuilder.cc @@ -40,6 +40,8 @@ void IniDBBuilder::buildBeginSuggests (){} void IniDBBuilder::buildBeginReplaces (){} void IniDBBuilder::buildBeginConflicts (){} void IniDBBuilder::buildBeginProvides (){} +void IniDBBuilder::buildBeginBuildDepends (){} +void IniDBBuilder::buildBeginBinary (){} void IniDBBuilder::buildDescription (String const &){} void IniDBBuilder::buildSourceName (String const &){} void IniDBBuilder::buildSourceNameVersion (String const &){} diff --git a/IniDBBuilder.h b/IniDBBuilder.h index 2fc53a01..f9d46e53 100644 --- a/IniDBBuilder.h +++ b/IniDBBuilder.h @@ -47,6 +47,8 @@ public: virtual void buildBeginReplaces (); virtual void buildBeginConflicts (); virtual void buildBeginProvides (); + virtual void buildBeginBuildDepends (); + virtual void buildBeginBinary (); virtual void buildDescription (String const &); virtual void buildSourceName (String const &); virtual void buildSourceNameVersion (String const &); diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc index 5949a75d..760a590b 100644 --- a/IniDBBuilderPackage.cc +++ b/IniDBBuilderPackage.cc @@ -234,6 +234,11 @@ IniDBBuilderPackage::buildInstalledSize (String const &size) void IniDBBuilderPackage::buildMaintainer (String const &){} +/* TODO: we can multiple arch's for a given package, + and it may befor either source or binary, so we need to either set both + or track a third current package that points to whether we altering source + or binary at the moment + */ void IniDBBuilderPackage::buildArchitecture (String const &arch) { @@ -323,6 +328,31 @@ IniDBBuilderPackage::buildBeginProvides () currentAndList = cbpv.provides(); } +void +IniDBBuilderPackage::buildBeginBuildDepends () +{ +#if DEBUG + log (LOG_BABBLE) << "Beginning of a Build-Depends statement" << endLog; + dumpAndList (currentAndList); +#endif + currentSpec = NULL; + currentOrList = NULL; /* set by the build AndListNode */ + currentAndList = cspv.depends (); +} + + +void +IniDBBuilderPackage::buildBeginBinary () +{ +#if DEBUG + log (LOG_BABBLE) << "Beginning of a Binary statement" << endLog; + dumpAndList (currentAndList); +#endif + currentSpec = NULL; + currentOrList = NULL; /* set by the build AndListNode */ + currentAndList = cspv.binaries (); +} + void IniDBBuilderPackage::buildDescription (String const &descline) { diff --git a/IniDBBuilderPackage.h b/IniDBBuilderPackage.h index fd90c46f..54c8d91f 100644 --- a/IniDBBuilderPackage.h +++ b/IniDBBuilderPackage.h @@ -52,6 +52,8 @@ public: virtual void buildBeginReplaces (); virtual void buildBeginConflicts (); virtual void buildBeginProvides (); + virtual void buildBeginBuildDepends (); + virtual void buildBeginBinary (); virtual void buildDescription (String const &); virtual void buildSourceName (String const &); virtual void buildSourceNameVersion (String const &); diff --git a/inilex.l b/inilex.l index 24633dfb..c849259c 100644 --- a/inilex.l +++ b/inilex.l @@ -42,7 +42,7 @@ static void ignore_line (void); %x descriptionstate %x eolstate -STR [a-zA-Z0-9_./:\+-]+ +STR [!a-zA-Z0-9_./:\+-]+ %% @@ -84,6 +84,7 @@ STR [a-zA-Z0-9_./:\+-]+ "Source:" return SOURCEPACKAGE; "Binary:" return BINARYPACKAGE; "Build-Depends:" return BUILDDEPENDS; +"Build-Depends-Indep:" return BUILDDEPENDS; /* technicallyincorrect :[ */ "Standards-Version:" return STANDARDSVERSION; "Format:" return FORMAT; "Directory:" return DIRECTORY; @@ -113,14 +114,17 @@ STR [a-zA-Z0-9_./:\+-]+ "[test]" return T_TEST; "[exp]" return T_TEST; "[prev]" return T_PREV; -"["{STR}"]" return T_UNKNOWN; "(" return OPENBRACE; ")" return CLOSEBRACE; +"[" return OPENSQUARE; +"]" return CLOSESQUARE; "<<" return LT; ">>" return GT; ">=" return GTEQUAL; "<=" return LTEQUAL; +">" return GT; +"<" return LT; "=" return EQUAL; \, return COMMA; "|" return OR; @@ -146,7 +150,6 @@ STR [a-zA-Z0-9_./:\+-]+ \n { return NL; } . { return *yytext;} -<> { return LEX_EOF; } %% diff --git a/iniparse.y b/iniparse.y index 12ab7df8..dbb155ea 100644 --- a/iniparse.y +++ b/iniparse.y @@ -46,19 +46,20 @@ void add_correct_version(); %token SETUP_TIMESTAMP SETUP_VERSION PACKAGEVERSION INSTALL SOURCE SDESC LDESC %token CATEGORY DEPENDS REQUIRES %token APATH PPATH INCLUDE_SETUP EXCLUDE_PACKAGE DOWNLOAD_URL -%token T_PREV T_CURR T_TEST T_UNKNOWN +%token T_PREV T_CURR T_TEST %token MD5 INSTALLEDSIZE MAINTAINER PRIORITY %token DESCTAG DESCRIPTION FILESIZE ARCHITECTURE SOURCEPACKAGE MD5LINE %token RECOMMENDS PREDEPENDS -%token SUGGESTS CONFLICTS REPLACES PROVIDES PACKAGENAME STRTOEOL PARAGRAPH LEX_EOF +%token SUGGESTS CONFLICTS REPLACES PROVIDES PACKAGENAME STRTOEOL PARAGRAPH %token EMAIL COMMA OR NL AT %token OPENBRACE CLOSEBRACE EQUAL GT LT GTEQUAL LTEQUAL +%token OPENSQUARE CLOSESQUARE %token BINARYPACKAGE BUILDDEPENDS STANDARDSVERSION FORMAT DIRECTORY FILES %% whole_file - : setup_headers packages + : setup_headers packageseparator packages ; setup_headers: /* empty */ @@ -71,7 +72,7 @@ header /* non-empty */ ; packages: /* empty */ - | packages packageseparator package + | packages package packageseparator ; packageseparator: /* empty */ @@ -98,11 +99,10 @@ singleitem /* non-empty */ | T_PREV NL { iniBuilder->buildPackageTrust (TRUST_PREV); } | T_CURR NL { iniBuilder->buildPackageTrust (TRUST_CURR); } | T_TEST NL { iniBuilder->buildPackageTrust (TRUST_TEST); } - | T_UNKNOWN NL { iniBuilder->buildPackageTrust (TRUST_UNKNOWN);} | PRIORITY STRING NL { iniBuilder->buildPriority ($2); } | INSTALLEDSIZE STRING NL { iniBuilder->buildInstalledSize ($2); } | MAINTAINER STRING NL { iniBuilder->buildMaintainer ($2); } - | ARCHITECTURE STRING NL { iniBuilder->buildArchitecture ($2); } + | ARCHITECTURE packagearchspec NL { iniBuilder->buildArchitecture ($2); } | FILESIZE STRING NL { iniBuilder->buildInstallSize($2); } | FORMAT STRING NL { /* TODO */ } | DIRECTORY STRING NL { /* TODO */ } @@ -113,7 +113,7 @@ singleitem /* non-empty */ | INSTALL STRING { iniBuilder->buildPackageInstall ($2); } installmeta NL | SOURCE STRING STRING sourceMD5 NL {iniBuilder->buildPackageSource ($2, $3);} | PROVIDES { iniBuilder->buildBeginProvides(); } packagelist NL - | BINARYPACKAGE { /* TODO */ } packagelist NL + | BINARYPACKAGE { iniBuilder->buildBeginBinary (); } packagelist NL | CONFLICTS { iniBuilder->buildBeginConflicts(); } versionedpackagelist NL | DEPENDS { iniBuilder->buildBeginDepends(); } versionedpackagelist NL | REQUIRES { iniBuilder->buildBeginDepends(); }versionedpackagelistsp NL @@ -121,16 +121,19 @@ singleitem /* non-empty */ | RECOMMENDS { iniBuilder->buildBeginRecommends(); } versionedpackagelist NL | SUGGESTS { iniBuilder->buildBeginSuggests(); } versionedpackagelist NL | REPLACES { iniBuilder->buildBeginReplaces(); } versionedpackagelist NL - | BUILDDEPENDS { /* todo */ } versionedpackagelist NL + | BUILDDEPENDS { iniBuilder->buildBeginBuildDepends(); } versionedpackagelist NL | FILES NL SourceFilesList | DESCTAG mlinedesc - | LEX_EOF { YYACCEPT; } | error { yyerror (String("unrecognized line ") + yylineno + " (do you have the latest setup?)"); } ; +packagearchspec: /* empty */ + | packagearchspec STRING { iniBuilder->buildArchitecture ($2); } + ; + categories: /* empty */ | categories STRING { iniBuilder->buildPackageCategory ($2); } ; @@ -166,7 +169,7 @@ packagelist /* non-empty */ ; packageentry /* empty not allowed */ - : STRING { iniBuilder->buildPackageListOrNode($1); } + : STRING { iniBuilder->buildPackageListOrNode($1); } | packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } ; @@ -181,14 +184,14 @@ versionedpackagelistsp /* non-empty */ ; -listseparator /* non-empty */ - : COMMA +listseparator: /* empty */ + | COMMA | COMMA NL ; versionedpackageentry /* empty not allowed */ - : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria - | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria + : STRING { iniBuilder->buildPackageListOrNode($1); } versioncriteria architecture + | versionedpackageentry OR STRING { iniBuilder->buildPackageListOrNode($3); } versioncriteria architecture ; versioncriteria: /* empty */ @@ -203,6 +206,15 @@ operator /* non-empty */ | GTEQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::MoreThanEquals); } ; +architecture: /* empty */ + | OPENSQUARE architecturelist CLOSESQUARE + ; + +architecturelist: /* empty */ + | architecturelist STRING + ; + + SourceFilesList: /* empty */ | SourceFilesList MD5 STRING STRING NL ; diff --git a/package_version.cc b/package_version.cc index df6a97ef..98fd0e95 100644 --- a/package_version.cc +++ b/package_version.cc @@ -246,6 +246,11 @@ packageversion::provides() return &data->provides; } +vector *> * +packageversion::binaries() +{ + return &data->binaries; +} bool packageversion::picked () const diff --git a/package_version.h b/package_version.h index c4ce10cf..f96fa0a2 100644 --- a/package_version.h +++ b/package_version.h @@ -117,7 +117,7 @@ public: /* invariant: these never return NULL */ vector *> *depends(), *predepends(), - *recommends(), *suggests(), *replaces(), *conflicts(), *provides(); + *recommends(), *suggests(), *replaces(), *conflicts(), *provides(), *binaries(); bool picked() const; /* true if this version is to be installed */ void pick(bool); /* trigger an install/reinsall */ @@ -171,7 +171,7 @@ public: virtual void setSourcePackageSpecification (PackageSpecification const &); vector *> depends, predepends, recommends, - suggests, replaces, conflicts, provides; + suggests, replaces, conflicts, provides, binaries; bool picked; /* non zero if this version is to be installed */ /* This will also trigger reinstalled if it is set */ -- 2.43.5