aboutsummaryrefslogtreecommitdiff
path: root/tests/pkg-system.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pkg-system.testscript')
-rw-r--r--tests/pkg-system.testscript911
1 files changed, 911 insertions, 0 deletions
diff --git a/tests/pkg-system.testscript b/tests/pkg-system.testscript
new file mode 100644
index 0000000..e8ad676
--- /dev/null
+++ b/tests/pkg-system.testscript
@@ -0,0 +1,911 @@
+# file : tests/pkg-system.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include common.testscript auth.testscript config.testscript remote.testscript
+
+# There is no pkg-system command, and this testscript contains tests for
+# various building scenarios that involves system packages. Note that by that
+# reason usage of $* is meaningless.
+#
+
+# Source repository:
+#
+# pkg-system
+# |-- foo-2.tar.gz -> libbar >= 2
+# |-- libbar-0+1.tar.gz
+# |-- libbar-1.tar.gz -> libbaz == 2
+# |-- libbar-2.tar.gz -> libbaz == 2
+# |-- libbaz-2.tar.gz
+# |-- t1
+# | |-- foo-2.tar.gz -> libbar >= 2
+# | |-- libbar-1.tar.gz -> libbaz == 2
+# | |-- libbar-2.tar.gz -> libbaz == 2
+# | |-- libbaz-2.tar.gz
+# | `-- repositories.manifest
+# |-- t2
+# | |-- foo-2.tar.gz -> libbar >= 2
+# | |-- libbar-0+1.tar.gz
+# | `-- repositories.manifest
+# `-- t3 -> t2 (prerequisite)
+# |-- foo-2.tar.gz -> libbar >= 2
+# `-- repositories.manifest
+
+# Prepare repositories used by tests if running in the local mode.
+#
++if ($remote != true)
+ rep_create += 2>!
+
+ cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages.manifest
+ cp -r $src/t2 $out/t2 && $rep_create $out/t2 &$out/t2/packages.manifest
+ cp -r $src/t3 $out/t3 && $rep_create $out/t3 &$out/t3/packages.manifest
+end
+
+pkg_build += -d cfg --yes
+pkg_drop += -d cfg --yes 2>!
+pkg_status += -d cfg
+rep_add += -d cfg 2>!
+rep_fetch += -d cfg --auth all --trust-yes 2>!
+rep_remove += -d cfg 2>!
+
+# Note that when we fetch a package from remote repository the bpkg stderr
+# contains fetch program progress output, that comes prior the informational
+# message.
+#
+: t1
+:
+{
+ +$clone_cfg && $rep_add $rep/t1 && $rep_fetch
+
+ : dup
+ :
+ : Test that passing package duplicates on the command line expectedly fails.
+ : Note that we unite all such tests into a single one for the sake of code
+ : (and not to think of too many ids for almost identical tests :-)).
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build 'sys:libbar' '?sys:libbar' 2>>EOE != 0;
+ error: duplicate package libbar
+ info: first mentioned as sys:libbar
+ info: second mentioned as ?sys:libbar
+ EOE
+
+ $pkg_build '?sys:libbar' 'sys:libbar' 2>>EOE != 0;
+ error: duplicate package libbar
+ info: first mentioned as ?sys:libbar
+ info: second mentioned as sys:libbar
+ EOE
+
+ $pkg_build '?sys:libbar' libbar 2>>EOE != 0;
+ error: duplicate package libbar
+ info: first mentioned as ?sys:libbar
+ info: second mentioned as libbar
+ EOE
+
+ $pkg_build libbar '?sys:libbar' 2>>EOE != 0;
+ error: duplicate package libbar
+ info: first mentioned as libbar
+ info: second mentioned as ?sys:libbar
+ EOE
+
+ $pkg_build 'sys:libbar' libbar 2>>EOE != 0;
+ error: duplicate package libbar
+ info: first mentioned as sys:libbar
+ info: second mentioned as libbar
+ EOE
+
+ $pkg_build libbar 'sys:libbar' 2>>EOE != 0
+ error: duplicate package libbar
+ info: first mentioned as libbar
+ info: second mentioned as sys:libbar
+ EOE
+ }
+
+ : syslibbar-foo-syslibbar2-libbar2
+ :
+ : The overall plan is to build sys:libbar/*, foo, then reconfigure
+ : sys:libbar/* to sys:libbar/2 and afterwards to libbar/2.
+ :
+ {
+ $clone_cfg;
+
+ # Build sys:libbar/*.
+ #
+ $pkg_build 'sys:libbar' 2>'configured sys:libbar/*';
+ $pkg_status libbar 1>'!libbar configured,system !* available 2 1';
+ $pkg_status libbaz 1>'libbaz available 2';
+
+ # Build foo with preconfigured sys:libbar/*.
+ #
+ $pkg_build foo 2>>~%EOE%;
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !* available 2 1';
+ $pkg_status libbaz >'libbaz available 2';
+
+ # Reconfigure sys:libbar/* to 2.
+ #
+ $pkg_build 'sys:libbar/2' 2>>~%EOE%;
+ disfigured foo/2
+ purged libbar/*
+ configured sys:libbar/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ # Reconfigure sys:libbar/2 to libbar/2.
+ #
+ $pkg_build libbar/2 2>>~%EOE%;
+ disfigured foo/2
+ purged libbar/2
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/2%
+ unpacked libbar/2
+ configured libbar/2
+ configured foo/2
+ %info: .+ is up to date%{2}
+ updated libbar/2
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured !2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : foo-syslibbar2
+ :
+ : Build foo and sys:libbar/2.
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build foo 'sys:libbar/2' 2>>~%EOE%;
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : syslibbar2-foo
+ :
+ : Build sys:libbar/2 and foo.
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build 'sys:libbar/2' foo 2>>~%EOE%;
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : libbar2-foo-syslibbar2
+ :
+ : The overall plan is to build libbar/2, then foo and sys:libbar/2.
+ :
+ {
+ $clone_cfg;
+
+ # Build libbar/2.
+ #
+ $pkg_build libbar/2 2>>~%EOE%;
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/2%
+ unpacked libbar/2
+ configured libbar/2
+ %info: .+ is up to date%
+ updated libbar/2
+ EOE
+
+ $pkg_status libbar >'!libbar configured !2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ # Build foo and sys:libbar/2.
+ #
+ $pkg_build foo 'sys:libbar/2' 2>>~%EOE%;
+ disfigured libbar/2
+ disfigured libbaz/2
+ purged libbaz/2
+ purged libbar/2
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : libbar2-foo-syslibbar
+ :
+ : The overall plan is to build libbar/2, then foo and sys:libbar.
+ :
+ {
+ $clone_cfg;
+
+ # Build libbar/2.
+ #
+ $pkg_build libbar/2 2>>~%EOE%;
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/2%
+ unpacked libbar/2
+ configured libbar/2
+ %info: .+ is up to date%
+ updated libbar/2
+ EOE
+
+ $pkg_status libbar >'!libbar configured !2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ # Build foo and sys:libbar.
+ #
+ $pkg_build foo 'sys:libbar' 2>>~%EOE%;
+ disfigured libbar/2
+ disfigured libbaz/2
+ purged libbaz/2
+ purged libbar/2
+ configured sys:libbar/*
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !* available 2 1';
+ $pkg_status libbaz >'libbaz available 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : syslibbar2-foo-libbar2-syslibbar2-libbar2
+ :
+ : The overall plan is to build sys:libbar/2, then foo and libbar/2, then
+ : reconfigure to sys:libbar/2 and afterwards to libbar/2.
+ :
+ {
+ $clone_cfg;
+
+ # Build sys:libbar/2.
+ #
+ $pkg_build 'sys:libbar/2' 2>'configured sys:libbar/2';
+ $pkg_status libbar >'!libbar configured,system !2';
+
+ # Build foo and libbar/2.
+ #
+ $pkg_build foo libbar/2 2>>~%EOE%;
+ purged libbar/2
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/2%
+ unpacked libbar/2
+ configured libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%{2}
+ updated libbar/2
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured !2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ # Build sys:libbar/2.
+ #
+ $pkg_build 'sys:libbar/2' 2>>~%EOE%;
+ disfigured foo/2
+ disfigured libbar/2
+ disfigured libbaz/2
+ purged libbaz/2
+ purged libbar/2
+ configured sys:libbar/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ # Build libbar/2.
+ #
+ $pkg_build libbar/2 2>>~%EOE%;
+ disfigured foo/2
+ purged libbar/2
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/2%
+ unpacked libbar/2
+ configured libbar/2
+ configured foo/2
+ %info: .+ is up to date%{2}
+ updated libbar/2
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured !2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : syslibbar1-foo-libbar
+ :
+ : The overall plan is to configure sys:libbar/1, then fail to build foo but
+ : succeed to build foo libbar.
+ :
+ {
+ $clone_cfg;
+
+ # Build sys:libbar/1.
+ #
+ $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1';
+ $pkg_status libbar 1>'!libbar configured,system !1 available 2';
+ $pkg_status libbaz 1>'libbaz available 2';
+
+ # Fail to build foo.
+ #
+ $pkg_build foo 2>>EOE != 0;
+ error: package foo dependency on (libbar >= 2) is forcing upgrade of sys:libbar/1 to libbar/2
+ info: package version sys:libbar/1 is held
+ info: explicitly request version upgrade to continue
+ info: while satisfying foo/2
+ EOE
+
+ # Build foo and libbar.
+ #
+ $pkg_build foo libbar 2>>~%EOE%;
+ purged libbar/1
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/2%
+ unpacked libbar/2
+ configured libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%{2}
+ updated libbar/2
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured 2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : foo-syslibbar
+ :
+ : Build foo and ?sys:libbar.
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build foo '?sys:libbar' 2>>~%EOE%;
+ configured sys:libbar/*
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !* available 2 1';
+ $pkg_status libbaz >'libbaz available 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : libbar1-foo-syslibbar2
+ :
+ : The overall plan is to configure libbar/1, then fail to build foo but
+ : succeed to build foo ?sys:libbar/2, and then foo sys:libbar/2.
+ :
+ {
+ $clone_cfg;
+
+ # Build libbar/1.
+ #
+ $pkg_build libbar/1 2>>~%EOE%;
+ %.*
+ %.*fetched libbaz/2%
+ unpacked libbaz/2
+ configured libbaz/2
+ %.*
+ %.*fetched libbar/1%
+ unpacked libbar/1
+ configured libbar/1
+ %info: .+ is up to date%
+ updated libbar/1
+ EOE
+
+ $pkg_status libbar >'!libbar configured !1 available 2';
+ $pkg_status libbaz >'libbaz configured 2';
+
+ # Fail to build foo.
+ #
+ $pkg_build foo 2>>EOE != 0;
+ error: package foo dependency on (libbar >= 2) is forcing upgrade of libbar/1 to 2
+ info: package version libbar/1 is held
+ info: explicitly request version upgrade to continue
+ info: while satisfying foo/2
+ EOE
+
+ # Build foo and ?sys:libbar/2.
+ #
+ $pkg_build foo '?sys:libbar/2' 2>>~%EOE%;
+ disfigured libbar/1
+ disfigured libbaz/2
+ purged libbaz/2
+ purged libbar/1
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ # Build foo and sys:libbar/2.
+ #
+ $pkg_build foo 'sys:libbar/2' 2>>~%EOE%;
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+ $pkg_status libbaz >'libbaz available 2';
+
+ $pkg_drop foo libbar
+ }
+
+ : upgrade-held
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build libbar 2>!;
+
+ $rep_remove $rep/t1 && $rep_fetch $rep/t2;
+
+ $pkg_build --upgrade 2>>EOE != 0;
+ error: libbar is not available in source
+ info: consider building it as sys:libbar if it is available from the system
+ EOE
+
+ $pkg_build 'sys:libbar' 2>>EOE;
+ disfigured libbar/2
+ disfigured libbaz/2
+ purged libbaz/2
+ purged libbar/2
+ configured sys:libbar/*
+ EOE
+
+ $pkg_build --upgrade 2>'info: nothing to build';
+
+ $pkg_drop libbar
+ }
+}
+
+: t2
+:
+{
+ +$clone_cfg && $rep_add $rep/t2 && $rep_fetch
+
+ : no-libbar
+ :
+ : Test that the following builds expectedly fails having no libbar available
+ : in source.
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build foo 2>>EOE != 0;
+ error: dependency libbar >= 2 of package foo is not available in source
+ info: specify ?sys:libbar if it is available from the system
+ info: while satisfying foo/2
+ EOE
+
+ $pkg_build foo libbar 2>>EOE != 0;
+ error: libbar is not available in source
+ info: specify sys:libbar if it is available from the system
+ EOE
+
+ $pkg_status foo >'foo available 2';
+ $pkg_status libbar >'libbar unknown'
+ }
+
+ : foo-syslibbar
+ :
+ : Build foo configuring sys:libbar.
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build foo 'sys:libbar' 2>>~%EOE%;
+ configured sys:libbar/*
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !*';
+
+ $pkg_drop foo libbar
+ }
+
+ : libbar1-foo-syslibbar2
+ :
+ : The overall plan is to configure sys:libbar/1, then fail to build foo, but
+ : succeed to build foo sys:libbar/2.
+ :
+ {
+ $clone_cfg;
+
+ # Build sys:libbar/1.
+ #
+ $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1';
+ $pkg_status libbar 1>'!libbar configured,system !1';
+
+ # Fail to build foo.
+ #
+ $pkg_build foo 2>>EOE != 0;
+ error: dependency libbar >= 2 of package foo is not available in source
+ info: sys:libbar/1 does not satisfy the constrains
+ info: while satisfying foo/2
+ EOE
+
+ # Build foo and sys:libbar/2.
+ #
+ $pkg_build foo 'sys:libbar/2' 2>>~%EOE%;
+ purged libbar/1
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'!libbar configured,system !2';
+
+ $pkg_drop foo libbar
+ }
+
+ : syslibbar2
+ :
+ : The overall plan is to fail to build foo sys:libbar/1, then configure
+ : sys:libbar/2 but still fail to build foo sys:libbar/1.
+ :
+ {
+ $clone_cfg;
+
+ # Fail to build foo and sys:libbar/1.
+ #
+ $pkg_build foo 'sys:libbar/1' 2>>EOE != 0;
+ error: dependency libbar >= 2 of package foo is not available in source
+ info: sys:libbar/1 does not satisfy the constrains
+ info: while satisfying foo/2
+ EOE
+
+ # Build sys:libbar/2.
+ #
+ $pkg_build 'sys:libbar/2' 2>'configured sys:libbar/2';
+ $pkg_status libbar 1>'!libbar configured,system !2';
+
+ # Still fail to build foo and sys:libbar/1.
+ #
+ $pkg_build foo 'sys:libbar/1' 2>>EOE != 0;
+ error: unable to satisfy constraints on package libbar
+ info: foo depends on (libbar >= 2)
+ info: command line depends on (libbar == 1)
+ info: available sys:libbar/2
+ info: available sys:libbar/1
+ info: explicitly specify libbar version to manually satisfy both constraints
+ info: while satisfying foo/2
+ EOE
+
+ $pkg_drop libbar
+ }
+
+ : syslibbar1
+ :
+ : The overall plan is to configure sys:libbar/1, then fail to build
+ : sys:libbar/1.1 foo.
+ :
+ {
+ $clone_cfg;
+
+ # Build sys:libbar/2.
+ #
+ $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1';
+ $pkg_status libbar 1>'!libbar configured,system !1';
+
+ # Fail to build sys:libbar/1.1 and foo.
+ #
+ $pkg_build 'sys:libbar/1.1' foo 2>>EOE != 0;
+ error: dependency libbar >= 2 of package foo is not available in source
+ info: sys:libbar/1.1 does not satisfy the constrains
+ info: while satisfying foo/2
+ EOE
+
+ $pkg_drop libbar
+ }
+
+ : foo-syslibbar-drop-foo
+ :
+ : The overall plan is to build foo ?sys:libbar, then drop foo and make sure
+ : libbar is purged as well.
+ :
+ {
+ $clone_cfg;
+
+ # Build foo and ?sys:libbar.
+ #
+ $pkg_build foo '?sys:libbar' 2>>~%EOE%;
+ configured sys:libbar/*
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !*';
+
+ # Drop foo.
+ #
+ $pkg_drop foo 2>>EOE;
+ disfigured foo
+ purged libbar
+ purged foo
+ EOE
+
+ $pkg_status foo >'foo available 2';
+ $pkg_status libbar --system >'libbar available sys:?'
+ }
+
+ : syslibbar1-foo-syslibbar-drop-foo
+ :
+ : The overall plan is to build sys:libbar/1, then fail to build foo but
+ : succeed to build foo ?sys:libbar, then drop foo and make sure libbar stays.
+ :
+ {
+ $clone_cfg;
+
+ # Build sys:libbar/1.
+ #
+ $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1';
+ $pkg_status libbar 1>'!libbar configured,system !1';
+
+ # Fail to build foo.
+ #
+ $pkg_build foo 2>>EOE != 0;
+ error: dependency libbar >= 2 of package foo is not available in source
+ info: sys:libbar/1 does not satisfy the constrains
+ info: while satisfying foo/2
+ EOE
+
+ # Build foo and '?sys:libbar/2'.
+ #
+ $pkg_build foo '?sys:libbar/2' 2>>~%EOE%;
+ purged libbar/1
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !2';
+
+ # Drop foo.
+ #
+ $pkg_drop foo 2>>EOE;
+ disfigured foo
+ purged libbar
+ purged foo
+ EOE
+
+ $pkg_status foo >'foo available 2';
+ $pkg_status libbar --system >'libbar available sys:?'
+ }
+}
+
+: t3
+:
+{
+ +$clone_cfg && $rep_add $rep/t3 && $rep_fetch
+
+ : no-libbar
+ :
+ : Test that the following builds expectedly fails having no libbar available
+ : in source.
+ :
+ {
+ $clone_cfg;
+
+ $pkg_build foo 2>>EOE != 0;
+ error: dependency libbar >= 2 of package foo is not available in source
+ info: specify ?sys:libbar if it is available from the system
+ info: while satisfying foo/2
+ EOE
+
+ $pkg_build 'sys:libbar/1' 2>>EOE != 0;
+ error: unknown package libbar
+ EOE
+
+ $pkg_build foo 'sys:libbar/1' 2>>EOE != 0;
+ error: unknown package libbar
+ EOE
+
+ $pkg_build foo '?sys:libbar/1' 2>>EOE != 0;
+ error: unable to satisfy constraints on package libbar
+ info: foo depends on (libbar >= 2)
+ info: command line depends on (libbar == 1)
+ info: specify libbar version to satisfy foo constraint
+ info: while satisfying foo/2
+ EOE
+
+ $pkg_status foo >'foo available 2';
+ $pkg_status libbar >'libbar unknown'
+ }
+
+ : syslibbar1-foo-syslibbar-drop-foo
+ :
+ : The overall plan is to build foo ?sys:libbar/2, fail to build sys:libbar
+ : and foo 'sys:libbar', but succeed to build foo ?sys:libbar/3 and foo
+ : ?sys:libbar.
+ :
+ {
+ $clone_cfg;
+
+ # Build foo '?sys:libbar/2'.
+ #
+ $pkg_build foo '?sys:libbar/2' 2>>~%EOE%;
+ configured sys:libbar/2
+ %.*
+ %.*fetched foo/2%
+ unpacked foo/2
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !2';
+
+ # Fail as libbar while being selected is still unknown (not present in t3
+ # repo).
+ #
+ $pkg_build 'sys:libbar' 2>'error: unknown package libbar' != 0;
+ $pkg_build foo 'sys:libbar' 2>'error: unknown package libbar' != 0;
+ $pkg_status foo 1>'!foo configured 2';
+ $pkg_status libbar 1>'libbar configured,system !2';
+
+ # Build foo and ?sys:libbar/3.
+ #
+ $pkg_build foo '?sys:libbar/3' 2>>~%EOE%;
+ disfigured foo/2
+ purged libbar/2
+ configured sys:libbar/3
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !3';
+
+ # Build foo and ?sys:libbar.
+ #
+ $pkg_build foo '?sys:libbar' 2>>~%EOE%;
+ disfigured foo/2
+ purged libbar/3
+ configured sys:libbar/*
+ configured foo/2
+ %info: .+ is up to date%
+ updated foo/2
+ EOE
+
+ $pkg_status foo >'!foo configured 2';
+ $pkg_status libbar >'libbar configured,system !*';
+
+ $pkg_drop foo
+ }
+}