* 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-13 Robert Collins <rbtcollins@hotmail.com>
+
+ * 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 <rbtcollins@hotmail.com>
* iniparse.y: Add basis for support for parsing a debian Sources file.
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 &){}
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 &);
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)
{
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)
{
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 &);
%x descriptionstate
%x eolstate
-STR [a-zA-Z0-9_./:\+-]+
+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;
"[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;
\n { return NL; }
. { return *yytext;}
-<<EOF>> { return LEX_EOF; }
%%
%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 */
;
packages: /* empty */
- | packages packageseparator package
+ | packages package packageseparator
;
packageseparator: /* 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 */ }
| 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
| 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); }
;
;
packageentry /* empty not allowed */
- : STRING { iniBuilder->buildPackageListOrNode($1); }
+ : STRING { iniBuilder->buildPackageListOrNode($1); }
| packageentry OR STRING { iniBuilder->buildPackageListOrNode($3); }
;
;
-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 */
| GTEQUAL { iniBuilder->buildPackageListOperator (PackageSpecification::MoreThanEquals); }
;
+architecture: /* empty */
+ | OPENSQUARE architecturelist CLOSESQUARE
+ ;
+
+architecturelist: /* empty */
+ | architecturelist STRING
+ ;
+
+
SourceFilesList: /* empty */
| SourceFilesList MD5 STRING STRING NL
;
return &data->provides;
}
+vector <vector <PackageSpecification *> *> *
+packageversion::binaries()
+{
+ return &data->binaries;
+}
bool
packageversion::picked () const
/* invariant: these never return NULL */
vector <vector <PackageSpecification *> *> *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 */
virtual void setSourcePackageSpecification (PackageSpecification const &);
vector <vector <PackageSpecification *> *> 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 */