# 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 # | # |-- libhello-1.0.0 # | |-- build # | | |-- bootstrap.build # | | |-- export.build # | | `-- root.build # | `-- * # | # |-- 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 # | # |-- 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 # | # |-- t8a # | |-- libbar-1.0.0.tar.gz # | |-- libbaz-1.0.0.tar.gz # | |-- libbaz-1.1.0.tar.gz # | |-- libbiz-0.1.0.tar.gz # | |-- libbiz-1.0.0.tar.gz # | |-- libbox-0.1.0.tar.gz # | |-- libbox-0.1.1.tar.gz # | |-- libbox-1.0.0.tar.gz # | |-- foo-1.0.0.tar.gz -> {libbar libbaz} ^1.0.0 # | |-- fox-1.0.0.tar.gz -> libbar ^1.0.0 | libbaz ^1.0.0 # | |-- fix-1.0.0.tar.gz -> libbaz ^1.0.0 | libbar ^1.0.0 # | |-- fax-1.0.0.tar.gz -> libbar ^1.0.0 ? ($cxx.target.class == 'windows') config.fax.backend=libbar | # | | libbaz ^1.0.0 ? ($cxx.target.class != 'windows') config.fax.backend=libbaz, # | | libbiz ? ($config.fax.libbiz) config.fax.extras='[b\i$z]', # | | libbox ? ($config.fax.libbox && $config.fax.backend == libbaz && $config.fax.extras == '[b\i$z]') # | |-- fux -> libbiz ? (!$config.fux.libbiz_old) | libbiz ^0.1.0 ? ($config.fux.libbiz_old) # | |-- box -> libbiz ^1.0.0 config.box.backend=libbiz | # | | libbox >= 0.1.1 config.box.backend=libbox, # | | libbaz # | `-- repositories.manifest # | # |-- t9 # | |-- libbar-1.0.0.tar.gz # | |-- libbaz-1.0.0.tar.gz -> libbar ^1.0.0 # | |-- libbox-1.0.0.tar.gz -> libbar ^1.0.0 # | |-- foo-1.0.0.tar.gz -> libbaz, libbox # | `-- repositories.manifest # | # |-- t10 # | |-- libfoo-bar-1.0.0.tar.gz -> libfoo-tests # | |-- libfoo-baz-1.0.0.tar.gz -> libfoo-tests # | |-- libfoo-tests-1.0.0.tar.gz # | `-- repositories.manifest # | # |-- t11a # | |-- libfoo-0.1.0.tar.gz # | |-- libfoo-1.0.0.tar.gz # | |-- libbar-1.0.0.tar.gz # | |-- libbaz-1.0.0.tar.gz # | |-- libbox-1.0.0.tar.gz # | |-- foo-1.0.0.tar.gz -> libfoo {require {config.libfoo.extras=true}} # | |-- fox-1.0.0.tar.gz -> libfoo {require {config.libfoo.extras=true}} # | |-- fux-1.0.0.tar.gz -> libfoo # | |-- fix-1.0.0.tar.gz -> foo {require {config.foo.extras=true}} # | |-- fex-1.0.0.tar.gz -> foo, libfoo {require {config.libfoo.extras=true}} # | |-- bar-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}} # | |-- baz-1.0.0.tar.gz -> {libbar libfoo} {require {config.libbar.extras=true config.libfoo.extras=true}} # | |-- box-1.0.0.tar.gz -> {libbar libfoo} {require {config.libbar.extras=true config.libfoo.extras=true}} | # | | libbox # | |-- bux-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}} # | |-- bix-1.0.0.tar.gz -> {libbar bar} {require {config.libbar.extras=true config.bar.extras=true}}, # | | bux # | |-- bex-1.0.0.tar.gz -> libbar # | |-- boo-1.0.0.tar.gz -> libbar | libfoo {require {config.libfoo.extras=true}} | libbox # | |-- biz-1.0.0.tar.gz -> boo {require {config.boo.extras=true}} # | |-- buz-1.0.0.tar.gz -> bux {require {config.bux.extras=true}} # | |-- tax-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}}, # | | libfoo # | |-- tex-0.1.0.tar.gz -> libfoo {require {config.libfoo.extras=true}} # | |-- tex-0.2.0.tar.gz -> libbar, # | | libfoo {require {config.libfoo.extras=true}} # | |-- tex-0.3.0.tar.gz -> libbar {require {config.libbar.extras=true}}, # | | libfoo {require {config.libfoo.extras=true}} # | |-- tex-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}}, # | | libfoo {require {config.libfoo.extras=true}} # | |-- tix-0.1.0.tar.gz # | |-- tix-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}}, # | | tex {require {config.tex.extras=true}} # | |-- tiz-1.0.0.tar.gz -> tex {require {config.tex.extras=true}}, # | | libbar {require {config.libbar.extras=true}} # | |-- toz-0.1.0.tar.gz # | |-- toz-1.0.0.tar.gz -> libbaz {require {config.libbaz.extras=true}}, # | | libfoo {require {config.libfoo.extras=true}}, # | | libbar {require {config.libbar.extras=true}} # | |-- tez-1.0.0.tar.gz -> libbox {require {config.libbox.extras=true}}, # | | toz == 0.1.0 {require {config.toz.extras=true}}, # | | libbar {require {config.libbar.extras=true}} # | |-- tux-1.0.0.tar.gz -> libbox {require {config.libbox.extras=true}}, # | | tix == 0.1.0 # | |-- dex-1.0.0.tar.gz -> bar {require {config.bar.extras=true}}, # | | libfoo {require {config.libfoo.extras=true}} # | |-- dix-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}}, # | | libbox {require {config.libbox.extras=true}}, # | | dox {require {config.dox.extras=true}} # | |-- diz-1.0.0.tar.gz -> dox {require {config.dox.extras=true}}, # | | libbox {require {config.libbox.extras=true}}, # | | libbar {require {config.libbar.extras=true}} # | |-- dox-1.0.0.tar.gz -> dex {require {config.dex.extras=true}} # | `-- repositories.manifest # | # |-- t12a # | |-- libbaz-1.0.0.tar.gz # | |-- libbar-0.1.0.tar.gz -> libbaz # | `-- repositories.manifest # | # |-- t12b -> t12b (prerequisite repository) # | |-- libbaz-0.1.0.tar.gz # | |-- libbar-1.0.0.tar.gz -> libbaz == 0.1.0 # | |-- foo-1.0.0.tar.gz -> libbar # | |-- bar-1.0.0.tar.gz -> libbar == 0.1.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 cp -r $src/t8a $out/t8a && $rep_create $out/t8a &$out/t8a/packages.manifest cp -r $src/t9 $out/t9 && $rep_create $out/t9 &$out/t9/packages.manifest cp -r $src/t10 $out/t10 && $rep_create $out/t10 &$out/t10/packages.manifest cp -r $src/t11a $out/t11a && $rep_create $out/t11a &$out/t11a/packages.manifest cp -r $src/t12a $out/t12a && $rep_create $out/t12a &$out/t12a/packages.manifest cp -r $src/t12b $out/t12b && $rep_create $out/t12b &$out/t12b/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: no package available for 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: no package available for 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 } : foo-baz-box-bar : : Test build scenarios described in : https://github.com/conan-io/conan/issues/9547. : : Note: using tar on Windows is a bit hairy (needs --force-local, etc), so : we do not run this test on Windows. : if ($posix && !$remote) { +mkdir 1/ # Repository state 0: initial (see the above t9 directory tree for details). # Repository state 1: libbar/2.0.0 is released. # r = 1/t9-1 +cp -r $rep/t9 $r && \ tar xf $r/libbar-1.0.0.tar.gz -C $r && \ mv $r/libbar-1.0.0 $r/libbar-2.0.0 && \ sed -i -e 's/(version:).+/\1 2.0.0/' $r/libbar-2.0.0/manifest && \ tar cfz $r/libbar-2.0.0.tar.gz -C $r libbar-2.0.0 &$r/libbar-2.0.0.tar.gz && \ rm -r $r/libbar-2.0.0 && \ $rep_create $r &$r/packages.manifest # Repository state 2: libbaz/2.0.0 is released, which depends on # libbar ^2.0.0. # r = 1/t9-2 +cp -r 1/t9-1 $r && \ tar xf $r/libbaz-1.0.0.tar.gz -C $r && \ mv $r/libbaz-1.0.0 $r/libbaz-2.0.0 && \ sed -i -e 's/(version:).+/\1 2.0.0/' -e 's/(depends: libbar).+/\1 ^2.0.0/' $r/libbaz-2.0.0/manifest && \ tar cfz $r/libbaz-2.0.0.tar.gz -C $r libbaz-2.0.0 &$r/libbaz-2.0.0.tar.gz && \ rm -r $r/libbaz-2.0.0 && \ $rep_create $r &$r/packages.manifest # Repository state 3: libbox/1.1.0 is released, which still depends on # libbar ^1.0.0. # r = 1/t9-3 +cp -r 1/t9-2 $r && \ tar xf $r/libbox-1.0.0.tar.gz -C $r && \ mv $r/libbox-1.0.0 $r/libbox-1.1.0 && \ sed -i -e 's/(version:).+/\1 1.1.0/' $r/libbox-1.1.0/manifest && \ tar cfz $r/libbox-1.1.0.tar.gz -C $r libbox-1.1.0 &$r/libbox-1.1.0.tar.gz && \ rm -r $r/libbox-1.1.0 && \ $rep_create $r &$r/packages.manifest : repo-state-1 : { : build : { $clone_root_cfg; $rep_add ../../1/t9-1 && $rep_fetch; $* foo 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO $pkg_drop foo } : upgrade : : Test upgrade of packages (initially built from the repository state 0) : after the state 1 is fetched. : { $clone_root_cfg; mkdir 1/; ln -s $rep/t9 1/repo; $rep_add 1/repo && $rep_fetch; $* foo 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 libbox configured 1.0.0 libbar configured 1.0.0 EOO rm 1/repo; ln -s ../../../1/t9-1 1/repo; $rep_fetch; $* foo 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO $* ?libbar 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO $* ?libbaz 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO $pkg_drop foo } } : repo-state-2 : { : build : { $clone_root_cfg; $rep_add ../../1/t9-2 && $rep_fetch; # Picks up the latest libbaz (2.0.0) as a prerequisite for foo, which # leads to the conflict between libbaz/2.0.0 and libbox/1.0.0 about # prerequisite libbar because of the incompatible version constraints. # $* foo 2>>EOE != 0; error: unable to satisfy constraints on package libbar info: libbaz depends on (libbar ^2.0.0) info: libbox depends on (libbar ^1.0.0) info: available libbar/2.0.0 info: available libbar/1.0.0 info: explicitly specify libbar version to manually satisfy both constraints info: while satisfying libbox/1.0.0 info: while satisfying foo/1.0.0 EOE $* foo ?libbaz/1.0.0 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured !1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO $pkg_drop foo } : upgrade : : Test upgrade of packages (initially built from the repository state 0) : after the state 2 is fetched. : { $clone_root_cfg; mkdir 1/; ln -s $rep/t9 1/repo; $rep_add 1/repo && $rep_fetch; $* foo 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 libbox configured 1.0.0 libbar configured 1.0.0 EOO rm 1/repo; ln -s ../../../1/t9-2 1/repo; $rep_fetch; $* foo 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO $* ?libbar 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 libbar configured 1.0.0 available 2.0.0 EOO # Unable to satisfy the dependent libbox with an upgraded (due to # libbaz 2.0.0) prerequisite libbar/2.0.0. # $* ?libbaz 2>>EOE != 0; error: unable to upgrade package libbar/1.0.0 to 2.0.0 info: because package libbox depends on (libbar ^1.0.0) info: package libbar/2.0.0 required by libbaz info: explicitly request up/downgrade of package libbox info: or explicitly specify package libbar version to manually satisfy these constraints EOE $pkg_drop foo } } : repo-state-3 : { : build : { $clone_root_cfg; $rep_add ../../1/t9-3 && $rep_fetch; # Similar to the repository state 2, picks up the latest libbaz (2.0.0) # as a prerequisite for foo, which leads to the conflict. # $* foo 2>>EOE != 0; error: unable to satisfy constraints on package libbar info: libbaz depends on (libbar ^2.0.0) info: libbox depends on (libbar ^1.0.0) info: available libbar/2.0.0 info: available libbar/1.0.0 info: explicitly specify libbar version to manually satisfy both constraints info: while satisfying libbox/1.1.0 info: while satisfying foo/1.0.0 EOE $* foo ?libbaz/1.0.0 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured !1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.1.0 libbar configured 1.0.0 available 2.0.0 EOO $pkg_drop foo } : upgrade : : Test upgrade of packages (initially built from the repository state 0) : after the state 3 is fetched. : { $clone_root_cfg; mkdir 1/; ln -s $rep/t9 1/repo; $rep_add 1/repo && $rep_fetch; $* foo 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 libbar configured 1.0.0 libbox configured 1.0.0 libbar configured 1.0.0 EOO rm 1/repo; ln -s ../../../1/t9-3 1/repo; $rep_fetch; $* foo 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 available 1.1.0 libbar configured 1.0.0 available 2.0.0 EOO $* ?libbar 2>!; # Noop. $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.0.0 available 1.1.0 libbar configured 1.0.0 available 2.0.0 EOO # Unable to satisfy the dependent libbox with an upgraded (due to # libbaz 2.0.0) prerequisite libbar/2.0.0. # $* foo ?libbaz 2>>EOE != 0; error: unable to upgrade package libbar/1.0.0 to 2.0.0 info: because package libbox depends on (libbar ^1.0.0) info: package libbar/2.0.0 required by libbaz info: explicitly request up/downgrade of package libbox info: or explicitly specify package libbar version to manually satisfy these constraints EOE # libbar/2.0.0 is still unsatisfactory as a prerequisite for libbox, # even after libbox upgrade is requested on the command line. # $* foo ?libbaz ?libbox 2>>EOE != 0; error: unable to satisfy constraints on package libbar info: libbaz depends on (libbar ^2.0.0) info: libbox depends on (libbar ^1.0.0) info: available libbar/2.0.0 info: available libbar/1.0.0 info: explicitly specify libbar version to manually satisfy both constraints info: while satisfying libbox/1.1.0 EOE $* ?libbox 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbaz configured 1.0.0 available 2.0.0 libbar configured 1.0.0 available 2.0.0 libbox configured 1.1.0 libbar configured 1.0.0 available 2.0.0 EOO $pkg_drop foo } } } } : 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: no package available for dependency libhello 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: libfox depends on (libfoo == 0.0.1) info: libbox depends on (libfoo == 1.0.0) info: available libfoo/0.0.1 info: available libfoo/1.0.0 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: unable to satisfy dependency constraint (libfoo == 0.0.1) of package libbar info: available libfoo versions: 1.0.0 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-unhold-same-ver : : Same as above but the version does not change. : { $clone_cfg; $* 'sys:libbaz/0.1.0' 2>>EOE; configured sys:libbaz/0.1.0 EOE $* ?libbaz libbar/0.0.3 2>>EOE; purged libbaz/0.1.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 } : alternative : { +$clone_root_cfg && $rep_add $rep/t8a && $rep_fetch : multiple-dependencies : { $clone_cfg; $* foo --yes 2>>~%EOE%; fetched libbaz/1.1.0 unpacked libbaz/1.1.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 fetched foo/1.0.0 unpacked foo/1.0.0 configured libbaz/1.1.0 configured libbar/1.0.0 configured foo/1.0.0 %info: .+foo-1.0.0.+ is up to date% updated foo/1.0.0 EOE $pkg_drop foo } : multiple-alternatives : { +$clone_cfg test.arguments += --yes : ambiguity : { $clone_cfg; $* fox 2>>EOE != 0 error: unable to select dependency alternative for package fox/1.0.0 info: explicitly specify dependency packages to manually select the alternative info: alternative: libbar info: alternative: libbaz info: while satisfying fox/1.0.0 EOE } : reuse : { +$clone_cfg : specified-dep-build : { $clone_cfg; $* fox ?libbaz 2>>~%EOE%; fetched libbaz/1.1.0 unpacked libbaz/1.1.0 fetched fox/1.0.0 unpacked fox/1.0.0 configured libbaz/1.1.0 configured fox/1.0.0 %info: .+libbaz-1.1.0.+ is up to date% %info: .+fox-1.0.0.+ is up to date% updated libbaz/1.1.0 updated fox/1.0.0 EOE $pkg_drop fox } : hold-build : { $clone_cfg; $* fox libbaz 2>>~%EOE%; fetched libbaz/1.1.0 unpacked libbaz/1.1.0 fetched fox/1.0.0 unpacked fox/1.0.0 configured libbaz/1.1.0 configured fox/1.0.0 %info: .+libbaz-1.1.0.+ is up to date% %info: .+fox-1.0.0.+ is up to date% updated libbaz/1.1.0 updated fox/1.0.0 EOE $pkg_drop fox; $pkg_drop libbaz } : configured : { $clone_cfg; $* libbaz 2>!; $* fox 2>>~%EOE%; fetched fox/1.0.0 unpacked fox/1.0.0 configured fox/1.0.0 %info: .+fox-1.0.0.+ is up to date% updated fox/1.0.0 EOE $pkg_drop fox; $pkg_drop libbaz } : fetched : { $clone_cfg; $pkg_fetch libbaz/1.0.0; $* fox 2>>~%EOE%; unpacked libbaz/1.0.0 fetched fox/1.0.0 unpacked fox/1.0.0 configured libbaz/1.0.0 configured fox/1.0.0 %info: .+fox-1.0.0.+ is up to date% updated fox/1.0.0 EOE $pkg_drop fox } } : postpone : { +$clone_cfg : basic : { $clone_cfg; $* fox foo 2>>~%EOE%; fetched libbaz/1.1.0 unpacked libbaz/1.1.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 fetched fox/1.0.0 unpacked fox/1.0.0 fetched foo/1.0.0 unpacked foo/1.0.0 configured libbaz/1.1.0 configured libbar/1.0.0 configured fox/1.0.0 configured foo/1.0.0 %info: .+fox-1.0.0.+ is up to date% %info: .+foo-1.0.0.+ is up to date% updated fox/1.0.0 updated foo/1.0.0 EOE $pkg_drop fox; $pkg_drop foo } : pick-libbaz : { $clone_cfg; $* baz fox bar 2>>~%EOE%; fetched libbaz/1.1.0 unpacked libbaz/1.1.0 fetched baz/1.0.0 unpacked baz/1.0.0 fetched libbar/1.0.0 unpacked libbar/1.0.0 fetched fox/1.0.0 unpacked fox/1.0.0 fetched bar/1.0.0 unpacked bar/1.0.0 configured libbaz/1.1.0 configured baz/1.0.0 configured libbar/1.0.0 configured fox/1.0.0 configured bar/1.0.0 %info: .+baz-1.0.0.+ is up to date% %info: .+fox-1.0.0.+ is up to date% %info: .+bar-1.0.0.+ is up to date% updated baz/1.0.0 updated fox/1.0.0 updated bar/1.0.0 EOE cat cfg/fox-1.0.0/build/config.build >>~%EOO%; %.* config.fox.backend = libbar %.* EOO $pkg_drop fox; $pkg_drop bar; $pkg_drop baz } } : reconfigure-dependent : { $clone_cfg; $* fox ?libbaz/1.0.0 2>>~%EOE%; fetched libbaz/1.0.0 unpacked libbaz/1.0.0 fetched fox/1.0.0 unpacked fox/1.0.0 configured libbaz/1.0.0 configured fox/1.0.0 %info: .+libbaz-1.0.0.+ is up to date% %info: .+fox-1.0.0.+ is up to date% updated libbaz/1.0.0 updated fox/1.0.0 EOE $* ?libbaz 2>>~%EOE%; disfigured fox/1.0.0 disfigured libbaz/1.0.0 fetched libbaz/1.1.0 unpacked libbaz/1.1.0 configured libbaz/1.1.0 configured fox/1.0.0 %info: .+libbaz-1.1.0.+ is up to date% %info: .+fox-1.0.0.+ is up to date% updated libbaz/1.1.0 updated fox/1.0.0 EOE cat cfg/fox-1.0.0/build/config.build >>~%EOO%; %.* config.fox.backend = libbaz %.* EOO $pkg_drop fox } : recreate-decision : { +$clone_cfg : reevaluate-alternatives : { +$clone_cfg : preserve : : Test that the existing libbox dependency is preserved even though : libbiz is more preferable as a dependency. : { $clone_cfg; $* box libbox 2>!; $* box +{ config.box.extras=true } ?libbiz 2>>~%EOE%; disfigured box/1.0.0 configured box/1.0.0 %info: .+box-1.0.0.+ is up to date% updated box/1.0.0 EOE $* box +{ config.box.extras=false } libbiz 2>>~%EOE%; disfigured box/1.0.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 configured box/1.0.0 configured libbiz/1.0.0 %info: .+box-1.0.0.+ is up to date% %info: .+libbiz-1.0.0.+ is up to date% updated box/1.0.0 updated libbiz/1.0.0 EOE $pkg_status -r box >>EOO; !box configured 1.0.0 libbaz configured 1.1.0 !libbox configured 1.0.0 EOO cat cfg/box-1.0.0/build/config.build >>~%EOO%; %.* config.box.backend = libbox EOO $pkg_drop box; $pkg_drop libbox; $pkg_drop libbiz } : change-downgraded-depenency : : Test that libbiz is selected as a dependency since the existing : dependency decision cannot be preserved (libbox is downgraded to : 0.1.0 and becomes unsatisfactory for box). : { $clone_cfg; $* box libbox 2>!; $* box +{ config.box.extras=true } ?libbox/0.1.0 2>>~%EOE%; disfigured box/1.0.0 disfigured libbox/1.0.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 purged libbox/1.0.0 configured libbiz/1.0.0 configured box/1.0.0 %info: .+box-1.0.0.+ is up to date% updated box/1.0.0 EOE $pkg_status -r box >>EOO; !box configured 1.0.0 libbaz configured 1.1.0 libbiz configured 1.0.0 EOO cat cfg/box-1.0.0/build/config.build >>~%EOO%; %.* config.box.backend = libbiz EOO $pkg_drop box } : change-downgraded-hold : : As above but libbox is downgraded to hold. : { $clone_cfg; $* box libbox 2>!; $* box +{ config.box.extras=true } libbox/0.1.0 2>>~%EOE%; disfigured box/1.0.0 disfigured libbox/1.0.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 fetched libbox/0.1.0 unpacked libbox/0.1.0 configured libbiz/1.0.0 configured libbox/0.1.0 configured box/1.0.0 %info: .+libbox-0.1.0.+ is up to date% %info: .+box-1.0.0.+ is up to date% updated libbox/0.1.0 updated box/1.0.0 EOE $pkg_status -r box >>EOO; !box configured 1.0.0 libbaz configured 1.1.0 libbiz configured 1.0.0 EOO cat cfg/box-1.0.0/build/config.build >>~%EOO%; %.* config.box.backend = libbiz EOO $pkg_drop box; $pkg_drop libbox } } : reconfigure : { $clone_cfg; $* box ?libbiz/0.1.0 2>>~%EOE%; fetched libbox/1.0.0 unpacked libbox/1.0.0 fetched libbaz/1.1.0 unpacked libbaz/1.1.0 fetched box/1.0.0 unpacked box/1.0.0 configured libbox/1.0.0 configured libbaz/1.1.0 configured box/1.0.0 %info: .+box-1.0.0.+ is up to date% updated box/1.0.0 EOE $pkg_status -r >>EOO; !box configured 1.0.0 libbaz configured 1.1.0 libbox configured 1.0.0 EOO cat cfg/box-1.0.0/build/config.build >>~%EOO%; %.* config.box.backend = libbox EOO # Downgrade libbaz to reconfigure box and make sure we still keep # libbox as a prerequisite of box. # $* libbiz ?libbaz/1.0.0 2>>~%EOE%; disfigured box/1.0.0 disfigured libbaz/1.1.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 fetched libbaz/1.0.0 unpacked libbaz/1.0.0 configured libbiz/1.0.0 configured libbaz/1.0.0 configured box/1.0.0 %info: .+libbiz-1.0.0.+ is up to date% %info: .+libbaz-1.0.0.+ is up to date% %info: .+box-1.0.0.+ is up to date% updated libbiz/1.0.0 updated libbaz/1.0.0 updated box/1.0.0 EOE $pkg_status -r >>EOO; !box configured 1.0.0 libbaz configured !1.0.0 available 1.1.0 libbox configured 1.0.0 !libbiz configured 1.0.0 EOO cat cfg/box-1.0.0/build/config.build >>~%EOO%; %.* config.box.backend = libbox EOO # Make sure the decision is hold for downgraded dependency either. # $* ?libbox/0.1.1 2>>~%EOE%; disfigured box/1.0.0 disfigured libbox/1.0.0 fetched libbox/0.1.1 unpacked libbox/0.1.1 configured libbox/0.1.1 configured box/1.0.0 %info: .+libbox-0.1.1.+ is up to date% %info: .+box-1.0.0.+ is up to date% updated libbox/0.1.1 updated box/1.0.0 EOE $pkg_status -r >>EOO; !box configured 1.0.0 libbaz configured !1.0.0 available 1.1.0 libbox configured !0.1.1 available 1.0.0 !libbiz configured 1.0.0 EOO cat cfg/box-1.0.0/build/config.build >>~%EOO%; %.* config.box.backend = libbox EOO $pkg_drop box; $pkg_drop libbiz } } } : enable-condition : { +$cfg_create cxx $config_cxx -d cfg &cfg/*** +$rep_add $rep/t8a && $rep_fetch test.arguments += --yes backend = ($posix ? 'libbaz' : 'libbar') backend_dep = ($posix ? 'libbaz/1.1.0' : 'libbar/1.0.0') backend_configured = ($posix ? 'libbaz configured 1.1.0' : 'libbar configured 1.0.0') : cxx-target : { $clone_cfg; $* fax 2>>~"%EOE%"; fetched $backend_dep unpacked $backend_dep fetched fax/1.0.0 unpacked fax/1.0.0 configured $backend_dep configured fax/1.0.0 %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured EOO cat cfg/fax-1.0.0/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = false %.* EOO $pkg_drop fax } : config-var : { $clone_cfg; $* config.fax.libbiz=true -- fax 2>>~"%EOE%"; fetched $backend_dep unpacked $backend_dep fetched libbiz/1.0.0 unpacked libbiz/1.0.0 fetched fax/1.0.0 unpacked fax/1.0.0 configured $backend_dep configured libbiz/1.0.0 configured fax/1.0.0 %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured libbiz configured 1.0.0 EOO cat cfg/fax-1.0.0/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = true %.* EOO $pkg_drop fax } : reevaluate-alternatives : { +$clone_cfg : add-dependency : { $clone_cfg; $* fax 2>!; $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured EOO $* config.fax.libbiz=true -- fax 2>>~%EOE%; disfigured fax/1.0.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 configured libbiz/1.0.0 configured fax/1.0.0 %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured libbiz configured 1.0.0 EOO # While at it, tests that the dependency is properly removed. # $* config.fax.libbiz=false -- fax 2>>~%EOE%; disfigured fax/1.0.0 disfigured libbiz/1.0.0 purged libbiz/1.0.0 configured fax/1.0.0 %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured EOO $pkg_drop fax } : downgrade-dependency : { $clone_cfg; $* fux 2>!; $pkg_status -r >>"EOO"; !fux configured 1.0.0 libbiz configured 1.0.0 EOO $* config.fux.libbiz_old=true -- fux 2>>~%EOE%; disfigured fux/1.0.0 disfigured libbiz/1.0.0 fetched libbiz/0.1.0 unpacked libbiz/0.1.0 configured libbiz/0.1.0 configured fux/1.0.0 %info: .+fux-1.0.0.+ is up to date% updated fux/1.0.0 EOE $pkg_status -r >>"EOO"; !fux configured 1.0.0 libbiz configured 0.1.0 available 1.0.0 EOO # While at it, test that the dependency is properly upgraded. # # Note that, unless requested, libbiz is not upgraded, since 0.1.0 # is still good for the selected alternative. # $* config.fux.libbiz_old=false -- fux 2>>~%EOE%; disfigured fux/1.0.0 configured fux/1.0.0 %info: .+fux-1.0.0.+ is up to date% updated fux/1.0.0 EOE $pkg_status -r >>"EOO"; !fux configured 1.0.0 libbiz configured 0.1.0 available 1.0.0 EOO $* fux +{ config.fux.libbiz_old=false } ?libbiz 2>>~%EOE%; disfigured fux/1.0.0 disfigured libbiz/0.1.0 fetched libbiz/1.0.0 unpacked libbiz/1.0.0 configured libbiz/1.0.0 configured fux/1.0.0 %info: .+libbiz-1.0.0.+ is up to date% %info: .+fux-1.0.0.+ is up to date% updated libbiz/1.0.0 updated fux/1.0.0 EOE $pkg_status -r >>"EOO"; !fux configured 1.0.0 libbiz configured 1.0.0 EOO $pkg_drop fux } } : external-package : if! $remote { +$clone_cfg +tar (!$posix ? --force-local : ) -xf $src/t8a/fax-1.0.0.tar.gz &fax-1.0.0/*** +mv fax-1.0.0 fax : change-manifest : { $clone_cfg; cp -rp ../fax/ ./; $* config.fax.libbiz=true -- fax/ 2>>~"%EOE%"; fetched $backend_dep unpacked $backend_dep fetched libbiz/1.0.0 unpacked libbiz/1.0.0 using fax/1.0.0 \(external\) configured $backend_dep configured libbiz/1.0.0 configured fax/1.0.0 %info: .+fax.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0 $backend_configured libbiz configured 1.0.0 EOO cat cfg/fax/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = true %.* EOO # Upgrade the external package after changing its manifest and make # sure the configuration is preserved. # echo '' >+fax/manifest; $* fax/ 2>>~%EOE%; disfigured fax/1.0.0 using fax/1.0.0#1 (external) configured fax/1.0.0#1 %info: .+fax.+ is up to date% updated fax/1.0.0#1 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0#1 $backend_configured libbiz configured 1.0.0 EOO cat cfg/fax/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = true %.* EOO # While at it, test that it's ok for out root directory to not # exist. # # Note that this testing is only meaningful when we replace an # external package with another external (see # build_package::external() for details). # echo '' >+fax/manifest; rm -r cfg/fax/; $* fax/ 2>>~%EOE%; disfigured fax/1.0.0#1 disfigured libbiz/1.0.0 purged libbiz/1.0.0 using fax/1.0.0#2 (external) configured fax/1.0.0#2 %info: .+fax.+ is up to date% updated fax/1.0.0#2 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0#2 $backend_configured EOO cat cfg/fax/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = false %.* EOO # Also tests that the depends value location is printed on the # enable condition evaluation failure for an external package. # sed -i -e 's/(depends: libbiz).+/\1 ? (config.fax.libbiz = true)/' fax/manifest; $* fax/ 2>>~%EOE% != 0; :1: error: invalid bool value: multiple names info: enable condition: (config.fax.libbiz = true) % .+fax.manifest:10:10: info: depends value defined here% info: while satisfying fax/1.0.0#3 EOE $pkg_drop fax } : change-buildfile : { +$clone_cfg : package-directory : { $clone_cfg; cp -rp ../../fax/ ./; $* fax 2>>~"%EOE%"; fetched $backend_dep unpacked $backend_dep fetched fax/1.0.0 unpacked fax/1.0.0 configured $backend_dep configured fax/1.0.0 %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured EOO # No upgrade after turning a package from the archive-based repo # into an external package. # $* fax/ 2>>~%EOE%; %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0 $backend_configured EOO # Upgrade after the package' buildfile is edited. # echo '' >+fax/build/root.build; $* fax/ 2>>~%EOE%; disfigured fax/1.0.0 using fax/1.0.0#1 (external) configured fax/1.0.0#1 %info: .+fax.+ is up to date% updated fax/1.0.0#1 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0#1 $backend_configured EOO # No upgrade if the buildfile is not edited. # $* fax/ 2>>~%EOE%; %info: .+fax.+ is up to date% updated fax/1.0.0#1 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0#1 $backend_configured EOO $pkg_drop fax } : directory-repo : { $clone_cfg; cp -rp ../../fax/ ./; $* fax 2>>~"%EOE%"; fetched $backend_dep unpacked $backend_dep fetched fax/1.0.0 unpacked fax/1.0.0 configured $backend_dep configured fax/1.0.0 %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured EOO # No upgrade after turning a package from the archive-based repo # into an external package. # $rep_add --type dir fax/ && $rep_fetch; $* fax 2>>~%EOE%; %info: .+fax-1.0.0.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0 $backend_configured EOO # Upgrade after the package' buildfile is edited. # echo '' >+fax/build/root.build; $rep_fetch; $* fax 2>>~%EOE%; disfigured fax/1.0.0 using fax/1.0.0#1 (external) configured fax/1.0.0#1 %info: .+fax.+ is up to date% updated fax/1.0.0#1 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0#1 $backend_configured EOO # No upgrade if the buildfile is not edited. # $rep_fetch; $* fax 2>>~%EOE%; %info: .+fax.+ is up to date% updated fax/1.0.0#1 EOE $pkg_status -r >>"EOO"; !fax configured 1.0.0#1 $backend_configured EOO $pkg_drop fax } } : reconfigure-reflect-vars : { $clone_cfg; cp -rp ../fax/ ./; $* config.fax.libbiz=true -- fax/ 2>>~"%EOE%"; fetched $backend_dep unpacked $backend_dep fetched libbiz/1.0.0 unpacked libbiz/1.0.0 using fax/1.0.0 \(external\) configured $backend_dep configured libbiz/1.0.0 configured fax/1.0.0 %info: .+fax.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>"EOO"; !fax configured !1.0.0 $backend_configured libbiz configured 1.0.0 EOO cat cfg/fax/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = true %config.fax.extras = '.+'% config.fax.libbox = false EOO # While at it, make sure none of the reflect variables are # unexpectedly wiped out on reconfiguration due to the dependency # upgrade. # $* fax/ "?sys:$backend/*" 2>>~"%EOE%"; disfigured fax/1.0.0 %disfigured $backend/.+% %purged $backend/.+% configured sys:$backend/* configured fax/1.0.0 %info: .+fax.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>~"%EOO%"; !fax configured !1.0.0 % $backend configured,system .+% libbiz configured 1.0.0 EOO cat cfg/fax/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = true %config.fax.extras = '.+'% config.fax.libbox = false EOO # Now make sure that dependency clauses re-evaluation is properly # reflected in the configuration. # $* config.fax.libbiz=false -- fax/ 2>>~"%EOE%"; disfigured fax/1.0.0 disfigured libbiz/1.0.0 purged libbiz/1.0.0 configured fax/1.0.0 %info: .+fax.+ is up to date% updated fax/1.0.0 EOE $pkg_status -r >>~"%EOO%"; !fax configured !1.0.0 % $backend configured,system .+% EOO cat cfg/fax/build/config.build >>~"%EOO%"; %.* config.fax.backend = $backend config.fax.libbiz = false config.fax.extras = [null] config.fax.libbox = false EOO $pkg_drop fax } } : evaluate-reflect-vars : { $clone_cfg; $* config.fax.libbox=true config.fax.libbiz=true -- fax 2>!; if $posix $pkg_status -r >>EOO !fax configured 1.0.0 libbaz configured 1.1.0 libbiz configured 1.0.0 libbox configured 1.0.0 EOO else $pkg_status -r >>EOO !fax configured 1.0.0 libbar configured 1.0.0 libbiz configured 1.0.0 EOO end; $pkg_drop fax } } } : version-replacement : { +$clone_root_cfg && $rep_add $rep/t12b && $rep_fetch test.arguments += --yes : not-replaced : { $clone_cfg; $* bar foo 2>!; $pkg_status -r >>EOO; !bar configured 1.0.0 libbar configured 0.1.0 available 1.0.0 libbaz configured 1.0.0 !foo configured 1.0.0 libbar configured 0.1.0 available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop bar foo } : replaced-scratch : : Test that changing package order on the command line does not result : in a sub-optimal choice of the libbaz version (0.1.0). : : Note that this was not the case until we implemented the builds : re-collection on the package version change. : { $clone_cfg; $* foo bar --verbose 5 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libbar/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 %.* trace: collect_build: add libbaz/0.1.0 trace: collect_build_prerequisites: recursively collect dependency libbaz/0.1.0 of dependent libbar/1.0.0 trace: collect_build_prerequisites: begin libbaz/0.1.0 trace: collect_build_prerequisites: end libbaz/0.1.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 trace: collect_build: libbar/1.0.0 package version needs to be replaced with libbar/0.1.0 trace: pkg_build: collection failed due to package version replacement, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: apply version replacement for libbar/1.0.0 trace: collect_build: replacement: libbar/0.1.0 trace: collect_build: add libbar/0.1.0 trace: collect_build_prerequisites: recursively collect dependency libbar/0.1.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: begin libbar/0.1.0 %.* trace: collect_build: add libbaz/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libbaz/1.0.0 of dependent libbar/0.1.0 trace: collect_build_prerequisites: begin libbaz/1.0.0 trace: collect_build_prerequisites: end libbaz/1.0.0 trace: collect_build_prerequisites: end libbar/0.1.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: recursively collect dependency libbar/0.1.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !foo configured 1.0.0 libbar configured 0.1.0 available 1.0.0 libbaz configured 1.0.0 !bar configured 1.0.0 libbar configured 0.1.0 available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop foo bar } : replaced-inplace : : Test the version replacement optimization. Here libbaz/1.0.0 get : replaced with 0.1.0 but without re-collection from scratch since it : does not have any dependencies. : { $clone_cfg && $rep_add $rep/t12a && $rep_fetch; $* libbaz libbar --verbose 5 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libbaz/1.0.0 trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: begin libbaz/1.0.0 %.* trace: collect_build_prerequisites: end libbaz/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 %.* trace: collect_build: pick libbaz/0.1.0 over libbaz/1.0.0 trace: collect_build: libbaz/1.0.0 package version needs to be replaced in-place with libbaz/0.1.0 trace: collect_build_prerequisites: recursively collect dependency libbaz/0.1.0 of dependent libbar/1.0.0 trace: collect_build_prerequisites: begin libbaz/0.1.0 trace: collect_build_prerequisites: end libbaz/0.1.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !libbaz configured 0.1.0 available 1.0.0 !libbar configured 1.0.0 !libbaz configured 0.1.0 available 1.0.0 EOO $pkg_drop libbaz libbar } } : configuration-negotiation : { +$clone_root_cfg && $rep_add $rep/t11a && $rep_fetch test.arguments += --yes --verbose 5 : initial-collection : { +$clone_cfg : postpone : { $clone_cfg; $* foo fox fux 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add fox/1.0.0 trace: collect_build: add fux/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin fox/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent fox/1.0.0 trace: postponed_configurations::add: add {fox | libfoo->{fox/1}} to {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: postpone fox/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo fox | libfoo->{foo/1 fox/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_prerequisites: resume fox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent fox/1.0.0 trace: collect_build_prerequisites: end fox/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo fox | libfoo->{foo/1 fox/1}} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !foo configured 1.0.0 libfoo configured 1.0.0 !fox configured 1.0.0 libfoo configured 1.0.0 !fux configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop foo fox fux } : postpone-system : { $clone_cfg; $* foo fox '?sys:libfoo/*' 2>!; #\ $* foo fox '?sys:libfoo/*' 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add fox/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency sys:libfoo/* of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin fox/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency sys:libfoo/* of dependent fox/1.0.0 trace: postponed_configurations::add: add {fox | libfoo} to {foo | libfoo} trace: collect_build_prerequisites: postpone fox/1.0.0 %.* trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {foo, fox | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip system sys:libfoo/* trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency sys:libfoo/* of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_prerequisites: resume fox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency sys:libfoo/* of dependent fox/1.0.0 trace: collect_build_prerequisites: end fox/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo, fox | libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !foo configured 1.0.0 libfoo configured,system !* available 1.0.0 0.1.0 !fox configured 1.0.0 libfoo configured,system !* available 1.0.0 0.1.0 EOO $pkg_drop foo fox } : postpone-merge : { $clone_cfg; $* foo bar baz 2>!; #\ $* foo bar baz 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add bar/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 trace: postponed_configurations::add: create {bar | libbar} trace: collect_build_prerequisites: postpone bar/1.0.0 trace: collect_build_prerequisites: begin baz/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent baz/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent baz/1.0.0 trace: postponed_configurations::add: add {baz | libbar, libfoo} to {foo | libfoo} trace: postponed_configurations::add: merge {bar | libbar} into {baz, foo | libbar, libfoo} trace: collect_build_prerequisites: postpone baz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {bar, baz, foo | libbar, libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: resume baz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent baz/1.0.0 trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent baz/1.0.0 trace: collect_build_prerequisites: end baz/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bar, baz, foo | libbar, libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !foo configured 1.0.0 libfoo configured 1.0.0 !bar configured 1.0.0 libbar configured 1.0.0 !baz configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop foo bar baz } : postpone-dependency-dependent : { $clone_cfg; $* fex 2>!; #\ $* fex 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fex/1.0.0 trace: collect_build_prerequisites: begin fex/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency foo/1.0.0 of dependent fex/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent fex/1.0.0 trace: postponed_configurations::add: add {fex | libfoo} to {foo | libfoo} trace: collect_build_prerequisites: postpone fex/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fex, foo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume fex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent fex/1.0.0 trace: collect_build_prerequisites: end fex/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {fex, foo | libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !fex configured 1.0.0 foo configured 1.0.0 libfoo configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop fex } : premature : { $clone_cfg; $* fux foo fox 2>!; #\ $* fux foo fox 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fox/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 (collected prematurely) trace: pkg_build: collection failed due to prematurely collected dependency libfoo, retry from scratch %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fox/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin fox/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent fox/1.0.0 trace: postponed_configurations::add: add {fox | libfoo} to {foo | libfoo} trace: collect_build_prerequisites: postpone fox/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {foo, fox | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_prerequisites: resume fox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent fox/1.0.0 trace: collect_build_prerequisites: end fox/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo, fox | libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !fux configured 1.0.0 libfoo configured 1.0.0 !foo configured 1.0.0 libfoo configured 1.0.0 !fox configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop fux foo fox } : bogus-postponment : { $clone_cfg; $* fux foo fix 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 (collected prematurely), checking for configuration cycle trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (libfoo), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 (collected prematurely), checking for configuration cycle trace: postponed_configurations::add: create {fix | foo->{fix/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (foo), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: pkg_build: dep-postpone user-specified foo trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo->{fix/1}} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: pkg_build: erase bogus postponement libfoo trace: pkg_build: bogus postponements erased, throwing %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: pkg_build: dep-postpone user-specified foo trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo->{fix/1}} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo->{fix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: being negotiated: {fix | foo->{fix/1}} trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: verifying {fix | foo->{fix/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (libfoo), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 (collected prematurely), checking for configuration cycle trace: postponed_configurations::add: create {fix | foo->{fix/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (foo), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add foo/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: pkg_build: dep-postpone user-specified foo trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo->{fix/1}} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo->{fix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume fix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency foo/1.0.0 of dependent fix/1.0.0 trace: collect_build_prerequisites: end fix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {fix | foo->{fix/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {foo | libfoo->{foo/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {foo | libfoo->{foo/1}} trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !fux configured 1.0.0 libfoo configured 1.0.0 !foo configured 1.0.0 libfoo configured 1.0.0 !fix configured 1.0.0 !foo configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop fux foo fix } } : existing : { +$clone_cfg : dependency : { $clone_cfg; $* libfoo 2>!; $* foo 2>!; #\ $* foo 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip configured libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !libfoo configured 1.0.0 !foo configured 1.0.0 !libfoo configured 1.0.0 EOO $pkg_drop foo libfoo } : dependent : { $clone_cfg; $* foo 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo->{foo/1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo->{foo/1}} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE # Upgrade the dependency. # $* ?libfoo/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: execute_plan: simulate: yes %.* trace: evaluate_dependency: libfoo/1.0.0: update to libfoo/0.1.0 %.* trace: pkg_build: refine package collection/plan execution %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0 trace: postponed_configurations::add: create { | libfoo->{}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): re-evaluate existing dependents trace: collect_build: add foo/1.0.0 trace: postponed_configurations::add: add {foo | libfoo->{foo/1}} to { | libfoo->{}} trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/0.1.0 trace: collect_build_prerequisites: end libfoo/0.1.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo->{foo/1}} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE # Reconfigure the dependency. # $* libfoo/0.1.0 +{ config.libfoo.extras=true } 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/0.1.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0 trace: postponed_configurations::add: create { | libfoo->{}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): re-evaluate existing dependents trace: collect_build: add foo/1.0.0 trace: postponed_configurations::add: add {foo | libfoo->{foo/1}} to { | libfoo->{}} trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip configured libfoo/0.1.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo->{foo/1}} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !libfoo configured !0.1.0 available 1.0.0 !foo configured 1.0.0 !libfoo configured !0.1.0 available 1.0.0 EOO $pkg_drop foo libfoo } } : postponed-collection : { +$clone_cfg : backtrace : { $clone_cfg; $* foo bar box 2>!; #\ $* foo bar box 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add bar/1.0.0 trace: collect_build: add box/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 trace: postponed_configurations::add: create {bar | libbar} trace: collect_build_prerequisites: postpone bar/1.0.0 trace: collect_build_prerequisites: begin box/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent box/1.0.0 since max index is reached: 0 info: dependency alternative: {libbar libfoo} { require { config.libbar.extras = true config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone box/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {bar | libbar} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {bar | libbar} trace: collect_build_postponed (2): index 1 collect alt-postponed box/1.0.0 trace: collect_build_prerequisites: resume box/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0 (collected prematurely) trace: collect_build_postponed (1): cfg-negotiation of {bar | libbar} failed due to dependency libbar, try next trace: collect_build_postponed (1): index 1 collect alt-postponed box/1.0.0 trace: collect_build_prerequisites: resume box/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0 trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent box/1.0.0 (collected prematurely) trace: collect_build_postponed (0): cfg-negotiation of {foo | libfoo} failed due to dependency libfoo, try next trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {bar | libbar} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bar | libbar} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (2): index 1 collect alt-postponed box/1.0.0 trace: collect_build_prerequisites: resume box/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0 (collected prematurely) trace: collect_build_postponed (0): cfg-negotiation of {bar | libbar} failed due to dependency libbar, try next trace: collect_build_postponed (0): index 1 collect alt-postponed box/1.0.0 trace: collect_build_prerequisites: resume box/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent box/1.0.0 trace: postponed_configurations::add: add {box | libbar, libfoo} to {foo | libfoo} trace: postponed_configurations::add: merge {bar | libbar} into {box, foo | libbar, libfoo} trace: collect_build_prerequisites: postpone box/1.0.0 trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {bar, box, foo | libbar, libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: resume box/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent box/1.0.0 trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent box/1.0.0 trace: collect_build_prerequisites: end box/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bar, box, foo | libbar, libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !foo configured 1.0.0 libfoo configured 1.0.0 !bar configured 1.0.0 libbar configured 1.0.0 !box configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop foo bar box } : premature : { $clone_cfg; $* fux fix 2>!; #\ $* fux fix 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 (collected prematurely) trace: pkg_build: collection failed due to prematurely collected dependency libfoo, retry from scratch %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume fix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency foo/1.0.0 of dependent fix/1.0.0 trace: collect_build_prerequisites: end fix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {fix | foo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !fux configured 1.0.0 libfoo configured 1.0.0 !fix configured 1.0.0 foo configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop fux fix } : double-premature : { $clone_cfg; $* fux bex fix buz 2>!; #\ $* fux bex fix buz 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add bex/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build: add buz/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin bex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libbar/1.0.0 of dependent bex/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: end bex/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_prerequisites: begin buz/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bux/1.0.0 of dependent buz/1.0.0 trace: postponed_configurations::add: create {buz | bux} trace: collect_build_prerequisites: postpone buz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 (collected prematurely) trace: pkg_build: collection failed due to prematurely collected dependency libfoo, retry from scratch %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add bex/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build: add buz/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin bex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libbar/1.0.0 of dependent bex/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: end bex/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_prerequisites: begin buz/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bux/1.0.0 of dependent buz/1.0.0 trace: postponed_configurations::add: create {buz | bux} trace: collect_build_prerequisites: postpone buz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume fix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency foo/1.0.0 of dependent fix/1.0.0 trace: collect_build_prerequisites: end fix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {fix | foo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {buz | bux} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bux/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent bux/1.0.0 (collected prematurely) trace: pkg_build: collection failed due to prematurely collected dependency libbar, retry from scratch %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add bex/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build: add buz/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin bex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libbar/1.0.0 of dependent bex/1.0.0 trace: collect_build_prerequisites: end bex/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_prerequisites: begin buz/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bux/1.0.0 of dependent buz/1.0.0 trace: postponed_configurations::add: create {buz | bux} trace: collect_build_prerequisites: postpone buz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume fix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency foo/1.0.0 of dependent fix/1.0.0 trace: collect_build_prerequisites: end fix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {fix | foo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {buz | bux} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bux/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bux/1.0.0 trace: postponed_configurations::add: create {bux | libbar} trace: collect_build_prerequisites: postpone bux/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume buz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency bux/1.0.0 of dependent buz/1.0.0 trace: collect_build_prerequisites: end buz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {buz | bux} trace: collect_build_postponed (3): begin trace: collect_build_postponed (3): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (4): begin trace: collect_build_postponed (4): cfg-negotiate begin {bux | libbar} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bux/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bux/1.0.0 trace: collect_build_prerequisites: end bux/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {bux | libbar} trace: collect_build_postponed (4): end trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !fux configured 1.0.0 libfoo configured 1.0.0 !fix configured 1.0.0 foo configured 1.0.0 libfoo configured 1.0.0 !bex configured 1.0.0 libbar configured 1.0.0 !buz configured 1.0.0 bux configured 1.0.0 libbar configured 1.0.0 EOO $pkg_drop fux bex fix buz } : up-negotiate-dependency : { $clone_cfg; $* bix 2>!; #\ $* bix 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add bix/1.0.0 trace: collect_build_prerequisites: begin bix/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bix/1.0.0 trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent bix/1.0.0 trace: postponed_configurations::add: create {bix | bar, libbar} trace: collect_build_prerequisites: postpone bix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {bix | bar, libbar} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: up-negotiate dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bix/1.0.0 trace: collect_build_prerequisites: skip cfg-negotiated dependency bar/1.0.0 of dependent bix/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: recursively collect dependency bux/1.0.0 of dependent bix/1.0.0 trace: collect_build_prerequisites: begin bux/1.0.0 %.* trace: collect_build_prerequisites: up-negotiate dependency libbar/1.0.0 of dependent bux/1.0.0 trace: collect_build_prerequisites: end bux/1.0.0 trace: collect_build_prerequisites: end bix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bix | bar, libbar} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !bix configured 1.0.0 bar configured 1.0.0 libbar configured 1.0.0 bux configured 1.0.0 libbar configured 1.0.0 libbar configured 1.0.0 EOO $pkg_drop bix } : postponed-alts : { +$clone_cfg : with-premature : { $clone_cfg; $* fux boo 2>!; #\ $* fux boo 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add boo/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 0 info: dependency alternative: libbar trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (0): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (0): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 (collected prematurely) trace: pkg_build: collection failed due to prematurely collected dependency libfoo, retry from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add boo/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 0 info: dependency alternative: libbar trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (0): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (0): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 trace: postponed_configurations::add: create {boo | libfoo} trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {boo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent boo/1.0.0 trace: collect_build_prerequisites: end boo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {boo | libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !fux configured 1.0.0 libfoo configured 1.0.0 !boo configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop fux boo } : with-premature-complex : { $clone_cfg; $* fux bex fix biz 2>!; #\ $* fux bex fix biz 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add bex/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build: add biz/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin bex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libbar/1.0.0 of dependent bex/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: end bex/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_prerequisites: begin biz/1.0.0 %.* trace: collect_build: add boo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency boo/1.0.0 of dependent biz/1.0.0 trace: postponed_configurations::add: create {biz | boo} trace: collect_build_prerequisites: postpone biz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 (collected prematurely) trace: pkg_build: collection failed due to prematurely collected dependency libfoo, retry from scratch %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add fux/1.0.0 trace: collect_build: add bex/1.0.0 trace: collect_build: add fix/1.0.0 trace: collect_build: add biz/1.0.0 trace: collect_build_prerequisites: begin fux/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent fux/1.0.0 trace: collect_build_prerequisites: end fux/1.0.0 trace: collect_build_prerequisites: begin bex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libbar/1.0.0 of dependent bex/1.0.0 trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_prerequisites: end bex/1.0.0 trace: collect_build_prerequisites: begin fix/1.0.0 %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent fix/1.0.0 trace: postponed_configurations::add: create {fix | foo} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_prerequisites: begin biz/1.0.0 %.* trace: collect_build: add boo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency boo/1.0.0 of dependent biz/1.0.0 trace: postponed_configurations::add: create {biz | boo} trace: collect_build_prerequisites: postpone biz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume fix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency foo/1.0.0 of dependent fix/1.0.0 trace: collect_build_prerequisites: end fix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {fix | foo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {biz | boo} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 0 info: dependency alternative: libbar trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume biz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency boo/1.0.0 of dependent biz/1.0.0 trace: collect_build_prerequisites: end biz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {biz | boo} trace: collect_build_postponed (3): begin trace: collect_build_postponed (3): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (3): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: recursively collect dependency libbar/1.0.0 of dependent boo/1.0.0 trace: collect_build_prerequisites: end boo/1.0.0 trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !fux configured 1.0.0 libfoo configured 1.0.0 !fix configured 1.0.0 foo configured 1.0.0 libfoo configured 1.0.0 !bex configured 1.0.0 libbar configured 1.0.0 !biz configured 1.0.0 boo configured 1.0.0 libbar configured 1.0.0 EOO $pkg_drop fux bex fix biz } : with-rollback : { $clone_cfg; $* foo boo 2>!; #\ $* foo boo 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch %.* trace: collect_build: add foo/1.0.0 trace: collect_build: add boo/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 0 info: dependency alternative: libbar trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (1): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (1): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 (collected prematurely) trace: collect_build_postponed (0): cfg-negotiation of {foo | libfoo} failed due to dependency libfoo, try next trace: collect_build_postponed (0): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (0): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 trace: postponed_configurations::add: add {boo | libfoo} to {foo | libfoo} trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {boo, foo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent boo/1.0.0 trace: collect_build_prerequisites: end boo/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {boo, foo | libfoo} trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !foo configured 1.0.0 libfoo configured 1.0.0 !boo configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop foo boo } : after-negotiation : { $clone_cfg; $* foo biz 2>!; #\ $* foo biz 2>>~%EOE%; %.* trace: pkg_build: refine execution plan from scratch trace: pkg_build: BEGIN EXCLUSIVE trace: collect_build: add foo/1.0.0 trace: collect_build: add biz/1.0.0 trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: postponed_configurations::add: create {foo | libfoo} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_prerequisites: begin biz/1.0.0 %.* trace: collect_build: add boo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency boo/1.0.0 of dependent biz/1.0.0 trace: postponed_configurations::add: create {biz | boo} trace: collect_build_prerequisites: postpone biz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {biz | boo} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 0 info: dependency alternative: libbar trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume biz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency boo/1.0.0 of dependent biz/1.0.0 trace: collect_build_prerequisites: end biz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {biz | boo} trace: collect_build_postponed (2): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (2): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 (collected prematurely) trace: collect_build_postponed (0): cfg-negotiation of {foo | libfoo} failed due to dependency libfoo, try next trace: collect_build_postponed (1): begin trace: collect_build_postponed (1): cfg-negotiate begin {biz | boo} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 0 info: dependency alternative: libbar trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume biz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency boo/1.0.0 of dependent biz/1.0.0 trace: collect_build_prerequisites: end biz/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {biz | boo} trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {foo | libfoo} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {foo | libfoo} trace: collect_build_postponed (2): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (2): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 (collected prematurely) trace: collect_build_postponed (1): cfg-negotiation of {foo | libfoo} failed due to dependency libfoo, try next trace: collect_build_postponed (1): index 1 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: alt-postpone dependent boo/1.0.0 since max index is reached: 1 info: dependency alternative: libfoo { require { config.libfoo.extras = true } } trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (1): index 2 collect alt-postponed boo/1.0.0 trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent boo/1.0.0 trace: postponed_configurations::add: add {boo | libfoo} to {foo | libfoo} trace: collect_build_prerequisites: postpone boo/1.0.0 trace: collect_build_postponed (2): begin trace: collect_build_postponed (2): cfg-negotiate begin {boo, foo | libfoo} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume boo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent boo/1.0.0 trace: collect_build_prerequisites: end boo/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {boo, foo | libfoo} trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_status -r >>EOO; !foo configured 1.0.0 libfoo configured 1.0.0 !biz configured 1.0.0 boo configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop foo biz } } : bogus-postponment : { $clone_cfg; $* tax toz tez 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: add toz/1.0.0 trace: collect_build: add tez/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: collect_build_prerequisites: begin toz/1.0.0 %.* trace: collect_build: add libbaz/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbaz/1.0.0 of dependent toz/1.0.0 trace: postponed_configurations::add: create {toz | libbaz->{toz/1}} trace: collect_build_prerequisites: postpone toz/1.0.0 trace: collect_build_prerequisites: begin tez/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | libbox->{tez/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {toz | libbaz->{toz/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbaz/1.0.0 trace: collect_build_prerequisites: end libbaz/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume toz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbaz/1.0.0 of dependent toz/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent toz/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: being negotiated: {toz | libbaz->{toz/1}} trace: postponed_configurations::add: create {toz | libfoo->{toz/2}} trace: collect_build_prerequisites: verifying {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {toz | libbaz->{toz/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (libfoo), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: add toz/1.0.0 trace: collect_build: add tez/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: collect_build_prerequisites: begin toz/1.0.0 %.* trace: collect_build: add libbaz/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbaz/1.0.0 of dependent toz/1.0.0 trace: postponed_configurations::add: create {toz | libbaz->{toz/1}} trace: collect_build_prerequisites: postpone toz/1.0.0 trace: collect_build_prerequisites: begin tez/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | libbox->{tez/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {toz | libbaz->{toz/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbaz/1.0.0 trace: collect_build_prerequisites: end libbaz/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume toz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbaz/1.0.0 of dependent toz/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent toz/1.0.0 trace: postponed_configurations::add: create {toz | libfoo->{toz/2}} trace: collect_build_prerequisites: postpone toz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {toz | libbaz->{toz/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | libbox->{tez/1}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent tez/1.0.0 %.* trace: collect_build: pick toz/0.1.0 over toz/1.0.0 trace: collect_build: toz/1.0.0 package version needs to be replaced with toz/0.1.0 trace: pkg_build: collection failed due to package version replacement, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: apply version replacement for toz/1.0.0 trace: collect_build: replacement: toz/0.1.0 trace: collect_build: add toz/0.1.0 trace: collect_build: add tez/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_prerequisites: begin tez/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | libbox->{tez/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency toz/0.1.0 of dependent tez/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: being negotiated: {tez | libbox->{tez/1}} trace: postponed_configurations::add: create {tez | toz->{tez/2}} trace: collect_build_prerequisites: verifying {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {tez | libbox->{tez/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (toz), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: apply version replacement for toz/1.0.0 trace: collect_build: replacement: toz/0.1.0 trace: collect_build: add toz/0.1.0 trace: collect_build: add tez/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: pkg_build: dep-postpone user-specified toz trace: collect_build_prerequisites: begin tez/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | libbox->{tez/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency toz/0.1.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | toz->{tez/2}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | libbox->{tez/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency toz/0.1.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tez/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {tez | libbox->{tez/1}} trace: collect_build_prerequisites: being negotiated: {tez | toz->{tez/2}} trace: postponed_configurations::add: add {tez | libbar->{tez/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_prerequisites: verifying {tez | libbox->{tez/1}} trace: collect_build_prerequisites: verifying {tez | toz->{tez/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (0): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tez | libbox->{tez/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency toz/0.1.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | toz->{tez/2}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tez | libbox->{tez/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency toz/0.1.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tez/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {tez | libbox->{tez/1}} trace: collect_build_prerequisites: being negotiated: {tez | toz->{tez/2}} trace: postponed_configurations::add: add {tez | libbar->{tez/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_prerequisites: verifying {tez | libbox->{tez/1}} trace: collect_build_prerequisites: verifying {tez | toz->{tez/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (1): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | toz->{tez/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency toz/0.1.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: add {tez | libbar->{tez/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | toz->{tez/2}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tez/1.0.0 trace: collect_build_prerequisites: end tez/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_postponed (3): erase bogus postponement libfoo trace: collect_build_postponed (3): bogus postponements erased, throwing trace: pkg_build: collection failed due to bogus dependency collection postponement cancellation, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: apply version replacement for toz/1.0.0 trace: collect_build: replacement: toz/0.1.0 trace: collect_build: add toz/0.1.0 trace: collect_build: add tez/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: pkg_build: dep-postpone user-specified toz trace: collect_build_prerequisites: begin tez/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | libbox->{tez/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency toz/0.1.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | toz->{tez/2}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | libbox->{tez/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency toz/0.1.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tez/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {tez | libbox->{tez/1}} trace: collect_build_prerequisites: being negotiated: {tez | toz->{tez/2}} trace: postponed_configurations::add: add {tez | libbar->{tez/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_prerequisites: verifying {tez | libbox->{tez/1}} trace: collect_build_prerequisites: verifying {tez | toz->{tez/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (0): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tez | libbox->{tez/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency toz/0.1.0 of dependent tez/1.0.0 trace: postponed_configurations::add: create {tez | toz->{tez/2}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tez | libbox->{tez/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency toz/0.1.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tez/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {tez | libbox->{tez/1}} trace: collect_build_prerequisites: being negotiated: {tez | toz->{tez/2}} trace: postponed_configurations::add: add {tez | libbar->{tez/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_prerequisites: verifying {tez | libbox->{tez/1}} trace: collect_build_prerequisites: verifying {tez | toz->{tez/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (1): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | toz->{tez/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin toz/0.1.0 trace: collect_build_prerequisites: end toz/0.1.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency toz/0.1.0 of dependent tez/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tez/1.0.0 trace: postponed_configurations::add: add {tez | libbar->{tez/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | toz->{tez/2}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tez/1.0.0 trace: collect_build_prerequisites: end tez/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tax tez | libbar->{tax/1 tez/3}} trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !toz configured 0.1.0 available 1.0.0 !tax configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 !tez configured 1.0.0 libbar configured 1.0.0 libbox configured 1.0.0 !toz configured 0.1.0 available 1.0.0 EOO $pkg_drop tax toz tez } } : cycle : { +$clone_cfg : direct : { +$clone_cfg : args-tex-tix : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # tix: depends: libbar(c) # depends: tex(c) # # Configuration clusters: # # {tex tix | libbar->{tex/1 tix/1}} # # Fail at: # # tix -> tex # $* tex tix 2>>~%EOE% != 0 %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tex/1.0.0 trace: collect_build: add tix/1.0.0 trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_prerequisites: begin tix/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tix/1.0.0 trace: postponed_configurations::add: add {tix | libbar->{tix/1}} to {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tex tix | libbar->{tex/1 tix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libfoo->{tex/2}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: being negotiated: {tex tix | libbar->{tex/1 tix/1}} trace: postponed_configurations::add: create {tix | tex->{tix/2}} trace: collect_build_prerequisites: verifying {tex tix | libbar->{tex/1 tix/1}} error: package tix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency tex/1.0.0 negotiates configuration of libbar/1.0.0 info: consider reordering dependencies of tix/1.0.0 info: while satisfying tix/1.0.0 %.* EOE } : args-tix : : As above but with the different command-line arguments which results : in the different cluster list at the moment of the cycle detection. : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # tix: depends: libbar(c) # depends: tex(c) # # Configuration clusters: # # {tix | libbar->{tix/1}} # {tix | tex->{tix/2}} # # Fail at: # # tex -> libbar # $* tix 2>>~%EOE% != 0 %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tix/1.0.0 trace: collect_build_prerequisites: begin tix/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tix/1.0.0 trace: postponed_configurations::add: create {tix | libbar->{tix/1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0 %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 trace: postponed_configurations::add: create {tix | tex->{tix/2}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tix | libbar->{tix/1}} trace: collect_build_prerequisites: being negotiated: {tix | tex->{tix/2}} trace: postponed_configurations::add: add {tex | libbar->{tex/1}} to {tix | libbar->{tix/1}} trace: collect_build_prerequisites: verifying {tex tix | libbar->{tex/1 tix/1}} error: package tix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency tex/1.0.0 negotiates configuration of libbar/1.0.0 info: consider reordering dependencies of tix/1.0.0 info: while satisfying tex/1.0.0 %.* EOE } # @@ This test fails complaining about cycle introduced with tix/1.0.0. # However 1.0.0 as an intermediate version for tix and the final # version is 0.1.0 (as constrained by tux). Thus, the failure is # premature. # #\ : args-tex-tix-tux : { $clone_cfg; $* tex tix tux 2>| } #\ : args-tex-tiz : : Note that tiz is a correct version of tix, which fixes the : configuration cycle. : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # tiz: depends: tex(c) # depends: libbar(c) # $* tex tiz 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tex/1.0.0 trace: collect_build: add tiz/1.0.0 trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_prerequisites: begin tiz/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tiz/1.0.0 (collected prematurely), checking for configuration cycle trace: postponed_configurations::add: create {tiz | tex->{tiz/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (tex), retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tex/1.0.0 trace: collect_build: add tiz/1.0.0 trace: pkg_build: dep-postpone user-specified tex trace: collect_build_prerequisites: begin tiz/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of dependent tiz/1.0.0 trace: postponed_configurations::add: create {tiz | tex->{tiz/1}} trace: collect_build_prerequisites: postpone tiz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tiz | tex->{tiz/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tiz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency tex/1.0.0 of dependent tiz/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tiz/1.0.0 trace: postponed_configurations::add: add {tiz | libbar->{tiz/2}} to {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tiz/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tiz | tex->{tiz/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tex tiz | libbar->{tex/1 tiz/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libfoo->{tex/2}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_prerequisites: resume tiz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tiz/1.0.0 trace: collect_build_prerequisites: end tiz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tex tiz | libbar->{tex/1 tiz/2}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: collect_build_prerequisites: end tex/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tex | libfoo->{tex/2}} trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !tex configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 !tiz configured 1.0.0 libbar configured 1.0.0 !tex configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop tex tiz } : args-tiz : : Note that tiz is a correct version of tix, which fixes the : configuration cycle. : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # tiz: depends: tex(c) # depends: libbar(c) # $* tiz 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tiz/1.0.0 trace: collect_build_prerequisites: begin tiz/1.0.0 %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of dependent tiz/1.0.0 trace: postponed_configurations::add: create {tiz | tex->{tiz/1}} trace: collect_build_prerequisites: postpone tiz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tiz | tex->{tiz/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tiz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency tex/1.0.0 of dependent tiz/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tiz/1.0.0 trace: postponed_configurations::add: add {tiz | libbar->{tiz/2}} to {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tiz/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tiz | tex->{tiz/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tex tiz | libbar->{tex/1 tiz/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libfoo->{tex/2}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_prerequisites: resume tiz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tiz/1.0.0 trace: collect_build_prerequisites: end tiz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tex tiz | libbar->{tex/1 tiz/2}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: collect_build_prerequisites: end tex/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tex | libfoo->{tex/2}} trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !tiz configured 1.0.0 libbar configured 1.0.0 tex configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop tiz } : existing : { +$clone_cfg : negotiate : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # tix: depends: libbar(c) # depends: tex(c) # $* tex 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libbar->{tex/1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tex | libbar->{tex/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: create {tex | libfoo->{tex/2}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tex | libbar->{tex/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tex | libfoo->{tex/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent tex/1.0.0 trace: collect_build_prerequisites: end tex/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tex | libfoo->{tex/2}} trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE # Configuration clusters: # # {tix | libbar->{tix/1}} # {tix | tex->{tix/2}} # # Fail at: # # tex -> libbar # $* tix 2>>~%EOE% != 0; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tix/1.0.0 trace: collect_build_prerequisites: begin tix/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tix/1.0.0 trace: postponed_configurations::add: create {tix | libbar->{tix/1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): re-evaluate existing dependents trace: collect_build: add tex/1.0.0 trace: postponed_configurations::add: add {tex | libbar->{tex/1}} to {tix | libbar->{tix/1}} trace: collect_build_postponed (1): cfg-negotiate begin {tex tix | libbar->{tex/1 tix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip configured libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0 %.* trace: collect_build: cannot collect prematurely cfg-negotiated existing dependent tex, throwing trace: pkg_build: collection failed due to prematurely cfg-negotiated existing dependent, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tix/1.0.0 trace: collect_build_prerequisites: begin tix/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tix/1.0.0 trace: postponed_configurations::add: create {tix | libbar->{tix/1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip configured libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tix/1.0.0 %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 trace: postponed_configurations::add: create {tix | tex->{tix/2}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tix | libbar->{tix/1}} trace: collect_build_prerequisites: being negotiated: {tix | tex->{tix/2}} trace: postponed_configurations::add: add {tex | libbar->{tex/1}} to {tix | libbar->{tix/1}} trace: collect_build_prerequisites: verifying {tex tix | libbar->{tex/1 tix/1}} error: package tix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency tex/1.0.0 negotiates configuration of libbar/1.0.0 info: consider reordering dependencies of tix/1.0.0 %.* EOE # @@ These tests fail complaining on tix/1.0.0->tex/1.0.0 cycle. # However, we downgrade tex to 0.1.0 or 0.2.0 for which there # is no cycle (0.2.0 depends on libbar without config clause and # 0.1.0 doesn't depend at all). # #$* tix ?tex/0.1.0 2>|; #$* tix ?tex/0.2.0 2>|; $pkg_drop tex } } } : indirect : { +$clone_cfg : args-tax-dex-dix : { $clone_cfg; # Dependencies: # # tax: depends: libbar(c) # depends: libfoo # # dex: depends: bar(c) # depends: libfoo(c) # # bar: depends: libbar(c) # # dix: depends: libbar(c) # depends: libbox(c) # causes postponment and initial cluster finished negotiating # depends: dox(c) # # dox: dex(c) # # Configuration clusters: # # {bar dix tax | libbar->{bar/1 dix/1 tax/1}} # {dex | bar->{dex/1}} # {dex | libfoo->{dex/2}} # {dix | libbox->{dix/2}} # {dix | dox->{dix/3}} # # Fail at: # # dox -> dex # $* tax dex dix 2>>~%EOE% != 0 %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: add dex/1.0.0 trace: collect_build: add dix/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_prerequisites: begin dix/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: add {dix | libbar->{dix/1}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1 tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | libbox->{dix/2}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dix tax | libbar->{dix/1 tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {dix tax | libbar->{dix/1 tax/1}} trace: collect_build_prerequisites: being negotiated: {dex | bar->{dex/1}} trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {dix tax | libbar->{dix/1 tax/1}} trace: collect_build_prerequisites: verifying {bar dix tax | libbar->{bar/1 dix/1 tax/1}} trace: collect_build_prerequisites: verifying {dex | bar->{dex/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (0): cfg-negotiation of {dix tax | libbar->{dix/1 tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {dix tax | libbar->{dix/1 tax/1}} trace: collect_build_prerequisites: postpone bar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency bar/1.0.0 of dependent dex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | libfoo->{dex/2}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dex | bar->{dex/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {bar dix tax | libbar->{bar/1 dix/1 tax/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | libbox->{dix/2}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {bar dix tax | libbar->{bar/1 dix/1 tax/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {dex | libfoo->{dex/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: collect_build_prerequisites: end dex/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {dex | libfoo->{dex/2}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {dix | libbox->{dix/2}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add dox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | dox->{dix/3}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {dix | libbox->{dix/2}} trace: collect_build_postponed (5): begin %.* trace: collect_build_postponed (5): cfg-negotiate begin {dix | dox->{dix/3}} trace: collect_build_postponed (5): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {bar dix tax | libbar->{bar/1 dix/1 tax/1}} trace: collect_build_prerequisites: negotiated: {dex | bar->{dex/1}} trace: collect_build_prerequisites: negotiated: {dex | libfoo->{dex/2}} trace: collect_build_prerequisites: negotiated: {dix | libbox->{dix/2}} trace: collect_build_prerequisites: being negotiated: {dix | dox->{dix/3}} trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: verifying {bar dix tax | libbar->{bar/1 dix/1 tax/1}} error: package dix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency bar/1.0.0 negotiates configuration of libbar/1.0.0 info: consider reordering dependencies of dix/1.0.0 info: while satisfying dox/1.0.0 %.* EOE } : args-dix : : As above but with the different command-line arguments which results : in the different cluster list at the moment of the cycle detection. : { $clone_cfg; # Dependencies: # # dex: depends: bar(c) # depends: libfoo(c) # # bar: depends: libbar(c) # # dix: depends: libbar(c) # depends: libbox(c) # causes postponment and initial cluster finished negotiating # depends: dox(c) # # dox: dex(c) # # Configuration clusters: # # {dix | libbar->{dix/1}} # {dix | libbox->{dix/2}} # {dix | dox->{dix/3}} # {dox | dex->{dox/1}} # {dex | bar->{dex/1}} # # Fail at: # # bar -> libbar # $* dix 2>>~%EOE% != 0 %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add dix/1.0.0 trace: collect_build_prerequisites: begin dix/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | libbar->{dix/1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix | libbar->{dix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | libbox->{dix/2}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dix | libbar->{dix/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add dox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | dox->{dix/3}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build: add dex/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dox/1.0.0 of dependent dix/1.0.0 trace: collect_build_prerequisites: end dix/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {dix | dox->{dix/3}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0 trace: collect_build_prerequisites: end dox/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {dox | dex->{dox/1}} trace: collect_build_postponed (5): begin %.* trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (5): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {dix | libbar->{dix/1}} trace: collect_build_prerequisites: negotiated: {dix | libbox->{dix/2}} trace: collect_build_prerequisites: negotiated: {dix | dox->{dix/3}} trace: collect_build_prerequisites: negotiated: {dox | dex->{dox/1}} trace: collect_build_prerequisites: being negotiated: {dex | bar->{dex/1}} trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {dix | libbar->{dix/1}} trace: collect_build_prerequisites: verifying {bar dix | libbar->{bar/1 dix/1}} error: package dix/1.0.0 negotiates configuration of libbar/1.0.0 before its (potentially indirect) dependency bar/1.0.0 negotiates configuration of libbar/1.0.0 info: consider reordering dependencies of dix/1.0.0 info: while satisfying bar/1.0.0 %.* EOE } : args-tax-dex-diz : : Note that diz is a correct version of dix, which fixes the : configuration cycle. : { $clone_cfg; # Dependencies: # # tax: depends: libbar(c) # depends: libfoo # # dex: depends: bar(c) # depends: libfoo(c) # # bar: depends: libbar(c) # # diz: depends: dox(c) # depends: libbox(c) # depends: libbar(c) # # dox: dex(c) # $* tax dex diz 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add tax/1.0.0 trace: collect_build: add dex/1.0.0 trace: collect_build: add diz/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_prerequisites: begin diz/1.0.0 %.* trace: collect_build: add dox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | dox->{diz/1}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: recursively collect dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: being negotiated: {dex | bar->{dex/1}} trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {bar tax | libbar->{bar/1 tax/1}} trace: collect_build_prerequisites: verifying {dex | bar->{dex/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (0): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone bar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency bar/1.0.0 of dependent dex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | libfoo->{dex/2}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dex | bar->{dex/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {bar tax | libbar->{bar/1 tax/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {bar tax | libbar->{bar/1 tax/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {diz | dox->{diz/1}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {bar tax | libbar->{bar/1 tax/1}} trace: collect_build_prerequisites: negotiated: {dex | bar->{dex/1}} trace: collect_build_prerequisites: being negotiated: {diz | dox->{diz/1}} trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: verifying {bar tax | libbar->{bar/1 tax/1}} trace: collect_build_prerequisites: verifying {dex | bar->{dex/1}} trace: collect_build_prerequisites: verifying {diz | dox->{diz/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: pkg_build: collection failed due to prematurely collected dependency (dex), retry from scratch trace: pkg_build: COMMIT trace: pkg_build: refine package collection/plan execution from scratch trace: pkg_build: BEGIN EXCLUSIVE trace: collect_build: add tax/1.0.0 trace: collect_build: add dex/1.0.0 trace: collect_build: add diz/1.0.0 trace: collect_build_prerequisites: begin tax/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tax/1.0.0 trace: postponed_configurations::add: create {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: pkg_build: dep-postpone user-specified dex trace: collect_build_prerequisites: begin diz/1.0.0 %.* trace: collect_build: add dox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | dox->{diz/1}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {diz | dox->{diz/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | libbox->{diz/2}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {diz | dox->{diz/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {dox | dex->{dox/1}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0 trace: collect_build_prerequisites: end dox/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {dox | dex->{dox/1}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {diz | libbox->{diz/2}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent diz/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {diz | dox->{diz/1}} trace: collect_build_prerequisites: negotiated: {dox | dex->{dox/1}} trace: collect_build_prerequisites: being negotiated: {diz | libbox->{diz/2}} trace: postponed_configurations::add: add {diz | libbar->{diz/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_prerequisites: verifying {diz | dox->{diz/1}} trace: collect_build_prerequisites: verifying {dox | dex->{dox/1}} trace: collect_build_prerequisites: verifying {diz | libbox->{diz/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (0): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {diz | dox->{diz/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | libbox->{diz/2}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {diz | dox->{diz/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {dox | dex->{dox/1}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0 trace: collect_build_prerequisites: end dox/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {dox | dex->{dox/1}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {diz | libbox->{diz/2}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent diz/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {diz | dox->{diz/1}} trace: collect_build_prerequisites: negotiated: {dox | dex->{dox/1}} trace: collect_build_prerequisites: being negotiated: {diz | libbox->{diz/2}} trace: postponed_configurations::add: add {diz | libbar->{diz/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_prerequisites: verifying {diz | dox->{diz/1}} trace: collect_build_prerequisites: verifying {dox | dex->{dox/1}} trace: collect_build_prerequisites: verifying {diz | libbox->{diz/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (1): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {dox | dex->{dox/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0 trace: collect_build_prerequisites: end dox/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dox | dex->{dox/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {tax | libbar->{tax/1}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tax | libbar->{tax/1}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {diz | libbox->{diz/2}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent diz/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {tax | libbar->{tax/1}} trace: collect_build_prerequisites: negotiated: {diz | dox->{diz/1}} trace: collect_build_prerequisites: negotiated: {dox | dex->{dox/1}} trace: collect_build_prerequisites: being negotiated: {diz | libbox->{diz/2}} trace: postponed_configurations::add: add {diz | libbar->{diz/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: verifying {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_prerequisites: verifying {diz | dox->{diz/1}} trace: collect_build_prerequisites: verifying {dox | dex->{dox/1}} trace: collect_build_prerequisites: verifying {diz | libbox->{diz/2}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (2): cfg-negotiation of {tax | libbar->{tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {diz | libbox->{diz/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: add {diz | libbar->{diz/3}} to {tax | libbar->{tax/1}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {diz | libbox->{diz/2}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent diz/1.0.0 trace: collect_build_prerequisites: end diz/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_postponed (5): begin %.* trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (5): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 (collected prematurely), checking for configuration cycle trace: collect_build_prerequisites: negotiated: {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_prerequisites: negotiated: {diz | dox->{diz/1}} trace: collect_build_prerequisites: negotiated: {dox | dex->{dox/1}} trace: collect_build_prerequisites: negotiated: {diz | libbox->{diz/2}} trace: collect_build_prerequisites: being negotiated: {dex | bar->{dex/1}} trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_prerequisites: verifying {bar diz tax | libbar->{bar/1 diz/3 tax/1}} trace: collect_build_prerequisites: verifying {diz | dox->{diz/1}} trace: collect_build_prerequisites: verifying {dox | dex->{dox/1}} trace: collect_build_prerequisites: verifying {diz | libbox->{diz/2}} trace: collect_build_prerequisites: verifying {dex | bar->{dex/1}} trace: collect_build_prerequisites: no configuration cycle, throwing trace: collect_build_postponed (3): cfg-negotiation of {diz tax | libbar->{diz/3 tax/1}} failed due to dependency libbar, try next trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {diz tax | libbar->{diz/3 tax/1}} trace: collect_build_prerequisites: postpone bar/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency bar/1.0.0 of dependent dex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | libfoo->{dex/2}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {dex | bar->{dex/1}} trace: collect_build_postponed (5): begin %.* trace: collect_build_postponed (5): cfg-negotiate begin {bar diz tax | libbar->{bar/1 diz/3 tax/1}} trace: collect_build_postponed (5): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (5): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent diz/1.0.0 trace: collect_build_prerequisites: end diz/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent tax/1.0.0 %.* trace: collect_build_prerequisites: dep-postpone dependency libfoo/1.0.0 of dependent tax/1.0.0 trace: collect_build_prerequisites: end tax/1.0.0 trace: collect_build_postponed (5): cfg-negotiate end {bar diz tax | libbar->{bar/1 diz/3 tax/1}} trace: collect_build_postponed (6): begin %.* trace: collect_build_postponed (6): cfg-negotiate begin {dex | libfoo->{dex/2}} trace: collect_build_postponed (6): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (6): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: collect_build_prerequisites: end dex/1.0.0 trace: collect_build_postponed (6): cfg-negotiate end {dex | libfoo->{dex/2}} trace: collect_build_postponed (6): end trace: collect_build_postponed (5): end trace: collect_build_postponed (4): end trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !tax configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 !dex configured 1.0.0 bar configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 !diz configured 1.0.0 dox configured 1.0.0 !dex configured 1.0.0 bar configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 libbar configured 1.0.0 libbox configured 1.0.0 EOO $pkg_drop tax dex diz --drop-dependent } : args-diz : : Note that diz is a correct version of dix, which fixes the : configuration cycle. : { $clone_cfg; # Dependencies: # # dex: depends: bar(c) # depends: libfoo(c) # # bar: depends: libbar(c) # # diz: depends: dox(c) # depends: libbox(c) # depends: libbar(c) # # dox: dex(c) # $* diz 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add diz/1.0.0 trace: collect_build_prerequisites: begin diz/1.0.0 %.* trace: collect_build: add dox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | dox->{diz/1}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): cfg-negotiate begin {diz | dox->{diz/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build: add dex/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | libbox->{diz/2}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {diz | dox->{diz/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {dox | dex->{dox/1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | bar->{dex/1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0 trace: collect_build_prerequisites: end dox/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dox | dex->{dox/1}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {diz | libbox->{diz/2}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent diz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent diz/1.0.0 trace: postponed_configurations::add: create {diz | libbar->{diz/3}} trace: collect_build_prerequisites: postpone diz/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {diz | libbox->{diz/2}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {dex | bar->{dex/1}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin bar/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0 trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {diz | libbar->{diz/3}} trace: collect_build_prerequisites: postpone bar/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency bar/1.0.0 of dependent dex/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: postponed_configurations::add: create {dex | libfoo->{dex/2}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {dex | bar->{dex/1}} trace: collect_build_postponed (5): begin %.* trace: collect_build_postponed (5): cfg-negotiate begin {bar diz | libbar->{bar/1 diz/3}} trace: collect_build_postponed (5): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/1.0.0 trace: collect_build_prerequisites: end libbar/1.0.0 trace: collect_build_postponed (5): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume bar/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_prerequisites: resume diz/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent diz/1.0.0 trace: collect_build_prerequisites: end diz/1.0.0 trace: collect_build_postponed (5): cfg-negotiate end {bar diz | libbar->{bar/1 diz/3}} trace: collect_build_postponed (6): begin %.* trace: collect_build_postponed (6): cfg-negotiate begin {dex | libfoo->{dex/2}} trace: collect_build_postponed (6): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_build_postponed (6): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libfoo/1.0.0 of dependent dex/1.0.0 trace: collect_build_prerequisites: end dex/1.0.0 trace: collect_build_postponed (6): cfg-negotiate end {dex | libfoo->{dex/2}} trace: collect_build_postponed (6): end trace: collect_build_postponed (5): end trace: collect_build_postponed (4): end trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !diz configured 1.0.0 dox configured 1.0.0 dex configured 1.0.0 bar configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 libbar configured 1.0.0 libbox configured 1.0.0 EOO $pkg_drop diz } : existing : { +$clone_cfg : negotiate : { $clone_cfg; # Dependencies: # # dex: depends: bar(c) # depends: libfoo(c) # # bar: depends: libbar(c) # # dix: depends: libbar(c) # depends: libbox(c) # causes postponment and initial cluster finished negotiating # depends: dox(c) # # dox: dex(c) # $* dex 2>!; # @@ Here we would expect to fail due to the config cycle but we # don't. # # Fail at: # # #\ $* dix 2>>~%EOE% != 0; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add dix/1.0.0 trace: collect_build_prerequisites: begin dix/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | libbar->{dix/1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin %.* trace: collect_build_postponed (1): re-evaluate existing dependents trace: collect_build: add bar/1.0.0 trace: postponed_configurations::add: add {bar | libbar->{bar/1}} to {dix | libbar->{dix/1}} trace: collect_build_postponed (1): cfg-negotiate begin {bar dix | libbar->{bar/1 dix/1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip configured libbar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbar/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | libbox->{dix/2}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bar dix | libbar->{bar/1 dix/1}} trace: collect_build_postponed (2): begin %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbox/1.0.0 trace: collect_build_prerequisites: end libbox/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency libbox/1.0.0 of dependent dix/1.0.0 %.* trace: collect_build: add dox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dox/1.0.0 of dependent dix/1.0.0 trace: postponed_configurations::add: create {dix | dox->{dix/3}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2}} trace: collect_build_postponed (3): begin %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3}} trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dox/1.0.0 %.* trace: collect_build: add dex/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency dex/1.0.0 of dependent dox/1.0.0 trace: postponed_configurations::add: create {dox | dex->{dox/1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dix/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dox/1.0.0 of dependent dix/1.0.0 trace: collect_build_prerequisites: end dix/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {dix | dox->{dix/3}} trace: collect_build_postponed (4): begin %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: skip configured dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_prerequisites: resume dox/1.0.0 %.* trace: collect_build_prerequisites: skip cfg-negotiated dependency dex/1.0.0 of dependent dox/1.0.0 trace: collect_build_prerequisites: end dox/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {dox | dex->{dox/1}} trace: collect_build_postponed (4): end trace: collect_build_postponed (3): end trace: collect_build_postponed (2): end trace: collect_build_postponed (1): end trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $pkg_drop dex } } } } } } : test-dependency : { +$clone_cfg +$rep_add $rep/t10 && $rep_fetch : simultaneously : { $clone_cfg; $* libfoo-bar libfoo-tests 2>>~%EOE%; fetched libfoo-bar/1.0.0 unpacked libfoo-bar/1.0.0 fetched libfoo-tests/1.0.0 unpacked libfoo-tests/1.0.0 configured libfoo-bar/1.0.0 configured libfoo-tests/1.0.0 %info: .+libfoo-bar-1.0.0.+ is up to date% %info: .+libfoo-tests-1.0.0.+ is up to date% updated libfoo-bar/1.0.0 updated libfoo-tests/1.0.0 EOE cat cfg/libfoo-tests-1.0.0/build/config.build >>~%EOO%; %.* config.libfoo_tests.test = libfoo-bar %.* EOO $pkg_drop libfoo-bar libfoo-tests } : sequentially : { $clone_cfg; $* libfoo-baz 2>>~%EOE%; fetched libfoo-baz/1.0.0 unpacked libfoo-baz/1.0.0 configured libfoo-baz/1.0.0 %info: .+libfoo-baz-1.0.0.+ is up to date% updated libfoo-baz/1.0.0 EOE $* libfoo-tests 2>>~%EOE%; fetched libfoo-tests/1.0.0 unpacked libfoo-tests/1.0.0 configured libfoo-tests/1.0.0 %info: .+libfoo-tests-1.0.0.+ is up to date% updated libfoo-tests/1.0.0 EOE cat cfg/libfoo-tests-1.0.0/build/config.build >>~%EOO%; %.* config.libfoo_tests.test = libfoo-baz %.* EOO $pkg_drop libfoo-baz libfoo-tests } : tests-only : { $clone_cfg; $* libfoo-tests 2>>~%EOE% != 0 error: unable to select dependency alternative for package libfoo-tests/1.0.0 info: explicitly specify dependency packages to manually select the alternative info: alternative: libfoo-bar info: alternative: libfoo-baz info: while satisfying libfoo-tests/1.0.0 EOE } } : 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 \[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 } : build2-module-different-clusters : : Test that the same module can successfully be built in 2 configurations : if they belong to different linked configuration clusters. : { $cfg_create -d cfg --uuid $cfg_uuid &cfg/***; $cfg_create -d cfg2 --uuid $cfg2_uuid &cfg2/***; test.arguments += -d cfg2; # Now refers 2 current dirs: cfg/ and cfg2/. $* "libbiz@$rep/t7a" +{ --config-uuid $cfg_uuid } \ "libbuz@$rep/t7a" +{ --config-uuid $cfg2_uuid } --yes --trust-yes 2>>~%EOE% %(added|fetching) .+%{4} %(fetched|unpacked) .+%{26} %configured .+%{13} %info: .+ is up to date%{2} %updated .+%{2} EOE } } : 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 } } } }