Browse Source

add support for Build-Depends/Conflicts-Arch

These new enum values might cause "interesting" behaviour in tools not
expecting them – like an old apt would think a Build-Conflicts-Arch is
some sort of Build-Depends – but that can't reasonably be avoided and
effects only packages using B-D/C-A so if there is any breakage the
tools can easily be adapted.

The APT_PKG_RELEASE number is increased so that libapt users can detect
the availability of these new enum fields via:
 #if APT_PKG_ABI > 500 || (APT_PKG_ABI == 500 && APT_PKG_RELEASE >= 1)

Closes: #837395
Johannes Schauer 7 years ago
parent
commit
c5f22e483c

+ 1 - 1
apt-pkg/contrib/macros.h

@@ -165,7 +165,7 @@
 // See also buildlib/libversion.mak
 #define APT_PKG_MAJOR 5
 #define APT_PKG_MINOR 0
-#define APT_PKG_RELEASE 0
+#define APT_PKG_RELEASE 1
 #define APT_PKG_ABI ((APT_PKG_MAJOR * 100) + APT_PKG_MINOR)
 
 #endif

+ 5 - 3
apt-pkg/deb/debsrcrecords.cc

@@ -103,14 +103,16 @@ bool debSrcRecordParser::BuildDepends(std::vector<pkgSrcRecords::Parser::BuildDe
    unsigned int I;
    const char *Start, *Stop;
    BuildDepRec rec;
-   const char *fields[] = {"Build-Depends", 
+   const char *fields[] = {"Build-Depends",
                            "Build-Depends-Indep",
 			   "Build-Conflicts",
-			   "Build-Conflicts-Indep"};
+			   "Build-Conflicts-Indep",
+			   "Build-Depends-Arch",
+			   "Build-Conflicts-Arch"};
 
    BuildDeps.clear();
 
-   for (I = 0; I < 4; I++) 
+   for (I = 0; I < 6; I++)
    {
       if (ArchOnly && (I == 1 || I == 3))
          continue;

+ 3 - 1
apt-pkg/srcrecords.cc

@@ -139,7 +139,9 @@ const char *pkgSrcRecords::Parser::BuildDepType(unsigned char const &Type)
    const char *fields[] = {"Build-Depends",
 			   "Build-Depends-Indep",
 			   "Build-Conflicts",
-			   "Build-Conflicts-Indep"};
+			   "Build-Conflicts-Indep",
+			   "Build-Depends-Arch",
+			   "Build-Conflicts-Arch"};
    if (unlikely(Type >= sizeof(fields)/sizeof(fields[0])))
       return "";
    return fields[Type];

+ 2 - 1
apt-pkg/srcrecords.h

@@ -56,7 +56,8 @@ APT_IGNORE_DEPRECATED_POP
       public:
 
       enum BuildDep {BuildDepend=0x0,BuildDependIndep=0x1,
-	             BuildConflict=0x2,BuildConflictIndep=0x3};
+	             BuildConflict=0x2,BuildConflictIndep=0x3,
+	             BuildDependArch=0x4,BuildConflictArch=0x5};
 
       struct BuildDepRec 
       {

+ 3 - 1
apt-private/private-source.cc

@@ -620,7 +620,9 @@ static void WriteBuildDependencyPackage(std::ostringstream &buildDepsPkgFile,
    for (auto const &dep: Dependencies)
    {
       std::string * type;
-      if (dep.Type == pkgSrcRecords::Parser::BuildConflict || dep.Type == pkgSrcRecords::Parser::BuildConflictIndep)
+      if (dep.Type == pkgSrcRecords::Parser::BuildConflict ||
+		  dep.Type == pkgSrcRecords::Parser::BuildConflictIndep ||
+		  dep.Type == pkgSrcRecords::Parser::BuildConflictArch)
 	 type = &conflicts;
       else
 	 type = &depends;