diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2018-05-15 22:32:38 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2018-05-16 11:46:31 +0300 |
commit | e771c6b80168de37b74cc57dec502dfa418a19a6 (patch) | |
tree | 1d2c8ba68cd1e1331d45cde2fc76d25eee007c08 | |
parent | 1ffe9fa27ee9829c16446a09aa5bd94bcc60ab68 (diff) |
Add some more tests
-rw-r--r-- | tests/common.test | 15 | ||||
-rw-r--r-- | tests/fetch.test | 28 | ||||
-rw-r--r-- | tests/init.test | 49 | ||||
-rw-r--r-- | tests/new.test | 38 | ||||
-rw-r--r-- | tests/status.test | 27 | ||||
-rw-r--r-- | tests/sync.test | 160 | ||||
-rw-r--r-- | tests/test.test | 102 | ||||
-rw-r--r-- | tests/update.test | 95 |
8 files changed, 403 insertions, 111 deletions
diff --git a/tests/common.test b/tests/common.test index 8578f5c..3aefde4 100644 --- a/tests/common.test +++ b/tests/common.test @@ -5,25 +5,16 @@ # Commonly-used variables setup and driver command line. # -# Variables for supporting Windows/POSIX testscript variants. -# -win32 = ($cxx.target.class == 'windows') -exe = ($win32 ? '.exe' : '') - # Use the same build system driver as the one running the tests (as opposed -# to one that may or may not be found via PATH). This implies that we don't -# support cross-testing. +# to one that may or may not be found via PATH). Note that this implies that +# we don't support cross-testing. # # A common approach will be to run build2 as a sanity check in a directory -# produced/updated by a command being tested. +# produced or updated by a command being tested. # build = $recall($build.path) test.options += --build $build -# @@ It would be nice to query bdep for the bpkg path it uses. -# -bpkg = ("$config.bdep.test.bpkg" != '' ? "$config.bdep.test.bpkg" : "bpkg$exe") - # Helper commands that can be used by tests to prepare the testing environment # or validate an outcome of the command being tested. They are likely to get # additional options and redirects appended prior to use. A common approach diff --git a/tests/fetch.test b/tests/fetch.test index 7fec857..e7fd54e 100644 --- a/tests/fetch.test +++ b/tests/fetch.test @@ -4,19 +4,21 @@ .include common.test project.test +cxx = cc "config.cxx=$config.cxx" + new += 2>! -init += cc "config.cxx=$config.cxx" -d prj 2>! -status += --all +init += $cxx -d prj 2>! +status += --all -d prj deinit += -d prj -: add-dependency +: dependency : { $clone_prj; - $init -C prj-cfg @cfg &prj-cfg/***; + $init -C @cfg &prj-cfg/***; - $new -t lib --vcs none libfoo &libfoo/*** 2>!; - $new -t lib --vcs none libbar &libbar/*** 2>!; + $new -t lib libbar &libbar/*** 2>!; + $new -t lib libfoo &libfoo/*** 2>!; cat <<EOI >+prj/repositories.manifest; : @@ -29,17 +31,19 @@ deinit += -d prj type: dir EOI + cat <<EOI >+prj/manifest; + depends: libfoo + depends: libbar + EOI + $* 2>>/"EOE"; fetching dir:$~/libbar \(complements dir:$~/prj\) fetching dir:$~/libfoo \(prerequisite of dir:$~/prj\) EOE - $status -d prj >'prj configured 0.1.0-a.0.19700101000000'; - - $bpkg list --complements --prerequisites -d prj-cfg >>/"EOO"; - dir:$~/prj $~/prj - complement dir:$~/libbar $~/libbar - prerequisite dir:$~/libfoo $~/libfoo + $status libfoo libbar >>~%EOO%; + %libfoo available \[.+\]% + %libbar available .+% EOO $deinit 2>>/"EOE" diff --git a/tests/init.test b/tests/init.test index 3fc05c6..0064cf7 100644 --- a/tests/init.test +++ b/tests/init.test @@ -7,15 +7,14 @@ .include common.test project.test -new += -d prj +cxx = cc "config.cxx=$config.cxx" + status += -d prj deinit += -d prj -cxx = cc "config.cxx=$config.cxx" - : create-cfg : -: We will also test that the configuration variables are properly persisted and +: Here we also test that the configuration variable is properly persisted and : the project is properly built in the source tree. : { @@ -40,7 +39,7 @@ cxx = cc "config.cxx=$config.cxx" ln prj-cfg/prj/prj/exe{prj} -> prj/prj/ EOE - prj/prj/prj 'testscript' >'Hello, testscript!'; + prj/prj/prj 'testscript' >'Hello, testscript!'; # Make sure is forwarded. $build prj-cfg/prj/ 2>>/EOE; info: prj-cfg/dir{prj/} is up to date @@ -64,10 +63,12 @@ cxx = cc "config.cxx=$config.cxx" { $clone_prj; - $bpkg create $cxx -d prj-cfg1/ 2>! &prj-cfg1/***; - $bpkg create $cxx -d prj-cfg2/ 2>! &prj-cfg2/***; + # Pre-create configurations. + # + $new -C prj-cfg1 tmp $cxx 2>! &prj-cfg1/*** &tmp/***; + $init -C prj-cfg2 -d tmp $cxx 2>! &prj-cfg2/***; - $* -A @cfg1 2>>/~"%EOE%"; # Shortcut. + $* -A @cfg1 2>>/~"%EOE%"; initializing in project $~/prj/ added configuration @cfg1 $~/prj-cfg1/ \(1, default, forwarded, auto-synchronized\) synchronizing: @@ -89,23 +90,29 @@ cxx = cc "config.cxx=$config.cxx" prj configured 0.1.0-a.0.19700101000000 EOO - $build prj-cfg1/ 2>>/EOE; - mkdir prj-cfg1/prj/fsdir{prj/} - c++ prj/prj/cxx{prj}@prj-cfg1/prj/prj/ - ld prj-cfg1/prj/prj/exe{prj} + $build prj-cfg1/ 2>>/~%EOE%; + %mkdir prj-cfg1/.+%{2} + %c\+\+ .+%{2} + %ld prj-cfg1/.+%{2} EOE - $build prj-cfg2/ 2>>/EOE; - mkdir prj-cfg2/prj/fsdir{prj/} - c++ prj/prj/cxx{prj}@prj-cfg2/prj/prj/ - ld prj-cfg2/prj/prj/exe{prj} + $build prj-cfg2/ 2>>/~%EOE%; + %mkdir prj-cfg2/.+%{2} + %c\+\+ .+%{2} + %ld prj-cfg2/.+%{2} EOE - $build prj/ 2>>/EOE &prj/prj/prj$exe; + $build prj/ 2>>/EOE; ln prj-cfg1/prj/prj/exe{prj} -> prj/prj/ info: prj-cfg1/dir{prj/} is up to date EOE + $build 'clean:' prj/ 2>>/EOE; + rm prj-cfg1/prj/prj/exe{prj} + rm prj-cfg1/prj/prj/obje{prj} + rm prj-cfg1/prj/fsdir{prj/} + EOE + $deinit 2>>/"EOE" deinitializing in project $~/prj/ synchronizing: @@ -139,10 +146,6 @@ cxx = cc "config.cxx=$config.cxx" ln prj-cfg/prj/prj/exe{prj} -> prj/prj/ EOE - $build prj-cfg/ 2>>/EOE; - info: dir{prj-cfg/} is up to date - EOE - # Move the executable package into a separate directory. # mkdir --no-cleanup prj/prj.pkg; @@ -163,11 +166,11 @@ cxx = cc "config.cxx=$config.cxx" # Add the library package. # - $new --package -t lib libprj 2>>/"EOE"; + $new --package -t lib libprj -d prj 2>>/"EOE"; created new library package libprj in $~/prj/libprj/ EOE - $init -a -d prj/libprj 2>>/~"%EOE%"; + $init --all -d prj/libprj 2>>/~"%EOE%"; initializing in project $~/prj/ synchronizing: % upgrade prj.+19700101000000#1% diff --git a/tests/new.test b/tests/new.test index cdb1537..ab9e25a 100644 --- a/tests/new.test +++ b/tests/new.test @@ -4,9 +4,9 @@ .include common.test -status += -d prj +cxx = "config.cxx=$config.cxx" -cxx = cc "config.cxx=$config.cxx" +status += -d prj : exe { @@ -14,7 +14,7 @@ cxx = cc "config.cxx=$config.cxx" created new executable project prj in $~/prj/ EOE - $build prj/ 2>>/EOE + $build prj/ $cxx 2>>/EOE c++ prj/prj/cxx{prj} ld prj/prj/exe{prj} EOE @@ -26,18 +26,37 @@ cxx = cc "config.cxx=$config.cxx" created new library project libprj in $~/libprj/ EOE - $build libprj/ 2>>/~%EOE% + $build libprj/ $cxx 2>>/~%EOE% %.{4} %ld libprj/.+%{3} EOE } +: pkg +: +: Test creating a library as a separate package in the project. +: +{ + $* -t empty prj 2>>/"EOE" &prj/***; + created new empty project prj in $~/prj/ + EOE + + $* --package -t lib libprj -d prj 2>>/"EOE"; + created new library package libprj in $~/prj/libprj/ + EOE + + $build prj/libprj/ $cxx 2>>/~%EOE% + %.{4} + %ld prj/libprj/.+%{3} + EOE +} + : cfg { : dir-and-name : { - $* -C prj-config @cfg prj $cxx 2>>/~"%EOE%" &prj/*** &prj-config/***; + $* -C prj-config @cfg prj cc $cxx 2>>/~"%EOE%" &prj/*** &prj-config/***; created new executable project prj in $~/prj/ created configuration @cfg $~/prj-config/ \(1, default, forwarded, auto-synchronized\) synchronizing: @@ -56,12 +75,13 @@ cxx = cc "config.cxx=$config.cxx" : name : - : Test deducing the configuration directory path from project source - : directory path and configuration name. Here we also use the dash-prefixed - : name (as in Windows PowerShell where the leading '@' character is special). + : Test deducing the configuration directory path from the project source + : directory path and the configuration name. Here we also use the + : dash-prefixed name (as in Windows PowerShell where the leading '@' + : character is special). : { - $* -C -@cfg prj $cxx 2>>/~"%EOE%" &prj/*** &prj-cfg/***; + $* -C -@cfg prj cc $cxx 2>>/~"%EOE%" &prj/*** &prj-cfg/***; created new executable project prj in $~/prj/ created configuration @cfg $~/prj-cfg/ \(1, default, forwarded, auto-synchronized\) synchronizing: diff --git a/tests/status.test b/tests/status.test index 99fe360..9871898 100644 --- a/tests/status.test +++ b/tests/status.test @@ -4,12 +4,14 @@ .include common.test project.test +cxx = cc "config.cxx=$config.cxx" + new += 2>! -init += cc "config.cxx=$config.cxx" -d prj 2>! +init += $cxx -d prj 2>! sync += -d prj 2>! deinit += -d prj -: no-config +: no-cfg : { $clone_prj; @@ -20,11 +22,12 @@ deinit += -d prj EOE } -: one-config +: single-cfg : { $clone_prj; - $init -C prj-cfg @cfg &prj-cfg/***; + + $init -C @cfg &prj-cfg/***; $* >'prj configured 0.1.0-a.0.19700101000000'; @@ -35,12 +38,13 @@ deinit += -d prj EOE } -: two-configs +: multi-cfg : { $clone_prj; - $init -C prj-cfg1 @cfg1 &prj-cfg1/***; - $init -C prj-cfg2 @cfg2 &prj-cfg2/***; + + $init -C @cfg1 &prj-cfg1/***; + $init -C @cfg2 &prj-cfg2/***; $* @cfg2 >'prj configured 0.1.0-a.0.19700101000000'; @@ -63,9 +67,10 @@ deinit += -d prj : { $clone_prj; - $init -C prj-cfg @cfg &prj-cfg/***; - $new -t lib --vcs none libprj &libprj/***; + $init -C @cfg &prj-cfg/***; + + $new -t lib libprj &libprj/***; cat <<EOI >+prj/repositories.manifest; : @@ -78,7 +83,7 @@ deinit += -d prj depends: libprj EOI - $* --recursive >>EOO 2>>/"EOE"; + $* --recursive >>EOO 2>>/"EOE"; # Note: implicitly fetches in cfg. prj configured 0.1.0-a.0.19700101000000 available 0.1.0-a.0.19700101000000#1 EOO fetching dir:$~/libprj \(prerequisite of dir:$~/prj\) @@ -88,7 +93,7 @@ deinit += -d prj $* --recursive >>~%EOO%; prj configured 0.1.0-a.0.19700101000000#1 - % libprj configured 0\.1\.0-a\.0\..+% + % libprj configured 0.+% EOO $deinit 2>>/"EOE" diff --git a/tests/sync.test b/tests/sync.test index 74d9a6d..195a8e0 100644 --- a/tests/sync.test +++ b/tests/sync.test @@ -2,22 +2,21 @@ # copyright : Copyright (c) 2014-2017 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file -.include common.test project.test +.include common.test + +cxx = cc "config.cxx=$config.cxx" new += 2>! -init += cc "config.cxx=$config.cxx" -d prj 2>! +init += $cxx -d prj 2>! status += --all --recursive -d prj deinit += -d prj -: dependency +: single-pkg-cfg : { - $clone_prj; + $new -C @cfg prj $cxx &prj/*** &prj-cfg/***; - $init -C @cfg1 &prj-cfg1/***; - $init -C @cfg2 &prj-cfg2/***; - - $new -t lib --vcs none libprj &libprj/***; + $new -t lib libprj &libprj/***; cat <<EOI >+prj/repositories.manifest; : @@ -52,66 +51,169 @@ deinit += -d prj } EOI - # Sync the default (cfg1) configuration. - # - $* 2>>/~"%EOE%"; + $* -d prj 2>>/~"%EOE%"; fetching dir:$~/libprj \(prerequisite of dir:$~/prj\) synchronizing: % new libprj.+ \\\(required by prj\\\)% % upgrade prj.+19700101000000#1% EOE - $status >>~%EOO% 2>>/~"%EOE%"; - in configuration @cfg1: + $status >>~%EOO%; prj configured 0.1.0-a.0.19700101000000#1 % libprj configured 0.+% + EOO + + $build prj/ 2>>/~%EOE%; + %mkdir prj-cfg/.+%{2} + %.{3} + %ld prj-cfg/.+%{2} + ln prj-cfg/prj/prj/exe{prj} -> prj/prj/ + EOE + + $build 'clean:' prj/ 2>>/EOE; + rm prj-cfg/prj/prj/exe{prj} + rm prj-cfg/prj/prj/obje{prj} + rm prj-cfg/prj/fsdir{prj/} + EOE + + $deinit 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + drop libprj + EOE +} + +: multi-pkg-cfg +: +{ + $new -t empty prj &prj/***; + + $new --package pkg1 -d prj; + $new --package pkg2 -d prj; + + $init -C @cfg1 &prj-cfg1/***; + $init -C @cfg2 &prj-cfg2/***; + + $new -t lib libprj &libprj/***; + + cat <<EOI >+prj/repositories.manifest; + : + role: prerequisite + location: ../libprj + type: dir + EOI + + cat <<EOI >+prj/pkg1/manifest; + depends: libprj + EOI + + sed -i -e 's/^(#import .+)$/import libs += libprj%lib{prj}/' \ + prj/pkg1/pkg1/buildfile; + + cat <<EOI >=prj/pkg1/pkg1/pkg1.cxx; + #include <iostream> + + #include <libprj/prj.hxx> + + using namespace std; + + int main (int argc, char* argv[]) + { + if (argc < 2) + { + cerr << "error: missing name" << endl; + return 1; + } + + prj::say_hello (cout, argv[1]); + } + EOI + + cat <<EOI >+prj/pkg2/manifest; + tags: c++ + EOI + + # Sync the default (cfg1) configuration (via the package directory). + # + $* -d prj/pkg2 2>>/~"%EOE%"; + fetching dir:$~/libprj \(prerequisite of dir:$~/prj\) + synchronizing: + % new libprj.+ \\\(required by pkg1\\\)% + % upgrade pkg1.+19700101000000#1% + % upgrade pkg2.+19700101000000#1% + EOE + + $status >>~%EOO% 2>>/~"%EOE%"; # Note: implicitly fetches into cfg2. + in configuration @cfg1: + pkg1 configured 0.1.0-a.0.19700101000000#1 + % libprj configured 0.+% + pkg2 configured 0.1.0-a.0.19700101000000#1 in configuration @cfg2: - prj configured 0.1.0-a.0.19700101000000 available 0.1.0-a.0.19700101000000#1 + pkg1 configured 0.1.0-a.0.19700101000000 available 0.1.0-a.0.19700101000000#1 + pkg2 configured 0.1.0-a.0.19700101000000 available 0.1.0-a.0.19700101000000#1 EOO fetching dir:$~/libprj \(prerequisite of dir:$~/prj\) EOE - # Sync all configuration. + # Sync all configurations (via the project directory). # - $* --all 2>>~%EOE%; + $* --all -d prj 2>>~%EOE%; in configuration @cfg1: in configuration @cfg2: synchronizing: - % new libprj.+ \(required by prj\)% - upgrade prj/0.1.0-a.0.19700101000000#1 + % new libprj.+ \(required by pkg1\)% + upgrade pkg1/0.1.0-a.0.19700101000000#1 + upgrade pkg2/0.1.0-a.0.19700101000000#1 EOE $status >>~%EOE%; in configuration @cfg1: - prj configured 0.1.0-a.0.19700101000000#1 + pkg1 configured 0.1.0-a.0.19700101000000#1 % libprj configured 0.+% + pkg2 configured 0.1.0-a.0.19700101000000#1 in configuration @cfg2: - prj configured 0.1.0-a.0.19700101000000#1 + pkg1 configured 0.1.0-a.0.19700101000000#1 % libprj configured 0.+% + pkg2 configured 0.1.0-a.0.19700101000000#1 EOE - # @@ Add synchronizing a single package when 'new -t empty' is supported. - # - $build prj/ 2>>/~"%EOE%"; + $build prj/pkg1/ 2>>/~%EOE%; %mkdir prj-cfg1/.+%{2} %.{3} %ld prj-cfg1/.+%{2} - ln prj-cfg1/prj/prj/exe{prj} -> prj/prj/ + ln prj-cfg1/pkg1/pkg1/exe{pkg1} -> prj/pkg1/pkg1/ EOE - $build 'clean:' prj/ 2>>/EOE; - rm prj-cfg1/prj/prj/exe{prj} - rm prj-cfg1/prj/prj/obje{prj} - rm prj-cfg1/prj/fsdir{prj/} + $build prj/pkg2/ 2>>/EOE; + mkdir prj-cfg1/pkg2/fsdir{pkg2/} + c++ prj/pkg2/pkg2/cxx{pkg2}@prj-cfg1/pkg2/pkg2/ + ld prj-cfg1/pkg2/pkg2/exe{pkg2} + ln prj-cfg1/pkg2/pkg2/exe{pkg2} -> prj/pkg2/pkg2/ + EOE + + $build 'clean:' prj/pkg1/ 2>>/EOE; + rm prj-cfg1/pkg1/pkg1/exe{pkg1} + rm prj-cfg1/pkg1/pkg1/obje{pkg1} + rm prj-cfg1/pkg1/fsdir{pkg1/} + EOE + + $build 'clean:' prj/pkg2/ 2>>/EOE; + rm prj-cfg1/pkg2/pkg2/exe{pkg2} + rm prj-cfg1/pkg2/pkg2/obje{pkg2} + rm prj-cfg1/pkg2/fsdir{pkg2/} EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ + deinitializing package pkg1 + deinitializing package pkg2 synchronizing: - drop prj + drop pkg1 drop libprj + drop pkg2 EOE } diff --git a/tests/test.test b/tests/test.test index 673927b..a2ed771 100644 --- a/tests/test.test +++ b/tests/test.test @@ -2,19 +2,20 @@ # copyright : Copyright (c) 2014-2017 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file -.include common.test project.test +.include common.test +cxx = cc "config.cxx=$config.cxx" + +new += 2>! init += cc "config.cxx=$config.cxx" -d prj 2>! deinit += -d prj -: project +: single-pkg-cfg : { - $clone_prj; - - $init -C @cfg &prj-cfg/***; + $new -C @cfg prj $cxx &prj/*** &prj-cfg/***; - $* 2>>/EOE; + $* -d prj 2>>/EOE; mkdir prj-cfg/prj/fsdir{prj/} c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/ ld prj-cfg/prj/prj/exe{prj} @@ -27,3 +28,92 @@ deinit += -d prj drop prj EOE } + +: multi-pkg-cfg +: +: Here we will also test recursively. +: +{ + $new -t empty prj &prj/***; + + $new --package pkg1 -d prj; + $new --package pkg2 -d prj; + + $init -C @cfg1 &prj-cfg1/***; + $init -C @cfg2 &prj-cfg2/***; + + $new -t lib libprj &libprj/***; + + cat <<EOI >+prj/repositories.manifest; + : + role: prerequisite + location: ../libprj + type: dir + EOI + + cat <<EOI >+prj/pkg1/manifest; + depends: libprj + EOI + + sed -i -e 's/^(#import .+)$/import libs += libprj%lib{prj}/' \ + prj/pkg1/pkg1/buildfile; + + cat <<EOI >=prj/pkg1/pkg1/pkg1.cxx; + #include <iostream> + + #include <libprj/prj.hxx> + + using namespace std; + + int main (int argc, char* argv[]) + { + if (argc < 2) + { + cerr << "error: missing name" << endl; + return 1; + } + + prj::say_hello (cout, argv[1]); + } + EOI + + cat <<EOI >+prj/pkg2/manifest; + tags: c++ + EOI + + $* -d prj/pkg2 2>>/~"%EOE%"; # Default (cfg1). + fetching dir:$~/libprj \(prerequisite of dir:$~/prj\) + synchronizing: + % new libprj.+ \\\(required by pkg1\\\)% + % upgrade pkg1.+19700101000000#1% + % upgrade pkg2.+19700101000000#1% + mkdir prj-cfg1/pkg2/fsdir{pkg2/} + c++ prj/pkg2/pkg2/cxx{pkg2}@prj-cfg1/pkg2/pkg2/ + ld prj-cfg1/pkg2/pkg2/exe{pkg2} + test prj/pkg2/pkg2/test{testscript}@prj-cfg1/pkg2/pkg2/ prj-cfg1/pkg2/pkg2/exe{pkg2} + EOE + + $* @cfg2 -d prj/pkg2 2>>/~"%EOE%"; # By name (cfg2). + fetching dir:$~/libprj \(prerequisite of dir:$~/prj\) + synchronizing: + % new libprj.+ \\\(required by pkg1\\\)% + % upgrade pkg1.+19700101000000#1% + % upgrade pkg2.+19700101000000#1% + mkdir prj-cfg2/pkg2/fsdir{pkg2/} + c++ prj/pkg2/pkg2/cxx{pkg2}@prj-cfg2/pkg2/pkg2/ + ld prj-cfg2/pkg2/pkg2/exe{pkg2} + test prj/pkg2/pkg2/test{testscript}@prj-cfg2/pkg2/pkg2/ prj-cfg2/pkg2/pkg2/exe{pkg2} + EOE + + $* -a --recursive -d prj/pkg1 2>>/~%EOE% # All configs recursive. + in configuration @cfg1: + %mkdir prj-cfg1/.+%{3} + %.{7} + %test prj.+%{2} + + in configuration @cfg2: + %mkdir prj-cfg2/.+%{3} + %.{7} + %test prj.+%{2} + EOE +} diff --git a/tests/update.test b/tests/update.test index 23055c6..3e8e5f5 100644 --- a/tests/update.test +++ b/tests/update.test @@ -5,26 +5,26 @@ # Here we test both update and clean commands. # -.include common.test project.test +.include common.test -init += cc "config.cxx=$config.cxx" -d prj 2>! +cxx = cc "config.cxx=$config.cxx" + +new += 2>! +init += $cxx -d prj 2>! deinit += -d prj -clean += -d prj -: project +: single-pkg-cfg : { - $clone_prj; - - $init -C @cfg &prj-cfg/***; + $new -C @cfg prj $cxx &prj/*** &prj-cfg/***; - $* 2>>/EOE; + $* -d prj 2>>/EOE; mkdir prj-cfg/prj/fsdir{prj/} c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/ ld prj-cfg/prj/prj/exe{prj} EOE - $clean 2>>/EOE; + $clean -d prj 2>>/EOE; rm prj-cfg/prj/prj/exe{prj} rm prj-cfg/prj/prj/obje{prj} rm prj-cfg/prj/fsdir{prj/} @@ -36,3 +36,80 @@ clean += -d prj drop prj EOE } + +: multi-pkg-cfg +: +{ + $new -t empty prj &prj/***; + + $new --package pkg1 -d prj; + $new --package pkg2 -d prj; + + $init -C @cfg1 &prj-cfg1/***; + $init -C @cfg2 &prj-cfg2/***; + + # Update. + # + $* -d prj/pkg1 2>>/EOE; # Default (cfg1). + mkdir prj-cfg1/pkg1/fsdir{pkg1/} + c++ prj/pkg1/pkg1/cxx{pkg1}@prj-cfg1/pkg1/pkg1/ + ld prj-cfg1/pkg1/pkg1/exe{pkg1} + EOE + + $* @cfg2 -d prj/pkg1 2>>/EOE; # By name (cfg2). + mkdir prj-cfg2/pkg1/fsdir{pkg1/} + c++ prj/pkg1/pkg1/cxx{pkg1}@prj-cfg2/pkg1/pkg1/ + ld prj-cfg2/pkg1/pkg1/exe{pkg1} + EOE + + $* --all -d prj 2>>/EOE; # All configs (and packages). + in configuration @cfg1: + mkdir prj-cfg1/pkg2/fsdir{pkg2/} + c++ prj/pkg2/pkg2/cxx{pkg2}@prj-cfg1/pkg2/pkg2/ + ld prj-cfg1/pkg2/pkg2/exe{pkg2} + info: prj-cfg1/dir{pkg1/} is up to date + + in configuration @cfg2: + mkdir prj-cfg2/pkg2/fsdir{pkg2/} + c++ prj/pkg2/pkg2/cxx{pkg2}@prj-cfg2/pkg2/pkg2/ + ld prj-cfg2/pkg2/pkg2/exe{pkg2} + info: prj-cfg2/dir{pkg1/} is up to date + EOE + + # Clean. + # + $clean -d prj/pkg1 2>>/EOE; # Default (cfg1). + rm prj-cfg1/pkg1/pkg1/exe{pkg1} + rm prj-cfg1/pkg1/pkg1/obje{pkg1} + rm prj-cfg1/pkg1/fsdir{pkg1/} + EOE + + $clean @cfg2 -d prj/pkg1 2>>/EOE; # By name (cfg2). + rm prj-cfg2/pkg1/pkg1/exe{pkg1} + rm prj-cfg2/pkg1/pkg1/obje{pkg1} + rm prj-cfg2/pkg1/fsdir{pkg1/} + EOE + + $clean --all -d prj 2>>/EOE; # All configs (and packages). + in configuration @cfg1: + rm prj-cfg1/pkg2/pkg2/exe{pkg2} + rm prj-cfg1/pkg2/pkg2/obje{pkg2} + rm prj-cfg1/pkg2/fsdir{pkg2/} + info: prj-cfg1/dir{pkg1/} is clean + + in configuration @cfg2: + rm prj-cfg2/pkg2/pkg2/exe{pkg2} + rm prj-cfg2/pkg2/pkg2/obje{pkg2} + rm prj-cfg2/pkg2/fsdir{pkg2/} + info: prj-cfg2/dir{pkg1/} is clean + EOE + + $deinit 2>>/"EOE" + deinitializing in project $~/prj/ + deinitializing package pkg1 + deinitializing package pkg2 + synchronizing: + drop pkg1 + drop pkg2 + EOE +} |