[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: backport of dpkg (>= 1.17.2) and apt (>= 0.9.16.1) for build profiles



Hi,

Quoting Alexander Wirt (2014-04-26 20:36:29)
> > We would like to add build profile support [1] to packages in the archive
> > and because build profiles add a new syntax to Build-Depends, tools like
> > dpkg and apt need to be able to understand it as they would otherwise throw
> > an error.  Support for build profiles was integrated into a number of tools
> > already and most of them already migrated into testing. You can see [1] for
> > an overview.
> >
> > Because of this syntax change, packages that use this syntax can only be
> > uploaded once tools in Debian stable support it because the build
> > infrastructure runs Debian stable. One option would be to wait until the jessie
> > release but we fear that if we go that route we might discover too late that we
> > missed to patch one important tool and in the worst case have to wait for yet
> > another release until packages with build profiles can be uploaded.
> >
> > I'm writing to this list because a backport is probably more easy than plugging
> > the build-profile commit on top of the current stable versions of dpkg and apt?
> >
> > What do you think? Would you support releasing a build profile enabled version
> > of dpkg and apt and python-apt into backports so that dak and wanna-build can
> > support build profiles before jessie happens?
> It is and was always backports policy to prevent backporting packages which
> do have too much impact on the stable system. And to be honest, apt do fall
> into that category. Unless someone has some really really good reasons I
> won't accept apt into backports.

Please reconsider adding packages with the attached three minimal patches for
dpkg, apt and python-apt to backports. In contrast to a full backport these
patches add the ability to parse the new build profile syntax with minimal
impact.  In particular no code for using build profiles is added. We already
tried to update the build infrastructure via other means (stable update, custom
repositories, local installation), but were faced with resistance from the
relevant teams (SRM, DSA, FTP). Each of them has good reasons. We believe that
backports is a good way to enable the build profile syntax on Debian build
infrastructure.

cheers, josch and Helmut
diff -Nru dpkg-1.16.12/debian/changelog dpkg-1.16.12~bpo70+1/debian/changelog
--- dpkg-1.16.12/debian/changelog	2013-09-30 16:52:48.000000000 +0200
+++ dpkg-1.16.12~bpo70+1/debian/changelog	2014-07-06 10:35:00.000000000 +0200
@@ -1,3 +1,19 @@
+dpkg (1.16.12~bpo70+1) wheezy-backports; urgency=medium
+
+  * Non-maintainer upload.
+  * Minimal support for restriction list Build-Depends syntax extension
+      - the syntax is described at https://wiki.debian.org/BuildProfileSpec
+      - dpkg will correctly parse and interpret build profile annotations
+        in build dependencies of source packages
+      - it will not allow to set any build profiles and will always assume
+        that no build profile is set
+      - this allows dpkg to not throw an error when encountering source packages
+        that make use of build profiles in stable versions of Debian with dpkg
+        version 1.17.2 or later in which full support for build profiles
+        was implemented
+
+ -- Johannes Schauer <j.schauer@email.de>  Wed, 30 Apr 2014 09:00:31 +0200
+
 dpkg (1.16.12) stable; urgency=low
 
   * Fix value caching in Dpkg::Arch by not shadowing the variables.
diff -Nru dpkg-1.16.12/man/deb-src-control.5 dpkg-1.16.12~bpo70+1/man/deb-src-control.5
--- dpkg-1.16.12/man/deb-src-control.5	2013-09-30 16:47:56.000000000 +0200
+++ dpkg-1.16.12~bpo70+1/man/deb-src-control.5	2014-07-06 10:18:59.000000000 +0200
@@ -177,8 +177,9 @@
 of packages separated by vertical bar (or "pipe") symbols, "|". The
 groups are separated by commas. Commas are to be read as "AND", and pipes
 as "OR", with pipes binding more tightly. Each package name is
-optionally followed by a version number specification in parentheses and an
-architecture specification in square brackets.
+optionally followed by a version number specification in parentheses, an
+architecture specification in square brackets, and a profile specification
+in angle brackets.
 
 The syntax of the
 .BR Build\-Conflicts ,
@@ -188,7 +189,8 @@
 fields is a list of comma-separated package names, where the comma is read
 as an "AND". Specifying alternative packages using a "pipe" is not supported.
 Each package name is optionally followed by a version number specification in
-parentheses and an architecture specification in square brackets.
+parentheses, an architecture specification in square brackets, and a profile
+specification in angle brackets.
 
 A version number may start with a ">>", in which case any later version
 will match, and may specify or omit the Debian packaging revision (separated
@@ -200,6 +202,10 @@
 separated by whitespace. Exclamation marks may be prepended to each of the
 names, meaning "NOT".
 
+A profile specification consists of one or more profile names, prefixed
+with the "\fBprofile.\fP" namespace, separated by whitespace. Exclamation
+marks may be prepended to each of the names, meaning "NOT".
+
 Note that dependencies on packages in the
 .B build\-essential
 set can be omitted and that declaring build conflicts against them is
diff -Nru dpkg-1.16.12/scripts/Dpkg/Deps.pm dpkg-1.16.12~bpo70+1/scripts/Dpkg/Deps.pm
--- dpkg-1.16.12/scripts/Dpkg/Deps.pm	2013-09-30 16:47:57.000000000 +0200
+++ dpkg-1.16.12~bpo70+1/scripts/Dpkg/Deps.pm	2014-07-06 10:18:59.000000000 +0200
@@ -266,6 +266,26 @@
 list so that the resulting dependencies are directly applicable to the
 current architecture.
 
+=item use_profiles (defaults to 1)
+
+Take into account the profile restriction part of the dependencies. Set
+to 0 to completely ignore that information.
+
+=item reduce_profiles (defaults to 0)
+
+If set to 1, ignore dependencies that do not concern the current build
+profile. This implicitly strips off the profile restriction list so
+that the resulting dependencies are directly applicable to the current
+profiles.
+
+=item reduce_restrictions (defaults to 0)
+
+If set to 1, ignore dependencies that do not concern the current set of
+restrictions. This implicitly strips off any restriction list so that the
+resulting dependencies are directly applicable to the current restriction.
+This currently implies C<reduce_arch> and C<reduce_profiles>, and overrides
+them if set.
+
 =item union (defaults to 0)
 
 If set to 1, returns a Dpkg::Deps::Union instead of a Dpkg::Deps::AND. Use
@@ -286,9 +306,17 @@
     $options{use_arch} = 1 if not exists $options{use_arch};
     $options{reduce_arch} = 0 if not exists $options{reduce_arch};
     $options{host_arch} = get_host_arch() if not exists $options{host_arch};
+    $options{use_profiles} = 1 if not exists $options{use_profiles};
+    $options{reduce_profiles} = 0 if not exists $options{reduce_profiles};
+    $options{reduce_restrictions} = 0 if not exists $options{reduce_restrictions};
     $options{union} = 0 if not exists $options{union};
     $options{build_dep} = 0 if not exists $options{build_dep};
 
+    if ($options{reduce_restrictions}) {
+        $options{reduce_arch} = 1;
+        $options{reduce_profiles} = 1;
+    }
+
     # Strip trailing/leading spaces
     $dep_line =~ s/^\s+//;
     $dep_line =~ s/\s+$//;
@@ -310,6 +338,11 @@
 		$dep_simple->reduce_arch($options{host_arch});
 		next if not $dep_simple->arch_is_concerned($options{host_arch});
 	    }
+	    $dep_simple->{restrictions} = undef if not $options{use_profiles};
+	    if ($options{reduce_profiles}) {
+		$dep_simple->reduce_profiles($options{build_profiles});
+		next if not $dep_simple->profile_is_concerned($options{build_profiles});
+	    }
 	    push @or_list, $dep_simple;
         }
 	next if not @or_list;
@@ -559,6 +592,7 @@
     $self->{'version'} = undef;
     $self->{'arches'} = undef;
     $self->{'archqual'} = undef;
+    $self->{'restrictions'} = undef;
 }
 
 sub parse {
@@ -588,6 +622,11 @@
                 \s* (.*?)                   # don't parse architectures now
                 \s* \]                      # closing bracket
               )?                            # end of optional architecture
+              (?:                           # start of optional restriction
+                \s* <                       # open bracket for restriction
+                \s* (.*?)                   # don't parse restrictions now
+                \s* >                       # closing bracket
+              )?                            # end of optional restriction
 	      \s*$			    # trailing spaces at end
             /x;
     if (defined($2)) {
@@ -602,6 +641,9 @@
     if (defined($5)) {
 	$self->{arches} = [ split(/\s+/, $5) ];
     }
+    if (defined($6)) {
+	$self->{restrictions} = [ map { lc } split /\s+/, $6 ];
+    }
 }
 
 sub output {
@@ -616,6 +658,9 @@
     if (defined($self->{'arches'})) {
 	$res .= " [" . join(" ", @{$self->{arches}}) . "]";
     }
+    if (defined($self->{restrictions})) {
+	$res .= ' <' . join(' ', @{$self->{restrictions}}) . '>';
+    }
     if (defined($fh)) {
 	print $fh $res;
     }
@@ -745,6 +790,39 @@
     }
 }
 
+sub profile_is_concerned {
+    my ($self) = @_;
+
+    return 0 if not defined $self->{package}; # Empty dep
+    return 1 if not defined $self->{restrictions}; # Dep without restrictions
+
+    my $seen_profile = 0;
+    foreach my $restriction (@{$self->{restrictions}}) {
+        # Determine if this restriction is negated, and within the "profile"
+        # namespace, otherwise it does not concern this check.
+        next if $restriction !~ m/^(!)?profile\.(.*)/;
+
+        my $negated = defined $1 && $1 eq '!';
+
+        if ($negated) {
+            # "!profile.this" includes by default all other profiles
+            # unless they also appear in a "!profile.other".
+            $seen_profile = 1;
+        }
+    }
+    return $seen_profile;
+}
+
+sub reduce_profiles {
+    my ($self) = @_;
+
+    if (not $self->profile_is_concerned()) {
+        $self->reset();
+    } else {
+        $self->{restrictions} = undef;
+    }
+}
+
 sub get_evaluation {
     my ($self, $facts) = @_;
     return undef if not defined $self->{package};
diff -Nru dpkg-1.16.12/scripts/dpkg-checkbuilddeps.pl dpkg-1.16.12~bpo70+1/scripts/dpkg-checkbuilddeps.pl
--- dpkg-1.16.12/scripts/dpkg-checkbuilddeps.pl	2013-09-30 16:47:58.000000000 +0200
+++ dpkg-1.16.12~bpo70+1/scripts/dpkg-checkbuilddeps.pl	2014-07-06 10:18:59.000000000 +0200
@@ -113,11 +113,13 @@
 if ($bd_value) {
 	push @unmet, build_depends('Build-Depends/Build-Depends-Arch/Build-Depends-Indep',
 		deps_parse($bd_value, build_dep => 1, host_arch => $host_arch,
+			   reduce_profiles => 1,
 			   reduce_arch => 1), $facts);
 }
 if ($bc_value) {
 	push @conflicts, build_conflicts('Build-Conflicts/Build-Conflicts-Arch/Build-Conflicts-Indep',
 		deps_parse($bc_value, build_dep => 1, host_arch => $host_arch,
+			   reduce_profiles => 1,
 			   reduce_arch => 1, union => 1), $facts);
 }
 
diff -Nru dpkg-1.16.12/scripts/dpkg-gencontrol.pl dpkg-1.16.12~bpo70+1/scripts/dpkg-gencontrol.pl
--- dpkg-1.16.12/scripts/dpkg-gencontrol.pl	2013-09-30 16:47:58.000000000 +0200
+++ dpkg-1.16.12~bpo70+1/scripts/dpkg-gencontrol.pl	2014-07-06 10:18:59.000000000 +0200
@@ -247,6 +247,7 @@
                               $fields->{'Architecture'}, $fields->{'Multi-Arch'});
 if (exists $pkg->{"Provides"}) {
     my $provides = deps_parse($substvars->substvars($pkg->{"Provides"}, no_warn => 1),
+                              reduce_profiles => 1,
                               reduce_arch => 1, union => 1);
     if (defined $provides) {
 	foreach my $subdep ($provides->get_deps()) {
@@ -269,6 +270,7 @@
 	    msg_prefix => sprintf(_g("%s field of package %s: "), $field, $pkg->{Package}));
 	if (field_get_dep_type($field) eq 'normal') {
 	    $dep = deps_parse($field_value, use_arch => 1,
+                             reduce_profiles => 1,
 			      reduce_arch => $reduce_arch);
 	    error(_g("error occurred while parsing %s field: %s"), $field,
                   $field_value) unless defined $dep;
@@ -277,6 +279,7 @@
 	    push @seen_deps, $dep;
 	} else {
 	    $dep = deps_parse($field_value, use_arch => 1,
+                              reduce_profiles => 1,
                               reduce_arch => $reduce_arch, union => 1);
 	    error(_g("error occurred while parsing %s field: %s"), $field,
                   $field_value) unless defined $dep;
diff -Nru dpkg-1.16.12/scripts/dpkg-shlibdeps.pl dpkg-1.16.12~bpo70+1/scripts/dpkg-shlibdeps.pl
--- dpkg-1.16.12/scripts/dpkg-shlibdeps.pl	2013-09-30 16:47:58.000000000 +0200
+++ dpkg-1.16.12~bpo70+1/scripts/dpkg-shlibdeps.pl	2014-07-06 10:18:59.000000000 +0200
@@ -141,7 +141,7 @@
 my $fields = $control->get_source();
 my $build_depends = defined($fields->{"Build-Depends"}) ?
 		    $fields->{"Build-Depends"} : "";
-my $build_deps = deps_parse($build_depends, build_dep => 1, reduce_arch => 1);
+my $build_deps = deps_parse($build_depends, build_dep => 1, reduce_restrictions => 1);
 error(_g("error occurred while parsing %s"), "Build-Depends") unless defined $build_deps;
 
 my %dependencies;
diff -Nru apt-0.9.7.9+deb7u1/apt-pkg/deb/deblistparser.cc apt-0.9.7.9+deb7u1~bpo70+1/apt-pkg/deb/deblistparser.cc
--- apt-0.9.7.9+deb7u1/apt-pkg/deb/deblistparser.cc	2013-11-16 12:43:40.000000000 +0100
+++ apt-0.9.7.9+deb7u1~bpo70+1/apt-pkg/deb/deblistparser.cc	2014-07-06 11:30:51.000000000 +0200
@@ -473,6 +473,12 @@
 					string &Package,string &Ver,
 					unsigned int &Op, bool const &ParseArchFlags,
 					bool const &StripMultiArch)
+    { return ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, StripMultiArch, false); }
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+					string &Package,string &Ver,
+					unsigned int &Op, bool const &ParseArchFlags,
+					bool const &StripMultiArch,
+					bool const &ParseRestrictionsList)
 {
    // Strip off leading space
    for (;Start != Stop && isspace(*Start) != 0; Start++);
@@ -480,7 +486,8 @@
    // Parse off the package name
    const char *I = Start;
    for (;I != Stop && isspace(*I) == 0 && *I != '(' && *I != ')' &&
-	*I != ',' && *I != '|' && *I != '[' && *I != ']'; I++);
+	*I != ',' && *I != '|' && *I != '[' && *I != ']' &&
+	*I != '<' && *I != '>'; ++I);
    
    // Malformed, no '('
    if (I != Stop && *I == ')')
@@ -594,6 +601,53 @@
       }
 
       // Skip whitespace
+      for (;I != Stop && isspace(*I) != 0; I++);
+   }
+
+   if (ParseRestrictionsList == true)
+   {
+      // Parse a restrictions list
+      if (I != Stop && *I == '<')
+      {
+	 ++I;
+	 // malformed
+	 if (unlikely(I == Stop))
+	    return 0;
+
+	 const char *End = I;
+	 bool Found = false;
+	 bool NegRestriction = false;
+	 while (I != Stop)
+	 {
+	    // look for whitespace or ending '>'
+	    for (;End != Stop && !isspace(*End) && *End != '>'; ++End);
+
+	    if (unlikely(End == Stop))
+	       return 0;
+
+	    if (*I == '!')
+	    {
+	       NegRestriction = true;
+	       ++I;
+	    }
+
+	    if (*End++ == '>') {
+	       I = End;
+	       break;
+	    }
+
+	    I = End;
+	    for (;I != Stop && isspace(*I) != 0; I++);
+	 }
+
+	 if (NegRestriction == true)
+	    Found = !Found;
+
+	 if (Found == false)
+	    Package = ""; /* not for this restriction */
+      }
+
+      // Skip whitespace
       for (;I != Stop && isspace(*I) != 0; I++);
    }
 
diff -Nru apt-0.9.7.9+deb7u1/apt-pkg/deb/deblistparser.h apt-0.9.7.9+deb7u1~bpo70+1/apt-pkg/deb/deblistparser.h
--- apt-0.9.7.9+deb7u1/apt-pkg/deb/deblistparser.h	2013-03-01 11:51:21.000000000 +0100
+++ apt-0.9.7.9+deb7u1~bpo70+1/apt-pkg/deb/deblistparser.h	2014-07-06 11:30:51.000000000 +0200
@@ -72,11 +72,16 @@
    
    bool LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,FileFd &File,
 			std::string section);
-   
+
    static const char *ParseDepends(const char *Start,const char *Stop,
 			    std::string &Package,std::string &Ver,unsigned int &Op,
 			    bool const &ParseArchFlags = false,
 			    bool const &StripMultiArch = true);
+   static const char *ParseDepends(const char *Start,const char *Stop,
+			    std::string &Package,std::string &Ver,unsigned int &Op,
+			    bool const &ParseArchFlags, bool const &StripMultiArch,
+			    bool const &ParseRestrictionsList);
+
    static const char *ConvertRelation(const char *I,unsigned int &Op);
 
    debListParser(FileFd *File, std::string const &Arch = "");
diff -Nru apt-0.9.7.9+deb7u1/apt-pkg/deb/debsrcrecords.cc apt-0.9.7.9+deb7u1~bpo70+1/apt-pkg/deb/debsrcrecords.cc
--- apt-0.9.7.9+deb7u1/apt-pkg/deb/debsrcrecords.cc	2013-03-01 11:51:21.000000000 +0100
+++ apt-0.9.7.9+deb7u1~bpo70+1/apt-pkg/deb/debsrcrecords.cc	2014-07-06 11:30:51.000000000 +0200
@@ -90,7 +90,7 @@
       while (1)
       {
          Start = debListParser::ParseDepends(Start, Stop, 
-		     rec.Package,rec.Version,rec.Op,true, StripMultiArch);
+		     rec.Package,rec.Version,rec.Op,true, StripMultiArch,true);
 	 
          if (Start == 0) 
             return _error->Error("Problem parsing dependency: %s", fields[I]);
diff -Nru apt-0.9.7.9+deb7u1/debian/changelog apt-0.9.7.9+deb7u1~bpo70+1/debian/changelog
--- apt-0.9.7.9+deb7u1/debian/changelog	2013-11-16 12:47:12.000000000 +0100
+++ apt-0.9.7.9+deb7u1~bpo70+1/debian/changelog	2014-07-06 11:12:04.000000000 +0200
@@ -1,3 +1,19 @@
+apt (0.9.7.9+deb7u1~bpo70+1) wheezy-backports; urgency=low
+
+  * Non-maintainer upload.
+  * Minimal support for restriction list Build-Depends syntax extension
+      - the syntax is described at https://wiki.debian.org/BuildProfileSpec
+      - apt will correctly parse and interpret build profile annotations
+        in build dependencies of source packages
+      - it will not allow to set any build profiles and will always assume
+        that no build profile is set
+      - this allows apt to not throw an error when encountering source packages
+        that make use of build profiles in stable versions of Debian with apt
+        version 0.9.16.1 or later in which full support for build profiles
+        was implemented
+
+ -- Johannes Schauer <j.schauer@email.de>  Sun, 06 Jul 2014 08:46:48 +0000
+
 apt (0.9.7.9+deb7u1) wheezy; urgency=low
 
   * Non-maintainer upload.
diff -Nru apt-0.9.7.9+deb7u1/debian/libapt-pkg4.12.symbols apt-0.9.7.9+deb7u1~bpo70+1/debian/libapt-pkg4.12.symbols
--- apt-0.9.7.9+deb7u1/debian/libapt-pkg4.12.symbols	2013-03-01 11:51:21.000000000 +0100
+++ apt-0.9.7.9+deb7u1~bpo70+1/debian/libapt-pkg4.12.symbols	2014-07-06 11:30:51.000000000 +0200
@@ -369,6 +369,7 @@
  (c++)"debListParser::VersionHash()@Base" 0.8.0
  (c++)"debListParser::Architecture()@Base" 0.8.0
  (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&, bool const&)@Base" 0.8.0
+ (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&, bool const&, bool const&)@Base" 0.9.7.9+deb7u1~bpo70+1
  (c++)"debListParser::ParseDepends(pkgCache::VerIterator&, char const*, unsigned int)@Base" 0.8.0
  (c++)"debListParser::ParseProvides(pkgCache::VerIterator&)@Base" 0.8.0
  (c++)"debListParser::ArchitectureAll()@Base" 0.8.0
diff -Nru python-apt-0.8.8.2/debian/changelog python-apt-0.8.8.2~bpo70+1/debian/changelog
--- python-apt-0.8.8.2/debian/changelog	2013-03-14 21:25:26.000000000 +0100
+++ python-apt-0.8.8.2~bpo70+1/debian/changelog	2014-07-06 22:56:26.000000000 +0200
@@ -1,3 +1,19 @@
+python-apt (0.8.8.2~bpo70+1) wheezy-backports; urgency=medium
+
+  * Non-maintainer upload.
+  * Minimal support for restriction list Build-Depends syntax extension
+      - the syntax is described at https://wiki.debian.org/BuildProfileSpec
+      - apt will correctly parse and interpret build profile annotations
+        in build dependencies of source packages
+      - it will not allow to set any build profiles and will always assume
+        that no build profile is set
+      - this allows apt to not throw an error when encountering source packages
+        that make use of build profiles in stable versions of Debian with apt
+        version 0.9.16.1 or later in which full support for build profiles
+        was implemented
+
+ -- Johannes Schauer <j.schauer@email.de>  Sun, 06 Jul 2014 09:50:01 +0000
+
 python-apt (0.8.8.2) unstable; urgency=low
 
   [ David Prévot ]
diff -Nru python-apt-0.8.8.2/debian/control python-apt-0.8.8.2~bpo70+1/debian/control
--- python-apt-0.8.8.2/debian/control	2013-03-13 23:25:59.000000000 +0100
+++ python-apt-0.8.8.2~bpo70+1/debian/control	2014-07-06 22:56:44.000000000 +0200
@@ -10,7 +10,7 @@
                apt-utils,
                debhelper (>= 7.3.5),
                fakeroot,
-               libapt-pkg-dev (>= 0.8.11),
+               libapt-pkg-dev (= 0.9.7.9+deb7u1~bpo70+1),
                python-all-dev (>= 2.6.6-3~),
                python-all-dbg,
                python3-all-dev (>= 3.1.2-10~),
diff -Nru python-apt-0.8.8.2/python/apt_pkgmodule.cc python-apt-0.8.8.2~bpo70+1/python/apt_pkgmodule.cc
--- python-apt-0.8.8.2/python/apt_pkgmodule.cc	2013-03-13 23:31:33.000000000 +0100
+++ python-apt-0.8.8.2~bpo70+1/python/apt_pkgmodule.cc	2014-07-06 22:57:08.000000000 +0200
@@ -186,7 +186,7 @@
 "only contains those dependencies for the architecture set in the\n"
 "configuration variable APT::Architecture";
 static PyObject *RealParseDepends(PyObject *Self,PyObject *Args,
-                                  bool ParseArchFlags, std::string name,
+                                  bool ParseArchFlags, bool ParseRestrictionsList, std::string name,
                                   bool debStyle=false)
 {
    std::string Package;
@@ -210,7 +210,7 @@
 	 break;
 
       Start = debListParser::ParseDepends(Start,Stop,Package,Version,Op,
-					  ParseArchFlags, StripMultiArch);
+					  ParseArchFlags, StripMultiArch, ParseRestrictionsList);
       if (Start == 0)
       {
 	 PyErr_SetString(PyExc_ValueError,"Problem Parsing Dependency");
@@ -243,11 +243,11 @@
 }
 static PyObject *ParseDepends(PyObject *Self,PyObject *Args)
 {
-   return RealParseDepends(Self, Args, false, "parse_depends");
+   return RealParseDepends(Self, Args, false, false, "parse_depends");
 }
 static PyObject *ParseSrcDepends(PyObject *Self,PyObject *Args)
 {
-   return RealParseDepends(Self, Args, true, "parse_src_depends");
+   return RealParseDepends(Self, Args, true, true, "parse_src_depends");
 }
 #ifdef COMPAT_0_7
 static PyObject *ParseDepends_old(PyObject *Self,PyObject *Args)

Attachment: signature.asc
Description: signature


Reply to: