# file : tests/test.testscript # license : MIT; see accompanying LICENSE file .include common.testscript config_cxx = cc config.cxx=$quote($recall($cxx.path) $cxx.mode, true) new += 2>! init += $config_cxx -d prj 2>! deinit += -d prj : single-pkg-cfg : { $new -C @cfg prj $config_cxx &prj/*** &prj-cfg/***; $* -d prj 2>>~%EOE%; %(mkdir|c\+\+|ld|test) .+%{4} EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ synchronizing: 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 <+prj/repositories.manifest; : role: prerequisite location: ../libprj type: dir EOI cat <+prj/pkg1/manifest; depends: libprj EOI sed -i -e 's/^(#import .+)$/import libs += libprj%lib{prj}/' \ prj/pkg1/pkg1/buildfile; cat <=prj/pkg1/pkg1/pkg1.cxx; #include #include 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 <+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|c\\+\\+|ld|test\) .+%{4} 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|c\\+\\+|ld|test\) .+%{4} EOE $* -a --recursive -d prj/pkg1 2>>~%EOE% # All configs recursive. in configuration @cfg1: %(mkdir|version\.in|c\+\+|ld|test) .+%{12} in configuration @cfg2: %(mkdir|version\.in|c\+\+|ld|test) .+%{12} EOE }