summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build.pm66
-rwxr-xr-xcreatedirdeps6
-rw-r--r--debian/changelog6
-rwxr-xr-xexpanddeps53
-rwxr-xr-xinit_buildsystem9
-rw-r--r--packaging/build.changes5
-rw-r--r--packaging/build.spec6
7 files changed, 135 insertions, 16 deletions
diff --git a/Build.pm b/Build.pm
index 4277c46..787b656 100644
--- a/Build.pm
+++ b/Build.pm
@@ -586,11 +586,13 @@ sub get_cbinstalls { return @{[]}; }
sub readdeps {
my ($config, $pkginfo, @depfiles) = @_;
- my %requires;
local *F;
+ my %requires;
my %provides;
my %pkgconflicts;
my %pkgobsoletes;
+ my %recommends;
+ my %supplements;
my $dofileprovides = %{$config->{'fileprovides'} || {}};
for my $depfile (@depfiles) {
if (ref($depfile) eq 'HASH') {
@@ -599,6 +601,8 @@ sub readdeps {
$requires{$rr} = $depfile->{$rr}->{'requires'};
$pkgconflicts{$rr} = $depfile->{$rr}->{'conflicts'};
$pkgobsoletes{$rr} = $depfile->{$rr}->{'obsoletes'};
+ $recommends{$rr} = $depfile->{$rr}->{'recommends'};
+ $supplements{$rr} = $depfile->{$rr}->{'supplements'};
}
next;
}
@@ -640,7 +644,7 @@ sub readdeps {
}
my %ss;
@ss = grep {!$ss{$_}++} @ss;
- if ($s =~ /^(P|R|C|O):(.*)\.(.*)-\d+\/\d+\/\d+:$/) {
+ if ($s =~ /^(P|R|C|O|r|s):(.*)\.(.*)-\d+\/\d+\/\d+:$/) {
my $pkgid = $2;
my $arch = $3;
if ($1 eq "P") {
@@ -666,6 +670,16 @@ sub readdeps {
$pkginfo->{$pkgid}->{'obsoletes'} = \@ss if $pkginfo;
next;
}
+ if ($1 eq "r") {
+ $recommends{$pkgid} = \@ss;
+ $pkginfo->{$pkgid}->{'recommends'} = \@ss if $pkginfo;
+ next;
+ }
+ if ($1 eq "s") {
+ $supplements{$pkgid} = \@ss;
+ $pkginfo->{$pkgid}->{'supplements'} = \@ss if $pkginfo;
+ next;
+ }
}
}
close F;
@@ -689,6 +703,8 @@ sub readdeps {
$config->{'requiresh'} = \%requires;
$config->{'pkgconflictsh'} = \%pkgconflicts;
$config->{'pkgobsoletesh'} = \%pkgobsoletes;
+ $config->{'recommendsh'} = \%recommends;
+ $config->{'supplementsh'} = \%supplements;
makewhatprovidesh($config);
}
@@ -716,6 +732,8 @@ sub writedeps {
print $fh "R:$id".join(' ', @{$pkg->{'requires'}})."\n" if $pkg->{'requires'};
print $fh "C:$id".join(' ', @{$pkg->{'conflicts'}})."\n" if $pkg->{'conflicts'};
print $fh "O:$id".join(' ', @{$pkg->{'obsoletes'}})."\n" if $pkg->{'obsoletes'};
+ print $fh "r:$id".join(' ', @{$pkg->{'recommends'}})."\n" if $pkg->{'recommends'};
+ print $fh "s:$id".join(' ', @{$pkg->{'supplements'}})."\n" if $pkg->{'supplements'};
print $fh "I:$id".getbuildid($pkg)."\n";
}
@@ -751,6 +769,8 @@ sub forgetdeps {
delete $config->{'requiresh'};
delete $config->{'pkgconflictsh'};
delete $config->{'pkgobsoletesh'};
+ delete $config->{'recommendsh'};
+ delete $config->{'supplementsh'};
}
my %addproviders_fm = (
@@ -854,6 +874,17 @@ sub checkobsoletes {
return 0;
}
+sub todo2recommended {
+ my ($config, $recommended, $todo) = @_;
+ my $whatprovides = $config->{'whatprovidesh'};
+ my $pkgrecommends = $config->{'recommendsh'} || {};
+ for my $p (splice @$todo) {
+ for my $r (@{$pkgrecommends->{$p} || []}) {
+ $recommended->{$_} = 1 for @{$whatprovides->{$r} || addproviders($config, $r)}
+ }
+ }
+}
+
sub expand {
my ($config, @p) = @_;
@@ -863,6 +894,8 @@ sub expand {
my $prefer = $config->{'preferh'};
my $ignore = $config->{'ignoreh'};
my $ignoreconflicts = $config->{'expandflags:ignoreconflicts'};
+ my $ignoreignore;
+ my $userecommendsforchoices = 1;
my $whatprovides = $config->{'whatprovidesh'};
my $requires = $config->{'requiresh'};
@@ -880,8 +913,18 @@ sub expand {
}
@p = grep {!/^-/} @p;
- my %p; # expanded packages
my %aconflicts; # packages we are conflicting with
+ for (grep {/^!/} @p) {
+ my $r = /^!!/ ? substr($_, 2) : substr($_, 1);
+ my @q = @{$whatprovides->{$r} || addproviders($config, $r)};
+ @q = nevrmatch($config, $r, @q) if /^!!/;
+ $aconflicts{$_} = "is in BuildConflicts" for @q;
+ }
+ my %recommended; # recommended by installed packages
+ my @rec_todo; # installed todo
+
+ @p = grep {!/^[-!]/} @p;
+ my %p; # expanded packages
# add direct dependency packages. this is different from below,
# because we add packages even if the dep is already provided and
@@ -910,6 +953,7 @@ sub expand {
$aconflicts{$_} = "is obsoleted by installed $q[0]" for nevrmatch($config, $r, @{$whatprovides->{$r} || addproviders($config, $r)});
}
}
+ push @rec_todo, $q[0] if $userecommendsforchoices;
}
push @p, @directdepsend;
@@ -975,6 +1019,12 @@ sub expand {
last;
}
}
+ if ($doamb == 2) {
+ todo2recommended($config, \%recommended, \@rec_todo) if @rec_todo;
+ my @pq = grep {$recommended{$_}} @q;
+ print "recommended [@pq] among [@q]\n" if $expand_dbg;
+ @q = @pq if @pq;
+ }
if (@q > 1) {
if ($r ne $p) {
push @error, "have choice for $r needed by $p: @q";
@@ -996,6 +1046,7 @@ sub expand {
$aconflicts{$_} = "is obsoleted by installed $q[0]" for nevrmatch($config, $r, @{$whatprovides->{$r} || addproviders($config, $r)});
}
}
+ push @rec_todo, $q[0] if $userecommendsforchoices;
@error = ();
$doamb = 0;
}
@@ -1004,11 +1055,12 @@ sub expand {
next if @p; # still work to do
# only ambig stuff left
- if (@pamb && !$doamb) {
+ if (@pamb && ($doamb == 0 || $doamb == 1)) {
@p = @pamb;
@pamb = ();
- $doamb = 1;
- print "now doing undecided dependencies\n" if $expand_dbg;
+ todo2recommended($config, \%recommended, \@rec_todo) if @rec_todo;
+ $doamb = %recommended ? 2 : 3;
+ print "now doing undecided dependencies, $doamb = $doamb\n" if $expand_dbg;
next;
}
return undef, @error if @error;
@@ -1020,6 +1072,7 @@ sub order {
my ($config, @p) = @_;
my $requires = $config->{'requiresh'};
+ my $recommends = $config->{'recommendsh'};
my $whatprovides = $config->{'whatprovidesh'};
my %deps;
my %rdeps;
@@ -1117,6 +1170,7 @@ sub add_all_providers {
my ($config, @p) = @_;
my $whatprovides = $config->{'whatprovidesh'};
my $requires = $config->{'requiresh'};
+ my $recommends = $config->{'recommendsh'};
my %a;
for my $p (@p) {
for my $r (@{$requires->{$p} || [$p]}) {
diff --git a/createdirdeps b/createdirdeps
index 280e4f5..49bf09e 100755
--- a/createdirdeps
+++ b/createdirdeps
@@ -51,7 +51,7 @@ my %old;
if (defined($oldfile) && open(F, '<', $oldfile)) {
while (<F>) {
chomp;
- $old{$1} = $_ if /^([PRCOI]:[^ ]+): /;
+ $old{$1} = $_ if /^([PRrsCOI]:[^ ]+): /;
}
close F;
}
@@ -78,14 +78,14 @@ for my $dir (@ARGV) {
next if $seen{$idx};
$seen{$idx} = 1;
print "F:$idx: $path\n";
- for (qw{P R C O I}) {
+ for (qw{P R r s C O I}) {
print $old{"$_:$idx"}."\n" if $old{"$_:$idx"};
}
next;
}
}
}
- my $q = Build::query($path, 'addselfprovides' => 1, 'conflicts' => 1, 'evra' => 1, 'buildtime' => 1, 'alldeps' => 1);
+ my $q = Build::query($path, 'addselfprovides' => 1, 'conflicts' => 1, 'evra' => 1, 'buildtime' => 1, 'weakdeps' => 1);
next unless $q && defined($q->{'name'}) && defined($q->{'arch'}) && defined($q->{'version'});
my $idx = "$q->{'name'}.$q->{'arch'}-$id";
next if $seen{$idx};
diff --git a/debian/changelog b/debian/changelog
index 8a03c43..fa48aff 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+build (20150115-tizen20170114) unstable; urgency=high
+
+ * update tizen version to tizen20170114
+
+ -- SoonKyu Park <sk7.park@samsung.com> Sat, 14 Jan 2017 19:30:22 +0200
+
build (20150115-tizen20161231) unstable; urgency=high
* update tizen version to tizen20161231
diff --git a/expanddeps b/expanddeps
index 2dcd3eb..b40e4ad 100755
--- a/expanddeps
+++ b/expanddeps
@@ -126,7 +126,7 @@ if (defined($dist) && $dist ne '') {
$binarytype = $cf->{'binarytype'} if $cf->{'binarytype'} && $cf->{'binarytype'} ne 'UNDEFINED';
}
-my (%fn, %prov, %req, %con, %obs);
+my (%fn, %prov, %req, %con, %obs, %rec, %sup);
my %packs;
my %repo;
@@ -170,7 +170,7 @@ my %exportfilters = %{$cf->{'exportfilter'}};
open(F, '<', $rpmdeps) || die("$rpmdeps: $!\n");
# WARNING: the following code assumes that the 'I' tag comes last
-my ($pkgF, $pkgP, $pkgR, $pkgC, $pkgO);
+my ($pkgF, $pkgP, $pkgR, $pkgC, $pkgO, $pkgr, $pkgs);
my $verscmp = \&Build::Rpm::verscmp;
@@ -210,6 +210,8 @@ while(<F>) {
$pkgR = $2;
next if $req{$1};
$req{$1} = $2;
+ } elsif (/^r:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+ $pkgr = $2;
} elsif (/^C:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
$pkgC = $2;
next if $con{$1};
@@ -218,6 +220,10 @@ while(<F>) {
$pkgO = $2;
next if $obs{$1};
$obs{$1} = $2;
+ } elsif (/^r:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+ $pkgr = $2;
+ } elsif (/^s:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+ $pkgs = $2;
} elsif (/^I:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
my $r = 0;
if ($usehigherdeps) {
@@ -241,11 +247,16 @@ while(<F>) {
$fn{$i} = $pkgF;
$prov{$i} = $pkgP;
delete $req{$i};
+ delete $rec{$i};
delete $con{$i};
delete $obs{$i};
+ delete $rec{$i};
+ delete $sup{$i};
$req{$i} = $pkgR;
$con{$i} = $pkgC if defined $pkgC;
$obs{$i} = $pkgO if defined $pkgO;
+ $rec{$i} = $pkgr if defined $pkgr;
+ $sup{$i} = $pkgs if defined $pkgs;
} else {
next if $ids{$1};
$ids{$1} = $2;
@@ -255,6 +266,8 @@ while(<F>) {
undef $pkgR;
undef $pkgC;
undef $pkgO;
+ undef $pkgr;
+ undef $pkgs;
} elsif ($_ eq 'D:') {
%packs_done = %ids;
}
@@ -267,7 +280,7 @@ for my $arch (@archs) {
for my $pack (keys %packs) {
my $r = {};
- my (@s, $s, @pr, @re, @co, @ob);
+ my (@s, $s, @pr, @re, @co, @ob, @rc, @su);
@s = split(' ', $prov{$packs{$pack}} || '');
while (@s) {
$s = shift @s;
@@ -324,10 +337,44 @@ for my $pack (keys %packs) {
splice(@s, 0, 2);
}
}
+ @s = split(' ', $rec{$packs{$pack}} || '');
+ while (@s) {
+ $s = shift @s;
+ next if !$dofileprovides && $s =~ /^\//;
+ if ($s =~ /^rpmlib\(/) {
+ splice(@s, 0, 2);
+ next;
+ }
+ push @rc, $s;
+ while (@s && $s[0] =~ /^[\(<=>|]/) {
+ $rc[-1] .= " $s[0] $s[1]";
+ $rc[-1] =~ s/ \((.*)\)/ $1/;
+ $rc[-1] =~ s/(<|>){2}/$1/;
+ splice(@s, 0, 2);
+ }
+ }
+ @s = split(' ', $sup{$packs{$pack}} || '');
+ while (@s) {
+ $s = shift @s;
+ next if !$dofileprovides && $s =~ /^\//;
+ if ($s =~ /^rpmlib\(/) {
+ splice(@s, 0, 2);
+ next;
+ }
+ push @su, $s;
+ while (@s && $s[0] =~ /^[\(<=>|]/) {
+ $su[-1] .= " $s[0] $s[1]";
+ $su[-1] =~ s/ \((.*)\)/ $1/;
+ $su[-1] =~ s/(<|>){2}/$1/;
+ splice(@s, 0, 2);
+ }
+ }
$r->{'provides'} = \@pr;
$r->{'requires'} = \@re;
$r->{'conflicts'} = \@co;
$r->{'obsoletes'} = \@ob;
+ $r->{'recommends'} = \@rc;
+ $r->{'supplements'} = \@su;
$repo{$pack} = $r;
}
diff --git a/init_buildsystem b/init_buildsystem
index 9d3fd80..2ed0473 100755
--- a/init_buildsystem
+++ b/init_buildsystem
@@ -978,8 +978,13 @@ for PKG in $MAIN_LIST ; do
continue
fi
fi
-
- PKGID=$(perl -I$BUILD_DIR -MBuild -e Build::showquery "$BUILD_ROOT/.init_b_cache/rpms/$PKG.$PSUF" buildid)
+
+ # revert use rpm to query pkgid if building rpm package
+ if test "$PSUF" != "rpm" ; then
+ PKGID=$(perl -I$BUILD_DIR -MBuild -e Build::showquery "$BUILD_ROOT/.init_b_cache/rpms/$PKG.$PSUF" buildid)
+ else
+ PKGID=`rpm -qp --qf "$RPMIDFMT" $RPMCHECKOPTS_HOST $BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm`
+ fi
if test -f $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG ; then
read OLDPKGID < $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG
diff --git a/packaging/build.changes b/packaging/build.changes
index 29a4d9c..f6d1350 100644
--- a/packaging/build.changes
+++ b/packaging/build.changes
@@ -1,4 +1,9 @@
-------------------------------------------------------------------
+Sat Jan 14 19:30:00 CST 2017 - sk7.park@samsung.com
+
+- update tizen version to tizen20170114
+
+-------------------------------------------------------------------
Sat Dec 31 19:30:00 CST 2016 - sk7.park@samsung.com
- update tizen version to tizen20161231
diff --git a/packaging/build.spec b/packaging/build.spec
index fbf5b77..adc331f 100644
--- a/packaging/build.spec
+++ b/packaging/build.spec
@@ -72,7 +72,7 @@ Requires: build-mkbaselibs
%if 0%{?suse_version} > 1120 || 0%{?mdkversion}
Recommends: build-mkdrpms
%endif
-Provides: tizen-build = 20161231
+Provides: tizen-build = 20170114
%description
This package provides a script for building RPMs for SUSE Linux in a
chroot environment.
@@ -116,7 +116,7 @@ Group: Development/Tools/Building
Requires: build
BuildRequires: gcc
BuildRequires: glibc-devel
-Provides: tizen-build-initvm-%{initvm_arch} = 20161231
+Provides: tizen-build-initvm-%{initvm_arch} = 20170114
Obsoletes: build-initvm
%if 0%{?suse_version}
BuildRequires: glibc-devel-static
@@ -194,6 +194,8 @@ test -e default.conf
/usr/lib/build/initvm.*
%changelog
+* Sat Jan 14 2017 sk7.park@samsung.com
+- update tizen version to tizen20170114
* Sat Dec 31 2016 sk7.park@samsung.com
- update tizen version to tizen20161231
* Wed Sep 28 2016 sk7.park@samsung.com