# 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-0.1.0.tar.gz # | |-- libbar-1.0.0.tar.gz # | |-- libbaz-0.1.0.tar.gz # | |-- libbaz-1.0.0.tar.gz # | |-- libbox-0.1.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-0.1.0.tar.gz -> libbar == 0.1.0 {require {config.libbar.extras=true}} # | |-- bar-1.0.0.tar.gz -> libbar {require {config.libbar.extras=true}} # | |-- baz-0.1.0.tar.gz -> {libbar libfoo} == 0.1.0 {require {config.libbar.extras=true config.libfoo.extras=true}} # | |-- baz-1.0.0.tar.gz -> {libbar libfoo} {require {config.libbar.extras=true config.libfoo.extras=true}} # | |-- box-0.1.0.tar.gz -> libbox {require {config.libbox.extras=true}} # | |-- box-1.0.0.tar.gz -> {libbar libfoo} {require {config.libbar.extras=true config.libfoo.extras=true}} | # | | libbox # | |-- bax-1.0.0.tar.gz -> libfoo {require {config.libfoo.extras=true}}, # | | {libbox libbar} {require {config.libbox.extras=true config.libbar.extras=true}} # | |-- 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-0.1.0.tar.gz # | |-- foo-1.0.0.tar.gz -> libbar # | |-- bar-1.0.0.tar.gz -> libbar == 0.1.0 # | |-- baz-0.1.0.tar.gz -> libbaz # | |-- baz-1.0.0.tar.gz -> libbaz == 1.0.0 # | `-- repositories.manifest # | # `-- git # |-- libbar.git -> style-basic.git (prerequisite repository) # |-- libbaz.git # `-- style-basic.git posix = ($cxx.target.class != 'windows') # Prepare repositories used by tests if running in the local mode. # +if! $remote rep_create += 2>! cp -r $src/t0a $out/t0a && $rep_create $out/t0a &$out/t0a/packages.manifest cp -r $src/t0b $out/t0b && $rep_create $out/t0b &$out/t0b/packages.manifest cp -r $src/t0c $out/t0c && $rep_create $out/t0c &$out/t0c/packages.manifest cp -r $src/t0d $out/t0d && $rep_create $out/t0d &$out/t0d/packages.manifest cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages.manifest cp -r $src/t2 $out/t2 && $rep_create $out/t2 &$out/t2/packages.manifest cp -r $src/t3 $out/t3 && $rep_create $out/t3 &$out/t3/packages.manifest cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages.manifest cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages.manifest cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages.manifest cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages.manifest cp -r $src/t4e $out/t4e && $rep_create $out/t4e &$out/t4e/packages.manifest cp -r $src/t5 $out/t5 && $rep_create $out/t5 &$out/t5/packages.manifest cp -r $src/t6 $out/t6 && $rep_create $out/t6 &$out/t6/packages.manifest cp -r $src/t7a $out/t7a && $rep_create $out/t7a &$out/t7a/packages.manifest cp -r $src/t7b $out/t7b && $rep_create $out/t7b &$out/t7b/packages.manifest 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: no cfg-clause for 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: no cfg-clause for 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: no cfg-clause for 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: no cfg-clause for 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: no cfg-clause for 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: no cfg-clause for 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 } } : drop-dependent : { +$clone_root_cfg && $rep_add $rep/t12b && $rep_fetch test.arguments += --yes : unhold : : Test that the being dropped dependent does not constrain a dependency : anymore. : { $clone_cfg; $* libbar 2>!; $pkg_status -r >>EOO; !libbar configured 1.0.0 libbaz configured 0.1.0 available [1.0.0] EOO $* baz/0.1.0 ?libbar ?libbaz 2>!; $pkg_status -r >>EOO; !baz configured !0.1.0 available 1.0.0 libbaz configured 1.0.0 EOO $pkg_drop baz } : unuse : : Unlike the previous test, at the time we check the constraint applied : by libbar on libbaz (== 0.1.0) there is no evidence that libbar will be : dropped, which will happen some later execution plan refinement : iteration. : : @@ This scenario is not supported yet and fails with: : : error: unable to upgrade package libbaz/0.1.0 to 1.0.0 : info: because package libbar depends on (libbaz == 0.1.0) : info: package libbaz/1.0.0 required by baz : info: explicitly request up/downgrade of package libbar : info: or explicitly specify package libbaz version to manually satisfy these constraints : : We could probably fix this postponing the constraints check in : collect_order_dependents() until the final execution plan is produced : (after all that refinement iterations). We could have an additional : iteration after all the refinements which would enable the constraint : check in collect_order_dependents(). : if false { $clone_cfg; $* foo 2>!; $pkg_status -r >>EOO; !foo configured 1.0.0 libbar configured 1.0.0 libbaz configured 0.1.0 available [1.0.0] EOO $* baz foo/0.1.0 2>|; $pkg_status -r >>EOO; EOO $pkg_drop foo } } : 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,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 1,1: libfoo} to {foo | libfoo->{foo/1,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 {foo fox | libfoo->{foo/1,1 fox/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo fox | libfoo->{foo/1,1 fox/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent fox/1.0.0 trace: collect_build_prerequisites: resume 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,1 fox/1,1}}! trace: collect_build_postponed (1): end {foo fox | libfoo->{foo/1,1 fox/1,1}} 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>>~%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_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->{foo/1,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 sys:libfoo/* of dependent fox/1.0.0 trace: postponed_configurations::add: add {fox 1,1: libfoo} to {foo | libfoo->{foo/1,1}} trace: collect_build_prerequisites: postpone fox/1.0.0 %.* trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo fox | libfoo->{foo/1,1 fox/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo fox | libfoo->{foo/1,1 fox/1,1}} 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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent fox/1.0.0 trace: collect_build_prerequisites: resume 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,1 fox/1,1}}! trace: collect_build_postponed (1): end {foo fox | libfoo->{foo/1,1 fox/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE #\ $* 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 {foo, fox | libfoo} 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 {foo, fox | libfoo} 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: no cfg-clause for 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), throwing postpone_dependency 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,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), throwing postpone_dependency 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,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: 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 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: no cfg-clause for 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,1}} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {fix | foo->{fix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo->{fix/1,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), throwing postpone_dependency 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,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), throwing postpone_dependency 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,1}} trace: collect_build_prerequisites: postpone fix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {fix | foo->{fix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {fix | foo->{fix/1,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,1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent fix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {foo | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {foo | libfoo->{foo/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): end {foo | libfoo->{foo/1,1}} trace: collect_build_postponed (1): end {fix | foo->{fix/1,1}} 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>>~%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,1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (1): end {foo | libfoo->{foo/1,1}} 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-single-position : { +$clone_cfg : basic : { $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,1}} trace: collect_build_prerequisites: postpone foo/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (1): end {foo | libfoo->{foo/1,1}} trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE # Downgrade 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 {foo^ | libfoo->{foo/1,1}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}} trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: reeval foo/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: re-evaluated foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,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): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE # Reconfigure the dependency and hold. # $* 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 {foo^ | libfoo->{foo/1,1}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}} %.* trace: collect_build: add foo/1.0.0 trace: collect_build_prerequisites: reeval foo/1.0.0 %.* trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: re-evaluated foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,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): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}} 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 # Upgrade the dependency and unhold existing dependent. # $* libfoo ?foo 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of existing dependent foo/1.0.0 trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: reeval foo/1.0.0 %.* trace: collect_build: pick libfoo/1.0.0 over libfoo/0.1.0 trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {foo^ | libfoo->{foo/1,1}} trace: collect_build_prerequisites: re-evaluated foo/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* trace: evaluate_dependency: foo/1.0.0: unused %.* trace: pkg_build: refine package collection/plan execution %.* trace: collect_drop: foo/1.0.0 package version needs to be replaced with drop 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 libfoo/1.0.0 %.* trace: collect_build_prerequisites: skip expected to be dropped existing dependent foo of dependency libfoo trace: collect_build_prerequisites: begin libfoo/1.0.0 trace: collect_build_prerequisites: end libfoo/1.0.0 trace: collect_drop: overwrite foo %.* trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !libfoo configured 1.0.0 EOO $pkg_drop libfoo } : postpone-existing : { $clone_cfg; # Dependencies: # # fix/1.0.0: depends: foo(c) # foo/1.0.0: depends: libfoo(c) # # fix/0.1.0: depends: foo == 0.1.0 # foo/0.1.0: depends: libfoo(c) # $* fix 2>!; $* libfoo/0.1.0 fix/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/0.1.0 trace: collect_build: add fix/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 {foo^ | libfoo->{foo/1,1}} %.* trace: collect_build_prerequisites: begin fix/0.1.0 %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/0.1.0 trace: collect_build: add fix/0.1.0 %.* trace: collect_build_prerequisites: skip expected to be built existing dependent foo of dependency libfoo trace: collect_build_prerequisites: begin libfoo/0.1.0 trace: collect_build_prerequisites: end libfoo/0.1.0 %.* trace: collect_build_prerequisites: begin fix/0.1.0 %.* trace: collect_build: apply version replacement for foo/0.1.0 trace: collect_build: replacement: foo/0.1.0 trace: collect_build: add foo/0.1.0 info: package fix dependency on (foo == 0.1.0) is forcing downgrade of foo/1.0.0 to 0.1.0 trace: collect_build_prerequisites: no cfg-clause for dependency foo/0.1.0 of dependent fix/0.1.0 %.* trace: collect_build_prerequisites: skip being built existing dependent fix of dependency foo trace: collect_build_prerequisites: begin foo/0.1.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/0.1.0 of dependent foo/0.1.0 (collected prematurely), throwing postpone_dependency 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 libfoo/0.1.0 trace: collect_build: add fix/0.1.0 trace: pkg_build: dep-postpone user-specified libfoo %.* trace: collect_build_prerequisites: begin fix/0.1.0 %.* trace: collect_build: apply version replacement for foo/0.1.0 trace: collect_build: replacement: foo/0.1.0 trace: collect_build: add foo/0.1.0 info: package fix dependency on (foo == 0.1.0) is forcing downgrade of foo/1.0.0 to 0.1.0 trace: collect_build_prerequisites: no cfg-clause for dependency foo/0.1.0 of dependent fix/0.1.0 %.* trace: collect_build_prerequisites: skip being built existing dependent fix of dependency foo trace: collect_build_prerequisites: begin foo/0.1.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent foo/0.1.0 trace: postponed_configurations::add: create {foo | libfoo->{foo/1,1}} trace: collect_build_prerequisites: postpone foo/0.1.0 trace: collect_build_prerequisites: end fix/0.1.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): skip being built existing dependent foo of dependency libfoo trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,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): select cfg-negotiated dependency alternative for dependent foo/0.1.0 trace: collect_build_prerequisites: resume foo/0.1.0 trace: collect_build_prerequisites: end foo/0.1.0 trace: collect_build_postponed (1): cfg-negotiate end {foo | libfoo->{foo/1,1}}! trace: collect_build_postponed (1): end {foo | libfoo->{foo/1,1}} 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 !fix configured !0.1.0 available 1.0.0 foo configured 0.1.0 available 1.0.0 !libfoo configured !0.1.0 available 1.0.0 EOO $pkg_drop fix libfoo --drop-dependent } } : dependent-multiple-positions : { +$clone_cfg : non-negotiated : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # $* tex 2>!; $* libfoo/0.1.0 libbar/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/0.1.0 trace: collect_build: add libbar/0.1.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent tex/1.0.0 trace: postponed_configurations::add: create {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/0.1.0 of existing dependent tex/1.0.0 trace: postponed_configurations::add: create {tex^ | libbar->{tex/1,1}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (1): cannot re-evaluate dependent tex to dependency index 2 due to earlier dependency index 1 in {tex^ | libbar->{tex/1,1}}, skipping {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (0): postpone cfg-negotiation of {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (1): begin {tex^ | libbar->{tex/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libbar->{tex/1,1}} %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {tex^ | libbar->{tex/1,1}} trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {tex^ | libbar->{tex/1,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {tex^ | libbar->{tex/1,1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/0.1.0 trace: collect_build_prerequisites: end libbar/0.1.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 2,1: libfoo} to {tex^ | libfoo->{tex/2,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tex^ | libbar->{tex/1,1}}! trace: collect_build_postponed (2): begin {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (2): skip being built existing dependent tex of dependency libfoo trace: collect_build_postponed (2): cfg-negotiate begin {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (2): 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 (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): end {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (1): end {tex^ | libbar->{tex/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !libbar configured !0.1.0 available 1.0.0 !libfoo configured !0.1.0 available 1.0.0 !tex configured 1.0.0 !libbar configured !0.1.0 available 1.0.0 !libfoo configured !0.1.0 available 1.0.0 EOO $pkg_drop tex libfoo libbar } : negotiated : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # bar: depends: libbar == 0.1.0 (c) # $* tex 2>!; $* libfoo/0.1.0 bar/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/0.1.0 trace: collect_build: add bar/0.1.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent tex/1.0.0 trace: postponed_configurations::add: create {tex^ | libfoo->{tex/2,1}} trace: collect_build_prerequisites: begin bar/0.1.0 %.* trace: collect_build: add libbar/0.1.0 info: package bar dependency on (libbar == 0.1.0) is forcing downgrade of libbar/1.0.0 to 0.1.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/0.1.0 of dependent bar/0.1.0 trace: postponed_configurations::add: create {bar | libbar->{bar/1,1}} trace: collect_build_prerequisites: postpone bar/0.1.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: postponed_configurations::add: add {tex^ 2,1: libfoo} to {tex^ | libfoo->{tex/2,1}} trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {tex^ | libfoo->{tex/2,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {tex^ | libfoo->{tex/2,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): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume tex/1.0.0 trace: collect_build_prerequisites: end tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tex^ | libfoo->{tex/2,1}}! trace: collect_build_postponed (2): begin {bar | libbar->{bar/1,1}} %.* trace: collect_build_postponed (2): re-evaluate existing dependents for {bar | libbar->{bar/1,1}} trace: collect_build_postponed (2): cannot re-evaluate dependent tex to dependency index 1 due to greater dependency index 2 in {tex^ | libfoo->{tex/2,1}}!, throwing postpone_position trace: pkg_build: collection failed due to earlier dependency position, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libfoo/0.1.0 trace: collect_build: add bar/0.1.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent tex/1.0.0 trace: postponed_configurations::add: create {tex^ | libfoo->{tex/2,1}} trace: collect_build_prerequisites: begin bar/0.1.0 %.* trace: collect_build: add libbar/0.1.0 info: package bar dependency on (libbar == 0.1.0) is forcing downgrade of libbar/1.0.0 to 0.1.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/0.1.0 of dependent bar/0.1.0 trace: postponed_configurations::add: create {bar | libbar->{bar/1,1}} trace: collect_build_prerequisites: postpone bar/0.1.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (1): pos-postpone existing dependent tex re-evaluation to dependency index 2 due to recorded index 1, skipping {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (0): postpone cfg-negotiation of {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (1): begin {bar | libbar->{bar/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bar | libbar->{bar/1,1}} trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {bar | libbar->{bar/1,1}} trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {bar tex^ | libbar->{bar/1,1 tex/1,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {bar tex^ | libbar->{bar/1,1 tex/1,1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/0.1.0 trace: collect_build_prerequisites: end libbar/0.1.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bar/0.1.0 trace: collect_build_prerequisites: resume bar/0.1.0 trace: collect_build_prerequisites: end bar/0.1.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 2,1: libfoo} to {tex^ | libfoo->{tex/2,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bar tex^ | libbar->{bar/1,1 tex/1,1}}! trace: collect_build_postponed (2): begin {tex^ | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (2): skip being built existing dependent tex of dependency libfoo trace: collect_build_postponed (2): cfg-negotiate begin {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (2): 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 (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): end {tex^ | libfoo->{tex/2,1}} trace: collect_build_postponed (1): end {bar | libbar->{bar/1,1}} 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 !tex configured 1.0.0 libbar configured 0.1.0 available 1.0.0 !libfoo configured !0.1.0 available 1.0.0 !bar configured !0.1.0 available 1.0.0 libbar configured 0.1.0 available 1.0.0 EOO $pkg_drop tex libfoo bar } : up-negotiate : { $clone_cfg; # Dependencies: # # tex: depends: libbar(c) # depends: libfoo(c) # # baz: depends: {libbar libfoo} == 0.1.0 (c) # $* tex 2>!; $* baz/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add baz/0.1.0 trace: collect_build_prerequisites: begin baz/0.1.0 %.* trace: collect_build: add libbar/0.1.0 info: package baz dependency on (libbar == 0.1.0) is forcing downgrade of libbar/1.0.0 to 0.1.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/0.1.0 of dependent baz/0.1.0 trace: collect_build: add libfoo/0.1.0 info: package baz dependency on (libfoo == 0.1.0) is forcing downgrade of libfoo/1.0.0 to 0.1.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent baz/0.1.0 trace: postponed_configurations::add: create {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: postpone baz/0.1.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/0.1.0 trace: collect_build_prerequisites: end libbar/0.1.0 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): select cfg-negotiated dependency alternative for dependent baz/0.1.0 trace: collect_build_prerequisites: resume baz/0.1.0 trace: collect_build_prerequisites: end baz/0.1.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 2,1: libfoo} to {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent tex/1.0.0 involves negotiated configurations and results in {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1 tex/2,1}}?, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} failed due to dependent tex, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/0.1.0 trace: collect_build_prerequisites: end libbar/0.1.0 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): select cfg-negotiated dependency alternative for dependent baz/0.1.0 trace: collect_build_prerequisites: resume baz/0.1.0 trace: collect_build_prerequisites: end baz/0.1.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 2,1: libfoo} to {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}}? trace: collect_build_prerequisites: dependent tex/1.0.0 is a shadow dependent for {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1 tex/2,1}}? trace: collect_build_prerequisites: cfg-postponing dependent tex/1.0.0 involves non-negotiated configurations and results in {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1 tex/2,1}}?, throwing merge_configuration trace: collect_build_postponed (0): cfg-negotiation of {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1 tex/2,1}}? trace: collect_build_postponed (1): begin {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0 trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} (shadow cluster-based) trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}} trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin libbar/0.1.0 trace: collect_build_prerequisites: end libbar/0.1.0 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): select cfg-negotiated dependency alternative for dependent baz/0.1.0 trace: collect_build_prerequisites: resume baz/0.1.0 trace: collect_build_prerequisites: end baz/0.1.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume tex/1.0.0 %.* trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 2,1: libfoo} to {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent tex/1.0.0 is a shadow dependent for {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1 tex/2,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tex/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libfoo/0.1.0 of dependent tex/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1 tex/2,1}}! trace: collect_build_postponed (1): end {baz | libbar->{baz/1,1} libfoo->{baz/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !tex configured 1.0.0 libbar configured 0.1.0 available 1.0.0 libfoo configured 0.1.0 available 1.0.0 !baz configured !0.1.0 available 1.0.0 libbar configured 0.1.0 available 1.0.0 libfoo configured 0.1.0 available 1.0.0 EOO $pkg_drop tex baz } : replace-re-evaluate : { $clone_cfg; # Dependencies: # # bax: depends: libfoo(c) # depends: {libbox libbar} (c) # # baz: depends: {libbar libfoo} (c) # $* bax baz 2>!; $* libbox/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libbox/0.1.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of existing dependent bax/1.0.0 trace: postponed_configurations::add: create {bax^ | libbox->{bax/2,1}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {bax^ | libbox->{bax/2,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libbox->{bax/2,1}} %.* trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {bax^ 2,1: libbox libbar} to {bax^ | libbox->{bax/2,1}} trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ | libbox->{bax/2,1} libbar->{bax/2,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libbox->{bax/2,1} libbar->{bax/2,1}} %.* trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ | libbox->{bax/2,1} libbar->{bax/2,1}} trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ | libbox->{bax/2,1} libbar->{bax/2,1 baz/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libfoo trace: collect_build_postponed (1): cannot re-evaluate dependent bax to dependency index 1 since it is already re-evaluated to greater index 2 in {bax^ baz^ | libbox->{bax/2,1} libbar->{bax/2,1 baz/1,1} libfoo->{baz/1,1}}, throwing postpone_position trace: pkg_build: collection failed due to earlier dependency position, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libbox/0.1.0 %.* trace: collect_build_prerequisites: overwrite dependency at index 2 of existing dependent bax/1.0.0 with dependency libfoo/1.0.0 at index 1 trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of existing dependent bax/1.0.0 trace: postponed_configurations::add: create {bax^ | libfoo->{bax/1,1}} trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {bax^ | libfoo->{bax/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libfoo->{bax/1,1}} trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: postponed_configurations::add: add {bax^ 1,1: libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,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_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_postponed (1): select cfg-negotiated dependency alternative for dependent bax/1.0.0 trace: collect_build_prerequisites: resume bax/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bax/1.0.0 trace: postponed_configurations::add: add {bax 2,1: libbox libbar} to {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bax/1.0.0 involves negotiated configurations and results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1}}?, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {bax^ | libfoo->{bax/1,1}} failed due to dependent bax, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {bax^ | libfoo->{bax/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libfoo->{bax/1,1}} trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: postponed_configurations::add: add {bax^ 1,1: libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,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_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_postponed (1): select cfg-negotiated dependency alternative for dependent bax/1.0.0 trace: collect_build_prerequisites: resume bax/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bax/1.0.0 trace: postponed_configurations::add: add {bax 2,1: libbox libbar} to {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}}? trace: collect_build_prerequisites: dependent bax/1.0.0 is a shadow dependent for {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bax/1.0.0 involves non-negotiated configurations and results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1}}?, throwing merge_configuration trace: collect_build_postponed (0): cfg-negotiation of {bax^ | libfoo->{bax/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1}}? trace: collect_build_postponed (1): begin {bax^ | libfoo->{bax/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libfoo->{bax/1,1}} trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: postponed_configurations::add: add {bax^ 1,1: libfoo} to {bax^ | libfoo->{bax/1,1}} (shadow cluster-based) trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ | libfoo->{bax/1,1}} (shadow cluster-based) trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,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_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_postponed (1): select cfg-negotiated dependency alternative for dependent bax/1.0.0 trace: collect_build_prerequisites: resume bax/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bax/1.0.0 trace: postponed_configurations::add: add {bax 2,1: libbox libbar} to {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent bax/1.0.0 is a shadow dependent for {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bax/1.0.0 is negotiated trace: collect_build_prerequisites: collecting cfg-postponed dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: begin libbox/0.1.0 trace: collect_build_prerequisites: end libbox/0.1.0 trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bax/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bax/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent baz/1.0.0 trace: collect_build_prerequisites: resume baz/1.0.0 trace: collect_build_prerequisites: end baz/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1}}! trace: collect_build_postponed (1): end {bax^ | libfoo->{bax/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !libbox configured !0.1.0 available 1.0.0 !bax configured 1.0.0 libbar configured 1.0.0 !libbox configured !0.1.0 available 1.0.0 libfoo configured 1.0.0 !baz configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 EOO $pkg_drop bax baz libbox } : replace-re-evaluate2 : { $clone_cfg; # Dependencies: # # bax: depends: libfoo(c) # depends: {libbox libbar} (c) # # baz: depends: {libbar libfoo} (c) # # box: depends: libbox == 0.1.0 (c) # $* bax baz 2>!; $* box/0.1.0 2>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add box/0.1.0 trace: collect_build_prerequisites: begin box/0.1.0 %.* trace: collect_build: add libbox/0.1.0 info: package box dependency on (libbox == 0.1.0) is forcing downgrade of libbox/1.0.0 to 0.1.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent box/0.1.0 trace: postponed_configurations::add: create {box | libbox->{box/1,1}} trace: collect_build_prerequisites: postpone box/0.1.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {box | libbox->{box/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {box | libbox->{box/1,1}} %.* trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {bax^ 2,1: libbox libbar} to {box | libbox->{box/1,1}} trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1}} %.* trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1}} trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1 baz/1,1} libfoo->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libfoo trace: collect_build_postponed (1): cannot re-evaluate dependent bax to dependency index 1 since it is already re-evaluated to greater index 2 in {bax^ baz^ box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1 baz/1,1} libfoo->{baz/1,1}}, throwing postpone_position trace: pkg_build: collection failed due to earlier dependency position, retry from scratch %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add box/0.1.0 trace: collect_build_prerequisites: begin box/0.1.0 %.* trace: collect_build: add libbox/0.1.0 info: package box dependency on (libbox == 0.1.0) is forcing downgrade of libbox/1.0.0 to 0.1.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent box/0.1.0 trace: postponed_configurations::add: create {box | libbox->{box/1,1}} trace: collect_build_prerequisites: postpone box/0.1.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {box | libbox->{box/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {box | libbox->{box/1,1}} trace: collect_build_postponed (1): pos-postpone existing dependent bax re-evaluation to dependency index 2 due to recorded index 1, skipping {box | libbox->{box/1,1}} trace: collect_build_postponed (0): overwrite dependency at index 2 of existing dependent bax/1.0.0 with dependency libfoo/1.0.0 at index 1 trace: collect_build: add libfoo/1.0.0 trace: postponed_configurations::add: create {bax^ | libfoo->{bax/1,1}} trace: collect_build_postponed (0): postpone cfg-negotiation of {box | libbox->{box/1,1}} trace: collect_build_postponed (1): begin {bax^ | libfoo->{bax/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libfoo->{bax/1,1}} trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: postponed_configurations::add: add {bax^ 1,1: libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,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_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_postponed (1): select cfg-negotiated dependency alternative for dependent bax/1.0.0 trace: collect_build_prerequisites: resume bax/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bax/1.0.0 trace: postponed_configurations::add: add {bax 2,1: libbox libbar} to {box | libbox->{box/1,1}} trace: postponed_configurations::add: merge {bax box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1}} into {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bax/1.0.0 involves negotiated configurations and results in {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1 box/1,1}}?, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {bax^ | libfoo->{bax/1,1}} failed due to dependent bax, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {bax^ | libfoo->{bax/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ | libfoo->{bax/1,1}} trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: postponed_configurations::add: add {bax^ 1,1: libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ | libfoo->{bax/1,1}} trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,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_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_postponed (1): select cfg-negotiated dependency alternative for dependent bax/1.0.0 trace: collect_build_prerequisites: resume bax/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bax/1.0.0 trace: postponed_configurations::add: add {bax 2,1: libbox libbar} to {box | libbox->{box/1,1}} trace: postponed_configurations::add: merge {bax box | libbox->{bax/2,1 box/1,1} libbar->{bax/2,1}} into {bax^ baz^ | libfoo->{bax/1,1 baz/1,1} libbar->{baz/1,1}}? trace: collect_build_prerequisites: dependent bax/1.0.0 is a shadow dependent for {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1 box/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bax/1.0.0 involves non-negotiated configurations and results in {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1 box/1,1}}?, throwing merge_configuration trace: collect_build_postponed (0): cfg-negotiation of {bax^ | libfoo->{bax/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbar->{bax/2,1 baz/1,1} libbox->{bax/2,1 box/1,1}}? trace: collect_build_postponed (1): begin {bax^ box | libfoo->{bax/1,1} libbox->{box/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {bax^ box | libfoo->{bax/1,1} libbox->{box/1,1}} trace: collect_build: add bax/1.0.0 trace: collect_build_prerequisites: reeval bax/1.0.0 %.* trace: postponed_configurations::add: add {bax^ 1,1: libfoo} to {bax^ box | libfoo->{bax/1,1} libbox->{box/1,1}} (shadow cluster-based) trace: collect_build_prerequisites: re-evaluating dependent bax/1.0.0 results in {bax^ box | libfoo->{bax/1,1} libbox->{box/1,1}} trace: collect_build_prerequisites: re-evaluated bax/1.0.0 trace: collect_build: add baz/1.0.0 trace: collect_build_prerequisites: reeval baz/1.0.0 %.* trace: collect_build: add libbar/1.0.0 trace: postponed_configurations::add: add {baz^ 1,1: libbar libfoo} to {bax^ box | libfoo->{bax/1,1} libbox->{box/1,1}} (shadow cluster-based) trace: collect_build_prerequisites: re-evaluating dependent baz/1.0.0 results in {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbox->{box/1,1} libbar->{baz/1,1}} trace: collect_build_prerequisites: re-evaluated baz/1.0.0 %.* trace: collect_build_postponed (1): skip being built existing dependent bax of dependency libbar trace: collect_build_postponed (1): skip being built existing dependent baz of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbox->{box/1,1} libbar->{baz/1,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_prerequisites: begin libbox/0.1.0 trace: collect_build_prerequisites: end libbox/0.1.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_postponed (1): select cfg-negotiated dependency alternative for dependent bax/1.0.0 trace: collect_build_prerequisites: resume bax/1.0.0 %.* trace: collect_build: pick libbox/0.1.0 over libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/0.1.0 of dependent bax/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bax/1.0.0 trace: postponed_configurations::add: add {bax 2,1: libbox libbar} to {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbox->{box/1,1} libbar->{baz/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent bax/1.0.0 is a shadow dependent for {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbox->{bax/2,1 box/1,1} libbar->{bax/2,1 baz/1,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bax/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbox/0.1.0 of dependent bax/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bax/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bax/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent baz/1.0.0 trace: collect_build_prerequisites: resume baz/1.0.0 trace: collect_build_prerequisites: end baz/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent box/0.1.0 trace: collect_build_prerequisites: resume box/0.1.0 trace: collect_build_prerequisites: end box/0.1.0 trace: collect_build_postponed (1): cfg-negotiate end {bax^ baz^ box | libfoo->{bax/1,1 baz/1,1} libbox->{bax/2,1 box/1,1} libbar->{bax/2,1 baz/1,1}}! trace: collect_build_postponed (1): end {bax^ box | libfoo->{bax/1,1} libbox->{box/1,1}} trace: collect_build_postponed (0): end %.* trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !bax configured 1.0.0 libbar configured 1.0.0 libbox configured 0.1.0 available 1.0.0 libfoo configured 1.0.0 !baz configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 !box configured !0.1.0 available 1.0.0 libbox configured 0.1.0 available 1.0.0 EOO $pkg_drop bax baz box } } } : postponed-collection : { +$clone_cfg : backtrace : { $clone_cfg; $* foo bar box 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: 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->{foo/1,1}} 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->{bar/1,1}} 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 {foo | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {bar | libbar->{bar/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {bar | libbar->{bar/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent bar/1.0.0 trace: collect_build_prerequisites: resume bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {bar | libbar->{bar/1,1}}! 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: 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 1,1: libbar libfoo} to {foo | libfoo->{foo/1,1}}! trace: postponed_configurations::add: merge {bar | libbar->{bar/1,1}}! into {box foo | libfoo->{box/1,1 foo/1,1} libbar->{box/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent box/1.0.0 involves negotiated configurations and results in {bar box foo | libfoo->{box/1,1 foo/1,1} libbar->{bar/1,1 box/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {foo | libfoo->{foo/1,1}} failed due to dependent box, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {bar | libbar->{bar/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {bar | libbar->{bar/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent bar/1.0.0 trace: collect_build_prerequisites: resume bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {bar | libbar->{bar/1,1}}! 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: 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 1,1: libbar libfoo} to {foo | libfoo->{foo/1,1}}! trace: postponed_configurations::add: merge {bar | libbar->{bar/1,1}}! into {box foo | libfoo->{box/1,1 foo/1,1} libbar->{box/1,1}}! trace: collect_build_prerequisites: dependent box/1.0.0 is a shadow dependent for {bar box foo | libfoo->{box/1,1 foo/1,1} libbar->{bar/1,1 box/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent box/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent box/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: dependency libfoo/1.0.0 of dependent box/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end box/1.0.0 trace: collect_build_postponed (2): end {bar | libbar->{bar/1,1}} trace: collect_build_postponed (1): end {foo | libfoo->{foo/1,1}} 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>>~%EOE%; %.* trace: pkg_build: refine package collection/plan execution 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 | libbar->{bix/1,1} bar->{bix/1,1}} trace: collect_build_prerequisites: postpone bix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,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_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 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,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_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 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves non-negotiated configurations and results in {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?, throwing merge_configuration trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,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_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 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bix/1.0.0 trace: collect_build_prerequisites: resume bix/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: no cfg-clause for dependency bux/1.0.0 of dependent bix/1.0.0 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: add {bux 1,1: libbar} to {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bux/1.0.0 involves negotiated configurations and results in {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to dependent bux, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,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_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 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bix/1.0.0 trace: collect_build_prerequisites: resume bix/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: no cfg-clause for dependency bux/1.0.0 of dependent bix/1.0.0 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: add {bux 1,1: libbar} to {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: dependent bux/1.0.0 is a shadow dependent for {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: cfg-postponing dependent bux/1.0.0 involves non-negotiated configurations and results in {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?, throwing merge_configuration trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}? trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,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_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 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bix/1.0.0 trace: collect_build_prerequisites: resume bix/1.0.0 %.* trace: collect_build: add bux/1.0.0 trace: collect_build_prerequisites: no cfg-clause for dependency bux/1.0.0 of dependent bix/1.0.0 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: add {bux 1,1: libbar} to {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? (shadow cluster-based) trace: collect_build_prerequisites: dependent bux/1.0.0 is a shadow dependent for {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}? trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bux/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bux/1.0.0 is already (being) recursively collected, skipping 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 {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}! trace: collect_build_postponed (1): end {bix | libbar->{bix/1,1} bar->{bix/1,1}} trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE #\ $* 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,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,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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: no cfg-clause for 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,1}}! trace: collect_build_postponed (2): begin {toz | libbaz->{toz/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {toz | libbaz->{toz/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent toz/1.0.0 trace: collect_build_prerequisites: resume toz/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent toz/1.0.0 (collected prematurely), throwing postpone_dependency 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,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,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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {toz | libbaz->{toz/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {toz | libbaz->{toz/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent toz/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone toz/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {toz | libbaz->{toz/1,1}}! trace: collect_build_postponed (3): begin {tez | libbox->{tez/1,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | libbox->{tez/1,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_postponed (3): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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,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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {tez | libbox->{tez/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume tez/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency toz/0.1.0 of dependent tez/1.0.0 (collected prematurely), throwing postpone_dependency 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,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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {tez | libbox->{tez/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | libbox->{tez/1,1}}! trace: collect_build_postponed (3): begin {tez | toz->{tez/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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 3,1: libbar} to {tax | libbar->{tax/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent tez/1.0.0 involves negotiated configurations and results in {tax tez | libbar->{tax/1,1 tez/3,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {tax | libbar->{tax/1,1}} failed due to dependent tez, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (2): begin {tez | libbox->{tez/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | libbox->{tez/1,1}}! trace: collect_build_postponed (3): begin {tez | toz->{tez/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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 3,1: libbar} to {tax | libbar->{tax/1,1}}! trace: collect_build_prerequisites: dependent tez/1.0.0 is a shadow dependent for {tax tez | libbar->{tax/1,1 tez/3,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tez/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tez/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end tez/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tez | toz->{tez/2,1}}! 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,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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: no cfg-clause for 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,1}}! trace: collect_build_postponed (2): begin {tez | libbox->{tez/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | libbox->{tez/1,1}}! trace: collect_build_postponed (3): begin {tez | toz->{tez/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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 3,1: libbar} to {tax | libbar->{tax/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent tez/1.0.0 involves negotiated configurations and results in {tax tez | libbar->{tax/1,1 tez/3,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {tax | libbar->{tax/1,1}} failed due to dependent tez, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {tax | libbar->{tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tax | libbar->{tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: no cfg-clause for 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,1}}! trace: collect_build_postponed (2): begin {tez | libbox->{tez/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tez | libbox->{tez/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tez/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tez | libbox->{tez/1,1}}! trace: collect_build_postponed (3): begin {tez | toz->{tez/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tez | toz->{tez/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tez/1.0.0 trace: collect_build_prerequisites: resume 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 3,1: libbar} to {tax | libbar->{tax/1,1}}! trace: collect_build_prerequisites: dependent tez/1.0.0 is a shadow dependent for {tax tez | libbar->{tax/1,1 tez/3,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tez/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tez/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end tez/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {tez | toz->{tez/2,1}}! trace: collect_build_postponed (3): end {tez | toz->{tez/2,1}} trace: collect_build_postponed (2): end {tez | libbox->{tez/1,1}} trace: collect_build_postponed (1): end {tax | libbar->{tax/1,1}} 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) # $* tex tix 2>>~%EOE%; %.* 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,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 1,1: libbar} to {tex | libbar->{tex/1,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tex tix | libbar->{tex/1,1 tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tex tix | libbar->{tex/1,1 tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 (collected prematurely), throwing postpone_dependency 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 tix/1.0.0 trace: pkg_build: dep-postpone user-specified tex 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 1,1: libbar} to {tix | libbar->{tix/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent tex/1.0.0 involves negotiated configurations and results in {tex tix | libbar->{tex/1,1 tix/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {tix | libbar->{tix/1,1}} failed due to dependent tex, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 1,1: libbar} to {tix | libbar->{tix/1,1}}! trace: collect_build_prerequisites: dependent tex/1.0.0 is a shadow dependent for {tex tix | libbar->{tex/1,1 tix/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tex/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tex/1.0.0 is already (being) recursively collected, skipping %.* 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 trace: collect_build_prerequisites: end tix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tix | tex->{tix/2,1}}! trace: collect_build_postponed (3): begin {tex | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (3): end {tex | libfoo->{tex/2,1}} trace: collect_build_postponed (2): end {tix | tex->{tix/2,1}} trace: collect_build_postponed (1): end {tix | libbar->{tix/1,1}} 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 !tix 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 tix } : 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) # $* tix 2>>~%EOE%; %.* 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 1,1: libbar} to {tix | libbar->{tix/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent tex/1.0.0 involves negotiated configurations and results in {tex tix | libbar->{tex/1,1 tix/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {tix | libbar->{tix/1,1}} failed due to dependent tex, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 1,1: libbar} to {tix | libbar->{tix/1,1}}! trace: collect_build_prerequisites: dependent tex/1.0.0 is a shadow dependent for {tex tix | libbar->{tex/1,1 tix/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tex/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tex/1.0.0 is already (being) recursively collected, skipping %.* 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 trace: collect_build_prerequisites: end tix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tix | tex->{tix/2,1}}! trace: collect_build_postponed (3): begin {tex | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (3): end {tex | libfoo->{tex/2,1}} trace: collect_build_postponed (2): end {tix | tex->{tix/2,1}} trace: collect_build_postponed (1): end {tix | libbar->{tix/1,1}} trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !tix 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 tix } : args-tex-tix-tux : : Here tux requires tix/0.1.0 which has no dependencies. : { $clone_cfg; $* tex tix tux 2>>~%EOE%; %.* 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: add tux/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,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 1,1: libbar} to {tex | libbar->{tex/1,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_prerequisites: begin tux/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tux/1.0.0 trace: postponed_configurations::add: create {tux | libbox->{tux/1,1}} trace: collect_build_prerequisites: postpone tux/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tex tix | libbar->{tex/1,1 tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tex tix | libbar->{tex/1,1 tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 (collected prematurely), throwing postpone_dependency 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 tix/1.0.0 trace: collect_build: add tux/1.0.0 trace: pkg_build: dep-postpone user-specified tex 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_prerequisites: begin tux/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tux/1.0.0 trace: postponed_configurations::add: create {tux | libbox->{tux/1,1}} trace: collect_build_prerequisites: postpone tux/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tux | libbox->{tux/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tux | libbox->{tux/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tux/1.0.0 trace: collect_build_prerequisites: resume tux/1.0.0 %.* trace: collect_build: pick tix/0.1.0 over tix/1.0.0 trace: collect_build: tix/1.0.0 package version needs to be replaced with tix/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 tex/1.0.0 trace: collect_build: apply version replacement for tix/1.0.0 trace: collect_build: replacement: tix/0.1.0 trace: collect_build: add tix/0.1.0 trace: collect_build: add tux/1.0.0 trace: pkg_build: dep-postpone user-specified tex trace: collect_build_prerequisites: begin tix/0.1.0 trace: collect_build_prerequisites: end tix/0.1.0 trace: collect_build_prerequisites: begin tux/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tux/1.0.0 trace: postponed_configurations::add: create {tux | libbox->{tux/1,1}} trace: collect_build_prerequisites: postpone tux/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tux | libbox->{tux/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tux | libbox->{tux/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tux/1.0.0 trace: collect_build_prerequisites: resume tux/1.0.0 %.* trace: collect_build_prerequisites: no cfg-clause for dependency tix/0.1.0 of dependent tux/1.0.0 trace: collect_build_prerequisites: end tux/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tux | libbox->{tux/1,1}}! trace: collect_build_postponed (1): erase bogus postponement tex trace: collect_build_postponed (1): 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 tex/1.0.0 trace: collect_build: apply version replacement for tix/1.0.0 trace: collect_build: replacement: tix/0.1.0 trace: collect_build: add tix/0.1.0 trace: collect_build: add tux/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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_prerequisites: begin tix/0.1.0 trace: collect_build_prerequisites: end tix/0.1.0 trace: collect_build_prerequisites: begin tux/1.0.0 %.* trace: collect_build: add libbox/1.0.0 trace: collect_build_prerequisites: cfg-postpone dependency libbox/1.0.0 of dependent tux/1.0.0 trace: postponed_configurations::add: create {tux | libbox->{tux/1,1}} trace: collect_build_prerequisites: postpone tux/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tex | libbar->{tex/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {tex | libbar->{tex/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tex | libbar->{tex/1,1}}! trace: collect_build_postponed (2): begin {tux | libbox->{tux/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tux | libbox->{tux/1,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_postponed (2): select cfg-negotiated dependency alternative for dependent tux/1.0.0 trace: collect_build_prerequisites: resume tux/1.0.0 %.* trace: collect_build_prerequisites: no cfg-clause for dependency tix/0.1.0 of dependent tux/1.0.0 trace: collect_build_prerequisites: end tux/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tux | libbox->{tux/1,1}}! trace: collect_build_postponed (3): begin {tex | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (3): end {tex | libfoo->{tex/2,1}} trace: collect_build_postponed (2): end {tux | libbox->{tux/1,1}} trace: collect_build_postponed (1): end {tex | libbar->{tex/1,1}} 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 !tix configured 0.1.0 available 1.0.0 !tux configured 1.0.0 libbox configured 1.0.0 !tix configured 0.1.0 available 1.0.0 EOO $pkg_drop tex tix tux } : 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>!; #\ $* 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>!; #\ $* 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>!; $* tix 2>>~%EOE%; %.* 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {tix | libbar->{tix/1,1}} %.* trace: collect_build: add tex/1.0.0 trace: collect_build_prerequisites: reeval tex/1.0.0 %.* trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {tix | libbar->{tix/1,1}} trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {tex^ tix | libbar->{tex/1,1 tix/1,1}} trace: collect_build_prerequisites: re-evaluated tex/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {tex^ tix | libbar->{tex/1,1 tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 (collected prematurely), throwing postpone_dependency 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 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): skip dep-postponed existing dependent tex of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 1,1: libbar} to {tix | libbar->{tix/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent tex/1.0.0 involves negotiated configurations and results in {tex tix | libbar->{tex/1,1 tix/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {tix | libbar->{tix/1,1}} failed due to dependent tex, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {tix | libbar->{tix/1,1}} %.* trace: collect_build_postponed (1): skip dep-postponed existing dependent tex of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {tix | libbar->{tix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone tix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {tix | libbar->{tix/1,1}}! trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin tex/1.0.0 %.* trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 trace: postponed_configurations::add: add {tex 1,1: libbar} to {tix | libbar->{tix/1,1}}! trace: collect_build_prerequisites: dependent tex/1.0.0 is a shadow dependent for {tex tix | libbar->{tex/1,1 tix/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tex/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tex/1.0.0 is already (being) recursively collected, skipping %.* 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,1}} trace: collect_build_prerequisites: postpone tex/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent tix/1.0.0 trace: collect_build_prerequisites: resume tix/1.0.0 trace: collect_build_prerequisites: end tix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {tix | tex->{tix/2,1}}! trace: collect_build_postponed (3): begin {tex | libfoo->{tex/2,1}} %.* trace: collect_build_postponed (3): skip being built existing dependent tex of dependency libfoo trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2,1}} 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_postponed (3): select cfg-negotiated dependency alternative for dependent tex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (3): end {tex | libfoo->{tex/2,1}} trace: collect_build_postponed (2): end {tix | tex->{tix/2,1}} trace: collect_build_postponed (1): end {tix | libbar->{tix/1,1}} 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 !tix 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 # Note that tex/0.1.0 doesn't depend on libbar. # # In particular, make sure tix is re-evaluated in the strict mode # up to the tex dependency. # #\ $* tix tex/0.1.0 2>>~%EOE%; EOE #\ # @@ Should we also test the following commands instead of the # previous? # #$* tix ?tex/0.1.0 2>|; #$* tix ?tex/0.2.0 2>|; $pkg_drop tex tix } } } : indirect : { +$clone_cfg : args-tax-dex-dix : { $clone_cfg; # Dependencies: # # tax: depends: libbar(c) # depends: libfoo # # bar: depends: libbar(c) # # dex: depends: bar(c) # depends: libfoo(c) # # dox: dex(c) # # dix: depends: libbar(c) # depends: libbox(c) # causes postponment and initial cluster finished negotiating # depends: dox(c) # $* tax dex dix 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 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,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,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 1,1: libbar} to {tax | libbar->{tax/1,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {dix tax | libbar->{dix/1,1 tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1,1 tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: no cfg-clause for 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,1 tax/1,1}}! trace: collect_build_postponed (2): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (2): 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 1,1: libbar} to {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar dix tax | libbar->{bar/1,1 dix/1,1 tax/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {dix tax | libbar->{dix/1,1 tax/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {dix tax | libbar->{dix/1,1 tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1,1 tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume tax/1.0.0 %.* trace: collect_build: add libfoo/1.0.0 trace: collect_build_prerequisites: no cfg-clause for 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,1 tax/1,1}}! trace: collect_build_postponed (2): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (2): 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 1,1: libbar} to {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar dix tax | libbar->{bar/1,1 dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume dex/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency libfoo/1.0.0 of dependent dex/1.0.0 (collected prematurely), throwing postpone_dependency trace: pkg_build: collection failed due to prematurely collected dependency (libfoo), retry 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,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,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 1,1: libbar} to {tax | libbar->{tax/1,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {dix tax | libbar->{dix/1,1 tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1,1 tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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 {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_postponed (2): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (2): 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 1,1: libbar} to {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar dix tax | libbar->{bar/1,1 dix/1,1 tax/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {dix tax | libbar->{dix/1,1 tax/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {dix tax | libbar->{dix/1,1 tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1,1 tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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 {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_postponed (2): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (2): 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 1,1: libbar} to {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar dix tax | libbar->{bar/1,1 dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume dex/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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dex | bar->{dex/1,1}}! trace: collect_build_postponed (3): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (3): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (4): begin {dex | libfoo->{dex/2,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dex | libfoo->{dex/2,1}} trace: collect_build_postponed (4): 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 (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume dex/1.0.0 trace: collect_build_prerequisites: end dex/1.0.0 trace: collect_build_postponed (4): cfg-negotiate end {dex | libfoo->{dex/2,1}}! trace: collect_build_postponed (5): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (5): cfg-negotiate begin {dix | dox->{dix/3,1}} 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), throwing postpone_dependency trace: pkg_build: collection failed due to prematurely collected dependency (dex), 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 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,1}} trace: collect_build_prerequisites: postpone tax/1.0.0 trace: pkg_build: dep-postpone user-specified dex 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 1,1: libbar} to {tax | libbar->{tax/1,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {dix tax | libbar->{dix/1,1 tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1,1 tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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 {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} trace: collect_build_postponed (3): 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dox/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (5): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (5): 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 1,1: libbar} to {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar dix tax | libbar->{bar/1,1 dix/1,1 tax/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {dix tax | libbar->{dix/1,1 tax/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {dix tax | libbar->{dix/1,1 tax/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix tax | libbar->{dix/1,1 tax/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tax/1.0.0 trace: collect_build_prerequisites: resume 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 {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} trace: collect_build_postponed (3): 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dox/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (5): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (5): 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 1,1: libbar} to {dix tax | libbar->{dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar dix tax | libbar->{bar/1,1 dix/1,1 tax/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (5): recursively collect cfg-negotiated dependents trace: collect_build_postponed (5): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume dex/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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (5): cfg-negotiate end {dex | bar->{dex/1,1}}! trace: collect_build_postponed (6): begin {dex | libfoo->{dex/2,1}} %.* trace: collect_build_postponed (6): cfg-negotiate begin {dex | libfoo->{dex/2,1}} 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_postponed (6): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (6): end {dex | libfoo->{dex/2,1}} trace: collect_build_postponed (5): end {dex | bar->{dex/1,1}} trace: collect_build_postponed (4): end {dox | dex->{dox/1,1}} trace: collect_build_postponed (3): end {dix | dox->{dix/3,1}} trace: collect_build_postponed (2): end {dix | libbox->{dix/2,1}} trace: collect_build_postponed (1): end {dix tax | libbar->{dix/1,1 tax/1,1}} 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 !dix 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 dix --drop-dependent } : 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: # # bar: depends: libbar(c) # # dex: depends: bar(c) # depends: libfoo(c) # # dox: dex(c) # # dix: depends: libbar(c) # depends: libbox(c) # causes postponment and initial cluster finished negotiating # depends: dox(c) # $* dix 2>>~%EOE%; %.* 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {dix | libbar->{dix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix | libbar->{dix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dix | libbar->{dix/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dox/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (5): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (5): 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 1,1: libbar} to {dix | libbar->{dix/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar dix | libbar->{bar/1,1 dix/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {dix | libbar->{dix/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {dix | libbar->{dix/1,1}} %.* trace: collect_build_postponed (1): cfg-negotiate begin {dix | libbar->{dix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dix | libbar->{dix/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dox/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (5): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (5): 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 1,1: libbar} to {dix | libbar->{dix/1,1}}! trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar dix | libbar->{bar/1,1 dix/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (5): recursively collect cfg-negotiated dependents trace: collect_build_postponed (5): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (5): cfg-negotiate end {dex | bar->{dex/1,1}}! trace: collect_build_postponed (6): begin {dex | libfoo->{dex/2,1}} %.* trace: collect_build_postponed (6): cfg-negotiate begin {dex | libfoo->{dex/2,1}} 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_postponed (6): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (6): end {dex | libfoo->{dex/2,1}} trace: collect_build_postponed (5): end {dex | bar->{dex/1,1}} trace: collect_build_postponed (4): end {dox | dex->{dox/1,1}} trace: collect_build_postponed (3): end {dix | dox->{dix/3,1}} trace: collect_build_postponed (2): end {dix | libbox->{dix/2,1}} trace: collect_build_postponed (1): end {dix | libbar->{dix/1,1}} trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !dix 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 dix } : 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 # # bar: depends: libbar(c) # # dex: depends: bar(c) # depends: libfoo(c) # # dox: dex(c) # # diz: depends: dox(c) # depends: libbox(c) # depends: libbar(c) # $* tax dex diz 2>!; #\ $* 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: # # bar: depends: libbar(c) # # dex: depends: bar(c) # depends: libfoo(c) # # dox: dex(c) # # diz: depends: dox(c) # depends: libbox(c) # depends: libbar(c) # $* diz 2>!; #\ $* 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: # # bar: depends: libbar(c) # # dex: depends: bar(c) # depends: libfoo(c) # # dox: dex(c) # # dix: depends: libbar(c) # depends: libbox(c) # causes postponment and initial cluster finished negotiating # depends: dox(c) # $* dex 2>!; $* dix 2>>~%EOE%; %.* 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {dix | libbar->{dix/1,1}} %.* trace: collect_build_postponed (1): re-evaluate existing dependents for {dix | libbar->{dix/1,1}} %.* trace: collect_build: add bar/1.0.0 trace: collect_build_prerequisites: reeval bar/1.0.0 %.* trace: postponed_configurations::add: add {bar^ 1,1: libbar} to {dix | libbar->{dix/1,1}} trace: collect_build_prerequisites: re-evaluating dependent bar/1.0.0 results in {bar^ dix | libbar->{bar/1,1 dix/1,1}} trace: collect_build_prerequisites: re-evaluated bar/1.0.0 trace: collect_build_postponed (1): cfg-negotiate begin {bar^ dix | libbar->{bar/1,1 dix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent bar/1.0.0 trace: collect_build_prerequisites: resume bar/1.0.0 trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {bar^ dix | libbar->{bar/1,1 dix/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,1}} trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies trace: collect_build_prerequisites: begin dex/1.0.0 %.* trace: collect_build_prerequisites: cannot cfg-postpone dependency bar/1.0.0 of dependent dex/1.0.0 (collected prematurely), throwing postpone_dependency trace: pkg_build: collection failed due to prematurely collected dependency (bar), retry from scratch %.* 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (0): begin trace: collect_build_postponed (1): begin {dix | libbar->{dix/1,1}} %.* trace: collect_build_postponed (1): skip dep-postponed existing dependent bar of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {dix | libbar->{dix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dix | libbar->{dix/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dox/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (5): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (5): skip being built existing dependent dex of dependency bar trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (5): 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 1,1: libbar} to {dix | libbar->{dix/1,1}}! trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar dix | libbar->{bar/1,1 dix/1,1}}!, throwing retry_configuration trace: collect_build_postponed (0): cfg-negotiation of {dix | libbar->{dix/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating trace: collect_build_postponed (1): begin {dix | libbar->{dix/1,1}} %.* trace: collect_build_postponed (1): skip dep-postponed existing dependent bar of dependency libbar trace: collect_build_postponed (1): cfg-negotiate begin {dix | libbar->{dix/1,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_postponed (1): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (1): cfg-negotiate end {dix | libbar->{dix/1,1}}! trace: collect_build_postponed (2): begin {dix | libbox->{dix/2,1}} %.* trace: collect_build_postponed (2): cfg-negotiate begin {dix | libbox->{dix/2,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_postponed (2): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dix/1.0.0 trace: collect_build_postponed (2): cfg-negotiate end {dix | libbox->{dix/2,1}}! trace: collect_build_postponed (3): begin {dix | dox->{dix/3,1}} %.* trace: collect_build_postponed (3): cfg-negotiate begin {dix | dox->{dix/3,1}} 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,1}} trace: collect_build_prerequisites: postpone dox/1.0.0 trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent dix/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (4): begin {dox | dex->{dox/1,1}} %.* trace: collect_build_postponed (4): cfg-negotiate begin {dox | dex->{dox/1,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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent dox/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (5): begin {dex | bar->{dex/1,1}} %.* trace: collect_build_postponed (5): skip being built existing dependent dex of dependency bar trace: collect_build_postponed (5): cfg-negotiate begin {dex | bar->{dex/1,1}} trace: collect_build_postponed (5): 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 1,1: libbar} to {dix | libbar->{dix/1,1}}! trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar dix | libbar->{bar/1,1 dix/1,1}}! trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping trace: collect_build_prerequisites: end bar/1.0.0 trace: collect_build_postponed (5): recursively collect cfg-negotiated dependents trace: collect_build_postponed (5): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume 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,1}} trace: collect_build_prerequisites: postpone dex/1.0.0 trace: collect_build_postponed (5): cfg-negotiate end {dex | bar->{dex/1,1}}! trace: collect_build_postponed (6): begin {dex | libfoo->{dex/2,1}} %.* trace: collect_build_postponed (6): skip being built existing dependent dex of dependency libfoo trace: collect_build_postponed (6): cfg-negotiate begin {dex | libfoo->{dex/2,1}} 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_postponed (6): select cfg-negotiated dependency alternative for dependent dex/1.0.0 trace: collect_build_prerequisites: resume 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,1}}! trace: collect_build_postponed (6): end {dex | libfoo->{dex/2,1}} trace: collect_build_postponed (5): end {dex | bar->{dex/1,1}} trace: collect_build_postponed (4): end {dox | dex->{dox/1,1}} trace: collect_build_postponed (3): end {dix | dox->{dix/3,1}} trace: collect_build_postponed (2): end {dix | libbox->{dix/2,1}} trace: collect_build_postponed (1): end {dix | libbar->{dix/1,1}} trace: collect_build_postponed (0): end trace: execute_plan: simulate: yes %.* EOE $pkg_status -r >>EOO; !dex configured 1.0.0 bar configured 1.0.0 libbar configured 1.0.0 libfoo configured 1.0.0 !dix 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 # @@ Note that if --drop-dependent is unspecified, the following # command fails with: # # following dependent packages will have to be dropped as well: # dox (requires dex) # error: refusing to drop dependent packages with just --yes # info: specify --drop-dependent to confirm # # Feels wrong. # $pkg_drop --drop-dependent dex dix } } } } } } : 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 } --verbose 5 <>~%EOE%; y EOI %.* trace: pkg_build: refine package collection/plan execution from scratch %.* trace: collect_build: add libbaz/1.0.0 [t2/] trace: collect_build_prerequisites: begin libbaz/1.0.0 [t2/] trace: collect_build_prerequisites: end libbaz/1.0.0 [t2/] %.* trace: collect_build_prerequisites: begin foo/1.0.0 %.* trace: collect_build_prerequisites: no cfg-clause for dependency libbaz/1.0.0 [t2/] of dependent foo/1.0.0 trace: collect_build_prerequisites: end foo/1.0.0 %.* trace: execute_plan: simulate: yes %.* trace: evaluate_dependency: libbaz/1.0.0: unused %.* trace: evaluate_dependency: foo/1.0.0: unused %.* trace: pkg_build: refine package collection/plan execution %.* trace: collect_drop: foo/1.0.0 package version needs to be replaced with drop 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 libbaz/1.0.0 [t2/] trace: collect_build_prerequisites: begin libbaz/1.0.0 [t2/] trace: collect_build_prerequisites: end libbaz/1.0.0 [t2/] trace: collect_build: apply version replacement for foo/1.0.0 trace: collect_build: replacement: drop %.* trace: execute_plan: simulate: yes %.* trace: evaluate_dependency: libbuild2-bar/1.0.0 [t1/.bpkg/build2/]: unused %.* trace: pkg_build: refine package collection/plan execution %.* trace: execute_plan: simulate: yes %.* % 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] trace: execute_plan: simulate: no %.* 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 } } } }