# file : tests/init.testscript # license : MIT; see accompanying LICENSE file # Here we test both init and deinit commands. # .include common.testscript project.testscript config_cxx = cc config.cxx=$quote($recall($cxx.path) $cxx.config.mode, true) status += -d prj deinit += -d prj : create-cfg : { +$clone_prj +cat <+prj/manifest depends: libprj EOI : cfg-pkg-args : { $clone_prj; $* -C @cfg $config_cxx 'config.cc.poptions=-DTEST' -- '?sys:libprj/*' 2>>/~"%EOE%" &prj-cfg/***; initializing in project $~/prj/ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized synchronizing: % configure sys:libprj.*% % new prj.+19700101000000% EOE sed -n -e 's/^config.cc.poptions = (.+)$/\1/p' prj-cfg/build/config.build \ >'-DTEST'; $status >'prj configured 0.1.0-a.0.19700101000000'; $build prj/ 2>>~%EOE%; %(mkdir|c\+\+|ld|ln) .+%{4} EOE 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 EOE $build 'clean:' prj/ 2>>~%EOE%; %rm .+%{3} EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ synchronizing: drop prj drop libprj EOE } : cfg-pkg-args-sep : { $clone_prj; $* -C @cfg -- $config_cxx 'config.cc.poptions=-DTEST' -- '?sys:libprj/*' 2>>/~"%EOE%" &prj-cfg/***; initializing in project $~/prj/ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized synchronizing: % configure sys:libprj.*% % new prj.+19700101000000% EOE sed -n -e 's/^config.cc.poptions = (.+)$/\1/p' prj-cfg/build/config.build \ >'-DTEST'; $deinit 2>>/"EOE" deinitializing in project $~/prj/ synchronizing: drop prj drop libprj EOE } : pkg-args : { $clone_prj; # Note that not passing the C++ configuration arguments (see above) for # the sake of testing, we may end up with the 'not built with default C++ # compiler' error. To avoid this, we just make sure this is not a C++ # project. # echo '' >=prj/build/root.build; echo './: prj.cxx' >=prj/prj/buildfile; $* -C @cfg -- -- '?sys:libprj/*' 2>>/~"%EOE%" &prj-cfg/***; initializing in project $~/prj/ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized synchronizing: % configure sys:libprj.*% % new prj.+19700101000000% EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ synchronizing: drop prj drop libprj EOE } } : add-cfg : { $clone_prj; cat <+prj/manifest; depends: libprj EOI # Pre-create configurations. # $new -C prj-cfg1 tmp $config_cxx 2>! &prj-cfg1/*** &tmp/***; $init -C prj-cfg2 -d tmp $config_cxx 2>! &prj-cfg2/***; $* -A @cfg1 '?sys:libprj/*' 2>>/~"%EOE%"; initializing in project $~/prj/ added configuration @cfg1 $~/prj-cfg1/ 1 default,forwarded,auto-synchronized synchronizing: % configure sys:libprj.*% % new prj.+19700101000000% EOE $* -A prj-cfg2 @cfg2 '?sys:libprj/*' 2>>/~"%EOE%"; initializing in project $~/prj/ added configuration @cfg2 $~/prj-cfg2/ 2 auto-synchronized synchronizing: % configure sys:libprj.*% % new prj.+19700101000000% EOE $status --all >>EOO; in configuration @cfg1: prj configured 0.1.0-a.0.19700101000000 in configuration @cfg2: prj configured 0.1.0-a.0.19700101000000 EOO $build prj-cfg1/ 2>>~%EOE%; %(mkdir|c\+\+|ld) .+%{6} EOE $build prj-cfg2/ 2>>~%EOE%; %(mkdir|c\+\+|ld) .+%{6} EOE $build prj/ 2>>~%EOE%; %(ln|info:) .+%{2} EOE $build 'clean:' prj/ 2>>~%EOE%; %rm .+%{3} EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ synchronizing: drop prj drop libprj EOE } : pkg : : Test initializing a package while creating it inside an already existing : project. : { # Create (and build) the executable single-package project. # cp --no-cleanup -pr ../prj ./ &prj/***; $* -C @cfg $config_cxx 2>>/~"%EOE%" &prj-cfg/***; initializing in project $~/prj/ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized synchronizing: % new prj.+19700101000000% EOE $status >'prj configured 0.1.0-a.0.19700101000000'; $build prj/ 2>>~%EOE%; %(mkdir|c\+\+|ld|ln) .+%{4} EOE # Move the executable package into a separate directory. # mkdir --no-cleanup prj/prj.pkg; mv prj/prj prj/build prj/buildfile prj/manifest prj/README.md \ prj/.gitignore prj/prj.pkg/; mv prj/prj.pkg prj/prj; cat <=prj/packages.manifest; : 1 location: prj/ EOI # Add the library package. # $new --package -t lib libprj -d prj 2>>/"EOE"; created new library package libprj in $~/prj/libprj/ EOE $init --all -d prj/libprj 2>>/~"%EOE%"; initializing in project $~/prj/ synchronizing: % upgrade prj.+19700101000000#1% % new libprj.+19700101000000% EOE # Factor out some of the executable package functionality into the library. # cat <+prj/prj/manifest; depends: libprj EOI sed -i -e 's/^(#import .+)$/import libs += libprj%lib{prj}/' \ prj/prj/prj/buildfile; cat <=prj/prj/prj/prj.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 $build prj-cfg/prj/ 2>>/~"%EOE%"; synchronizing $~/prj-cfg/: % upgrade prj.+19700101000000#2% %\(mkdir|version\\.in|c\\+\\+|ld) .+%{7} EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ deinitializing package prj deinitializing package libprj synchronizing: drop prj drop libprj EOE }