# file : tests/init.testscript # copyright : Copyright (c) 2014-2019 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file # Here we test both init and deinit commands. # .include common.testscript project.testscript cxx = cc config.cxx="$recall($cxx.path)" status += -d prj deinit += -d prj : create-cfg : : Here we also test that the configuration variable is properly persisted and : the project is properly built in the source tree. : { $clone_prj; $* -C @cfg $cxx 'config.cc.poptions=-DTEST' 2>>/~"%EOE%" &prj-cfg/***; initializing in project $~/prj/ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized synchronizing: % 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 EOE } : add-cfg : { $clone_prj; # 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%"; initializing in project $~/prj/ added configuration @cfg1 $~/prj-cfg1/ 1 default,forwarded,auto-synchronized synchronizing: % new prj.+19700101000000% EOE $* -A prj-cfg2 @cfg2 2>>/~"%EOE%"; initializing in project $~/prj/ added configuration @cfg2 $~/prj-cfg2/ 2 auto-synchronized synchronizing: % 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 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 -p -r ../prj ./ &prj/***; $* -C @cfg $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/.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 }