# file : tests/init.test # copyright : Copyright (c) 2014-2018 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file # Here we test both init and deinit commands. # .include common.test project.test cxx = cc "config.cxx=$config.cxx" 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 prj-cfg/prj/fsdir{prj/} c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/ ld prj-cfg/prj/prj/exe{prj} ln prj-cfg/prj/prj/exe{prj} -> prj/prj/ 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 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 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 prj-cfg1/.+%{2} %c\+\+ .+%{2} %ld prj-cfg1/.+%{2} EOE $build prj-cfg2/ 2>>/~%EOE%; %mkdir prj-cfg2/.+%{2} %c\+\+ .+%{2} %ld prj-cfg2/.+%{2} EOE $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: 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 prj-cfg/prj/fsdir{prj/} c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/ ld prj-cfg/prj/prj/exe{prj} ln prj-cfg/prj/prj/exe{prj} -> prj/prj/ EOE # Move the executable package into a separate directory. # mkdir --no-cleanup prj/prj.pkg; # @@ Shouldn't we add mv builtin? # fs = prj/prj/ prj/build/ prj/buildfile prj/manifest prj/.gitignore; cp --no-cleanup -p -r $fs prj/prj.pkg/; rm -r $fs; cp --no-cleanup -p -r prj/prj.pkg/ prj/prj; rm -r prj/prj.pkg/; 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 prj-cfg/.+%{2} %.{3} %ld prj-cfg/.+%{2} EOE $deinit 2>>/"EOE" deinitializing in project $~/prj/ deinitializing package prj deinitializing package libprj synchronizing: drop prj drop libprj EOE }