# file : tests/pkg-build.testscript # license : MIT; see accompanying LICENSE file .include common.testscript \ config.testscript \ remote.testscript \ remote-git.testscript # Source repository: # # pkg-build # |-- libbar-1.0.0.tar.gz -> libfoo # |-- libbaz-1.1.0.tar.gz -> libfoo, libbar # |-- libfix-0.0.1.tar.gz # |-- libfoo-0.0.1.tar.gz -> libfix # |-- libfoo-1.0.0.tar.gz # | # |-- libfoo-1.1.0 # | |-- build # | | `-- bootstrap.build # | |-- buildfile # | `-- manifest # | # |-- libfoo-1.1.0.tar.gz # |-- libfoo-1.2.0.tar.gz # | # |-- t0a # | |-- libbar-0.0.1.tar.gz -> libbaz == 0.0.1 # | |-- libbaz-0.0.1.tar.gz -> libfox # | |-- libbaz-0.0.3.tar.gz -> libfoo # | |-- libbox-0.0.1.tar.gz -> libbaz # | |-- libfix-0.0.1.tar.gz # | |-- libfoo-0.0.1.tar.gz -> libfix # | |-- libfox-0.0.1.tar.gz # | `-- repositories.manifest # | # |-- t0b # | |-- libbar-0.0.2.tar.gz -> libbaz <= 0.0.2 # | |-- libbaz-0.0.2.tar.gz -> libfoo # | |-- libbiz-0.0.2.tar.gz -> libbaz <= 0.0.3 # | |-- libfoo-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t0c # | |-- libbar-0.0.3.tar.gz -> libbaz # | |-- libbar-1.0.0.tar.gz -> libfoo # | |-- libbaz-0.0.3.tar.gz -> libfoo # | |-- libbaz-0.0.4.tar.gz # | |-- libbaz-0.1.0.tar.gz # | |-- libbox-0.0.1.tar.gz -> libbaz # | |-- libfix-0.0.3.tar.gz -> libbaz >= 0.0.3 # | |-- libfoo-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t0d # | |-- libbiz-0.0.1.tar.gz -> libbox, libfox # | |-- libbox-0.0.2.tar.gz -> libfoo == 1.0.0 # | |-- libfix-0.0.1.tar.gz # | |-- libfox-0.0.2.tar.gz -> libfoo == 0.0.1 # | |-- libfoo-0.0.1.tar.gz -> libfix # | |-- libfoo-1.0.0.tar.gz # | |-- libfox-0.0.1.tar.gz # | `-- repositories.manifest # | # |-- t1 # | |-- libfoo-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t2 # | |-- libbar-1.0.0.tar.gz -> libfoo # | |-- libfoo-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t3 -> t2 (prerequisite repository) # | |-- libbaz-1.0.0.tar.gz -> libbar # | |-- libfox-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t4a # | |-- libfoo-1.1.0.tar.gz # | `-- repositories.manifest # | # |-- t4b -> t4a (prerequisite repository) # | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0 # | `-- repositories.manifest # | # |-- t4c -> t4b (prerequisite repository) # | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar # | |-- libfoo-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t4d -> t4c (complement repository) # | |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz # | |-- libfox-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t4e # | |-- libfoo-1.1.0+1.tar.gz # | `-- repositories.manifest # | # |-- t5 # | |-- libbar-1.2.0.tar.gz # | `-- repositories.manifest # | # |-- t6 # | |-- libBar-2.0.0.tar.gz # | `-- repositories.manifest # | # |-- libhello-1.0.0 # | |-- build # | | |-- bootstrap.build # | | |-- export.build # | | `-- root.build # | `-- * # | # |-- t7a # | |-- libbaz-1.0.0.tar.gz # | |-- libbuild2-bar-1.0.0.tar.gz # | |-- foo-1.0.0.tar.gz -> * libbuild2-bar ^1.0.0, libbaz ^1.0.0 # | |-- libbuild2-foo-1.0.0.tar.gz -> libbaz ^1.0.0 # | |-- libbiz-1.0.0.tar.gz -> * libbuild2-foo ^1.0.0, * foo ^1.0.0, # | | libbaz ^1.0.0 # | |-- libbuz-1.0.0.tar.gz -> * libbuild2-foo ^1.0.0, * foo ^1.0.0 # | |-- libbix-1.0.0.tar.gz -> libbiz ^1.0.0, libbuz ^1.0.0 # | |-- libbar-1.0.0.tar.gz -> * foo ^1.0.0, libbaz ^1.0.0 # | |-- libbox-1.0.0.tar.gz -> * foo ^1.0.0, libbaz ^1.0.0 # | |-- libfax-1.0.0.tar.gz # | |-- libfix-1.0.0.tar.gz -> libbar ^1.0.0, libbox ^1.0.0, # | | libfax ^1.0.0 # | `-- repositories.manifest # | # |-- t7b -> t7a (complement repository) # | |-- libbaz-1.1.0.tar.gz # | |-- foo-1.1.0.tar.gz -> libbaz ^1.1.0 # | |-- libbar-1.1.0.tar.gz -> * foo ^1.1.0, libbaz ^1.0.0 # | |-- libbox-1.1.0.tar.gz -> * foo ^1.0.0 # | `-- repositories.manifest # | # `-- git # |-- libbar.git -> style-basic.git (prerequisite repository) # |-- libbaz.git # `-- style-basic.git posix = ($cxx.target.class != 'windows') # Prepare repositories used by tests if running in the local mode. # +if! $remote rep_create += 2>! cp -r $src/t0a $out/t0a && $rep_create $out/t0a &$out/t0a/packages.manifest cp -r $src/t0b $out/t0b && $rep_create $out/t0b &$out/t0b/packages.manifest cp -r $src/t0c $out/t0c && $rep_create $out/t0c &$out/t0c/packages.manifest cp -r $src/t0d $out/t0d && $rep_create $out/t0d &$out/t0d/packages.manifest 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 cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages.manifest cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages.manifest cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages.manifest cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages.manifest cp -r $src/t4e $out/t4e && $rep_create $out/t4e &$out/t4e/packages.manifest cp -r $src/t5 $out/t5 && $rep_create $out/t5 &$out/t5/packages.manifest cp -r $src/t6 $out/t6 && $rep_create $out/t6 &$out/t6/packages.manifest cp -r $src/t7a $out/t7a && $rep_create $out/t7a &$out/t7a/packages.manifest cp -r $src/t7b $out/t7b && $rep_create $out/t7b &$out/t7b/packages.manifest # Create git repositories. # $git_extract $src/git/style-basic.tar $git_extract $src/git/libbar.tar &$out_git/state0/*** $git_extract $src/git/libbaz.tar &$out_git/state1/*** end config_cxx = config.cxx=$quote($recall($cxx.path) $cxx.config.mode, true) cfg_create += 2>! cfg_link += 2>! pkg_configure += -d cfg $config_cxx 2>! pkg_disfigure += -d cfg pkg_drop += -d cfg --yes 2>! pkg_fetch += -d cfg 2>! pkg_purge += -d cfg pkg_status += -d cfg pkg_unpack += -d cfg 2>! rep_add += -d cfg 2>! rep_remove += -d cfg 2>! rep_fetch += -d cfg --auth all --trust-yes 2>! rep_list += -d cfg # Let's disable the progress indication that complicates stderr output # validation. # test.options += --no-progress : libfoo : : Test building different versions of libfoo. : { test.arguments += --print-only : no-name : $clone_root_cfg; $* 2>>EOE != 0 error: package name argument expected info: run 'bpkg help pkg-build' for more information EOE : version : { : empty : $clone_root_cfg; $* libfoo/ 2>>EOE != 0 error: empty package version in 'libfoo/' EOE : earliest : $clone_root_cfg; $* libfoo/1.0.0- 2>>EOE != 0 error: invalid package version '1.0.0-' in 'libfoo/1.0.0-': earliest version EOE : earliest-constraint : $clone_root_cfg; $* -- 'libfoo == 1.0.0-' 2>>EOE != 0 error: invalid package version constraint '== 1.0.0-' in 'libfoo == 1.0.0-': invalid version: equal version endpoints are earliest EOE : stub : $clone_root_cfg; $* libfoo/0+1 2>>EOE != 0 error: invalid package version '0+1' in 'libfoo/0+1': stub version EOE : stub-constraint : $clone_root_cfg; $* -- 'libfoo [0 1]' 2>>EOE != 0 error: invalid package version constraint '[0 1]' in 'libfoo [0 1]': endpoint is a stub EOE } : unknown-package : $clone_root_cfg; $* libfoo 2>>/EOE != 0 error: unknown package libfoo info: configuration cfg/ has no repositories info: use 'bpkg rep-add' to add a repository EOE : unknown-package-ver : $clone_root_cfg; $* libfoo/1.0.0 2>>/EOE != 0 error: unknown package libfoo info: configuration cfg/ has no repositories info: use 'bpkg rep-add' to add a repository EOE : unknown-package-constraint : $clone_root_cfg; $* 'libfoo>1.0.0' 2>>/EOE != 0 error: unknown package libfoo info: configuration cfg/ has no repositories info: use 'bpkg rep-add' to add a repository EOE : archive : $clone_root_cfg; $* $src/libfoo-1.1.0.tar.gz >'new libfoo/1.1.0' : dir : $clone_root_cfg; $* $src/libfoo-1.1.0/ >'new libfoo/1.1.0' : unpacked-dir : { $clone_root_cfg && $pkg_unpack -e $src/libfoo-1.1.0; $* libfoo >'update libfoo/1.1.0'; $* libfoo/1.1.0 >'update libfoo/1.1.0'; $* -- 'libfoo == 1.1.0' >'update libfoo/1.1.0'; $* libfoo libfoo >'update libfoo/1.1.0'; $* libfoo libfoo/1.1.0 2>>EOE != 0; error: duplicate package libfoo info: first mentioned as libfoo info: second mentioned as libfoo/1.1.0 EOE $* libfoo/1.1.0 libfoo 2>>EOE != 0; error: duplicate package libfoo info: first mentioned as libfoo/1.1.0 info: second mentioned as libfoo EOE $* libfoo/1.1.0 libfoo/1.1.0 >'update libfoo/1.1.0'; $* libfoo/1.0.0 2>>/EOE != 0; error: unknown package libfoo info: configuration cfg/ has no repositories info: use 'bpkg rep-add' to add a repository EOE $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : t1 : { +$clone_root_cfg && $rep_add $rep/t1 && $rep_fetch : downgrade : { $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; $* libfoo >'update libfoo/1.1.0'; $* libfoo/1.0.0 >'downgrade libfoo/1.0.0'; $* libfoo/0.0.1 2>>EOE != 0; error: libfoo/0.0.1 is not available in source info: specify sys:libfoo/0.0.1 if it is available from the system EOE $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : downgrade-constraint : { $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; $* libfoo >'update libfoo/1.1.0'; $* 'libfoo<1.1.0' >'downgrade libfoo/1.0.0'; $* 'libfoo<1.0.0' 2>>EOE != 0; error: 'libfoo < 1.0.0' is not available in source info: specify sys:libfoo/... if it is available from the system EOE $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : upgrade : { $clone_cfg; $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; $pkg_fetch -e $src/libfix-0.0.1.tar.gz && $pkg_unpack libfix; $* libfoo >'upgrade libfoo/1.0.0'; $* libfoo/0.0.1 >>EOE; update libfix/0.0.1 (required by libfoo) update libfoo/0.0.1 EOE $* libfoo/1.1.0 2>>EOE != 0; error: libfoo/1.1.0 is not available in source info: specify sys:libfoo/1.1.0 if it is available from the system EOE $pkg_purge libfoo 2>'purged libfoo/0.0.1'; $pkg_purge libfix 2>'purged libfix/0.0.1' } : upgrade-failure : { $clone_cfg; $* libfoo >'new libfoo/1.0.0'; $* libfoo/1.0.0 >'new libfoo/1.0.0'; $* libfoo/1.1.0 2>>EOE != 0 error: libfoo/1.1.0 is not available in source info: specify sys:libfoo/1.1.0 if it is available from the system EOE } } : revision : { +$clone_root_cfg +$rep_add $rep/t4e && $rep_fetch : latest : { $clone_cfg; $* libfoo/1.1.0 >>EOO new libfoo/1.1.0+1 EOO } : zero : { $clone_cfg; $* libfoo/1.1.0+0 >>EOO new libfoo/1.1.0 EOO } } } : libbar-libfoo : : Test building libbar that depends on libfoo. : { test.arguments += --print-only : unknown-dependency : $clone_root_cfg; $* $src/libbar-1.0.0.tar.gz 2>>EOE != 0 error: unknown dependency libfoo of package libbar info: while satisfying libbar/1.0.0 EOE : unknown-dependency-config : : As above but with a linked configuration. : $clone_root_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* $src/libbar-1.0.0.tar.gz +{ --config-id 1 } 2>>~%EOE% != 0 %error: unknown dependency libfoo of package libbar \[cfg2.\]% %info: while satisfying libbar/1.0.0 \[cfg2.\]% EOE : t2 : { +$clone_root_cfg && $rep_add $rep/t2 && $rep_fetch : build-dependency : { $clone_cfg; $* libbar >>EOO; new libfoo/1.0.0 (required by libbar) new libbar/1.0.0 EOO $* libbar libfoo >>EOO; new libfoo/1.0.0 new libbar/1.0.0 EOO $* libbar libfoo/1.0.0 >>EOO; new libfoo/1.0.0 new libbar/1.0.0 EOO $* libbar libfoo libbar/1.0.0 2>>EOE != 0; error: duplicate package libbar info: first mentioned as libbar info: second mentioned as libbar/1.0.0 EOE $* libbar libfoo/1.1.0 2>>EOE != 0 error: libfoo/1.1.0 is not available in source info: specify sys:libfoo/1.1.0 if it is available from the system EOE } : upgrade-dependency : { $clone_cfg; $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; $pkg_fetch -e $src/libfix-0.0.1.tar.gz && $pkg_unpack libfix; $* libbar >>EOO; update libfix/0.0.1 (required by libfoo) update libfoo/0.0.1 (required by libbar) new libbar/1.0.0 EOO $* libbar libfoo >>EOO; upgrade libfoo/1.0.0 new libbar/1.0.0 EOO $* libbar libfoo/0.0.1 >>EOO; update libfix/0.0.1 (required by libfoo) update libfoo/0.0.1 new libbar/1.0.0 EOO $pkg_purge libfoo 2>'purged libfoo/0.0.1'; $pkg_purge libfix 2>'purged libfix/0.0.1' } : downgrade-dependency : { $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; $* libbar >>EOO; update libfoo/1.1.0 (required by libbar) new libbar/1.0.0 EOO $* libbar libfoo >>EOO; update libfoo/1.1.0 new libbar/1.0.0 EOO $* libbar libfoo/1.0.0 >>EOO; downgrade libfoo/1.0.0 new libbar/1.0.0 EOO $pkg_purge libfoo 2>'purged libfoo/1.1.0' } } : dependency-revision : { +$clone_root_cfg && $rep_add $rep/t4e && $rep_fetch : latest : { $clone_cfg; $* libbar/1.1.0 >>EOO new libfoo/1.1.0+1 (required by libbar) new libbar/1.1.0 EOO } : latest-config : : As above but with a linked configuration. : { $clone_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* "libbar/1.1.0@$rep/t4e" +{ --config-id 1 } --trust-yes >>~%EOO% 2>! %new libfoo/1.1.0\+1 \[cfg2.\] \(required by libbar \[cfg2.\]\)% %new libbar/1.1.0 \[cfg2.\]% EOO } : zero : { $clone_cfg; $* libbar/1.1.1 >>EOO new libfoo/1.1.0 (required by libbar) new libbar/1.1.1 EOO } } } : libbaz-libbar : : Test building libbaz that depends on libbar; libbar is in prerequisite : repository. : { test.arguments += --print-only : t3 : { +$clone_root_cfg && $rep_add $rep/t3 && $rep_fetch : prerequisites-build-failure : : Fail to build packages that are only in prerequisite repository. : { $clone_cfg; $* libfoo 2>>EOE != 0; error: unknown package libfoo EOE $* libbar 2>>EOE != 0; error: unknown package libbar EOE $* libbaz libbar 2>>EOE != 0 error: unknown package libbar EOE } : prerequisites-build : $clone_cfg; $* libbaz >>EOO new libfoo/1.0.0 (required by libbar) new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : different-build-order : { +$clone_cfg && $rep_add $rep/t2 && $rep_fetch : fox-foo : $clone_cfg; $* libfox libfoo >>EOO new libfox/1.0.0 new libfoo/1.0.0 EOO : foo-fox : $clone_cfg; $* libfoo libfox >>EOO new libfoo/1.0.0 new libfox/1.0.0 EOO : baz-foo : $clone_cfg; $* libbaz libfoo >>EOO new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : foo-baz : $clone_cfg; $* libfoo libbaz >>EOO new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : baz-fox : $clone_cfg; $* libbaz libfox >>EOO new libfoo/1.0.0 (required by libbar) new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 new libfox/1.0.0 EOO : fox-baz : $clone_cfg; $* libfox libbaz >>EOO new libfox/1.0.0 new libfoo/1.0.0 (required by libbar) new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : fox-foo-baz : $clone_cfg; $* libfox libfoo libbaz >>EOO new libfox/1.0.0 new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : fox-baz-foo : $clone_cfg; $* libfox libbaz libfoo >>EOO new libfox/1.0.0 new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : foo-fox-baz : $clone_cfg; $* libfoo libfox libbaz >>EOO new libfoo/1.0.0 new libfox/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : foo-baz-fox : $clone_cfg; $* libfoo libbaz libfox >>EOO new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 new libfox/1.0.0 EOO : baz-fox-foo : : This one is contradictory: baz before fox but fox before foo. : $clone_cfg; $* libbaz libfox libfoo >>EOO new libfox/1.0.0 new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 EOO : baz-foo-fox : $clone_cfg; $* libbaz libfoo libfox >>EOO new libfoo/1.0.0 new libbar/1.0.0 (required by libbaz) new libbaz/1.0.0 new libfox/1.0.0 EOO : baz-foo-bar : $clone_cfg; $* libbaz libfoo libbar >>EOO new libfoo/1.0.0 new libbar/1.0.0 new libbaz/1.0.0 EOO : baz-bar-foo : $clone_cfg; $* libbaz libbar libfoo >>EOO new libfoo/1.0.0 new libbar/1.0.0 new libbaz/1.0.0 EOO } } } : libbaz-libfoo-libbar : : Test building libbaz that depends on libfoo and libbar; libbar depends on : libfoo == 1.1.0. : { test.arguments += --print-only : t4c : { +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch : baz : $clone_cfg; $* libbaz >>EOO new libfoo/1.1.0 (required by libbar, libbaz) new libbar/1.1.0 (required by libbaz) new libbaz/1.1.0 EOO : foo-baz : $clone_cfg; $* libfoo libbaz >>EOO new libfoo/1.1.0 new libbar/1.1.0 (required by libbaz) new libbaz/1.1.0 EOO : unable-satisfy : $clone_cfg; $* libfoo/1.0.0 libbaz 2>>EOE != 0 error: unable to satisfy constraints on package libfoo info: command line depends on (libfoo == 1.0.0) info: libbar depends on (libfoo == 1.1.0) info: available libfoo/1.0.0 info: available libfoo/1.1.0 info: explicitly specify libfoo version to manually satisfy both constraints info: while satisfying libbar/1.1.0 info: while satisfying libbaz/1.1.0 EOE : unable-satisfy-config : : As above but with a linked configuration. : $clone_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $rep_add -d cfg2 $rep/t4c && $rep_fetch -d cfg2; $* libbaz ?libbar +{ --config-id 1 } libfoo/1.0.0 +{ --config-id 1 } 2>>~%EOE% != 0 error: unable to satisfy constraints on package libfoo info: command line depends on (libfoo == 1.0.0) % info: libbar \[cfg2.\] depends on \(libfoo == 1.1.0\)% info: available libfoo/1.0.0 info: available libfoo/1.1.0 info: explicitly specify libfoo version to manually satisfy both constraints %info: while satisfying libbar/1.1.0 \[cfg2.\]% info: while satisfying libbaz/1.1.0 EOE : not-available : $clone_cfg; $* libfoo/1.1.0 libbaz 2>>EOE != 0 error: libfoo/1.1.0 is not available in source info: specify sys:libfoo/1.1.0 if it is available from the system EOE : upgrade : { $clone_cfg; $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; $pkg_fetch -e $src/libfix-0.0.1.tar.gz && $pkg_unpack libfix; $* libbaz >>EOO; upgrade libfoo/1.1.0 (required by libbar, libbaz) new libbar/1.1.0 (required by libbaz) new libbaz/1.1.0 EOO $pkg_purge libfoo 2>'purged libfoo/0.0.1'; $pkg_purge libfix 2>'purged libfix/0.0.1' } : downgrade : { $clone_cfg; $pkg_fetch -e $src/libfoo-1.2.0.tar.gz && $pkg_unpack libfoo; $* libbaz >>EOO; downgrade libfoo/1.1.0 (required by libbar, libbaz) new libbar/1.1.0 (required by libbaz) new libbaz/1.1.0 EOO $rep_add $rep/t4a && $rep_fetch; $* libfoo/1.1.0 libbaz >>EOO; downgrade libfoo/1.1.0 new libbar/1.1.0 (required by libbaz) new libbaz/1.1.0 EOO $pkg_purge libfoo 2>'purged libfoo/1.2.0' } : unable-downgrade : : Test that dependent prevents up/downgrade that would break dependency : constraints. : { $clone_cfg; $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo && $pkg_configure libfoo; $pkg_fetch libbar/1.1.0 && $pkg_unpack libbar && $pkg_configure libbar; $* libfoo-1.2.0.tar.gz 2>>EOE != 0; error: unknown package libfoo-1.2.0.tar.gz EOE $* libfoo/1.0.0 2>>EOE != 0; error: unable to downgrade package libfoo/1.1.0 to 1.0.0 info: because package libbar depends on (libfoo == 1.1.0) info: explicitly request up/downgrade of package libbar info: or explicitly specify package libfoo version to manually satisfy these constraints EOE $* libfoo/1.1.0 --keep-unused >'update libfoo/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : unable-downgrade-config : : As above but with a linked configuration. : { $clone_cfg; $cfg_create -d cfg2 &cfg2/***; $rep_add -d cfg2 $rep/t4c && $rep_fetch -d cfg2; $cfg_link -d cfg2 cfg; $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo && $pkg_configure libfoo; $pkg_fetch libbar/1.1.0 && $pkg_unpack libbar && $pkg_configure libbar; $* libfoo-1.2.0.tar.gz 2>>EOE != 0; error: unknown package libfoo-1.2.0.tar.gz EOE test.arguments = $regex.apply($test.arguments, cfg, cfg2); $* libfoo/1.0.0 +{ --config-id 1 } 2>>~%EOE% != 0; %error: unable to downgrade package libfoo/1.1.0 \[cfg.\] to 1.0.0% % info: because package libbar \[cfg.\] depends on \(libfoo == 1.1.0\)% info: explicitly request up/downgrade of package libbar info: or explicitly specify package libfoo version to manually satisfy these constraints EOE test.arguments = $regex.apply($test.arguments, cfg2, cfg); $* libfoo/1.1.0 --keep-unused >'update libfoo/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } } : dependent-reconfiguration : { test.arguments += --keep-unused +$clone_root_cfg +$pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo +$pkg_configure libfoo +$pkg_fetch -e $src/libbar-1.0.0.tar.gz && $pkg_unpack libbar +$pkg_configure libbar +$pkg_fetch -e $src/libbaz-1.1.0.tar.gz && $pkg_unpack libbaz +$pkg_configure libbaz +$rep_add $rep/t4a && $rep_add $rep/t4b && $rep_fetch : bar : : Only libbar/1.1.0 (that we are upgrading to) requires libfoo/1.1.0. : libbaz, that depends on libfoo and libbar, is happy with any version of : its dependencies. : $clone_cfg; $* libbar >>EOO upgrade libfoo/1.1.0 (required by libbar) upgrade libbar/1.1.0 reconfigure libbaz (dependent of libbar, libfoo) EOO : foo : $clone_cfg; $* libfoo >>EOO upgrade libfoo/1.1.0 reconfigure libbar (dependent of libfoo) reconfigure libbaz (dependent of libbar, libfoo) EOO : foo-bar : $clone_cfg; $* libfoo libbar/1.0.0 >>EOO upgrade libfoo/1.1.0 reconfigure/update libbar/1.0.0 reconfigure libbaz (dependent of libbar, libfoo) EOO : bar-foo : $clone_cfg; $* libbar/1.0.0 libfoo >>EOO upgrade libfoo/1.1.0 reconfigure/update libbar/1.0.0 reconfigure libbaz (dependent of libbar, libfoo) EOO : baz-foo : $clone_cfg; $* libbaz libfoo >>EOO upgrade libfoo/1.1.0 reconfigure libbar (dependent of libfoo) reconfigure/update libbaz/1.1.0 EOO : baz-foo-1.0.0 : $clone_cfg; $* libbaz libfoo/1.0.0 >>EOO update libfoo/1.0.0 update libbaz/1.1.0 EOO -$pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0' -$pkg_purge libbaz 2>'purged libbaz/1.1.0' -$pkg_disfigure libbar 2>'disfigured libbar/1.0.0' -$pkg_purge libbar 2>'purged libbar/1.0.0' -$pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0' -$pkg_purge libfoo 2>'purged libfoo/1.0.0' } } # Note that when we fetch a package from remote repository the bpkg stderr # contains fetch program progress output, that comes prior the informational # message. # : actual-build : { test.arguments += --yes : with-dependencies : { $clone_root_cfg && $rep_add $rep/t4c && $rep_fetch; $* libbaz 2>>~%EOE%; fetched libfoo/1.1.0 unpacked libfoo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 fetched libbaz/1.1.0 unpacked libbaz/1.1.0 configured libfoo/1.1.0 configured libbar/1.1.0 configured libbaz/1.1.0 %info: .+ is up to date% updated libbaz/1.1.0 EOE $pkg_status libfoo/1.1.0 >'libfoo configured 1.1.0'; $pkg_status libbar/1.1.0 >'libbar configured 1.1.0'; $pkg_status libbaz/1.1.0 >'!libbaz configured 1.1.0'; $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : hold-fs-fetched : { : direct : { $clone_root_cfg; $* $src/libfoo-1.0.0.tar.gz 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured !1.0.0'; $* $src/libfoo-1.1.0/ 2>>~%EOE%; disfigured libfoo/1.0.0 using libfoo/1.1.0 (external) configured libfoo/1.1.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE $pkg_status libfoo >'!libfoo configured !1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : pre-fetch : { $clone_root_cfg; $pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo; $pkg_configure libfoo; $pkg_status libfoo >'libfoo configured 1.0.0'; $* libfoo 2>>~%EOE%; %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured 1.0.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } } : hold-repo-fetched : { +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch : package-version : { $clone_cfg; $* libfoo 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured 1.0.0 available [1.1.0]'; $* libfoo/1.0.0 2>>~%EOE%; %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured !1.0.0 available [1.1.0]'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : version : { $clone_cfg; $* libfoo/1.0.0 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured !1.0.0 available [1.1.0]'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : not-held : { $clone_cfg; $* libbaz 2>>~%EOE%; fetched libfoo/1.1.0 unpacked libfoo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 fetched libbaz/1.1.0 unpacked libbaz/1.1.0 configured libfoo/1.1.0 configured libbar/1.1.0 configured libbaz/1.1.0 %info: .+ is up to date% updated libbaz/1.1.0 EOE $pkg_status libfoo >'libfoo configured 1.1.0'; $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : forcing-upgrade-unheld : { $clone_cfg; $* libfoo 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured 1.0.0 available [1.1.0]'; $* libbaz 2>>~%EOE%; warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 disfigured libfoo/1.0.0 fetched libfoo/1.1.0 unpacked libfoo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 fetched libbaz/1.1.0 unpacked libbaz/1.1.0 configured libfoo/1.1.0 configured libbar/1.1.0 configured libbaz/1.1.0 %info: .+ is up to date% updated libbaz/1.1.0 EOE $pkg_status libfoo >'!libfoo configured 1.1.0'; $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : forcing-upgrade-held : { $clone_cfg; $* libfoo/1.0.0 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_status libfoo >'!libfoo configured !1.0.0 available [1.1.0]'; $* libbaz 2>>EOE != 0; error: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 info: package version libfoo/1.0.0 is held info: explicitly request version upgrade to continue info: while satisfying libbar/1.1.0 info: while satisfying libbaz/1.1.0 EOE $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : forcing-upgrade-held-config : : As above but with a linked configuration. : { $clone_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $rep_fetch -d cfg2 $rep/t4c; $* libfoo/1.0.0 +{ --config-id 1 } 2>>~%EOE%; %fetched libfoo/1.0.0 \[cfg2.\]% %unpacked libfoo/1.0.0 \[cfg2.\]% %configured libfoo/1.0.0 \[cfg2.\]% %info: .+ is up to date% %updated libfoo/1.0.0 \[cfg2.\]% EOE $pkg_status -d cfg2 libfoo >'!libfoo configured !1.0.0 available [1.1.0]'; $* libbaz ?libbar +{ --config-id 1 } 2>>~%EOE% != 0; %error: package libbar \[cfg2.\] dependency on \(libfoo == 1.1.0\) is forcing upgrade of libfoo/1.0.0 \[cfg2.\] to 1.1.0% % info: package version libfoo/1.0.0 \[cfg2.\] is held% info: explicitly request version upgrade to continue %info: while satisfying libbar/1.1.0 \[cfg2.\]% info: while satisfying libbaz/1.1.0 EOE $pkg_disfigure -d cfg2 libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge -d cfg2 libfoo 2>'purged libfoo/1.0.0' } } : drop-dependencies : { $clone_root_cfg && $rep_add $rep/t2 && $rep_fetch; $* libbar 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 %info: .+ is up to date% updated libbar/1.0.0 EOE $pkg_status libfoo >'libfoo configured 1.0.0'; $pkg_status libbar >'!libbar configured 1.0.0'; $rep_add $rep/t5 && $rep_fetch; $* libbar 2>>~%EOE%; disfigured libbar/1.0.0 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 %info: .+ is up to date% updated libbar/1.2.0 EOE $pkg_status libfoo >'libfoo available 1.0.0'; $pkg_status libbar >'!libbar configured 1.2.0'; $* libbar/1.0.0 libfoo 2>>~%EOE%; disfigured libbar/1.2.0 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 %info: .+ is up to date%{2} updated libfoo/1.0.0 updated libbar/1.0.0 EOE $pkg_status libfoo >'!libfoo configured 1.0.0'; $pkg_status libbar >'!libbar configured !1.0.0 available 1.2.0'; $* libbar 2>>~%EOE%; disfigured libbar/1.0.0 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 %info: .+ is up to date% updated libbar/1.2.0 EOE $pkg_status libfoo >'!libfoo configured 1.0.0'; $pkg_status libbar >'!libbar configured 1.2.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; $pkg_purge libbar 2>'purged libbar/1.2.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : local-dependency : : Test that the local package can be built against the local dependency : package. : { # Prepare libbar and libbaz (libbaz->libbar) local packages using the # temporary configuration. # $clone_root_cfg; $pkg_fetch -e $src/t4b/libbar-1.1.0.tar.gz; $pkg_unpack libbar &cfg/libbar-1.1.0/***; $pkg_fetch -e $src/t4c/libbaz-1.1.0.tar.gz; $pkg_unpack libbaz &cfg/libbaz-1.1.0/***; mv cfg/libbar-1.1.0 libbar; mv cfg/libbaz-1.1.0 libbaz; rm -r cfg && $clone_root_cfg; # Re-clone. $rep_add $rep/t4a && $rep_fetch; $* ./libbar/ 2>>~%EOE%; fetched libfoo/1.1.0 unpacked libfoo/1.1.0 using libbar/1.1.0 (external) configured libfoo/1.1.0 configured libbar/1.1.0 %info: .+ is up to date% updated libbar/1.1.0 EOE $* ./libbaz/ 2>>~%EOE%; using libbaz/1.1.0 (external) configured libbaz/1.1.0 %info: .+ is up to date% updated libbaz/1.1.0 EOE $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : upgrade-all-held : { $clone_root_cfg && $rep_fetch $rep/t2 $rep/t5; $* libbar/1.0 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 %info: .+ is up to date% updated libbar/1.0.0 EOE $* --upgrade 2>>~%EOE%; disfigured libbar/1.0.0 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 %info: .+ is up to date% updated libbar/1.2.0 EOE $pkg_status libbar >'!libbar configured 1.2.0'; $rep_remove $rep/t2 $rep/t5; $* --upgrade 2>>/EOE != 0; error: libbar is not available info: configuration cfg/ has no repositories info: use 'bpkg rep-add' to add a repository EOE $pkg_drop libbar } } : dependency : { : upgrade-diag : { +$clone_root_cfg && $rep_fetch $rep/t1 : warning : { $clone_cfg; $* libfoo 2>!; $rep_fetch $rep/t4b; $* libbar --yes 2>>~%EOE%; warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 disfigured libfoo/1.0.0 fetched libfoo/1.1.0 unpacked libfoo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 configured libfoo/1.1.0 configured libbar/1.1.0 %info: .+ is up to date% updated libbar/1.1.0 EOE $pkg_drop libbar libfoo } : error : { $clone_cfg; $* libfoo/1.0.0 2>!; $rep_fetch $rep/t4b; $* libbar 2>>EOE != 0; error: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 info: package version libfoo/1.0.0 is held info: explicitly request version upgrade to continue info: while satisfying libbar/1.1.0 EOE $pkg_drop libfoo } : info : { $clone_cfg && $rep_fetch $rep/t2; $* libbar --yes 2>!; $rep_fetch $rep/t4b; $* -v libbar --yes 2>>~%EOE%; info: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 %.* EOE $pkg_drop libbar } : none : { $clone_cfg && $rep_fetch $rep/t2; $* libbar --yes 2>!; $rep_fetch $rep/t4b; $* libbar --yes 2>>~%EOE%; disfigured libbar/1.0.0 disfigured libfoo/1.0.0 fetched libfoo/1.1.0 unpacked libfoo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 configured libfoo/1.1.0 configured libbar/1.1.0 %info: .+ is up to date% updated libbar/1.1.0 EOE $pkg_drop libbar } } : unknown : { $clone_root_cfg; $rep_fetch $rep/t0c; $* '?libbux' 2>'error: unknown package libbux' != 0; $* '?sys:libbux' 2>'error: unknown package sys:libbux' != 0; $* '?libbar/1.3' 2>'error: unknown package libbar/1.3' != 0; $* '?libbar[5 7]' 2>"error: unknown package 'libbar [5 7]'" != 0 } : constraint : { $clone_root_cfg; $rep_fetch $rep/t0c; # Constraint the dependency version. # $* libbox '?libbaz < 0.1.0' 2>>~%EOE%; fetched libbaz/0.0.4 unpacked libbaz/0.0.4 fetched libbox/0.0.1 unpacked libbox/0.0.1 configured libbaz/0.0.4 configured libbox/0.0.1 %info: .+ is up to date%{2} updated libbaz/0.0.4 updated libbox/0.0.1 EOE $pkg_status libbaz >'libbaz configured !0.0.4 available 0.1.0'; # The selected dependency libbaz/0.0.4 satisfies the constraint, thus it # is not upgraded. # $* '?libbaz < 1.0.0'; $pkg_status libbaz >'libbaz configured !0.0.4 available 0.1.0'; # Upgrade the dependency. # $* '?libbaz > 0.0.4' --yes 2>>~%EOE%; disfigured libbox/0.0.1 disfigured libbaz/0.0.4 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 configured libbaz/0.1.0 configured libbox/0.0.1 %info: .+ is up to date%{2} updated libbaz/0.1.0 updated libbox/0.0.1 EOE $pkg_status libbaz >'libbaz configured !0.1.0'; $pkg_drop libbox } : system-no-repo : { $clone_root_cfg; cp -r $src/libfoo-1.1.0 libfoo; echo 'depends: libhello >= 1.0' >+libfoo/manifest; $rep_add libfoo --type dir; $rep_fetch; $* libfoo 2>>~%EOE% != 0; error: unknown dependency libhello >= 1.0 of package libfoo %.+ EOE $* libfoo '?sys:libhello' 2>'error: unknown package sys:libhello' != 0; $* "sys:libhello/2.0@$rep/t0a" --trust-yes 2>>~%EOE% != 0; %.+ %error: package sys:libhello/2\.0 is not found in .+t0a% EOE $* libfoo '?sys:libhello/0.1' 2>>~%EOE% != 0; error: unable to satisfy constraints on package libhello %.+ EOE $* libfoo '?sys:libhello/*' 2>>~%EOE%; using libfoo/1.1.0 (external) configured sys:libhello/* configured libfoo/1.1.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE $pkg_status libhello >'libhello configured,system !*'; $* '?sys:libhello/2.0' --yes 2>>~%EOE%; disfigured libfoo/1.1.0 purged libhello/* configured sys:libhello/2.0 configured libfoo/1.1.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE $pkg_status libhello >'libhello configured,system !2.0'; $pkg_drop libfoo } : unused : { test.arguments += --configure-only +$clone_root_cfg +$rep_fetch $rep/t2 $rep/t5 : drop : : Test dropping of unused dependencies (default behavior). : { $clone_cfg; # Here we also test that specifying unknown but unused system # dependencies. # $* --yes libbar/1.0.0 '?sys:libbox/*' '?sys:libbux/1' 2>>EOE; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 EOE $* libbar/1.2.0 <'y' 2>>EOE; drop libfoo/1.0.0 (unused) upgrade libbar/1.2.0 continue? [Y/n] disfigured libbar/1.0.0 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 EOE $pkg_status libfoo >'libfoo available 1.0.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; $pkg_purge libbar 2>'purged libbar/1.2.0' } : keep : : Test keeping of unused dependencies (--keep-unused option). : { $clone_cfg; $* --yes libbar/1.0.0 2>>EOE; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 EOE $* --keep-unused libbar/1.2.0 <'y' 2>>EOE; upgrade libbar/1.2.0 continue? [Y/n] disfigured libbar/1.0.0 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 EOE $pkg_status libfoo >'libfoo configured 1.0.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; $pkg_purge libbar 2>'purged libbar/1.2.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : drop-recursive : { test.arguments += --yes $clone_root_cfg; $rep_fetch $rep/t0a $rep/t0c; $* libbar/0.0.1 2>!; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3'; $pkg_status libfox >'libfox configured 0.0.1'; $* libbar 2>>EOE; disfigured libbar/0.0.1 disfigured libbaz/0.0.1 disfigured libfox/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 purged libfox/0.0.1 purged libbaz/0.0.1 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 EOE $pkg_status libbaz >'libbaz available 0.1.0 0.0.4 0.0.3 0.0.1'; $pkg_status libfox >'libfox available 0.0.1'; $pkg_drop libbar } : drop-unsatisfactory : : Test that a dependency (libbaz/0.0.3) that doesn't satisfy its dependent : (libbar/0.0.1) but get dropped during the plan refinement, doesn't : prevent the command to succeed. : { test.arguments += --yes $clone_root_cfg; $rep_fetch $rep/t0a $rep/t0c; $* libbar/0.0.1 2>!; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3'; $pkg_status libfox >'libfox configured 0.0.1'; $* ?libbar ?libbaz/0.0.3 2>>EOE; disfigured libbar/0.0.1 disfigured libbaz/0.0.1 disfigured libfox/0.0.1 purged libfox/0.0.1 purged libbaz/0.0.1 purged libbar/0.0.1 EOE $pkg_status libbar >'libbar available 1.0.0 0.0.3 0.0.1'; $pkg_status libbaz >'libbaz available 0.1.0 0.0.4 0.0.3 0.0.1'; $pkg_status libfox >'libfox available 0.0.1' } } : apply-constraints : : Test that the desired dependency version imposes constraint that is taken : into account during prerequisites collection (see collect_prerequisites() : for more details). : { test.arguments += --yes --configure-only : unable-satisfy : { $clone_root_cfg; $rep_fetch $rep/t0a $rep/t0b; $* libbar/0.0.1 ?libbaz/0.0.2 2>>EOE != 0; error: unable to satisfy constraints on package libbaz info: libbar depends on (libbaz == 0.0.1) info: command line depends on (libbaz == 0.0.2) info: specify libbaz version to satisfy libbar constraint info: while satisfying libbar/0.0.1 EOE $* -- libbar/0.0.1 '?libbaz>=0.0.2' 2>>EOE != 0 error: unable to satisfy constraints on package libbaz info: libbar depends on (libbaz == 0.0.1) info: command line depends on (libbaz >= 0.0.2) info: specify libbaz version to satisfy libbar constraint info: while satisfying libbar/0.0.1 EOE } : resolve-conflict : { : satisfy-dependents : : Test resolving a conflict when libfix and libbiz have selected such : versions of their dependency libbaz, that do not satisfy each other : constraints. We resolve the conflict explicitly specifying : ?libbaz/0.0.3 on the command line, which satisfies both constraints. : { $clone_root_cfg; $rep_fetch $rep/t0b $rep/t0c; $* libfix libbiz 2>>EOE != 0; error: unable to satisfy constraints on package libbaz info: libfix depends on (libbaz >= 0.0.3) info: libbiz depends on (libbaz <= 0.0.3) info: available libbaz/0.1.0 info: available libbaz/0.0.2 info: explicitly specify libbaz version to manually satisfy both constraints info: while satisfying libbiz/0.0.2 EOE $* libfix libbiz ?libbaz/0.0.3 2>>EOE; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 fetched libfix/0.0.3 unpacked libfix/0.0.3 fetched libbiz/0.0.2 unpacked libbiz/0.0.2 configured libfoo/1.0.0 configured libbaz/0.0.3 configured libfix/0.0.3 configured libbiz/0.0.2 EOE $pkg_status libbaz >'libbaz configured !0.0.3 available 0.1.0 0.0.4'; $pkg_drop libbiz libfix } : postpone : : Same as above but with an opposite order of dependents on the command : line. This would normally fail due the inability to find libbaz/0.0.3 : in repositories available to libbiz, unless libbaz dependencies : collection were not postponed (see collect_build_prerequisites() : function for more details). : { $clone_root_cfg; $rep_fetch $rep/t0b $rep/t0c; $* libbiz libfix ?libbaz/0.0.3 2>>EOE; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 fetched libbiz/0.0.2 unpacked libbiz/0.0.2 fetched libfix/0.0.3 unpacked libfix/0.0.3 configured libfoo/1.0.0 configured libbaz/0.0.3 configured libbiz/0.0.2 configured libfix/0.0.3 EOE $pkg_status libbaz >'libbaz configured !0.0.3 available 0.1.0 0.0.4'; $pkg_drop libbiz libfix } : replace-dependent : : Test resolving a conflict when libbox and libfox have selected such : versions of their dependency libfoo, that do not satisfy each other : constraints. Note that these constraints are incompatible, so we : resolve the conflict explicitly specifying ?libfox/0.0.1 on the : command line, to replace one of the conflicting dependents. : { $clone_root_cfg; $rep_fetch $rep/t0d; $* libbiz 2>>EOE != 0; error: unable to satisfy constraints on package libfoo info: libbox depends on (libfoo == 1.0.0) info: libfox depends on (libfoo == 0.0.1) info: available libfoo/1.0.0 info: available libfoo/0.0.1 info: explicitly specify libfoo version to manually satisfy both constraints info: while satisfying libbox/0.0.2 info: while satisfying libbiz/0.0.1 EOE $* libbiz ?libfox/0.0.1 2>>EOE; fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbox/0.0.2 unpacked libbox/0.0.2 fetched libbiz/0.0.1 unpacked libbiz/0.0.1 configured libfox/0.0.1 configured libfoo/1.0.0 configured libbox/0.0.2 configured libbiz/0.0.1 EOE $pkg_status libfox >'libfox configured !0.0.1 available 0.0.2'; $pkg_drop libbiz } } : selected : : Test cases when the selected package (partially) satisfies the : user-imposed dependency constraint. : { +$clone_root_cfg +$rep_fetch $rep/t0a $rep/t0b $rep/t0c : same : { $clone_cfg; $* libbar/0.0.1 2>!; $* libbar/0.0.2 ?libbaz/0.0.1 2>!; $pkg_status libbaz >'libbaz configured !0.0.1 available 0.1.0 0.0.4 0.0.3 0.0.2'; $pkg_status libfox >'libfox configured 0.0.1'; $pkg_drop libbar } : same-constraint : { $clone_cfg; $* libbar/0.0.1 2>!; $* libbar/0.0.2 '?libbaz<0.0.2' 2>!; $pkg_status libbaz >'libbaz configured !0.0.1 available 0.1.0 0.0.4 0.0.3 0.0.2'; $pkg_status libfox >'libfox configured 0.0.1'; $pkg_drop libbar } : src-to-sys : { $clone_cfg; $* libbar/0.0.1 2>!; $* libbar/0.0.2 '?sys:libbaz/0.0.1' 2>!; $pkg_status libbaz >'libbaz configured,system !0.0.1 available 0.1.0 0.0.4 0.0.3 0.0.2'; $pkg_status libfox >'libfox available 0.0.1'; $pkg_drop libbar } : sysver-to-wildcard : { $clone_cfg; $* libbar/0.0.1 '?sys:libbaz/0.0.1' 2>!; $* libbar/0.0.2 '?sys:libbaz' 2>!; $pkg_status libbaz >'libbaz configured,system !* available 0.1.0 0.0.4 0.0.3 0.0.2 0.0.1'; $pkg_drop libbar } : wildcard-to-sysver : { $clone_cfg; $* libbar/0.0.1 '?sys:libbaz' 2>!; $* libbar/0.0.2 '?sys:libbaz/0.0.1' 2>!; $pkg_status libbaz >'libbaz configured,system !0.0.1 available 0.1.0 0.0.4 0.0.3 0.0.2'; $pkg_drop libbar } } : unknown : { $clone_root_cfg; $rep_fetch $rep/t0a $rep/t0c; $* libbar/1.0.0 ?libfoo/0.0.1 2>>EOE != 0 error: unknown dependency libfoo == 0.0.1 of package libbar info: while satisfying libbar/1.0.0 EOE } } : refine : { test.arguments += --yes --configure-only +$clone_root_cfg +$rep_fetch $rep/t0a $rep/t0c : system : { +$clone_cfg : wildcard-to-version : { $clone_cfg; $* libbar '?sys:libfoo' 2>>EOE; fetched libbar/1.0.0 unpacked libbar/1.0.0 configured sys:libfoo/* configured libbar/1.0.0 EOE $* '?sys:libfoo/0.1' 2>>EOE; disfigured libbar/1.0.0 purged libfoo/* configured sys:libfoo/0.1 configured libbar/1.0.0 EOE $pkg_drop libbar } : wildcard-to-itself : { $clone_cfg; $* libbar '?sys:libfoo' 2>>EOE; fetched libbar/1.0.0 unpacked libbar/1.0.0 configured sys:libfoo/* configured libbar/1.0.0 EOE $* '?sys:libfoo'; $pkg_drop libbar } : wildcard-to-src : { $clone_cfg; $* libbar/0.0.1 '?sys:libbaz' 2>>EOE; fetched libbar/0.0.1 unpacked libbar/0.0.1 configured sys:libbaz/* configured libbar/0.0.1 EOE $* '?libbaz' 2>>EOE; disfigured libbar/0.0.1 purged libbaz/* fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbar/0.0.1 EOE $pkg_drop libbar } : version-to-wildcard : { $clone_cfg; $* libbar '?sys:libfoo/0.1' 2>>EOE; fetched libbar/1.0.0 unpacked libbar/1.0.0 configured sys:libfoo/0.1 configured libbar/1.0.0 EOE $* '?sys:libfoo' 2>>EOE; disfigured libbar/1.0.0 purged libfoo/0.1 configured sys:libfoo/* configured libbar/1.0.0 EOE $pkg_drop libbar } : version-to-itself : { $clone_cfg; $* libbar '?sys:libfoo/0.1' 2>>EOE; fetched libbar/1.0.0 unpacked libbar/1.0.0 configured sys:libfoo/0.1 configured libbar/1.0.0 EOE $* '?sys:libfoo/0.1'; $pkg_drop libbar } : version-to-version : { $clone_cfg; $* libbar '?sys:libfoo/0.2' 2>>EOE; fetched libbar/1.0.0 unpacked libbar/1.0.0 configured sys:libfoo/0.2 configured libbar/1.0.0 EOE $* '?sys:libfoo/0.1' 2>>EOE; disfigured libbar/1.0.0 purged libfoo/0.2 configured sys:libfoo/0.1 configured libbar/1.0.0 EOE $pkg_drop libbar } : version-to-src : { $clone_cfg; $* libbar/0.0.1 '?sys:libbaz/0.0.1' 2>>EOE; fetched libbar/0.0.1 unpacked libbar/0.0.1 configured sys:libbaz/0.0.1 configured libbar/0.0.1 EOE $* '?libbaz/0.0.1' 2>>EOE; disfigured libbar/0.0.1 purged libbaz/0.0.1 fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbar/0.0.1 EOE $pkg_drop libbar } : version-to-constraint : { $clone_cfg; $* libbar/0.0.1 '?sys:libbaz/0.0.1' 2>>EOE; fetched libbar/0.0.1 unpacked libbar/0.0.1 configured sys:libbaz/0.0.1 configured libbar/0.0.1 EOE $* '?libbaz [0.0.1 0.0.2]' 2>>EOE; disfigured libbar/0.0.1 purged libbaz/0.0.1 fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbar/0.0.1 EOE $pkg_drop libbar } : src-to-wildcard : { $clone_cfg; $* libbar/0.0.1 '?libbaz' 2>>EOE; fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 fetched libbar/0.0.1 unpacked libbar/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbar/0.0.1 EOE $* '?sys:libbaz' 2>>EOE; disfigured libbar/0.0.1 disfigured libbaz/0.0.1 disfigured libfox/0.0.1 purged libfox/0.0.1 purged libbaz/0.0.1 configured sys:libbaz/* configured libbar/0.0.1 EOE $pkg_drop libbar } : src-to-version : { $clone_cfg; $* libbar/0.0.1 '?libbaz/0.0.1' 2>>EOE; fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 fetched libbar/0.0.1 unpacked libbar/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbar/0.0.1 EOE $* '?sys:libbaz/0.0.1' 2>>EOE; disfigured libbar/0.0.1 disfigured libbaz/0.0.1 disfigured libfox/0.0.1 purged libfox/0.0.1 purged libbaz/0.0.1 configured sys:libbaz/0.0.1 configured libbar/0.0.1 EOE $pkg_drop libbar } : sys-to-src-unhold : { $clone_cfg; $* 'sys:libbaz/1.2.0' 2>>EOE; configured sys:libbaz/1.2.0 EOE $* ?libbaz libbar/0.0.3 2>>EOE; purged libbaz/1.2.0 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 fetched libbar/0.0.3 unpacked libbar/0.0.3 configured libbaz/0.1.0 configured libbar/0.0.3 EOE $pkg_drop libbar libbaz } : sys-to-src : : As above but keep held. : { $clone_cfg; $* 'sys:libbaz/1.2.0' 2>>EOE; configured sys:libbaz/1.2.0 EOE $* libbaz libbar/0.0.3 2>>EOE; purged libbaz/1.2.0 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 fetched libbar/0.0.3 unpacked libbar/0.0.3 configured libbaz/0.1.0 configured libbar/0.0.3 EOE $pkg_drop libbar libbaz } } : source : { +$clone_cfg : unavailable : { $clone_cfg; $* libbar/1.0.0 2>!; $* ?libfoo/0.0.1 2>>EOE != 0; error: libfoo/0.0.1 is not available from its dependents' repositories EOE $* '?libfoo < 0.0.2' 2>>EOE != 0; error: 'libfoo < 0.0.2' is not available from its dependents' repositories EOE $pkg_drop libbar } : satisfy : { $clone_cfg; $rep_fetch $rep/t0b; $* libbar/0.0.1 2>!; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3 0.0.2'; $* libbar/0.0.2 ?libbaz 2>>EOE; disfigured libbar/0.0.1 disfigured libbaz/0.0.1 disfigured libfox/0.0.1 purged libfox/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.2 unpacked libbaz/0.0.2 fetched libbar/0.0.2 unpacked libbar/0.0.2 configured libfoo/1.0.0 configured libbaz/0.0.2 configured libbar/0.0.2 EOE $pkg_status libbaz >'libbaz configured 0.0.2 available 0.1.0 0.0.4 0.0.3'; $rep_remove $rep/t0b && $rep_fetch; # Test that the selected package, that is "better" than the available # one, is left. # $* libbox ?libbaz 2>>EOE; fetched libbox/0.0.1 unpacked libbox/0.0.1 configured libbox/0.0.1 EOE $pkg_status libbaz >'libbaz configured 0.0.2 available 0.1.0 0.0.4 0.0.3'; $rep_remove $rep/t0a && $rep_fetch; # Test that the selected package is left as there is no satisfactory # available package. # $* ?libbaz; # Test that the above behavior is not triggered for the system package. # $* '?sys:libbaz' 2>>EOE; disfigured libbar/0.0.2 disfigured libbox/0.0.1 disfigured libbaz/0.0.2 disfigured libfoo/1.0.0 purged libfoo/1.0.0 purged libbaz/0.0.2 configured sys:libbaz/* configured libbox/0.0.1 configured libbar/0.0.2 EOE $pkg_status libbaz >'libbaz configured,system !* available 0.1.0 0.0.4 0.0.3'; $pkg_drop libbar libbox } : unsatisfied : { $clone_cfg; $* libbar/0.0.1 2>!; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3'; $* ?libbaz/0.0.3 2>>EOE != 0; error: package libbaz doesn't satisfy its dependents info: libbaz/0.0.3 doesn't satisfy libbar/0.0.1 EOE $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3'; $pkg_drop libbar } : unsatisfied-config : : As above but with a linked configuration. : { $clone_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* libbar/0.0.1 2>!; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3'; $* ?libbaz/0.0.3 +{ --config-id 1 } 2>>EOE != 0; error: unable to satisfy constraints on package libbaz info: libbar depends on (libbaz == 0.0.1) info: command line depends on (libbaz == 0.0.3) info: specify libbaz version to satisfy libbar constraint info: while satisfying libbar/0.0.1 EOE $pkg_status libbaz >'libbaz configured 0.0.1 available 0.1.0 0.0.4 0.0.3'; $pkg_drop libbar } } : scratch : { $clone_cfg; $* libbox 2>!; $pkg_status libbaz >'libbaz configured 0.0.3 available 0.1.0 0.0.4'; $pkg_status libfoo >'libfoo configured 0.0.1 available 1.0.0'; $pkg_status libfox >'libfox available 0.0.1'; # After the first simulation it is discovered that libfoo needs to be # upgraded to 1.0.0. But after the second simulation, that upgrades # libfoo, it is discovered that it is now unused (libbaz doesn't need it # anymore). So we replace libfoo upgrade with drop and start from # scratch. # $* ?libfoo/1.0.0 ?libbaz/0.0.1 2>>EOE; disfigured libbox/0.0.1 disfigured libbaz/0.0.3 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 purged libfoo/0.0.1 fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbox/0.0.1 EOE $pkg_status libbaz >'libbaz configured !0.0.1 available 0.1.0 0.0.4 0.0.3'; $pkg_status libfoo >'libfoo available 1.0.0 0.0.1'; $pkg_status libfox >'libfox configured 0.0.1'; $pkg_drop libbox } : reconf-dependent : { $clone_cfg; $rep_fetch $rep/t0b; $* libbar/0.0.2 2>!; $pkg_status libbaz >'libbaz configured 0.0.2 available 0.1.0 0.0.4 0.0.3'; $pkg_status libfoo >'libfoo configured 1.0.0'; $* '?sys:libfoo' ?libbaz/0.0.2 2>>EOE; disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/1.0.0 purged libfoo/1.0.0 configured sys:libfoo/* configured libbaz/0.0.2 configured libbar/0.0.2 EOE $pkg_drop libbar } } : unhold : { test.arguments += --configure-only +$clone_root_cfg +$rep_fetch $rep/t0a : drop : { $clone_cfg; $* libfox 2>!; $* ?libfox --yes 2>>EOE; disfigured libfox/0.0.1 purged libfox/0.0.1 EOE $pkg_status libfox >'libfox available 0.0.1' } : silent : { $clone_cfg; $* libbar libbaz --yes 2>!; $pkg_status libbaz >'!libbaz configured 0.0.1 available 0.0.3'; $* ?libbaz; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.0.3'; $pkg_drop libbar } : prompt : { $clone_cfg; $* libbar libbaz --yes 2>!; $pkg_status libbaz >'!libbaz configured 0.0.1 available 0.0.3'; $* '?sys:libbaz' < 'y' 2>>EOE; drop libfox/0.0.1 (unused) reconfigure/unhold sys:libbaz/* reconfigure libbar (dependent of libbaz) continue? [Y/n] disfigured libbar/0.0.1 disfigured libbaz/0.0.1 disfigured libfox/0.0.1 purged libfox/0.0.1 purged libbaz/0.0.1 configured sys:libbaz/* configured libbar/0.0.1 EOE $pkg_status libbaz >'libbaz configured,system !* available 0.0.3 0.0.1'; $pkg_drop libbar } : unheld : { $clone_cfg; $* libbar ?libbaz --yes 2>!; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.0.3'; $* ?libbaz; $pkg_status libbaz >'libbaz configured 0.0.1 available 0.0.3'; $pkg_drop libbar } } : options : { : keep-out : : Test that --keep-out is properly propagated when building libhello : as a dependency, so it is built incrementally. : { $cfg_create cxx $config_cxx -d cfg &cfg/***; # Add libhello as the dir repository. # cp -r $src/libhello-1.0.0 ./libhello; $rep_add libhello --type dir; # Add libfoo as the dir repository and make it a dependent of libhello. # cp -r $src/libfoo-1.1.0 libfoo; echo 'depends: libhello' >+libfoo/manifest; $rep_add libfoo --type dir; $rep_fetch; # Note that libfoo building doesn't trigger libhello building as it is a # fake dependent, so build both explicitly. # $* libfoo ?libhello 2>!; # Move libhello version ahead. # sed -i -e 's/(version: 1.0).0/\1.1/' libhello/manifest; $rep_fetch; # Upgrade libhello as a dependency. # # Note that despite the fact that we have modified the libhello's # manifest file after the build, libhello may still be considered up to # date on filesystems with a low file timestamps resolution (for example # HFS+). # $* ?libhello --yes --keep-out 2>>~%EOE% disfigured libfoo/1.1.0 disfigured libhello/1.0.0 using libhello/1.0.1 (external) configured libhello/1.0.1 configured libfoo/1.1.0 %info: .+ is up to date%{1,2} updated libhello/1.0.1 updated libfoo/1.1.0 EOE } } : dependents : { test.arguments += --yes --configure-only : order : : Test that libbar that is built but isn't upgraded (and so doesn't order : itself against dependencies) is still properly reconfigured being : ordered as (an indirect) dependent of libfoo. : { $clone_root_cfg; $rep_fetch $rep/t0a $rep/t0b; $* libbar libfoo/0.0.1 2>>EOE; fetched libfix/0.0.1 unpacked libfix/0.0.1 fetched libfoo/0.0.1 unpacked libfoo/0.0.1 fetched libbaz/0.0.2 unpacked libbaz/0.0.2 fetched libbar/0.0.2 unpacked libbar/0.0.2 configured libfix/0.0.1 configured libfoo/0.0.1 configured libbaz/0.0.2 configured libbar/0.0.2 EOE $* libbar libfoo 2>>EOE; disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 configured libbaz/0.0.2 configured libbar/0.0.2 EOE $pkg_drop libbaz libbar libfoo } : adjust-merge-build : : Test that the registered in the map but not ordered package build : (libfoo) is properly merged into the reconfigure adjustment as a : dependent of the reconfigured dependency (see collect_order_dependents() : for more details). : { $clone_root_cfg; $rep_fetch $rep/t0a; $* libfoo 2>>EOE; fetched libfix/0.0.1 unpacked libfix/0.0.1 fetched libfoo/0.0.1 unpacked libfoo/0.0.1 configured libfix/0.0.1 configured libfoo/0.0.1 EOE $* libbaz libbar 'sys:libfix' 2>>EOE; disfigured libfoo/0.0.1 disfigured libfix/0.0.1 fetched libfox/0.0.1 unpacked libfox/0.0.1 fetched libbaz/0.0.1 unpacked libbaz/0.0.1 fetched libbar/0.0.1 unpacked libbar/0.0.1 purged libfix/0.0.1 configured libfox/0.0.1 configured libbaz/0.0.1 configured libbar/0.0.1 configured sys:libfix/* configured libfoo/0.0.1 EOE $pkg_drop libbaz libbar libfoo } } : upgrade : : Test dependency upgrade using --immediate and --recursive options. : { test.arguments += --configure-only --upgrade +$clone_root_cfg +$rep_fetch $rep/t0a $rep/t0b $rep/t0c +$* libbar/0.0.2 libbaz/0.0.2 libfoo/0.0.1 --yes 2>>EOE fetched libfix/0.0.1 unpacked libfix/0.0.1 fetched libfoo/0.0.1 unpacked libfoo/0.0.1 fetched libbaz/0.0.2 unpacked libbaz/0.0.2 fetched libbar/0.0.2 unpacked libbar/0.0.2 configured libfix/0.0.1 configured libfoo/0.0.1 configured libbaz/0.0.2 configured libbar/0.0.2 EOE clone_cfg = cp --no-cleanup -r ../cfg ./ &cfg/*** : immediate : { $clone_cfg; $* libbar/0.0.3 --immediate --yes 2>>EOE; disfigured libbar/0.0.2 disfigured libbaz/0.0.2 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 fetched libbar/0.0.3 unpacked libbar/0.0.3 configured libbaz/0.1.0 configured libbar/0.0.3 EOE $pkg_status libbar >'!libbar configured !0.0.3 available 1.0.0'; $pkg_status libbaz >'!libbaz configured !0.1.0'; $pkg_status libfoo >'!libfoo configured !0.0.1 available 1.0.0' } : recursive : { $clone_cfg; $* libbar/0.0.3 --recursive --yes 2>>EOE; disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 fetched libbar/0.0.3 unpacked libbar/0.0.3 configured libfoo/1.0.0 configured libbaz/0.1.0 configured libbar/0.0.3 EOE $pkg_status libbar >'!libbar configured !0.0.3 available 1.0.0'; $pkg_status libbaz >'!libbaz configured !0.1.0'; $pkg_status libfoo >'!libfoo configured !1.0.0' } : all-held : { $clone_cfg; $* ?libfoo/0.0.1 ?libbaz/0.0.2; # Unhold. $* --upgrade --recursive <'y' 2>>EOE drop libfix/0.0.1 (unused) upgrade libfoo/1.0.0 drop libbaz/0.0.2 (unused) upgrade libbar/1.0.0 continue? [Y/n] disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 purged libbaz/0.0.2 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 EOE } : prompt : { $clone_cfg; $* libbaz/0.0.2 --recursive <'y' 2>>EOE drop libfix/0.0.1 (unused) upgrade libfoo/1.0.0 reconfigure libbaz/0.0.2 reconfigure libbar (dependent of libbaz) continue? [Y/n] disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 configured libfoo/1.0.0 configured libbaz/0.0.2 configured libbar/0.0.2 EOE } : override : { $clone_cfg; $* libbar/0.0.3 ?libbaz/0.0.3 --recursive --yes 2>>EOE; disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 fetched libbar/0.0.3 unpacked libbar/0.0.3 configured libfoo/1.0.0 configured libbaz/0.0.3 configured libbar/0.0.3 EOE $pkg_status libbaz >'libbaz configured !0.0.3 available 0.1.0 0.0.4' } : unhold : { $clone_cfg; $* libbar/0.0.3 ?libbaz/0.0.3 ?libfoo --recursive --yes 2>>EOE; disfigured libbar/0.0.2 disfigured libbaz/0.0.2 disfigured libfoo/0.0.1 disfigured libfix/0.0.1 purged libfix/0.0.1 fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 fetched libbar/0.0.3 unpacked libbar/0.0.3 configured libfoo/1.0.0 configured libbaz/0.0.3 configured libbar/0.0.3 EOE $pkg_status libbar >'!libbar configured !0.0.3 available 1.0.0'; $pkg_status libbaz >'libbaz configured !0.0.3 available 0.1.0 0.0.4'; $pkg_status libfoo >'libfoo configured 1.0.0' } : unavailable : : Test that the selected dependency (libfix/0.0.1) is silently left : unchanged if there is no package available from the dependents : repositories. : { $clone_cfg; $rep_remove $rep/t0a $rep/t0b $rep/t0c; $* libbar --recursive --yes } -$pkg_drop libbar libbaz libfoo } } : dependent : { +$clone_cfg +$rep_add $rep/t2 && $rep_fetch : update : : Test --update-dependent option. : { $clone_cfg; $* --yes libbar 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 %info: .+ is up to date% updated libbar/1.0.0 EOE $rep_add $rep/t4a && $rep_fetch; $* --update-dependent libfoo/1.1.0 <'y' 2>>~%EOE%; upgrade libfoo/1.1.0 reconfigure libbar (dependent of libfoo) continue? [Y/n] disfigured libbar/1.0.0 disfigured libfoo/1.0.0 fetched libfoo/1.1.0 unpacked libfoo/1.1.0 configured libfoo/1.1.0 configured libbar/1.0.0 %info: .+ is up to date%{2} updated libfoo/1.1.0 updated libbar/1.0.0 EOE $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; $pkg_purge libbar 2>'purged libbar/1.0.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : leave : : Test --leave-dependent option. : { $clone_cfg; $* --yes libbar 2>>~%EOE%; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 %info: .+ is up to date% updated libbar/1.0.0 EOE $rep_add $rep/t4a && $rep_fetch; $* --leave-dependent libfoo/1.1.0 <'y' 2>>~%EOE%; upgrade libfoo/1.1.0 reconfigure libbar (dependent of libfoo) continue? [Y/n] disfigured libbar/1.0.0 disfigured libfoo/1.0.0 fetched libfoo/1.1.0 unpacked libfoo/1.1.0 configured libfoo/1.1.0 configured libbar/1.0.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; $pkg_purge libbar 2>'purged libbar/1.0.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } } : dependency-cycle : { test.arguments += --yes +$cfg_create cxx $config_cxx -d cfg &cfg/*** : direct : { $clone_cfg; cp -r $src/libfoo-1.1.0/ libfoo; echo "depends: libfoo" >+ libfoo/manifest; $rep_add libfoo --type dir; $rep_fetch; $* libfoo 2>>EOE != 0 error: dependency cycle detected involving package libfoo info: libfoo/1.1.0 depends on libfoo/1.1.0 EOE } : direct-config : : As above but with a linked configuration. : { $clone_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; cp -r $src/libfoo-1.1.0/ libfoo; echo "depends: libfoo" >+ libfoo/manifest; $rep_add libfoo --type dir -d cfg2; $rep_fetch -d cfg2; $* libfoo +{ --config-id 1 } 2>>~%EOE% != 0 %error: dependency cycle detected involving package libfoo \[cfg2.\]% % info: libfoo/1.1.0 \[cfg2.\] depends on libfoo/1.1.0 \[cfg2.\]% EOE } : indirect : { +$clone_cfg : new : { $clone_cfg; cp -r $src/libfoo-1.1.0/ libfoo; echo "depends: libbar" >+ libfoo/manifest; cat <<"EOI" >=libfoo/repositories.manifest; : 1 summary: libfoo project repository : role: prerequisite location: $rep/t0b EOI $rep_add libfoo --type dir; $rep_fetch; $* libfoo 2>>EOE != 0 error: dependency cycle detected involving package libfoo info: libfoo/1.1.0 depends on libbar/0.0.2 info: libbar/0.0.2 depends on libbaz/0.0.2 info: libbaz/0.0.2 depends on libfoo/1.1.0 EOE } : upgrade : { $clone_cfg; cp -r $src/libfoo-1.1.0/ libfoo; $rep_add libfoo --type dir; cp -r $src/libhello-1.0.0/ libhello; echo "depends: libfoo" >+ libhello/manifest; $rep_add libhello --type dir; $rep_fetch; $* libhello 2>>~%EOE%; using libfoo/1.1.0 (external) using libhello/1.0.0 (external) configured libfoo/1.1.0 configured libhello/1.0.0 %(mkdir|c\+\+|ld|ar) .+%{8} updated libhello/1.0.0 EOE echo "depends: libhello" >+ libfoo/manifest; sed -i -e 's/(version: 1.1).0/\1.1/' libfoo/manifest; $rep_fetch; $* ?libfoo 2>>EOE != 0; error: dependency cycle detected involving package libfoo info: libfoo/1.1.1 depends on libhello/1.0.0 info: libhello/1.0.0 depends on libfoo/1.1.1 EOE $pkg_drop libhello } } } : config-vars : { test.arguments += --yes +$cfg_create cxx $config_cxx -d cfg &cfg/*** +cp -r $src/libhello-1.0.0 ./libhello +$rep_add libhello --type dir +$rep_fetch : global-and-local : { $clone_cfg; $* config.cxx.poptions=-DG -- libhello +{ config.cxx.poptions+=-DL } 2>>~%EOE%; using libhello/1.0.0 (external) configured libhello/1.0.0 %(mkdir|c\+\+|ar|ld) .+%{8} updated libhello/1.0.0 EOE cat cfg/libhello/build/config.build >>~%EOO%; %.* config.cxx.poptions = -DG -DL EOO $pkg_drop libhello } : global-and-options : { $clone_cfg; $* config.cxx.poptions=-DG --fetch-timeout=60 -- libhello 2>>~%EOE%; using libhello/1.0.0 (external) configured libhello/1.0.0 %(mkdir|c\+\+|ar|ld) .+%{8} updated libhello/1.0.0 EOE cat cfg/libhello/build/config.build >>~%EOO%; %.* config.cxx.poptions = -DG EOO $pkg_drop libhello } } : patch : { test.arguments += --configure-only --yes +$clone_root_cfg : held : { +$clone_cfg +$rep_fetch $rep/t0c : success : { $clone_cfg; $* libbaz/0.0.3 2>!; $* libbaz --patch 2>>EOE; disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbaz/0.0.4 unpacked libbaz/0.0.4 configured libbaz/0.0.4 EOE $pkg_drop libbaz } : ignore : { $clone_cfg; $* libbaz/0.0.3 --patch 2>>EOE; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 configured libfoo/1.0.0 configured libbaz/0.0.3 EOE $* libbaz/0.1.0 --patch 2>>EOE; disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 configured libbaz/0.1.0 EOE $pkg_drop libbaz } : warn : { $clone_cfg; $* 'sys:libbaz/0.0.3-alpha' 2>!; $* libbaz --patch 2>>EOE; warning: unable to patch libbaz/0.0.3-alpha info: package is not using semantic/standard version info: nothing to build EOE $pkg_drop libbaz } } : dependency : { +$clone_cfg +$rep_fetch $rep/t0c +$* libbox libfix ?libbaz/0.0.3 2>>EOE fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 fetched libbox/0.0.1 unpacked libbox/0.0.1 fetched libfix/0.0.3 unpacked libfix/0.0.3 configured libfoo/1.0.0 configured libbaz/0.0.3 configured libbox/0.0.1 configured libfix/0.0.3 EOE clone_cfg = cp --no-cleanup -r ../cfg ./ &cfg/*** : explicitly : : Here we also test that the package --path option overrides the global : --upgrade option. : { $clone_cfg; $* ?libbaz +{ --patch } --upgrade 2>>EOE disfigured libbox/0.0.1 disfigured libfix/0.0.3 disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbaz/0.0.4 unpacked libbaz/0.0.4 configured libbaz/0.0.4 configured libfix/0.0.3 configured libbox/0.0.1 EOE } : warn : { $clone_cfg; $* '?sys:libbaz/0.0.4-alpha' 2>!; $* ?libbaz --patch 2>>EOE warning: unable to patch libbaz/0.0.4-alpha info: package is not using semantic/standard version EOE } : recursive : { $clone_cfg; $* --patch --recursive 2>>EOE disfigured libfix/0.0.3 disfigured libbox/0.0.1 disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbaz/0.0.4 unpacked libbaz/0.0.4 configured libbaz/0.0.4 configured libbox/0.0.1 configured libfix/0.0.3 EOE } : upgrade-wins-patch : : Test that --upgrade options wins --patch. : { $clone_cfg; $* libbox +{ --upgrade-immediate } libfix +{ --patch-immediate } 2>>EOE disfigured libfix/0.0.3 disfigured libbox/0.0.1 disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbaz/0.1.0 unpacked libbaz/0.1.0 configured libbaz/0.1.0 configured libbox/0.0.1 configured libfix/0.0.3 EOE } : unavailable : { $clone_cfg; $* '?sys:libbaz/0.0.3' 2>>EOE; disfigured libbox/0.0.1 disfigured libfix/0.0.3 disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 purged libbaz/0.0.3 configured sys:libbaz/0.0.3 configured libfix/0.0.3 configured libbox/0.0.1 EOE $rep_remove $rep/t0c; $rep_fetch $rep/t0b; $* ?libbaz --patch --yes 2>>EOE != 0 error: patch version for sys:libbaz/0.0.3 is not available from its dependents' repositories EOE } -$pkg_drop libbox libfix libbaz libfoo } : from-repository : { test.arguments += --patch --auth all --trust-yes +$clone_cfg +$* "libbaz/0.0.3@$rep/t0c" 2>>EOE added pkg:build2.org/pkg-build/t0c fetching pkg:build2.org/pkg-build/t0c fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbaz/0.0.3 unpacked libbaz/0.0.3 configured libfoo/1.0.0 configured libbaz/0.0.3 EOE clone_cfg = cp --no-cleanup -r ../cfg ./ &cfg/*** : explicit : { $clone_cfg; $* "libbaz@$rep/t0c" 2>>EOE fetching pkg:build2.org/pkg-build/t0c disfigured libbaz/0.0.3 disfigured libfoo/1.0.0 purged libfoo/1.0.0 fetched libbaz/0.0.4 unpacked libbaz/0.0.4 configured libbaz/0.0.4 EOE } : implicit : : Note that libfoo also becomes held. : { $clone_cfg; $* "@$rep/t0c" 2>>EOE; fetching pkg:build2.org/pkg-build/t0c info: package libbar is not present in configuration info: package libbox is not present in configuration info: package libfix is not present in configuration disfigured libbaz/0.0.3 fetched libbaz/0.0.4 unpacked libbaz/0.0.4 configured libbaz/0.0.4 EOE $pkg_status libfoo >'!libfoo configured !1.0.0' } -$pkg_drop libbaz libfoo } } : configure-only : : Test --configure-only option. : { $clone_cfg; $rep_add $rep/t2 && $rep_fetch; $* --configure-only --yes libbar 2>>EOE; fetched libfoo/1.0.0 unpacked libfoo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 configured libfoo/1.0.0 configured libbar/1.0.0 EOE $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; $pkg_purge libbar 2>'purged libbar/1.0.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : repository-location : { test.arguments += --yes --auth all --trust-yes : all-packages : { : explicit : { $clone_root_cfg; $* "@$rep/t4d" 2>>~%EOE%; %.+ %info: .+ is up to date%{2} updated libfox/1.0.0 updated libbiz/1.0.0 EOE $pkg_disfigure libbiz 2>'disfigured libbiz/1.0.0'; $pkg_purge libbiz 2>'purged libbiz/1.0.0'; $pkg_disfigure libfox 2>'disfigured libfox/1.0.0'; $pkg_purge libfox 2>'purged libfox/1.0.0'; $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : url-detection : { $clone_root_cfg; if! $remote rep = ($posix \ ? "file:$rep" \ : "file:/$regex.replace($rep, '\\', '/')") rep = "$regex.replace($rep, ' ', '%20')" end; $* "$rep/t4d" 2>>~%EOE%; %.+ %info: .+ is up to date%{2} updated libfox/1.0.0 updated libbiz/1.0.0 EOE $pkg_disfigure libbiz 2>'disfigured libbiz/1.0.0'; $pkg_purge libbiz 2>'purged libbiz/1.0.0'; $pkg_disfigure libfox 2>'disfigured libfox/1.0.0'; $pkg_purge libfox 2>'purged libfox/1.0.0'; $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } } : multiple-packages : { $clone_root_cfg; $* "libfox,libbiz/1.0.0@$rep/t4d" 2>>~%EOE%; %.+ %info: .+ is up to date%{2} updated libfox/1.0.0 updated libbiz/1.0.0 EOE $pkg_disfigure libbiz 2>'disfigured libbiz/1.0.0'; $pkg_purge libbiz 2>'purged libbiz/1.0.0'; $pkg_disfigure libfox 2>'disfigured libfox/1.0.0'; $pkg_purge libfox 2>'purged libfox/1.0.0'; $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; $pkg_purge libbaz 2>'purged libbaz/1.1.0'; $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; $pkg_purge libbar 2>'purged libbar/1.1.0'; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : version : : Test that libfoo/0.0.1 package version is built (repository t0a), rather : than libfoo/1.0.0 (repository t4a). : { $clone_root_cfg; $rep_fetch $rep/t4c 2>!; $* "libfoo@$rep/t0a" 2>>~%EOE%; %.+ configured libfoo/0.0.1 %info: .+ is up to date% updated libfoo/0.0.1 EOE $pkg_drop libfoo } : no-patch : : Here we also test that --patch options is ignored if there is no selected : package in the configuration. : { $clone_root_cfg; $* "libfoo@$rep/t1" --patch 2>>~%EOE%; %.+ configured libfoo/1.0.0 %info: .+ is up to date% updated libfoo/1.0.0 EOE $* "libfoo@$rep/t3" --patch 2>>~%EOE% != 0; %.+ error: patch version for libfoo/1.0.0 is not found in pkg:build2.org/pkg-build/t3 EOE $pkg_drop libfoo } : no-patch-config : : As above but with a linked configuration. : { $clone_root_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* "libfoo@$rep/t1" +{ --config-id 1 } --patch 2>>~%EOE%; %.+ %configured libfoo/1.0.0 \[cfg2.\]% %info: .+ is up to date% %updated libfoo/1.0.0 \[cfg2.\]% EOE $* "libfoo@$rep/t3" +{ --config-id 1 } --patch 2>>~%EOE% != 0; %.+ %error: patch version for libfoo/1.0.0 \[cfg2.\] is not found in pkg:build2.org/pkg-build/t3% EOE $pkg_drop -d cfg2 libfoo } : package-in-complement : { $clone_root_cfg; $* "libfoo@$rep/t4d" 2>>~%EOE%; %.+ %info: .+ is up to date% updated libfoo/1.0.0 EOE $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : system : { $clone_root_cfg; $* "sys:libbiz/2.0.0@$rep/t4d" 2>>~%EOE%; %.+ configured sys:libbiz/2.0.0 EOE $pkg_disfigure libbiz 2>'purged libbiz/2.0.0' } : non-existent-package : { $clone_root_cfg; $* "libbar@$rep/t4d" 2>>~%EOE% != 0 %.+ error: package libbar is not found in pkg:build2.org/pkg-build/t4d or its complements EOE } : location-search : : Test that the repository location is searched in the database before being : parsed. The latest would fail as the repository type would be misguessed. : { $clone_root_cfg; $rep_add $src/libfoo-1.1.0 --type dir && $rep_fetch; d = $canonicalize([dir_path] $src/libfoo-1.1.0); # Note that on Windows the local repository canonical name path part is # converted to lower case. # $* "libfoo@$d" 2>>~"%EOE%"; fetching dir:($posix ? "$d" : $string.lcase("$d")) using libfoo/1.1.0 \(external\) configured libfoo/1.1.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } } : dir-rep : { : preferred : : Test that dir (local) repository is preferred over non-dir local repository : that comes first. : { $clone_root_cfg; $rep_fetch $rep/t4a; $rep_add $src/libfoo-1.1.0 --type dir; d = $canonicalize([dir_path] $src/libfoo-1.1.0); if! $posix d = [dir_path] $string.lcase($d) end; $rep_fetch "dir:$d"; $* libfoo 2>>~%EOE%; using libfoo/1.1.0 (external) configured libfoo/1.1.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : preferred-config : : As above but with a linked configuration. : { $clone_root_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $rep_fetch -d cfg2 $rep/t4a; $rep_add -d cfg2 $src/libfoo-1.1.0 --type dir; d = $canonicalize([dir_path] $src/libfoo-1.1.0); if! $posix d = [dir_path] $string.lcase($d) end; $rep_fetch -d cfg2 "dir:$d"; $* libfoo +{ --config-id 1 } 2>>~%EOE%; %using libfoo/1.1.0 \[cfg2.\] \(external\)% %configured libfoo/1.1.0 \[cfg2.\]% %info: .+ is up to date% %updated libfoo/1.1.0 \[cfg2.\]% EOE $pkg_disfigure -d cfg2 libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge -d cfg2 libfoo 2>'purged libfoo/1.1.0' } } : disfigure : { +$cfg_create cxx $config_cxx -d cfg &cfg/*** # Build libhello as an external package. # +cp -r $src/libhello-1.0.0 ./libhello +cat <+libhello/build/root.build config [bool] config.libhello.develop ?= false text "develop=$config.libhello.develop" EOI +$rep_add libhello --type dir +$rep_fetch +$* config.libhello.develop=true -- libhello 2>! : without : : Make sure without --disfigure old configuration is preserved. : { $clone_cfg; $* libhello 2>!; # Update after output directory change. # Use bogus configuration variable to trigger reconfiguration. # $* config.libhello.bogus=true -- libhello 2>>~%EOE% disfigured libhello/1.0.0 %.*: develop=true% configured libhello/1.0.0 %.*: develop=true% %(mkdir|c\+\+|ld|ar) .+%{8} updated libhello/1.0.0 EOE } : alone : : Make sure --disfigure alone causes reconfiguration. : { $clone_cfg; $* libhello 2>!; # Update after output directory change. $* --disfigure libhello 2>>~%EOE% disfigured libhello/1.0.0 %.*: develop=false% configured libhello/1.0.0 %.*: develop=false% %(mkdir|c\+\+|ld|ar) .+%{8} updated libhello/1.0.0 EOE } : with-keep-out : { $clone_cfg; $* libhello 2>!; # Update after output directory change. $* --disfigure --keep-out libhello 2>>~%EOE% disfigured libhello/1.0.0 %.*: develop=false% configured libhello/1.0.0 %.*: develop=false% %info: .+ is up to date% updated libhello/1.0.0 EOE } } : keep-out : { +$cfg_create cxx $config_cxx -d cfg &cfg/*** # Build libhello as an external package. # +cp -r $src/libhello-1.0.0 ./libhello +$rep_add libhello --type dir +$rep_fetch +$* libhello 2>! # Move libhello version ahead. # +sed -i -e 's/(version: 1.0).0/\1.1/' libhello/manifest +$rep_fetch test.arguments += --yes # Is a command-specific option. : unspecified : : Test that libhello is fully rebuilt. : { $clone_cfg; $rep_fetch; $* libhello 2>>~%EOE% disfigured libhello/1.0.0 using libhello/1.0.1 (external) configured libhello/1.0.1 %(mkdir|c\+\+|ld|ar) .+%{8} updated libhello/1.0.1 EOE } : specified : { test.arguments += --keep-out +$clone_cfg : dir-repo : : Test that libhello is built incrementally. May re-link due to the : configuration copying. : { $clone_cfg; $* libhello 2>>~%EOE%; disfigured libhello/1.0.0 using libhello/1.0.1 (external) configured libhello/1.0.1 %(ld|ar) .+%* updated libhello/1.0.1 EOE test -d cfg/libhello/; test -d cfg/libhello-1.0.1/ == 1 } : directory : : Test that libhello is built incrementally. May re-link due to the : configuration copying. : { +$clone_cfg # To avoid 'external package is already available' failure for the # nested tests. # +$rep_remove --all : arg : { $clone_cfg; $* ../../../libhello/ 2>>~%EOE%; disfigured libhello/1.0.0 using libhello/1.0.1 (external) configured libhello/1.0.1 %(ld|ar) .+%* updated libhello/1.0.1 EOE test -d cfg/libhello/; test -d cfg/libhello-1.0.1/ == 1 } : unpacked : { $clone_cfg; $pkg_disfigure libhello --keep-out 2>!; $pkg_unpack --replace --existing ../../../libhello; $* libhello 2>>~%EOE%; configured libhello/1.0.1 %(ld|ar) .+%* updated libhello/1.0.1 EOE test -d cfg/libhello/; test -d cfg/libhello-1.0.1/ == 1 } } : archive : : Test that libhello is fully rebuilt, as the resulted package is not : external. { clone_cfg = cp -pr --no-cleanup ../../cfg ./ # Distribute using the dedicated configuration to avoid the 'c and cxx # module toolchain pattern mismatch' warning. # +$cfg_create cxx $config_cxx -d cfg &cfg/*** +$build 'dist(../../libhello/@./cfg/libhello/)' \ config.dist.root=./ \ config.dist.archives=tar.gz 2>! \ &libhello-1.0.1/*** &libhello-1.0.1.tar.gz : arg : { $clone_cfg; $* ../libhello-1.0.1.tar.gz 2>>~%EOE%; disfigured libhello/1.0.0 fetched libhello/1.0.1 unpacked libhello/1.0.1 configured libhello/1.0.1 %(c\+\+|ld|ar) .+%{6} updated libhello/1.0.1 EOE test -d cfg/libhello-1.0.1/; test -d cfg/libhello/ == 1; $pkg_disfigure libhello 2>'disfigured libhello/1.0.1'; $pkg_purge libhello 2>'purged libhello/1.0.1'; rm -r cfg/ } : unpacked : { $clone_cfg; $pkg_disfigure libhello 2>!; $pkg_fetch --replace --existing ../libhello-1.0.1.tar.gz; $pkg_unpack libhello; $* libhello 2>>~%EOE%; configured libhello/1.0.1 %(c\+\+|ld|ar) .+%{6} updated libhello/1.0.1 EOE test -d cfg/libhello-1.0.1/; test -d cfg/libhello/ == 1; $pkg_disfigure libhello 2>'disfigured libhello/1.0.1'; $pkg_purge libhello 2>'purged libhello/1.0.1'; rm -r cfg/ } } } -$pkg_disfigure libhello 2>'disfigured libhello/1.0.0' -$pkg_purge libhello 2>'purged libhello/1.0.0' } : iter : { test.arguments += --yes # Is a command-specific option. : already-available : { $clone_root_cfg; $rep_add $src/libfoo-1.1.0 --type dir && $rep_fetch; $* $src/libfoo-1.1.0/ 2>>~%EOE% != 0 %error: external package libfoo/1.1.0 is already available from dir:.+libfoo-1.1.0% EOE } : upgrade : { $clone_root_cfg; $* $src/libfoo-1.1.0/ 2>>~%EOE%; using libfoo/1.1.0 (external) configured libfoo/1.1.0 %info: .+ is up to date% updated libfoo/1.1.0 EOE cp -pr $src/libfoo-1.1.0 libfoo; $* libfoo/ 2>>~%EOE%; disfigured libfoo/1.1.0 using libfoo/1.1.0#1 (external) configured libfoo/1.1.0#1 %info: .+ is up to date% updated libfoo/1.1.0#1 EOE $rep_add $src/libfoo-1.1.0 --type dir && $rep_fetch; $* libfoo 2>>~%EOE%; disfigured libfoo/1.1.0#1 using libfoo/1.1.0#2 (external) configured libfoo/1.1.0#2 %info: .+ is up to date% updated libfoo/1.1.0#2 EOE $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0#2' } } : ignore-case-pkg : { test.arguments += --yes --auth all --trust-yes $clone_cfg; $* "libbar@$rep/t5" 2>>~%EOE%; added pkg:build2.org/pkg-build/t5 fetching pkg:build2.org/pkg-build/t5 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 %info: .+ is up to date% updated libbar/1.2.0 EOE $* "libbar@$rep/t6" 2>>~%EOE%; added pkg:build2.org/pkg-build/t6 fetching pkg:build2.org/pkg-build/t6 disfigured libbar/1.2.0 fetched libBar/2.0.0 unpacked libBar/2.0.0 configured libBar/2.0.0 %info: .+ is up to date% updated libBar/2.0.0 EOE $pkg_status libbar >'!libBar configured !2.0.0'; test -d cfg/libBar-2.0.0; $pkg_drop libbar } : ignore-case-rep : : Test that package spec local repository location is matched : case-insensitively on Windows. : if (!$remote && !$posix) { $clone_cfg; $* "libbar@$rep/t5" 2>>~%EOE%; added pkg:build2.org/pkg-build/t5 fetching pkg:build2.org/pkg-build/t5 fetched libbar/1.2.0 unpacked libbar/1.2.0 configured libbar/1.2.0 %info: .+ is up to date% updated libbar/1.2.0 EOE $* "libbar@$rep/T5" 2>>~%EOE%; fetching pkg:build2.org/pkg-build/t5 %info: .+ is up to date% updated libbar/1.2.0 EOE $rep_list >~'%pkg:build2\.org/pkg-build/t5 .+t5%'; $pkg_drop libbar } : git-rep : if! $git_supported { # Skip git repository tests. # } else { rep0 = "$rep_git/state0" rep1 = "$rep_git/state1" test.arguments += --yes pkg_disfigure += 2>! pkg_purge += 2>! : prerequisite-repo : : Dependency package of the dependent being built is in the prerequisite : repository. : { $clone_root_cfg; $rep_add "$rep0/libbar.git#master"; $rep_add "$rep0/style-basic.git#master"; $rep_fetch &cfg/.bpkg/repos/*/***; $* libmbar 2>>~%EOE%; %checked out style-basic/.+% checked out libmbar/1.0.0 %configured style-basic/.+% configured libmbar/1.0.0 %info: .+ is up to date% updated libmbar/1.0.0 EOE $pkg_disfigure libmbar; $pkg_disfigure style-basic; $pkg_purge libmbar; $pkg_purge style-basic } : prerequisite-repo-config : : As above but with a linked configuration. : { $clone_root_cfg; $rep_add "$rep0/libbar.git#master"; $rep_fetch &cfg/.bpkg/repos/*/***; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $rep_add -d cfg2 "$rep0/style-basic.git#master"; $rep_fetch -d cfg2 &cfg/.bpkg/repos/*/***; $* libmbar style-basic +{ --config-id 1 } 2>>~%EOE%; %checked out style-basic/.+ \[cfg2.\]% checked out libmbar/1.0.0 %configured style-basic/.+ \[cfg2.\]% configured libmbar/1.0.0 %info: .+ is up to date%{2} %updated style-basic/.+ \[cfg2.\]% updated libmbar/1.0.0 EOE $pkg_disfigure libmbar; $pkg_disfigure -d cfg2 style-basic; $pkg_purge libmbar; $pkg_purge -d cfg2 style-basic } : no-prerequisite-repos : : Dependent package repository has no prerequisites nor complements. Its : dependency is picked up via the root repository that complements its : repository (see rep_fetch() function implementation for details). : { $clone_root_cfg; $rep_add "$rep1/libbaz.git#master"; $rep_add "$rep0/style-basic.git#master"; $rep_fetch &cfg/.bpkg/repos/*/***; $* libbaz 2>>~%EOE%; %checked out style-basic/.+% checked out libbaz/1.0.0 %configured style-basic/.+% configured libbaz/1.0.0 %info: .+ is up to date% updated libbaz/1.0.0 EOE $pkg_disfigure libbaz; $pkg_disfigure style-basic; $pkg_purge libbaz; $pkg_purge style-basic } : build-unpacked : : Test that the unpacked external package is properly built for the first : time and is not rebuilt afterwards via the directory argument. : if! $remote { $clone_root_cfg; d = $canonicalize([dir_path] $out_git/state0/style-basic.git); $pkg_unpack -e $d; $* style-basic 2>>~%EOE%; %configured style-basic/1\.1\.0-a\.0\.\d+\..+% %info: .+ is up to date% %updated style-basic/1\.1\.0-a\.0\.\d+\..+% EOE $* $d 2>>~%EOE%; %info: .+ is up to date% %updated style-basic/1\.1\.0-a\.0\.\d+\..+% EOE $pkg_disfigure style-basic } : build-unpacked-config : : As above but with a linked configuration. : if! $remote { $clone_root_cfg; $cfg_create -d cfg2 &cfg2/***; $cfg_link -d cfg cfg2; d = $canonicalize([dir_path] $out_git/state0/style-basic.git); $pkg_unpack -d cfg2 -e $d; $* style-basic +{ --config-id 1 } 2>>~%EOE%; %configured style-basic/1\.1\.0-a\.0\.\d+\..+% %info: .+ is up to date% %updated style-basic/1\.1\.0-a\.0\.\d+\..+% EOE $* $d +{ --config-id 1 } 2>>~%EOE%; %info: .+ is up to date% %updated style-basic/1\.1\.0-a\.0\.\d+\..+% EOE $pkg_disfigure -d cfg2 style-basic } : checkout-root : { $clone_root_cfg; $rep_fetch "$rep0/libbar.git#master" &cfg/.bpkg/repos/*/***; # While at it, test the package checkout cache (thus build multiple # packages from the same git repository). # $* libbar libmbar --checkout-root $~ --checkout-purge 2>>~%EOE%; %checked out style-basic/.+% checked out libbar/1.0.0+1 checked out libmbar/1.0.0 %configured style-basic/.+% configured libbar/1.0.0+1 configured libmbar/1.0.0 %info: .+ is up to date%{2} updated libbar/1.0.0+1 updated libmbar/1.0.0 EOE test -d libmbar-1.0.0; $pkg_drop libbar libmbar } } : linked-configs : { : 2-configs : { +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch : invalid-cfg : { +$clone_cfg : config-id : { $clone_cfg; $* libbaz --config-id 1 2>>/EOE != 0 error: no configuration with id 1 is linked with cfg/ EOE } : config-name : { $clone_cfg; $* libbaz --config-name foo 2>>/EOE != 0 error: no configuration with name 'foo' is linked with cfg/ EOE } : config-uuid : { $clone_cfg; $* libbaz --config-uuid '18f48b4b-b5d9-4712-b98c-1930df1c4228' 2>>/EOE != 0 error: no configuration with uuid 18f48b4b-b5d9-4712-b98c-1930df1c4228 is linked with cfg/ EOE } } : baz : { $clone_cfg; $cfg_create -d cfg-bar-foo &cfg-bar-foo/***; $cfg_link -d cfg cfg-bar-foo; $* libbaz ?libbar +{ --config-id 1 } ?libfoo +{ --config-id 1 } 2>>~%EOE%; %fetched libfoo/1.1.0 \[cfg-bar-foo.\]% %unpacked libfoo/1.1.0 \[cfg-bar-foo.\]% %fetched libbar/1.1.0 \[cfg-bar-foo.\]% %unpacked libbar/1.1.0 \[cfg-bar-foo.\]% fetched libbaz/1.1.0 unpacked libbaz/1.1.0 %configured libfoo/1.1.0 \[cfg-bar-foo.\]% %configured libbar/1.1.0 \[cfg-bar-foo.\]% configured libbaz/1.1.0 %info: cfg-bar-foo.+libfoo-1.1.0.+ is up to date% %info: cfg-bar-foo.+libbar-1.1.0.+ is up to date% %info: cfg[^-].+libbaz-1.1.0.+ is up to date% %updated libfoo/1.1.0 \[cfg-bar-foo.\]% %updated libbar/1.1.0 \[cfg-bar-foo.\]% updated libbaz/1.1.0 EOE $pkg_status -r libbaz >>/EOO; !libbaz configured 1.1.0 libbar [cfg-bar-foo/] configured 1.1.0 libfoo [cfg-bar-foo/] configured 1.1.0 libfoo [cfg-bar-foo/] configured 1.1.0 EOO $pkg_status -d cfg-bar-foo -r libbar >>/EOO; libbar configured 1.1.0 libfoo configured 1.1.0 EOO $pkg_status -d cfg-bar-foo libfoo >'libfoo configured 1.1.0'; $pkg_drop libbaz; $pkg_status libbaz libbar libfoo >>/EOO libbaz available 1.1.0 libbar available [1.1.0] libfoo available [1.1.0] 1.0.0 EOO } } : 3-configs : { +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch : baz : { uuid = '28f48b4b-b5d9-4712-b98c-1930df1c4228'; $clone_cfg; $cfg_create -d cfg-bar &cfg-bar/***; $cfg_create -d cfg-foo --uuid $uuid &cfg-foo/***; $cfg_link -d cfg cfg-bar; $cfg_link -d cfg-bar cfg-foo; test.arguments = $regex.apply($test.arguments, cfg, cfg-bar); $* libbar@"$rep/t4b" ?libfoo +{ --config-id 2 } --trust-yes 2>>~%EOE%; added pkg:build2.org/pkg-build/t4b fetching pkg:build2.org/pkg-build/t4b fetching pkg:build2.org/pkg-build/t4a (prerequisite of pkg:build2.org/pkg-build/t4b) %fetched libfoo/1.1.0 \[cfg-foo.\]% %unpacked libfoo/1.1.0 \[cfg-foo.\]% fetched libbar/1.1.0 unpacked libbar/1.1.0 %configured libfoo/1.1.0 \[cfg-foo.\]% configured libbar/1.1.0 %info: cfg-foo.+libfoo-1.1.0.+ is up to date% %info: cfg-bar.+libbar-1.1.0.+ is up to date% %updated libfoo/1.1.0 \[cfg-foo.\]% updated libbar/1.1.0 EOE test.arguments = $regex.apply($test.arguments, cfg-bar, cfg); $* libfoo --config-uuid $uuid 2>>~%EOE%; %info: cfg-foo.+libfoo-1.1.0.+ is up to date% %updated libfoo/1.1.0 \[cfg-foo.\]% EOE $* libbaz 2>>~%EOE%; fetched libbaz/1.1.0 unpacked libbaz/1.1.0 configured libbaz/1.1.0 %info: cfg[^-].+libbaz-1.1.0.+ is up to date% updated libbaz/1.1.0 EOE $pkg_status --link -r >>/EOO; !libbaz configured 1.1.0 !libbar [cfg-bar/] configured !1.1.0 !libfoo [cfg-foo/] configured 1.1.0 !libfoo [cfg-foo/] configured 1.1.0 !libbar [cfg-bar/] configured !1.1.0 !libfoo [cfg-foo/] configured 1.1.0 !libfoo [cfg-foo/] configured 1.1.0 EOO $pkg_drop libbaz; $* ?libfoo --config-uuid $uuid; # Unhold. $pkg_status libbaz libbar libfoo >>/EOO; libbaz available 1.1.0 !libbar [cfg-bar/] configured !1.1.0 libfoo [cfg-foo/] configured 1.1.0 EOO $* ?libbar +{ --config-id 1 } <'y' 2>>~%EOE%; % drop libfoo/1.1.0 \[cfg-foo.\] \(unused\)% % drop libbar/1.1.0 \[cfg-bar.\] \(unused\)% %continue\? \[Y/n\] disfigured libbar/1.1.0 \[cfg-bar.\]% %disfigured libfoo/1.1.0 \[cfg-foo.\]% %purged libfoo/1.1.0 \[cfg-foo.\]% %purged libbar/1.1.0 \[cfg-bar.\]% EOE $pkg_status libbar libfoo >>/EOO libbar available [1.1.0] libfoo available [1.1.0] 1.0.0 EOO } } : buildtime-dep : { +$clone_root_cfg && $rep_add $rep/t7a && $rep_fetch : external-config : { +$clone_cfg +$cfg_create -d cfg2 --type host --name cfg2 &cfg2/*** +$cfg_link -d cfg cfg2 : downgrade-dependency : { $clone_cfg; cp -pr ../cfg2 ./; $* libbar <'y' 2>>~%EOE%; % new libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\] \(required by foo \[cfg2.\]\)% % new libbaz/1.0.0 \[cfg2.\] \(required by foo \[cfg2.\]\)% % new foo/1.0.0 \[cfg2.\] \(required by libbar\)% % new libbaz/1.0.0 \(required by libbar\)% new libbar/1.0.0 %continue\? \[Y/n\] fetched libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %fetched libbaz/1.0.0 \[cfg2.\]% %unpacked libbaz/1.0.0 \[cfg2.\]% %fetched foo/1.0.0 \[cfg2.\]% %unpacked foo/1.0.0 \[cfg2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %configured libbaz/1.0.0 \[cfg2.\]% %configured foo/1.0.0 \[cfg2.\]% configured libbaz/1.0.0 configured libbar/1.0.0 %info: .+libbar-1.0.0.+ is up to date% updated libbar/1.0.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.0.0 foo [cfg2/] configured 1.0.0 libbaz [cfg2/] configured 1.0.0 libbuild2-bar [cfg2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO # While at it, make sure that from several available host # configurations the selected package configuration is chosen and we # don't fail with the 'multiple possible host configurations' # diagnostics. # $cfg_create -d cfg3 --type host &cfg3/***; $cfg_link -d cfg cfg3; $rep_add $rep/t7b && $rep_fetch; $* libbar <'y' 2>>~%EOE%; % upgrade libbaz/1.1.0 \[cfg2.\] \(required by foo \[cfg2.\]\)% % drop libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\] \(unused\)% % upgrade foo/1.1.0 \[cfg2.\] \(required by libbar\)% upgrade libbar/1.1.0 %continue\? \[Y/n\] disfigured libbar/1.0.0% %disfigured foo/1.0.0 \[cfg2.\]% %disfigured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %disfigured libbaz/1.0.0 \[cfg2.\]% %fetched libbaz/1.1.0 \[cfg2.\]% %unpacked libbaz/1.1.0 \[cfg2.\]% %purged libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %fetched foo/1.1.0 \[cfg2.\]% %unpacked foo/1.1.0 \[cfg2.\]% fetched libbar/1.1.0 unpacked libbar/1.1.0 %configured libbaz/1.1.0 \[cfg2.\]% %configured foo/1.1.0 \[cfg2.\]% configured libbar/1.1.0 %info: .+libbar-1.1.0.+ is up to date% updated libbar/1.1.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.1.0 foo [cfg2/] configured 1.1.0 libbaz [cfg2/] configured 1.1.0 libbaz configured 1.0.0 available 1.1.0 EOO $* libbar/1.0.0 ?foo/1.0.0 +{ --config-name cfg2 } \ ?libbaz/1.0.0 +{ --config-id 1 } <'y' &cfg2/.bpkg/build2/*** 2>>~%EOE%; % new libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\] \(required by foo \[cfg2.\]\)% % downgrade libbaz/1.0.0 \[cfg2.\]% % downgrade foo/1.0.0 \[cfg2.\]% downgrade libbar/1.0.0 continue? [Y/n] disfigured libbar/1.1.0 %disfigured foo/1.1.0 \[cfg2.\]% %disfigured libbaz/1.1.0 \[cfg2.\]% %fetched libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %fetched libbaz/1.0.0 \[cfg2.\]% %unpacked libbaz/1.0.0 \[cfg2.\]% %fetched foo/1.0.0 \[cfg2.\]% %unpacked foo/1.0.0 \[cfg2.\]% fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %configured libbaz/1.0.0 \[cfg2.\]% %configured foo/1.0.0 \[cfg2.\]% configured libbar/1.0.0 %info: cfg2.+libbaz-1.0.0.+ is up to date% %info: cfg2.+foo-1.0.0.+ is up to date% %info: cfg.+libbar-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[cfg2.\]% %updated foo/1.0.0 \[cfg2.\]% updated libbar/1.0.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured !1.0.0 available 1.1.0 foo [cfg2/] configured !1.0.0 available 1.1.0 libbaz [cfg2/] configured !1.0.0 available 1.1.0 libbuild2-bar [cfg2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 available 1.1.0 EOO $pkg_drop libbar libbaz } : resolve-host-config : { $clone_cfg; cp -pr ../cfg2 ./; $cfg_create -d cfg3 --type host &cfg3/***; $cfg_link -d cfg cfg3; $* libbar 2>>/~%EOE% != 0; error: multiple possible host configurations for build-time dependency (foo ^1.0.0) info: cfg2/ info: cfg3/ info: use --config-* to select the configuration %info: while satisfying libbar.1.0.0% EOE $* libbar ?foo +{ --config-id 2 } --yes 2>!; $pkg_status -r libbar >>/EOO; !libbar configured 1.0.0 foo [cfg3/] configured 1.0.0 libbaz [cfg3/] configured 1.0.0 libbuild2-bar [cfg3/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbar } : 3-configs : { $clone_cfg; cp -pr ../cfg2 ./; $cfg_create -d cfg3 --type host &cfg3/***; $cfg_link -d cfg2 cfg3; $rep_add -d cfg3 $rep/t7a && $rep_fetch -d cfg3; test.arguments = $regex.apply($test.arguments, cfg, cfg2); $* libbaz +{ --config-id 2 } 2>!; test.arguments = $regex.apply($test.arguments, cfg2, cfg); $* libbar --yes &cfg2/.bpkg/build2/*** 2>>~%EOE%; %fetched libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %fetched foo/1.0.0 \[cfg2.\]% %unpacked foo/1.0.0 \[cfg2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %configured foo/1.0.0 \[cfg2.\]% configured libbaz/1.0.0 configured libbar/1.0.0 %info: .+libbar-1.0.0.+ is up to date% updated libbar/1.0.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.0.0 foo [cfg2/] configured 1.0.0 !libbaz [cfg3/] configured 1.0.0 libbuild2-bar [cfg2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbar } } : private-config : { $clone_cfg; $* libbar <'y' 2>>~%EOE% &cfg/.bpkg/host/*** &cfg/.bpkg/build2/***; % new libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\] \(required by foo \[cfg..bpkg.host.\]\)% % new libbaz/1.0.0 \[cfg..bpkg.host.\] \(required by foo \[cfg..bpkg.host.\]\)% % new foo/1.0.0 \[cfg..bpkg.host.\] \(required by libbar\)% % new libbaz/1.0.0 \(required by libbar\)% new libbar/1.0.0 %continue\? \[Y/n\] fetched libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %fetched libbaz/1.0.0 \[cfg..bpkg.host.\]% %unpacked libbaz/1.0.0 \[cfg..bpkg.host.\]% %fetched foo/1.0.0 \[cfg..bpkg.host.\]% %unpacked foo/1.0.0 \[cfg..bpkg.host.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %configured libbaz/1.0.0 \[cfg..bpkg.host.\]% %configured foo/1.0.0 \[cfg..bpkg.host.\]% configured libbaz/1.0.0 configured libbar/1.0.0 %info: .+libbar-1.0.0.+ is up to date% updated libbar/1.0.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.0.0 foo [cfg/.bpkg/host/] configured 1.0.0 libbaz [cfg/.bpkg/host/] configured 1.0.0 libbuild2-bar [cfg/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $rep_add $rep/t7b && $rep_fetch; $* libbar <'y' 2>>~%EOE%; % upgrade libbaz/1.1.0 \[cfg..bpkg.host.\] \(required by foo \[cfg..bpkg.host.\]\)% % drop libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\] \(unused\)% % upgrade foo/1.1.0 \[cfg..bpkg.host.\] \(required by libbar\)% upgrade libbar/1.1.0 %continue\? \[Y/n\] disfigured libbar/1.0.0% %disfigured foo/1.0.0 \[cfg..bpkg.host.\]% %disfigured libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %disfigured libbaz/1.0.0 \[cfg..bpkg.host.\]% %fetched libbaz/1.1.0 \[cfg..bpkg.host.\]% %unpacked libbaz/1.1.0 \[cfg..bpkg.host.\]% %purged libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %fetched foo/1.1.0 \[cfg..bpkg.host.\]% %unpacked foo/1.1.0 \[cfg..bpkg.host.\]% fetched libbar/1.1.0 unpacked libbar/1.1.0 %configured libbaz/1.1.0 \[cfg..bpkg.host.\]% %configured foo/1.1.0 \[cfg..bpkg.host.\]% configured libbar/1.1.0 %info: .+libbar-1.1.0.+ is up to date% updated libbar/1.1.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.1.0 foo [cfg/.bpkg/host/] configured 1.1.0 libbaz [cfg/.bpkg/host/] configured 1.1.0 libbaz configured 1.0.0 available 1.1.0 EOO $pkg_drop libbar } : self-hosted-config : { $cfg_create -d cfg --type host &cfg/***; $rep_add $rep/t7a && $rep_fetch; $* libbar <'y' 2>>~%EOE%; % new libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\] \(required by foo\)% new libbaz/1.0.0 (required by foo, libbar) new foo/1.0.0 (required by libbar) new libbar/1.0.0 %continue\? \[Y/n\] fetched libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched foo/1.0.0 unpacked foo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% configured libbaz/1.0.0 configured foo/1.0.0 configured libbar/1.0.0 %info: .+libbar-1.0.0.+ is up to date% updated libbar/1.0.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.0.0 foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [cfg/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $rep_add $rep/t7b && $rep_fetch; $* libbar <'y' 2>>~%EOE%; upgrade libbaz/1.1.0 (required by foo, libbar) % drop libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\] \(unused\)% upgrade foo/1.1.0 (required by libbar) upgrade libbar/1.1.0 continue? [Y/n] disfigured libbar/1.0.0 disfigured foo/1.0.0 %disfigured libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% disfigured libbaz/1.0.0 fetched libbaz/1.1.0 unpacked libbaz/1.1.0 %purged libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% fetched foo/1.1.0 unpacked foo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 configured libbaz/1.1.0 configured foo/1.1.0 configured libbar/1.1.0 %info: .+libbar-1.1.0.+ is up to date% updated libbar/1.1.0 EOE $pkg_status -r libbar >>/EOO; !libbar configured 1.1.0 foo configured 1.1.0 libbaz configured 1.1.0 libbaz configured 1.1.0 EOO $pkg_drop libbar } } : verify-dependencies : { +$clone_root_cfg && $rep_add $rep/t7a && $rep_fetch : fail : { $cfg_create -d cfg2 &cfg2/***; $rep_add -d cfg2 $rep/t7a && $rep_fetch -d cfg2; $cfg_create -d cfg3 &cfg3/***; $rep_add -d cfg3 $rep/t7a && $rep_fetch -d cfg3; test.arguments = $regex.apply($test.arguments, cfg, cfg2); $* --yes libbar 2>!; test.arguments = $regex.apply($test.arguments, cfg2, cfg3); $* --yes libbox 2>!; $clone_cfg; $cfg_link -d cfg cfg2; $cfg_link -d cfg cfg3; test.arguments = $regex.apply($test.arguments, cfg3, cfg); $* libfix --yes 2>>~%EOE% != 0 error: package libbaz indirectly required by libfix/1.0.0 is configured in multiple configurations % info: libbaz/1.0.0 \[cfg3.\]% % info: libbaz/1.0.0 \[cfg2.\]% EOE } : succeed : { $cfg_create -d cfg2 &cfg2/***; $rep_add -d cfg2 $rep/t7b && $rep_fetch -d cfg2; $cfg_create -d cfg3 &cfg3/***; $rep_add -d cfg3 $rep/t7b && $rep_fetch -d cfg3; test.arguments = $regex.apply($test.arguments, cfg, cfg2); $* --yes libbar 2>!; test.arguments = $regex.apply($test.arguments, cfg2, cfg3); $* --yes libbox 2>!; $clone_cfg; $cfg_link -d cfg cfg2; $cfg_link -d cfg cfg3; test.arguments = $regex.apply($test.arguments, cfg3, cfg); $* libfix --yes 2>>~%EOE%; fetched libfax/1.0.0 unpacked libfax/1.0.0 fetched libfix/1.0.0 unpacked libfix/1.0.0 configured libfax/1.0.0 configured libfix/1.0.0 %info: .+libfix-1.0.0.+ is up to date% updated libfix/1.0.0 EOE $pkg_drop libfix } } : change-config : { : copy : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbaz --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbaz configured 1.0.0 EOO $rep_add -d t2 $rep/t7a && $rep_fetch -d t2; $* libbaz +{ --config-name t2 } 2>>~%EOE%; %fetched libbaz/1.0.0 \[t2.\]% %unpacked libbaz/1.0.0 \[t2.\]% %configured libbaz/1.0.0 \[t2.\]% %info: t2.+libbaz-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[t2.\]% EOE $pkg_status -d t1 --link -r >>/EOO !libbaz configured 1.0.0 !libbaz [t2/] configured 1.0.0 EOO } : copy-unhold : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbaz --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbaz configured 1.0.0 EOO $* ?libbaz +{ --config-name t2 }; $pkg_status -d t1 -r >>/EOO !libbaz configured 1.0.0 EOO } : copy-point : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbaz --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbaz configured 1.0.0 EOO $rep_add -d t2 $rep/t7a && $rep_fetch -d t2; $* foo libbaz +{ --config-name t2 } <>~%EOE%; y EOI % new libbuild2-bar/1.0.0 \[t1..bpkg.build2.\] \(required by foo\)% % new libbaz/1.0.0 \[t2.\]% new foo/1.0.0 %continue\? \[Y.n\] fetched libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %fetched libbaz/1.0.0 \[t2.\]% %unpacked libbaz/1.0.0 \[t2.\]% fetched foo/1.0.0 unpacked foo/1.0.0 %configured libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %configured libbaz/1.0.0 \[t2.\]% configured foo/1.0.0 %info: t2.+libbaz-1.0.0.+ is up to date% %info: t1.+foo-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[t2.\]% updated foo/1.0.0 EOE $pkg_status -d t1 --link -r >>/EOO !libbaz configured 1.0.0 !foo configured 1.0.0 !libbaz [t2/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 !libbaz [t2/] configured 1.0.0 EOO } : copy-unhold-point : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbaz --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbaz configured 1.0.0 EOO $* foo ?libbaz +{ --config-name t2 } <>~%EOE%; y EOI % new libbuild2-bar/1.0.0 \[t1..bpkg.build2.\] \(required by foo\)% % new libbaz/1.0.0 \[t2.\]% % new foo/1.0.0% %continue\? \[Y.n\] fetched libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %fetched libbaz/1.0.0 \[t2.\]% %unpacked libbaz/1.0.0 \[t2.\]% fetched foo/1.0.0 unpacked foo/1.0.0 %configured libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %configured libbaz/1.0.0 \[t2.\]% configured foo/1.0.0 %info: t2.+libbaz-1.0.0.+ is up to date% %info: t1.+foo-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[t2.\]% updated foo/1.0.0 EOE $pkg_status -d t1 -r >>/EOO !libbaz configured 1.0.0 !foo configured 1.0.0 libbaz [t2/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 EOO } : copy-repoint : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d t1 h1; $cfg_link -d t1 h2; $cfg_link -d t2 h1; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; $rep_add -d t2 $rep/t7a && $rep_fetch -d t2; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbar ?foo +{ --config-name h1 } <>~%EOE%; y EOI % new libbuild2-bar/1.0.0 \[h1..bpkg.build2.\] \(required by foo \[h1.\]\)% % new libbaz/1.0.0 \[h1.\] \(required by foo \[h1.\]\)% % new foo/1.0.0 \[h1.\]% new libbaz/1.0.0 (required by libbar) new libbar/1.0.0 %continue\? \[Y/n\] fetched libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %fetched libbaz/1.0.0 \[h1.\]% %unpacked libbaz/1.0.0 \[h1.\]% %fetched foo/1.0.0 \[h1.\]% %unpacked foo/1.0.0 \[h1.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %configured libbaz/1.0.0 \[h1.\]% %configured foo/1.0.0 \[h1.\]% configured libbaz/1.0.0 configured libbar/1.0.0 %info: h1.+foo-1.0.0.+ is up to date% %info: t1.+libbar-1.0.0.+ is up to date% %updated foo/1.0.0 \[h1.\]% updated libbar/1.0.0 EOE $pkg_status -d t1 -r >>/EOO; !libbar configured 1.0.0 foo [h1/] configured 1.0.0 libbaz [h1/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO test.arguments = $regex.apply($test.arguments, t1, t2); $* libbox ?foo +{ --config-name h1 } <>~%EOE%; y EOI % update foo/1.0.0 \[h1.\]% new libbaz/1.0.0 (required by libbox) new libbox/1.0.0 continue? [Y/n] fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbox/1.0.0 unpacked libbox/1.0.0 configured libbaz/1.0.0 configured libbox/1.0.0 %info: h1.+foo-1.0.0.+ is up to date% %info: t2.+libbox-1.0.0.+ is up to date% %updated foo/1.0.0 \[h1.\]% updated libbox/1.0.0 EOE $pkg_status -d t2 -r >>/EOO; !libbox configured 1.0.0 foo [h1/] configured 1.0.0 libbaz [h1/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO test.arguments = $regex.apply($test.arguments, t2, t1); $* ?foo +{ --config-name h2 } <>~%EOE%; y y EOI % new libbuild2-bar/1.0.0 \[h2..bpkg.build2.\] \(required by foo \[h2.\]\)% % new libbaz/1.0.0 \[h2.\] \(required by foo \[h2.\]\)% % new foo/1.0.0 \[h2.\]% % reconfigure libbar/1.0.0 \(dependent of foo \[h2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured libbar/1.0.0 %fetched libbuild2-bar/1.0.0 \[h2..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[h2..bpkg.build2.\]% %fetched libbaz/1.0.0 \[h2.\]% %unpacked libbaz/1.0.0 \[h2.\]% %fetched foo/1.0.0 \[h2.\]% %unpacked foo/1.0.0 \[h2.\]% %configured libbuild2-bar/1.0.0 \[h2..bpkg.build2.\]% %configured libbaz/1.0.0 \[h2.\]% %configured foo/1.0.0 \[h2.\]% configured libbar/1.0.0 %info: h2.+foo-1.0.0.+ is up to date% %info: t1.+libbar-1.0.0.+ is up to date% %updated foo/1.0.0 \[h2.\]% updated libbar/1.0.0 EOE $pkg_status -d t1 -r >>/EOO; !libbar configured 1.0.0 foo [h2/] configured 1.0.0 libbaz [h2/] configured 1.0.0 libbuild2-bar [h2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $pkg_status -d t2 -r >>/EOO !libbox configured 1.0.0 foo [h1/] configured 1.0.0 libbaz [h1/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO } : copy-repoint-drop : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* foo --yes 2>!; $pkg_status -d t1 -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 EOO $rep_add -d t2 $rep/t7a && $rep_fetch -d t2; $* libbaz +{ --config-name t2 } <>~%EOE%; y y EOI % new libbaz/1.0.0 \[t2.\]% drop libbaz/1.0.0 (unused) % reconfigure foo/1.0.0 \(dependent of libbaz \[t2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured foo/1.0.0 disfigured libbaz/1.0.0 %fetched libbaz/1.0.0 \[t2.\]% %unpacked libbaz/1.0.0 \[t2.\]% purged libbaz/1.0.0 %configured libbaz/1.0.0 \[t2.\]% configured foo/1.0.0 %info: t2.+libbaz-1.0.0.+ is up to date% %info: t1.+foo-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[t2.\]% updated foo/1.0.0 EOE $pkg_status -d t1 --link -r >>/EOO !foo configured 1.0.0 !libbaz [t2/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 !libbaz [t2/] configured 1.0.0 EOO } : drop-repointed : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* foo --yes 2>!; $pkg_status -d t1 -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 EOO $rep_add -d t2 $rep/t7a && $rep_fetch -d t2; $* ?foo libbaz +{ --config-name t2 } <>~%EOE%; y EOI % new libbaz/1.0.0 \[t2.\]% % drop libbuild2-bar/1.0.0 \[t1..bpkg.build2.\] \(unused\)% drop libbaz/1.0.0 (unused) drop foo/1.0.0 (unused) continue? [Y/n] disfigured foo/1.0.0 disfigured libbaz/1.0.0 %disfigured libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %fetched libbaz/1.0.0 \[t2.\]% %unpacked libbaz/1.0.0 \[t2.\]% %purged libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% purged libbaz/1.0.0 purged foo/1.0.0 %configured libbaz/1.0.0 \[t2.\]% %info: t2.+libbaz-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[t2.\]% EOE $pkg_status -d t1 --link -r >>/EOO !libbaz [t2/] configured 1.0.0 EOO } : dependency-repointed : { $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d h1 h2; $rep_add -d h1 $rep/t7a && $rep_fetch -d h1; test.arguments = $regex.apply($test.arguments, cfg, h1); $* foo --yes 2>!; $pkg_status -d h1 -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 EOO $rep_add -d h2 $rep/t7a && $rep_fetch -d h2; $* libbar libbaz +{ --config-name h2 } <>~%EOE%; y EOI % new libbaz/1.0.0 \[h2.\]% drop libbaz/1.0.0 (unused) reconfigure/update foo/1.0.0 (required by libbar) new libbar/1.0.0 continue? [Y/n] disfigured foo/1.0.0 disfigured libbaz/1.0.0 %fetched libbaz/1.0.0 \[h2.\]% %unpacked libbaz/1.0.0 \[h2.\]% purged libbaz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbaz/1.0.0 \[h2.\]% configured foo/1.0.0 configured libbar/1.0.0 %info: h2.+libbaz-1.0.0.+ is up to date% %info: h1.+libbar-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[h2.\]% updated libbar/1.0.0 EOE $pkg_status -d h1 --link -r >>/EOO !foo configured 1.0.0 !libbaz [h2/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 !libbar configured 1.0.0 !foo configured 1.0.0 !libbaz [h2/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 !libbaz [h2/] configured 1.0.0 !libbaz [h2/] configured 1.0.0 EOO } : dependency-repointed-system : { $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d h1 h2; $rep_add -d h1 $rep/t7a && $rep_fetch -d h1; test.arguments = $regex.apply($test.arguments, cfg, h1); $* foo --yes 2>!; $pkg_status -d h1 -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 EOO $* libbar '?sys:foo/1.2.0' +{ --config-name h1 } \ ?libbaz +{ --config-name h2 } <>~%EOE%; y EOI % new libbaz/1.0.0 \[h2.\]% % drop libbuild2-bar/1.0.0 \[h1..bpkg.build2.\] \(unused\)% drop libbaz/1.0.0 (unused) reconfigure/unhold sys:foo/1.2.0 new libbar/1.0.0 continue? [Y/n] disfigured foo/1.0.0 disfigured libbaz/1.0.0 %disfigured libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %fetched libbaz/1.0.0 \[h2.\]% %unpacked libbaz/1.0.0 \[h2.\]% %purged libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% purged libbaz/1.0.0 purged foo/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbaz/1.0.0 \[h2.\]% configured sys:foo/1.2.0 configured libbar/1.0.0 %info: h2.+libbaz-1.0.0.+ is up to date% %info: h1.+libbar-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[h2.\]% updated libbar/1.0.0 EOE $pkg_status -d h1 -r >>/EOO; !libbar configured 1.0.0 foo configured,system !1.2.0 libbaz [h2/] configured 1.0.0 EOO $* ?foo ?libbaz <>~%EOE%; y y EOI % drop libbaz/1.0.0 \[h2.\] \(unused\)% % new libbuild2-bar/1.0.0 \[h1..bpkg.build2.\] \(required by foo\)% new libbaz/1.0.0 downgrade foo/1.0.0 reconfigure libbar/1.0.0 (dependent of libbaz) continue? [Y/n] update dependent packages? [Y/n] disfigured libbar/1.0.0 purged foo/1.2.0 %disfigured libbaz/1.0.0 \[h2.\]% %purged libbaz/1.0.0 \[h2.\]% %fetched libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched foo/1.0.0 unpacked foo/1.0.0 %configured libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% configured libbaz/1.0.0 configured foo/1.0.0 configured libbar/1.0.0 %info: h1.+libbaz-1.0.0.+ is up to date% %info: h1.+foo-1.0.0.+ is up to date% %info: h1.+libbar-1.0.0.+ is up to date% updated libbaz/1.0.0 updated foo/1.0.0 updated libbar/1.0.0 EOE $pkg_status -d h1 -r >>/EOO !libbar configured 1.0.0 foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO } : orphan-repointed : { $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d h1 h2; $rep_add -d h1 $rep/t7b && $rep_fetch -d h1; test.arguments = $regex.apply($test.arguments, cfg, h1); $* foo --yes 2>!; $rep_remove -d h1 $rep/t7b; $rep_add -d h1 $rep/t7a && $rep_fetch -d h1; $rep_add -d h2 $rep/t7a && $rep_fetch -d h2; $* libbaz +{ --config-name h2 } 2>>EOE != 0 error: package foo/1.1.0 is orphaned info: explicitly upgrade it to a new version info: while satisfying foo/1.1.0 EOE } : unhold-repointed : { $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d h1 h2; $rep_add -d h1 $rep/t7a && $rep_fetch -d h1; test.arguments = $regex.apply($test.arguments, cfg, h1); $* foo --yes 2>!; $pkg_status -d h1 -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 EOO $rep_add -d h2 $rep/t7a && $rep_fetch -d h2; $* libbar ?foo libbaz +{ --config-name h2 } <>~%EOE%; y EOI % new libbaz/1.0.0 \[h2.\]% drop libbaz/1.0.0 (unused) reconfigure/update/unhold foo/1.0.0 new libbar/1.0.0 continue? [Y/n] disfigured foo/1.0.0 disfigured libbaz/1.0.0 %fetched libbaz/1.0.0 \[h2.\]% %unpacked libbaz/1.0.0 \[h2.\]% purged libbaz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 %configured libbaz/1.0.0 \[h2.\]% configured foo/1.0.0 configured libbar/1.0.0 %info: h2.+libbaz-1.0.0.+ is up to date% %info: h1.+foo-1.0.0.+ is up to date% %info: h1.+libbar-1.0.0.+ is up to date% %updated libbaz/1.0.0 \[h2.\]% updated foo/1.0.0 updated libbar/1.0.0 EOE $pkg_status -d h1 --link -r >>/EOO !libbar configured 1.0.0 foo configured 1.0.0 !libbaz [h2/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 !libbaz [h2/] configured 1.0.0 !libbaz [h2/] configured 1.0.0 EOO } : satisfy : { $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d h1 h2; $rep_add -d h2 $rep/t7b && $rep_fetch -d h2; test.arguments = $regex.apply($test.arguments, cfg, h2); $* foo --yes 2>!; $rep_add -d h1 $rep/t7a && $rep_fetch -d h1; test.arguments = $regex.apply($test.arguments, h2, h1); $* foo ?libbaz <>~%EOE%; y EOI % new libbuild2-bar/1.0.0 \[h1..bpkg.build2.\] \(required by foo\)% % new libbaz/1.0.0% % new foo/1.0.0% %continue\? \[Y.n\] fetched libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched foo/1.0.0 unpacked foo/1.0.0 %configured libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% configured libbaz/1.0.0 configured foo/1.0.0 %info: h1.+libbaz-1.0.0.+ is up to date% %info: h1.+foo-1.0.0.+ is up to date% updated libbaz/1.0.0 updated foo/1.0.0 EOE $pkg_status -d h1 --link -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 !foo [h2/] configured 1.1.0 libbaz [h2/] configured 1.1.0 EOO $* ?libbaz/1.0.0 +{ --config-name h2 } 2>>~%EOE% != 0; %error: unable to downgrade package libbaz/1.1.0 \[h2.\] to 1.0.0% % info: because package foo \[h2.\] depends on \(libbaz \^1.1.0\)% info: explicitly request up/downgrade of package foo info: or explicitly specify package libbaz version to manually satisfy these constraints EOE $* ?libbaz +{ --config-name h2 } <>~%EOE%; y n EOI % update libbaz/1.1.0 \[h2.\]% drop libbaz/1.0.0 (unused) % reconfigure foo/1.0.0 \(dependent of libbaz \[h2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured foo/1.0.0 disfigured libbaz/1.0.0 purged libbaz/1.0.0 configured foo/1.0.0 %info: h2.+libbaz-1.1.0.+ is up to date% %updated libbaz/1.1.0 \[h2.\]% EOE $pkg_status -d h1 --link -r >>/EOO !foo configured 1.0.0 libbaz [h2/] configured 1.1.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 !foo [h2/] configured 1.1.0 libbaz [h2/] configured 1.1.0 EOO } : upgrade-repointed : { $cfg_create -d t1 --name t1 &t1/***; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbar --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbar configured 1.0.0 foo [t1/.bpkg/host/] configured 1.0.0 libbaz [t1/.bpkg/host/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_link -d t1 h1 2>!; $rep_add -d t1 $rep/t7b && $rep_fetch -d t1; $* libbar ?foo +{ --config-name h1 } <>~%EOE%; y EOI % new libbaz/1.1.0 \[h1.\] \(required by foo \[h1.\]\)% % new foo/1.1.0 \[h1.\]% % drop libbuild2-bar/1.0.0 \[t1..bpkg.build2.\] \(unused\)% % drop libbaz/1.0.0 \[t1..bpkg.host.\] \(unused\)% % drop foo/1.0.0 \[t1..bpkg.host.\] \(unused\)% upgrade libbar/1.1.0 continue? [Y/n] disfigured libbar/1.0.0 %disfigured foo/1.0.0 \[t1..bpkg.host.\]% %disfigured libbaz/1.0.0 \[t1..bpkg.host.\]% %disfigured libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %fetched libbaz/1.1.0 \[h1.\]% %unpacked libbaz/1.1.0 \[h1.\]% %fetched foo/1.1.0 \[h1.\]% %unpacked foo/1.1.0 \[h1.\]% %purged libbuild2-bar/1.0.0 \[t1..bpkg.build2.\]% %purged libbaz/1.0.0 \[t1..bpkg.host.\]% %purged foo/1.0.0 \[t1..bpkg.host.\]% fetched libbar/1.1.0 unpacked libbar/1.1.0 %configured libbaz/1.1.0 \[h1.\]% %configured foo/1.1.0 \[h1.\]% configured libbar/1.1.0 %info: h1.+foo-1.1.0.+ is up to date% %info: t1.+libbar-1.1.0.+ is up to date% %updated foo/1.1.0 \[h1.\]% updated libbar/1.1.0 EOE $pkg_status -d t1 -r >>/EOO !libbar configured 1.1.0 foo [h1/] configured 1.1.0 libbaz [h1/] configured 1.1.0 libbaz configured 1.0.0 available 1.1.0 EOO } : upgrade-repointed-dependency : { $cfg_create -d h1 --type host --name h1 &h1/***; $cfg_create -d h2 --type host --name h2 &h2/***; $cfg_link -d h1 h2; $rep_add -d h1 $rep/t7a && $rep_fetch -d h1; test.arguments = $regex.apply($test.arguments, cfg, h1); $* libbar --yes 2>!; $pkg_status -d h1 -r >>/EOO; !libbar configured 1.0.0 foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $rep_add -d h1 $rep/t7b && $rep_fetch -d h1; $* libbar ?foo ?libbaz +{ --config-name h2 } <>~%EOE%; y y EOI % new libbaz/1.1.0 \[h2.\]% % drop libbuild2-bar/1.0.0 \[h1..bpkg.build2.\] \(unused\)% drop libbaz/1.0.0 (unused) upgrade foo/1.1.0 upgrade libbar/1.1.0 continue? [Y/n] disfigured libbar/1.0.0 disfigured foo/1.0.0 disfigured libbaz/1.0.0 %disfigured libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %fetched libbaz/1.1.0 \[h2.\]% %unpacked libbaz/1.1.0 \[h2.\]% %purged libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% purged libbaz/1.0.0 fetched foo/1.1.0 unpacked foo/1.1.0 fetched libbar/1.1.0 unpacked libbar/1.1.0 %configured libbaz/1.1.0 \[h2.\]% configured foo/1.1.0 configured libbar/1.1.0 %info: h2.+libbaz-1.1.0.+ is up to date% %info: h1.+foo-1.1.0.+ is up to date% %info: h1.+libbar-1.1.0.+ is up to date% %updated libbaz/1.1.0 \[h2.\]% updated foo/1.1.0 updated libbar/1.1.0 EOE $pkg_status -d h1 -r >>/EOO !libbar configured 1.1.0 foo configured 1.1.0 libbaz [h2/] configured 1.1.0 libbaz [h2/] configured 1.1.0 EOO } : upgrade-prerequisite-replacement : { $cfg_create -d t1 --name t1 &t1/***; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbar --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbar configured 1.0.0 foo [t1/.bpkg/host/] configured 1.0.0 libbaz [t1/.bpkg/host/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $cfg_create -d t2 --name t2 &t2/***; $rep_add -d t2 $rep/t7a && $rep_fetch -d t2; test.arguments = $regex.apply($test.arguments, t1, t2); $* libbaz --yes 2>!; $cfg_link -d t1 t2 2>!; $rep_add -d t2 $rep/t7b && $rep_fetch -d t2; test.arguments = $regex.apply($test.arguments, t2, t1); $* libbaz +{ --config-name t2 } <>~%EOE%; y y EOI % upgrade libbaz/1.1.0 \[t2.\]% drop libbaz/1.0.0 (unused) % reconfigure libbar/1.0.0 \(dependent of libbaz \[t2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured libbar/1.0.0 disfigured libbaz/1.0.0 %disfigured libbaz/1.0.0 \[t2.\]% %fetched libbaz/1.1.0 \[t2.\]% %unpacked libbaz/1.1.0 \[t2.\]% purged libbaz/1.0.0 %configured libbaz/1.1.0 \[t2.\]% configured libbar/1.0.0 %info: t2.+libbaz-1.1.0.+ is up to date% %info: t1.+libbar-1.0.0.+ is up to date% %updated libbaz/1.1.0 \[t2.\]% updated libbar/1.0.0 EOE $pkg_status -d t1 --link -r >>/EOO !libbar configured 1.0.0 foo [t1/.bpkg/host/] configured 1.0.0 libbaz [t1/.bpkg/host/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 !libbaz [t2/] configured 1.1.0 !libbaz [t2/] configured 1.1.0 EOO } : copy-upgrade-dependency-tree : { $cfg_create -d t1 --name t1 &t1/***; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libbar --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libbar configured 1.0.0 foo [t1/.bpkg/host/] configured 1.0.0 libbaz [t1/.bpkg/host/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $cfg_create -d t2 --name t2 &t2/***; $cfg_link -d t1 t2 2>!; $rep_add -d t2 $rep/t7b && $rep_fetch -d t2; $* libbar +{ --config-name t2 } <>~%EOE%; y EOI % new libbaz/1.1.0 \[t2..bpkg.host.\] \(required by foo \[t2..bpkg.host.\]\)% % new foo/1.1.0 \[t2..bpkg.host.\] \(required by libbar \[t2.\]\)% % new libbaz/1.1.0 \[t2.\] \(required by libbar \[t2.\]\)% % new libbar/1.1.0 \[t2.\]% %continue\? \[Y/n\] fetched libbaz/1.1.0 \[t2..bpkg.host.\]% %unpacked libbaz/1.1.0 \[t2..bpkg.host.\]% %fetched foo/1.1.0 \[t2..bpkg.host.\]% %unpacked foo/1.1.0 \[t2..bpkg.host.\]% %fetched libbaz/1.1.0 \[t2.\]% %unpacked libbaz/1.1.0 \[t2.\]% %fetched libbar/1.1.0 \[t2.\]% %unpacked libbar/1.1.0 \[t2.\]% %configured libbaz/1.1.0 \[t2..bpkg.host.\]% %configured foo/1.1.0 \[t2..bpkg.host.\]% %configured libbaz/1.1.0 \[t2.\]% %configured libbar/1.1.0 \[t2.\]% %info: t2.+libbar-1.1.0.+ is up to date% %updated libbar/1.1.0 \[t2.\]% EOE $pkg_status -d t1 --link -r >>/EOO !libbar configured 1.0.0 foo [t1/.bpkg/host/] configured 1.0.0 libbaz [t1/.bpkg/host/] configured 1.0.0 libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 !libbar [t2/] configured 1.1.0 foo [t2/.bpkg/host/] configured 1.1.0 libbaz [t2/.bpkg/host/] configured 1.1.0 libbaz [t2/] configured 1.1.0 EOO } : repointed-dependent-indirect-dependency-upgrade : { $cfg_create -d t1 --name t1 &t1/***; $cfg_create -d t2 --name t2 &t2/***; $cfg_create -d h1 --name h1 --type host &h1/***; $cfg_link -d t1 t2 2>!; $cfg_link -d t1 h1 2>!; $cfg_link -d t2 h1 2>!; $rep_add -d t1 $rep/t7a && $rep_fetch -d t1; test.arguments = $regex.apply($test.arguments, cfg, t1); $* libfix --yes 2>!; $pkg_status -d t1 -r >>/EOO; !libfix configured 1.0.0 libbar configured 1.0.0 foo [h1/] configured 1.0.0 libbaz [h1/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 libbox configured 1.0.0 foo [h1/] configured 1.0.0 libbaz [h1/] configured 1.0.0 libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 libfax configured 1.0.0 EOO $rep_add -d t1 $rep/t7b && $rep_fetch -d t1; $rep_add -d t2 $rep/t7b && $rep_fetch -d t2; $rep_add -d h1 $rep/t7b && $rep_fetch -d h1; $* libfix libfax +{ --config-name t2 } foo +{ --config-name h1 } <>~%EOE%; y y EOI % new libfax/1.0.0 \[t2.\]% % upgrade libbaz/1.1.0 \[h1.\] \(required by foo \[h1.\]\)% % drop libbuild2-bar/1.0.0 \[h1..bpkg.build2.\] \(unused\)% % upgrade foo/1.1.0 \[h1.\]% % reconfigure libbox \(dependent of foo \[h1.\]\)% % reconfigure libbar \(dependent of foo \[h1.\]\)% % drop libfax/1.0.0 \(unused\)% reconfigure/update libfix/1.0.0 continue? [Y/n] update dependent packages? [Y/n] disfigured libfix/1.0.0 disfigured libfax/1.0.0 disfigured libbar/1.0.0 disfigured libbox/1.0.0 %disfigured foo/1.0.0 \[h1.\]% %disfigured libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %disfigured libbaz/1.0.0 \[h1.\]% %fetched libfax/1.0.0 \[t2.\]% %unpacked libfax/1.0.0 \[t2.\]% %fetched libbaz/1.1.0 \[h1.\]% %unpacked libbaz/1.1.0 \[h1.\]% %purged libbuild2-bar/1.0.0 \[h1..bpkg.build2.\]% %fetched foo/1.1.0 \[h1.\]% %unpacked foo/1.1.0 \[h1.\]% purged libfax/1.0.0 %configured libfax/1.0.0 \[t2.\]% %configured libbaz/1.1.0 \[h1.\]% %configured foo/1.1.0 \[h1.\]% configured libbox/1.0.0 configured libbar/1.0.0 configured libfix/1.0.0 %info: t2.+libfax-1.0.0.+ is up to date% %info: h1.+foo-1.1.0.+ is up to date% %info: t1.+libfix-1.0.0.+ is up to date% %info: t1.+libbox-1.0.0.+ is up to date% %info: t1.+libbar-1.0.0.+ is up to date% %updated libfax/1.0.0 \[t2.\]% %updated foo/1.1.0 \[h1.\]% updated libfix/1.0.0 updated libbox/1.0.0 updated libbar/1.0.0 EOE $pkg_status -d t1 --link -r >>/EOO !libfix configured 1.0.0 libbar configured 1.0.0 available 1.1.0 !foo [h1/] configured 1.1.0 libbaz [h1/] configured 1.1.0 libbaz configured 1.0.0 available 1.1.0 libbox configured 1.0.0 available 1.1.0 !foo [h1/] configured 1.1.0 libbaz [h1/] configured 1.1.0 libbaz configured 1.0.0 available 1.1.0 !libfax [t2/] configured 1.0.0 !libfax [t2/] configured 1.0.0 !foo [h1/] configured 1.1.0 libbaz [h1/] configured 1.1.0 EOO } } : build2-module-dep : { +$clone_root_cfg && $rep_add $rep/t7a && $rep_fetch : private-config : { $clone_cfg; $* libbiz <>~%EOE% &cfg/.bpkg/build2/*** &cfg/.bpkg/host/***; y EOI % new libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\] \(required by foo \[cfg..bpkg.host.\]\)% % new libbaz/1.0.0 \[cfg..bpkg.host.\] \(required by foo \[cfg..bpkg.host.\]\)% % new foo/1.0.0 \[cfg..bpkg.host.\] \(required by libbiz\)% % new libbaz/1.0.0 \[cfg..bpkg.build2.\] \(required by libbuild2-foo \[cfg..bpkg.build2.\]\)% % new libbuild2-foo/1.0.0 \[cfg..bpkg.build2.\] \(required by libbiz\)% new libbaz/1.0.0 (required by libbiz) new libbiz/1.0.0 %continue\? \[Y/n\] fetched libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %fetched libbaz/1.0.0 \[cfg..bpkg.host.\]% %unpacked libbaz/1.0.0 \[cfg..bpkg.host.\]% %fetched foo/1.0.0 \[cfg..bpkg.host.\]% %unpacked foo/1.0.0 \[cfg..bpkg.host.\]% %fetched libbaz/1.0.0 \[cfg..bpkg.build2.\]% %unpacked libbaz/1.0.0 \[cfg..bpkg.build2.\]% %fetched libbuild2-foo/1.0.0 \[cfg..bpkg.build2.\]% %unpacked libbuild2-foo/1.0.0 \[cfg..bpkg.build2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg..bpkg.build2.\]% %configured libbaz/1.0.0 \[cfg..bpkg.host.\]% %configured foo/1.0.0 \[cfg..bpkg.host.\]% %configured libbaz/1.0.0 \[cfg..bpkg.build2.\]% %configured libbuild2-foo/1.0.0 \[cfg..bpkg.build2.\]% configured libbaz/1.0.0 configured libbiz/1.0.0 %info: cfg.+libbiz-1.0.0.+ is up to date% updated libbiz/1.0.0 EOE $pkg_status -d cfg -r >>/EOO; !libbiz configured 1.0.0 foo [cfg/.bpkg/host/] configured 1.0.0 libbaz [cfg/.bpkg/host/] configured 1.0.0 libbuild2-bar [cfg/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 libbuild2-foo [cfg/.bpkg/build2/] configured 1.0.0 libbaz [cfg/.bpkg/build2/] configured 1.0.0 EOO $pkg_drop libbiz } : external-config : { $clone_cfg; $cfg_create -d cfg2 --type build2 --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $cfg_create -d cfg3 --type host --name cfg3 &cfg3/***; $cfg_link -d cfg cfg3; $* libbiz <>~%EOE%; y EOI % new libbuild2-bar/1.0.0 \[cfg3..bpkg.build2.\] \(required by foo \[cfg3.\]\)% % new libbaz/1.0.0 \[cfg3.\] \(required by foo \[cfg3.\]\)% % new foo/1.0.0 \[cfg3.\] \(required by libbiz\)% % new libbaz/1.0.0 \[cfg2.\] \(required by libbuild2-foo \[cfg2.\]\)% % new libbuild2-foo/1.0.0 \[cfg2.\] \(required by libbiz\)% new libbaz/1.0.0 (required by libbiz) new libbiz/1.0.0 %continue\? \[Y/n\] fetched libbuild2-bar/1.0.0 \[cfg3..bpkg.build2.\]% %unpacked libbuild2-bar/1.0.0 \[cfg3..bpkg.build2.\]% %fetched libbaz/1.0.0 \[cfg3.\]% %unpacked libbaz/1.0.0 \[cfg3.\]% %fetched foo/1.0.0 \[cfg3.\]% %unpacked foo/1.0.0 \[cfg3.\]% %fetched libbaz/1.0.0 \[cfg2.\]% %unpacked libbaz/1.0.0 \[cfg2.\]% %fetched libbuild2-foo/1.0.0 \[cfg2.\]% %unpacked libbuild2-foo/1.0.0 \[cfg2.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 %configured libbuild2-bar/1.0.0 \[cfg3..bpkg.build2.\]% %configured libbaz/1.0.0 \[cfg3.\]% %configured foo/1.0.0 \[cfg3.\]% %configured libbaz/1.0.0 \[cfg2.\]% %configured libbuild2-foo/1.0.0 \[cfg2.\]% configured libbaz/1.0.0 configured libbiz/1.0.0 %info: cfg.+libbiz-1.0.0.+ is up to date% updated libbiz/1.0.0 EOE $pkg_status -d cfg -r >>/EOO; !libbiz configured 1.0.0 foo [cfg3/] configured 1.0.0 libbaz [cfg3/] configured 1.0.0 libbuild2-bar [cfg3/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 libbuild2-foo [cfg2/] configured 1.0.0 libbaz [cfg2/] configured 1.0.0 EOO $pkg_drop libbiz } : build2-config : { $cfg_create -d cfg --type build2 &cfg/***; $rep_add $rep/t7a && $rep_fetch; $* libbiz 2>>EOE != 0 error: build-time dependency foo in build system module configuration info: build system modules cannot have build-time dependencies info: while satisfying libbiz/1.0.0 EOE } : duplicates : { $cfg_create -d cfg &cfg/***; $cfg_create -d cfg2 --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $cfg_create -d cfg3 --name cfg3 &cfg3/***; $cfg_link -d cfg cfg3; $* "libbiz@$rep/t7a" +{ --config-name cfg2 } --yes --trust-yes 2>!; $* "libbuz@$rep/t7a" +{ --config-name cfg3 } --yes --trust-yes 2>!; $* "libbix@$rep/t7a" --trust-yes 2>>/~%EOE% != 0 %(added|fetching).+%{2} error: building build system module libbuild2-bar in multiple configurations % info: cfg(2|3)/.bpkg/build2/%{2} EOE } } : multiple-configs : { cfg_uuid = '18f48b4b-b5d9-4712-b98c-1930df1c4228' cfg2_uuid = '28f48b4b-b5d9-4712-b98c-1930df1c4228' cfg3_uuid = '38f48b4b-b5d9-4712-b98c-1930df1c4228' cfg4_uuid = '48f48b4b-b5d9-4712-b98c-1930df1c4228' cfg5_uuid = '58f48b4b-b5d9-4712-b98c-1930df1c4228' : 2-current-configs : { $cfg_create -d cfg --uuid $cfg_uuid &cfg/***; $cfg_create -d cfg2 --uuid $cfg2_uuid &cfg2/***; $cfg_create -d cfg3 --uuid $cfg3_uuid --type build2 &cfg3/***; $cfg_link -d cfg cfg3; $cfg_link -d cfg2 cfg3; $rep_add $rep/t7a && $rep_fetch; $rep_add -d cfg2 $rep/t7a && $rep_fetch -d cfg2; test.arguments += -d cfg2; # Now refers 2 current dirs: cfg/ and cfg2/. # While at it, make sure --config-uuid is only allowed for multiple # current configurations. # $* foo +{ --config-id 1 } 2>>EOE != 0; error: --config-id specified for multiple current configurations info: use --config-uuid to specify configurations in this mode info: while validating options for foo EOE $* foo +{ --config-name cfg2 } 2>>EOE != 0; error: --config-name specified for multiple current configurations info: use --config-uuid to specify configurations in this mode info: while validating options for foo EOE # While at it, make sure a package must have the configuration # specified. # $* foo 2>>EOE != 0; error: no configuration specified for foo info: configuration must be explicitly specified for each package in multi-configurations mode info: use --config-uuid to specify its configuration EOE # Build foo in cfg/ and cfg2/ with its libbaz dependency colocated and # libbuild2-bar dependency shared in cfg3/. # $* foo +{ --config-uuid $cfg_uuid --config-uuid $cfg2_uuid } <>~%EOE%; y EOI % new libbaz/1.0.0 \[cfg.\] \(required by foo \[cfg.\]\)% % new libbuild2-bar/1.0.0 \[cfg3.\] \(required by (foo \[cfg2.\], foo \[cfg.\]\)|foo \[cfg.\], foo \[cfg2.\]\))% % new foo/1.0.0 \[cfg.\]% % new libbaz/1.0.0 \[cfg2.\] \(required by foo \[cfg2.\]\)% % new foo/1.0.0 \[cfg2.\]% %continue\? \[Y/n\] fetched libbaz/1.0.0 \[cfg.\]% %unpacked libbaz/1.0.0 \[cfg.\]% %fetched libbuild2-bar/1.0.0 \[cfg3.\]% %unpacked libbuild2-bar/1.0.0 \[cfg3.\]% %fetched foo/1.0.0 \[cfg.\]% %unpacked foo/1.0.0 \[cfg.\]% %fetched libbaz/1.0.0 \[cfg2.\]% %unpacked libbaz/1.0.0 \[cfg2.\]% %fetched foo/1.0.0 \[cfg2.\]% %unpacked foo/1.0.0 \[cfg2.\]% %configured libbaz/1.0.0 \[cfg.\]% %configured libbuild2-bar/1.0.0 \[cfg3.\]% %configured foo/1.0.0 \[cfg.\]% %configured libbaz/1.0.0 \[cfg2.\]% %configured foo/1.0.0 \[cfg2.\]% %info: cfg.+foo-1.0.0.+ is up to date% %info: cfg2.+foo-1.0.0.+ is up to date% %updated foo/1.0.0 \[cfg.\]% %updated foo/1.0.0 \[cfg2.\]% EOE $pkg_status -d cfg -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [cfg3/] configured 1.0.0 EOO $pkg_status -d cfg2 -r >>/EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbuild2-bar [cfg3/] configured 1.0.0 EOO # Move libbuild2-bar to cfg4/ and libbaz to cfg5/. # $cfg_create -d cfg4 --uuid $cfg4_uuid --type build2 &cfg4/***; $cfg_create -d cfg5 --uuid $cfg5_uuid &cfg5/***; $cfg_link -d cfg cfg4; $cfg_link -d cfg2 cfg4; $cfg_link -d cfg cfg5; $cfg_link -d cfg2 cfg5; $* ?libbuild2-bar +{ --config-uuid $cfg4_uuid } \ ?libbaz +{ --config-uuid $cfg5_uuid } <>~%EOE%; y y EOI % new libbuild2-bar/1.0.0 \[cfg4.\]% % new libbaz/1.0.0 \[cfg5.\]% % drop libbaz/1.0.0 \[cfg2.\] \(unused\)% % drop libbuild2-bar/1.0.0 \[cfg3.\] \(unused\)% % reconfigure foo/1.0.0 \[cfg2.\] \(dependent of libbaz \[cfg5.\], libbuild2-bar \[cfg4.\]\)% % drop libbaz/1.0.0 \[cfg.\] \(unused\)% % reconfigure foo/1.0.0 \[cfg.\] \(dependent of libbaz \[cfg5.\], libbuild2-bar \[cfg4.\]\)% %continue\? \[Y/n\] update dependent packages\? \[Y/n\] disfigured foo/1.0.0 \[cfg.\]% %disfigured libbaz/1.0.0 \[cfg.\]% %disfigured foo/1.0.0 \[cfg2.\]% %disfigured libbuild2-bar/1.0.0 \[cfg3.\]% %disfigured libbaz/1.0.0 \[cfg2.\]% %fetched libbuild2-bar/1.0.0 \[cfg4.\]% %unpacked libbuild2-bar/1.0.0 \[cfg4.\]% %fetched libbaz/1.0.0 \[cfg5.\]% %unpacked libbaz/1.0.0 \[cfg5.\]% %purged libbaz/1.0.0 \[cfg2.\]% %purged libbuild2-bar/1.0.0 \[cfg3.\]% %purged libbaz/1.0.0 \[cfg.\]% %configured libbuild2-bar/1.0.0 \[cfg4.\]% %configured libbaz/1.0.0 \[cfg5.\]% %configured foo/1.0.0 \[cfg2.\]% %configured foo/1.0.0 \[cfg.\]% %info: cfg4.+libbuild2-bar-1.0.0.+is up to date% %info: cfg5.+libbaz-1.0.0.+ is up to date% %info: cfg2.+foo-1.0.0.+ is up to date% %info: cfg.+foo-1.0.0.+ is up to date% %updated libbuild2-bar/1.0.0 \[cfg4.\]% %updated libbaz/1.0.0 \[cfg5.\]% %updated foo/1.0.0 \[cfg2.\]% %updated foo/1.0.0 \[cfg.\]% EOE $pkg_status -d cfg -r >>/EOO; !foo configured 1.0.0 libbaz [cfg5/] configured 1.0.0 libbuild2-bar [cfg4/] configured 1.0.0 EOO $pkg_status -d cfg2 -r >>/EOO; !foo configured 1.0.0 libbaz [cfg5/] configured 1.0.0 libbuild2-bar [cfg4/] configured 1.0.0 EOO $rep_add $rep/t7b && $rep_fetch; $* foo ?libbaz --config-uuid $cfg_uuid <>~%EOE%; y EOI % new libbaz/1.1.0 \[cfg.\]% % upgrade foo/1.1.0 \[cfg.\]% %continue\? \[Y/n\] disfigured foo/1.0.0 \[cfg.\]% %fetched libbaz/1.1.0 \[cfg.\]% %unpacked libbaz/1.1.0 \[cfg.\]% %fetched foo/1.1.0 \[cfg.\]% %unpacked foo/1.1.0 \[cfg.\]% %configured libbaz/1.1.0 \[cfg.\]% %configured foo/1.1.0 \[cfg.\]% %info: cfg.+libbaz-1.1.0.+ is up to date% %info: cfg.+foo-1.1.0.+ is up to date% %updated libbaz/1.1.0 \[cfg.\]% %updated foo/1.1.0 \[cfg.\]% EOE $pkg_status -d cfg -r >>/EOO; !foo configured 1.1.0 libbaz configured 1.1.0 EOO $pkg_status -d cfg2 -r >>/EOO; !foo configured 1.0.0 libbaz [cfg5/] configured 1.0.0 libbuild2-bar [cfg4/] configured 1.0.0 EOO $rep_add -d cfg2 $rep/t7b && $rep_fetch -d cfg2; $* --no-move foo +{ --config-uuid $cfg2_uuid } \ ?libbaz +{ --config-uuid $cfg5_uuid } <>~%EOE%; y EOI % upgrade libbaz/1.1.0 \[cfg5.\]% % drop libbuild2-bar/1.0.0 \[cfg4.\] \(unused\)% % upgrade foo/1.1.0 \[cfg2.\]% %continue\? \[Y/n\] disfigured foo/1.0.0 \[cfg2.\]% %disfigured libbuild2-bar/1.0.0 \[cfg4.\]% %disfigured libbaz/1.0.0 \[cfg5.\]% %fetched libbaz/1.1.0 \[cfg5.\]% %unpacked libbaz/1.1.0 \[cfg5.\]% %purged libbuild2-bar/1.0.0 \[cfg4.\]% %fetched foo/1.1.0 \[cfg2.\]% %unpacked foo/1.1.0 \[cfg2.\]% %configured libbaz/1.1.0 \[cfg5.\]% %configured foo/1.1.0 \[cfg2.\]% %info: cfg5.+libbaz-1.1.0.+ is up to date% %info: cfg2.+foo-1.1.0.+ is up to date% %updated libbaz/1.1.0 \[cfg5.\]% %updated foo/1.1.0 \[cfg2.\]% EOE $pkg_status -d cfg2 -r >>/EOO !foo configured 1.1.0 libbaz [cfg5/] configured 1.1.0 EOO } : variable : { $cfg_create -d cfg --uuid $cfg_uuid &cfg/***; $cfg_create -d cfg2 --uuid $cfg2_uuid &cfg2/***; $cfg_create -d cfg3 --uuid $cfg3_uuid --type host &cfg3/***; $cfg_link -d cfg cfg3; $cfg_link -d cfg2 cfg3; $rep_add $rep/t7a && $rep_fetch; $rep_add -d cfg2 $rep/t7a && $rep_fetch -d cfg2; test.arguments += -d cfg2; # Now refers 2 current dirs: cfg/ and cfg2/. $* --configure-only \ { --config-uuid $cfg_uuid config.libbaz=true }+ libbaz \ { --config-uuid $cfg2_uuid }+ libbaz 2>!; sed -n -e 's/^config.libbaz = (.+)$/\1/p' \ cfg/libbaz-1.0.0/build/config.build >'true'; sed -n -e 's/^config.libbaz = (.+)$/\1/p' \ cfg2/libbaz-1.0.0/build/config.build >'false' } : system-dependency : { $cfg_create -d cfg --uuid $cfg_uuid &cfg/***; $cfg_create -d cfg2 --uuid $cfg2_uuid &cfg2/***; $cfg_create -d cfg3 --uuid $cfg3_uuid --type host &cfg3/***; $cfg_link -d cfg cfg3; $cfg_link -d cfg2 cfg3; $rep_add $rep/t7a && $rep_fetch; $rep_add -d cfg2 $rep/t7a && $rep_fetch -d cfg2; test.arguments += -d cfg2; # Now refers 2 current dirs: cfg/ and cfg2/. $* libbox +{ --config-uuid $cfg_uuid --config-uuid $cfg2_uuid } \ '?sys:foo' <>~%EOE%; y EOI % new libbaz/1.0.0 \[cfg.\] \(required by libbox \[cfg.\]\)% % configure sys:foo/\* \[cfg3.\]% % new libbox/1.0.0 \[cfg.\]% % new libbaz/1.0.0 \[cfg2.\] \(required by libbox \[cfg2.\]\)% % new libbox/1.0.0 \[cfg2.\]% %continue\? \[Y/n\] fetched libbaz/1.0.0 \[cfg.\]% %unpacked libbaz/1.0.0 \[cfg.\]% %fetched libbox/1.0.0 \[cfg.\]% %unpacked libbox/1.0.0 \[cfg.\]% %fetched libbaz/1.0.0 \[cfg2.\]% %unpacked libbaz/1.0.0 \[cfg2.\]% %fetched libbox/1.0.0 \[cfg2.\]% %unpacked libbox/1.0.0 \[cfg2.\]% %configured libbaz/1.0.0 \[cfg.\]% %configured sys:foo/\* \[cfg3.\]% %configured libbox/1.0.0 \[cfg.\]% %configured libbaz/1.0.0 \[cfg2.\]% %configured libbox/1.0.0 \[cfg2.\]% %info: cfg.+libbox-1.0.0.+ is up to date% %info: cfg2.+libbox-1.0.0.+ is up to date% %updated libbox/1.0.0 \[cfg.\]% %updated libbox/1.0.0 \[cfg2.\]% EOE $pkg_status -d cfg -r >>/EOO; !libbox configured 1.0.0 foo [cfg3/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_status -d cfg2 -r >>/EOO !libbox configured 1.0.0 foo [cfg3/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO } } : system : { +$clone_root_cfg && $rep_add $rep/t7a && $rep_fetch : no-config : { +$clone_cfg : linked : { $clone_cfg; $cfg_create -d cfg2 --type host --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* libbox '?sys:foo' <>~%EOE%; y EOI % configure sys:foo/\* \[cfg2.\]% new libbaz/1.0.0 (required by libbox) new libbox/1.0.0 continue? [Y/n] fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbox/1.0.0 unpacked libbox/1.0.0 %configured sys:foo/\* \[cfg2.\]% configured libbaz/1.0.0 configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } : private-host : { $clone_cfg; $* libbox '?sys:foo' &cfg/.bpkg/host/*** <>~%EOE%; y EOI % configure sys:foo/\* \[cfg..bpkg.host.\]% new libbaz/1.0.0 (required by libbox) new libbox/1.0.0 continue? [Y/n] fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbox/1.0.0 unpacked libbox/1.0.0 %configured sys:foo/\* \[cfg..bpkg.host.\]% configured libbaz/1.0.0 configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg/.bpkg/host/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } : private-module : { $clone_cfg; $* libbox '?sys:libbuild2-bar' &cfg/.bpkg/host/*** &cfg/.bpkg/build2/*** <>~%EOE%; y EOI % configure sys:libbuild2-bar/\* \[cfg..bpkg.build2.\]% % new libbaz/1.0.0 \[cfg..bpkg.host.\] \(required by foo \[cfg..bpkg.host.\]\)% % new foo/1.0.0 \[cfg..bpkg.host.\] \(required by libbox\)% new libbaz/1.0.0 (required by libbox) new libbox/1.0.0 %continue\? \[Y/n\] fetched libbaz/1.0.0 \[cfg..bpkg.host.\]% %unpacked libbaz/1.0.0 \[cfg..bpkg.host.\]% %fetched foo/1.0.0 \[cfg..bpkg.host.\]% %unpacked foo/1.0.0 \[cfg..bpkg.host.\]% fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbox/1.0.0 unpacked libbox/1.0.0 %configured sys:libbuild2-bar/\* \[cfg..bpkg.build2.\]% %configured libbaz/1.0.0 \[cfg..bpkg.host.\]% %configured foo/1.0.0 \[cfg..bpkg.host.\]% configured libbaz/1.0.0 configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg/.bpkg/host/] configured 1.0.0 libbaz [cfg/.bpkg/host/] configured 1.0.0 libbuild2-bar [cfg/.bpkg/build2/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } } : config : { +$clone_cfg : linked : { $clone_cfg; $cfg_create -d cfg2 --type host --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $cfg_create -d cfg3 --type host --name cfg3 &cfg3/***; $cfg_link -d cfg cfg3; $* libbox '?sys:foo' +{ --config-name cfg3 } <>~%EOE%; y EOI % configure sys:foo/\* \[cfg3.\]% new libbaz/1.0.0 (required by libbox) new libbox/1.0.0 continue? [Y/n] fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched libbox/1.0.0 unpacked libbox/1.0.0 %configured sys:foo/\* \[cfg3.\]% configured libbaz/1.0.0 configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg3/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } : src-sys : { $clone_cfg; $cfg_create -d cfg2 --type host --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* libbox --yes 2>!; $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured 1.0.0 libbaz [cfg2/] configured 1.0.0 libbuild2-bar [cfg2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $* '?sys:foo' <>~%EOE%; y y EOI % drop libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\] \(unused\)% % drop libbaz/1.0.0 \[cfg2.\] \(unused\)% % reconfigure sys:foo/\* \[cfg2.\]% % reconfigure libbox \(dependent of foo \[cfg2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured libbox/1.0.0 %disfigured foo/1.0.0 \[cfg2.\]% %disfigured libbaz/1.0.0 \[cfg2.\]% %disfigured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %purged libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %purged libbaz/1.0.0 \[cfg2.\]% %purged foo/1.0.0 \[cfg2.\]% %configured sys:foo/\* \[cfg2.\]% configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } : src-sys-upgrade : { $clone_cfg; $cfg_create -d cfg2 --type host --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $* libbox --yes 2>!; $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured 1.0.0 libbaz [cfg2/] configured 1.0.0 libbuild2-bar [cfg2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $* '?sys:foo/1.1.0' <>~%EOE%; y y EOI % drop libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\] \(unused\)% % drop libbaz/1.0.0 \[cfg2.\] \(unused\)% % reconfigure sys:foo/1.1.0 \[cfg2.\]% % reconfigure libbox \(dependent of foo \[cfg2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured libbox/1.0.0 %disfigured foo/1.0.0 \[cfg2.\]% %disfigured libbaz/1.0.0 \[cfg2.\]% %disfigured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %purged libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %purged libbaz/1.0.0 \[cfg2.\]% %purged foo/1.0.0 \[cfg2.\]% %configured sys:foo/1.1.0 \[cfg2.\]% configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured,system !1.1.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } : src-sys-unhold : { $clone_cfg; $cfg_create -d cfg2 --type host --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $rep_add -d cfg2 $rep/t7a && $rep_fetch -d cfg2; $* libbox foo +{ --config-name cfg2 } --yes 2>!; $pkg_status -r >>/EOO; !libbox configured 1.0.0 !foo [cfg2/] configured 1.0.0 libbaz [cfg2/] configured 1.0.0 libbuild2-bar [cfg2/.bpkg/build2/] configured 1.0.0 libbaz configured 1.0.0 EOO $* '?sys:foo' <>~%EOE%; y y EOI % drop libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\] \(unused\)% % drop libbaz/1.0.0 \[cfg2.\] \(unused\)% % reconfigure/unhold sys:foo/\* \[cfg2.\]% % reconfigure libbox \(dependent of foo \[cfg2.\]\)% continue? [Y/n] update dependent packages? [Y/n] disfigured libbox/1.0.0 %disfigured foo/1.0.0 \[cfg2.\]% %disfigured libbaz/1.0.0 \[cfg2.\]% %disfigured libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %purged libbuild2-bar/1.0.0 \[cfg2..bpkg.build2.\]% %purged libbaz/1.0.0 \[cfg2.\]% %purged foo/1.0.0 \[cfg2.\]% %configured sys:foo/\* \[cfg2.\]% configured libbox/1.0.0 %info: cfg.+libbox-1.0.0.+ is up to date% updated libbox/1.0.0 EOE $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } : sys-unhold : { $clone_cfg; $cfg_create -d cfg2 --type host --name cfg2 &cfg2/***; $cfg_link -d cfg cfg2; $rep_add -d cfg2 $rep/t7a && $rep_fetch -d cfg2; $* libbox 'sys:foo' +{ --config-name cfg2 } --yes 2>!; $pkg_status -r >>/EOO; !libbox configured 1.0.0 !foo [cfg2/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $* '?sys:foo'; $pkg_status -r >>/EOO; !libbox configured 1.0.0 foo [cfg2/] configured,system !* available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop libbox } } } }