+ bdep new -t exe -l c++ hello
created new executable project hello in /tmp/hello/

+ tree hello
hello
├── build
│   ├── bootstrap.build
│   └── root.build
├── buildfile
├── hello
│   ├── buildfile
│   ├── hello.cxx
│   └── testscript
├── manifest
└── repositories.manifest

2 directories, 8 files

+ cd hello

+ cat hello/hello.cxx
#include <iostream>

using namespace std;

int main (int argc, char* argv[])
{
  if (argc < 2)
  {
    cerr << "error: missing name" << endl;
    return 1;
  }

  cout << "Hello, " << argv[1] << '!' << endl;
}

+ cat hello/buildfile
libs =
#import libs += libhello%lib{hello}

exe{hello}: {hxx ixx txx cxx}{*} $libs test{testscript}

cxx.poptions =+ "-I$out_root" "-I$src_root"

+ cat hello/testscript
: basics
:
$* 'World' >'Hello, World!'

: missing-name
:
$* 2>>EOE != 0
error: missing name
EOE

+ cat manifest
: 1
name: hello
version: 0.1.0-a.0.z
summary: hello executable project
license: proprietary
url: https://example.org/hello
email: you@example.org
depends: * build2 >= 0.7.0-
depends: * bpkg >= 0.7.0-
#depends: libhello ^1.0.0

+ bdep init -C ../hello-gcc @gcc cc config.cxx=g++
initializing project /tmp/hello/
created configuration @gcc /tmp/hello-gcc/ (1, default, forwarded, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ bdep init -C ../hello-clang @clang cc config.cxx=clang++-5.0
initializing project /tmp/hello/
created configuration @clang /tmp/hello-clang/ (2, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ ls -d -1 ../hello ../hello1 ../hello1-gcc ../hello2 ../hello2-gcc ../hello-clang ../hello-gcc ../hello-gcc-1 ../hello.git
../hello
../hello1
../hello1-gcc
../hello2
../hello2-gcc
../hello-clang
../hello-gcc
../hello-gcc-1
../hello.git

+ bdep init -C ../hello-vc-debug @debug cc config.cxx=cl-15 config.cc.coptions=/MDd /Z7 config.cc.loptions=/DEBUG
initializing project /tmp/hello/
created configuration @debug /tmp/hello-vc-debug/ (3, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ bdep init -C ../hello-vc-release @release cc config.cxx=cl-15 config.cc.coptions=/O2
initializing project /tmp/hello/
created configuration @release /tmp/hello-vc-release/ (4, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ bdep status
hello configured 0.1.0-a.0.19700101000000

+ b
mkdir ../hello-gcc/hello/fsdir{hello/}
c++ hello/cxx{hello}@../hello-gcc/hello/hello/
ld ../hello-gcc/hello/hello/exe{hello}
ln ../hello-gcc/hello/hello/exe{hello} -> hello/

+ b test
test hello/test{testscript}@../hello-gcc/hello/hello/ ../hello-gcc/hello/hello/exe{hello}

+ hello/hello World
Hello, World!

+ bdep status @clang
hello configured 0.1.0-a.0.19700101000000

+ b ../hello-clang/hello/
mkdir ../hello-clang/hello/fsdir{hello/}
c++ hello/cxx{hello}@../hello-clang/hello/hello/
ld ../hello-clang/hello/hello/exe{hello}

+ b test: ../hello-clang/hello/
test hello/test{testscript}@../hello-clang/hello/hello/ ../hello-clang/hello/hello/exe{hello}

+ ../hello-clang/hello/hello/hello World
Hello, World!
rm ../hello-clang/hello/hello/exe{hello}
rm ../hello-clang/hello/hello/obje{hello}
rm ../hello-clang/hello/fsdir{hello/}

+ bdep test @clang
mkdir ../hello-clang/hello/fsdir{hello/}
c++ hello/cxx{hello}@../hello-clang/hello/hello/
ld ../hello-clang/hello/hello/exe{hello}
test hello/test{testscript}@../hello-clang/hello/hello/ ../hello-clang/hello/hello/exe{hello}

+ bdep test @gcc @clang
in configuration @gcc:
test hello/test{testscript}@../hello-gcc/hello/hello/ ../hello-gcc/hello/hello/exe{hello}

in configuration @clang:
test hello/test{testscript}@../hello-clang/hello/hello/ ../hello-clang/hello/hello/exe{hello}

+ bdep init -C ../hello-mingw @mingw cc config.cxx=x86_64-w64-mingw32-g++
initializing project /tmp/hello/
created configuration @mingw /tmp/hello-mingw/ (5, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ bdep update @mingw
mkdir ../hello-mingw/hello/fsdir{hello/}
c++ hello/cxx{hello}@../hello-mingw/hello/hello/
ld ../hello-mingw/hello/hello/exe{hello}

+ bdep test @mingw
test hello/test{testscript}@../hello-mingw/hello/hello/ ../hello-mingw/hello/hello/exe{hello}

+ ../hello-mingw/hello/hello/hello.exe Windows
Hello, Windows!

+ bdep new -C hello-gcc @gcc -t exe -l c++ hello cc config.cxx=g++
created new executable project hello in /tmp/hello/
created configuration @gcc /tmp/hello-gcc/ (1, default, forwarded, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ bdep init -C ../hello-clang @clang cc config.cxx=clang++-5.0
initializing project /tmp/hello/
created configuration @clang /tmp/hello-clang/ (2, auto-synchronized)
synchronizing:
  new hello/0.1.0-a.0.19700101000000

+ bpkg rep-info https://git.build2.org/hello/libhello.git
querying https://git.build2.org/hello/libhello.git
fetching from https://git.build2.org/hello/libhello.git
git:build2.org/hello/libhello https://git.build2.org/hello/libhello.git
prerequisite git:build2.org/hello/libprint##HEAD https://git.build2.org/hello/libprint.git##HEAD
prerequisite git:build2.org/hello/libformat##HEAD https://git.build2.org/hello/libformat.git##HEAD

libhello/1.0.0
libmhello/1.0.0
libhello/1.1.0
libmhello/1.1.0

+ bpkg rep-info https://git.build2.org/hello/libhello.git#HEAD
querying https://git.build2.org/hello/libhello.git
fetching from https://git.build2.org/hello/libhello.git
git:build2.org/hello/libhello#HEAD https://git.build2.org/hello/libhello.git#HEAD
prerequisite git:build2.org/hello/libprint##HEAD https://git.build2.org/hello/libprint.git##HEAD
prerequisite git:build2.org/hello/libformat##HEAD https://git.build2.org/hello/libformat.git##HEAD

libhello/1.1.0
libmhello/1.1.0

+ bdep status
fetching pkg:stage.build2.org (prerequisite of dir:/tmp/hello)
warning: authenticity of the certificate for repository pkg:stage.build2.org cannot be established
certificate is for **stage.build2.org, "Code Synthesis" <stage-admin@build2.org>
certificate SHA256 fingerprint:
37:CE:2C:A5:1D:CF:93:81:D7:07:46:AD:66:B3:C3:90:83:B8:96:9E:34:F0:E7:B3:A2:B0:6C:EF:66:A4:BE:65
trust this certificate? [y/n] hello configured 0.1.0-a.0.19700101000000 available 0.1.0-a.0.19700101000000#1

+ bdep sync
synchronizing:
  new libhello/1.0.0 (required by hello)
  upgrade hello/0.1.0-a.0.19700101000000#1

     0K ...                                                   100% 94.3M=0s
+ b
synchronizing /tmp/hello-gcc/:
  upgrade hello/0.1.0-a.0.19700101000000#2
mkdir ../hello-gcc/hello/fsdir{hello/}
ver ../hello-gcc/libhello-1.0.0/libhello/version.hxx.in
c++ ../hello-gcc/libhello-1.0.0/libhello/cxx{hello}
c++ hello/cxx{hello}@../hello-gcc/hello/hello/
ld ../hello-gcc/libhello-1.0.0/libhello/libs{hello}
ld ../hello-gcc/hello/hello/exe{hello}
ln ../hello-gcc/hello/hello/exe{hello} -> hello/

+ bdep status -ai
in configuration @gcc:
hello configured 0.1.0-a.0.19700101000000#2
  libhello ^1.0.0 configured 1.0.0

in configuration @clang:
fetching pkg:stage.build2.org (prerequisite of dir:/tmp/hello)
hello configured 0.1.0-a.0.19700101000000 available 0.1.0-a.0.19700101000000#1

+ bdep sync -a
in configuration @gcc:

in configuration @clang:
synchronizing:
  new libhello/1.0.0 (required by hello)
  upgrade hello/0.1.0-a.0.19700101000000#1

     0K ...                                                   100% 98.9M=0s
+ bdep test -ai
in configuration @gcc:
c++ ../hello-gcc/libhello-1.0.0/tests/basics/cxx{driver}
ld ../hello-gcc/libhello-1.0.0/tests/basics/exe{driver}
test hello/test{testscript}@../hello-gcc/hello/hello/ ../hello-gcc/hello/hello/exe{hello}
test ../hello-gcc/libhello-1.0.0/tests/basics/exe{driver}

in configuration @clang:
mkdir ../hello-clang/hello/fsdir{hello/}
ver ../hello-clang/libhello-1.0.0/libhello/version.hxx.in
c++ ../hello-clang/libhello-1.0.0/tests/basics/cxx{driver}
c++ ../hello-clang/libhello-1.0.0/libhello/cxx{hello}
c++ hello/cxx{hello}@../hello-clang/hello/hello/
ld ../hello-clang/libhello-1.0.0/libhello/libs{hello}
ld ../hello-clang/libhello-1.0.0/tests/basics/exe{driver}
ld ../hello-clang/hello/hello/exe{hello}
test hello/test{testscript}@../hello-clang/hello/hello/ ../hello-clang/hello/hello/exe{hello}
test ../hello-clang/libhello-1.0.0/tests/basics/exe{driver}

+ bdep status
hello configured 0.1.0-a.0.19700101000000#2 available 0.1.0-a.0.19700101000000#3

+ bdep sync
synchronizing:
  drop libhello/1.0.0 (unused)
  upgrade hello/0.1.0-a.0.19700101000000#3
synchronizing:
  new libhello/1.0.0 (required by hello)
  upgrade hello/0.1.0-a.0.19700101000000#4

     0K ...                                                   100% 95.9M=0s
+ bdep fetch
fetching git:build2.org/hello/libhello (prerequisite of dir:/tmp/hello)
querying https://git.build2.org/hello/libhello.git
fetching from https://git.build2.org/hello/libhello.git
fetching git:build2.org/hello/libformat##HEAD (prerequisite of git:build2.org/hello/libhello)
querying https://git.build2.org/hello/libformat.git
fetching from https://git.build2.org/hello/libformat.git
fetching git:build2.org/hello/libprint##HEAD (prerequisite of git:build2.org/hello/libhello)
querying https://git.build2.org/hello/libprint.git
fetching from https://git.build2.org/hello/libprint.git
fetching pkg:stage.build2.org (prerequisite of dir:/tmp/hello)

+ bdep status libhello
libhello configured 1.0.0 available [1.1.0]

+ bdep sync libhello
synchronizing:
  new libformat/1.0.0 (required by libhello)
  new libprint/1.0.0 (required by libhello)
  upgrade libhello/1.1.0
  reconfigure hello/0.1.0-a.0.19700101000000#4
distributing libformat/1.0.0
distributing libprint/1.0.0
distributing libhello/1.1.0

+ bdep status -r
hello configured 0.1.0-a.0.19700101000000#4
  libhello ^1.0.0 configured 1.1.0
    libformat ^1.0.0 configured 1.0.0
    libprint ^1.0.0 configured 1.0.0

+ bdep status -o libhello
libhello configured 1.1.0 available (1.1.0) [1.0.0]

+ bdep sync libhello/1.0.0
synchronizing:
  drop libprint/1.0.0 (unused)
  drop libformat/1.0.0 (unused)
  downgrade libhello/1.0.0
  reconfigure hello/0.1.0-a.0.19700101000000#4
distributing libhello/1.0.0

+ bdep new -C libextra-gcc -t lib -l c++ libextra cc config.cxx=g++
created new library project libextra in /tmp/libextra/
created configuration /tmp/libextra-gcc/ (1, default, forwarded, auto-synchronized)
synchronizing:
  new libextra/0.1.0-a.0.19700101000000

+ b install: libextra/ config.install.root=/tmp/unpkg-gcc
mkdir libextra-gcc/libextra/fsdir{libextra/}
ver libextra/libextra/version.hxx.in
c++ libextra/libextra/cxx{extra}@libextra-gcc/libextra/libextra/
c++ libextra/libextra/cxx{extra}@libextra-gcc/libextra/libextra/
ld libextra-gcc/libextra/libextra/liba{extra}
ld libextra-gcc/libextra/libextra/libs{extra}
install unpkg-gcc/
install unpkg-gcc/include/
install unpkg-gcc/include/libextra/
install libextra/libextra/hxx{export}@libextra-gcc/libextra/libextra/
install libextra/libextra/hxx{extra}@libextra-gcc/libextra/libextra/
install libextra-gcc/libextra/libextra/hxx{version}
install libextra-gcc/libextra/libextra/liba{extra}
install libextra-gcc/libextra/libextra/libs{extra}

+ tree unpkg-gcc
unpkg-gcc
├── include
│   └── libextra
│       ├── export.hxx
│       ├── extra.hxx
│       └── version.hxx
└── lib
    ├── libextra-0.1.0-a.0.19700101000000.so
    ├── libextra.a
    ├── libextra.so -> libextra-0.1.0-a.0.19700101000000.so
    └── pkgconfig
        ├── libextra.shared.pc
        └── libextra.static.pc

4 directories, 8 files

+ bdep init -C ../hello-gcc-1 @gcc1 cc config.cxx=g++ config.cc.poptions=-I/tmp/unpkg-gcc/include config.cc.loptions=-L/tmp/unpkg-gcc/lib
initializing project /tmp/hello/
created configuration @gcc1 /tmp/hello-gcc-1/ (3, auto-synchronized)
fetching git:build2.org/hello/libhello (prerequisite of dir:/tmp/hello)
querying https://git.build2.org/hello/libhello.git
fetching from https://git.build2.org/hello/libhello.git
fetching git:build2.org/hello/libformat##HEAD (prerequisite of git:build2.org/hello/libhello)
querying https://git.build2.org/hello/libformat.git
fetching from https://git.build2.org/hello/libformat.git
fetching git:build2.org/hello/libprint##HEAD (prerequisite of git:build2.org/hello/libhello)
querying https://git.build2.org/hello/libprint.git
fetching from https://git.build2.org/hello/libprint.git
fetching pkg:stage.build2.org (prerequisite of dir:/tmp/hello)
synchronizing:
  new libformat/1.0.0 (required by libhello)
  new libprint/1.0.0 (required by libhello)
  new libhello/1.1.0 (required by hello)
  new hello/0.1.0-a.0.19700101000000
distributing libformat/1.0.0
distributing libprint/1.0.0
distributing libhello/1.1.0

+ b test: ../hello-gcc-1/
mkdir ../hello-gcc-1/hello/fsdir{hello/}
ver ../hello-gcc-1/libhello-1.1.0/libhello/version.hxx.in
ver ../hello-gcc-1/libformat-1.0.0/libformat/version.hxx.in
ver ../hello-gcc-1/libprint-1.0.0/libprint/version.hxx.in
c++ ../hello-gcc-1/libprint-1.0.0/tests/basics/cxx{driver}
c++ ../hello-gcc-1/libformat-1.0.0/tests/basics/cxx{driver}
c++ ../hello-gcc-1/libprint-1.0.0/libprint/cxx{print}
c++ ../hello-gcc-1/libhello-1.1.0/libhello/cxx{hello}
c++ ../hello-gcc-1/libformat-1.0.0/libformat/cxx{format}
c++ ../hello-gcc-1/libhello-1.1.0/tests/basics/cxx{driver}
c++ hello/cxx{hello}@../hello-gcc-1/hello/hello/
ld ../hello-gcc-1/libprint-1.0.0/libprint/libs{print}
ld ../hello-gcc-1/libprint-1.0.0/tests/basics/exe{driver}
ld ../hello-gcc-1/libformat-1.0.0/libformat/libs{format}
ld ../hello-gcc-1/libformat-1.0.0/tests/basics/exe{driver}
ld ../hello-gcc-1/libhello-1.1.0/libhello/libs{hello}
ld ../hello-gcc-1/libhello-1.1.0/tests/basics/exe{driver}
ld ../hello-gcc-1/hello/hello/exe{hello}
test hello/test{testscript}@../hello-gcc-1/hello/hello/ ../hello-gcc-1/hello/hello/exe{hello}
test ../hello-gcc-1/libprint-1.0.0/tests/basics/exe{driver}
test ../hello-gcc-1/libformat-1.0.0/tests/basics/exe{driver}
test ../hello-gcc-1/libhello-1.1.0/tests/basics/exe{driver}

+ b configure: ../hello-gcc/ config.cc.poptions+=-I/tmp/unpkg-gcc/include config.cc.loptions+=-L/tmp/unpkg-gcc/lib
save ../hello-gcc/build/config.build
save ../hello-gcc/hello/build/config.build
save ../hello-gcc/libhello-1.0.0/build/config.build
save ../hello-gcc/libhello-1.0.0/tests/build/config.build

+ b test
c++ ../hello-gcc/libhello-1.0.0/libhello/cxx{hello}
c++ hello/cxx{hello}@../hello-gcc/hello/hello/
ld ../hello-gcc/libhello-1.0.0/libhello/libs{hello}
ld ../hello-gcc/hello/hello/exe{hello}
ln ../hello-gcc/hello/hello/exe{hello} -> hello/
test hello/test{testscript}@../hello-gcc/hello/hello/ ../hello-gcc/hello/hello/exe{hello}

+ bdep sync ?sys:libsqlite3
synchronizing:
  configure sys:libsqlite3/*
  upgrade hello/0.1.0-a.0.19700101000000#5
[master (root-commit) 7566fd1] Start hello project
 11 files changed, 118 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 build/.gitignore
 create mode 100644 build/bootstrap.build
 create mode 100644 build/root.build
 create mode 100644 buildfile
 create mode 100644 hello/.gitignore
 create mode 100644 hello/buildfile
 create mode 100644 hello/hello.cxx
 create mode 100644 hello/testscript
 create mode 100644 manifest
 create mode 100644 repositories.manifest

+ bdep status
hello configured 0.1.0-a.0.19700101000000#5 available 0.1.0-a.0.20180512075852.7566fd12c353

+ b info
project: hello
version: 0.1.0-a.0.20180512075852.7566fd12c353
summary: hello executable project
url: https://example.org/hello
src_root: /tmp/hello/
out_root: /tmp/hello-gcc/hello/
amalgamation: ../
subprojects: 

+ bdep sync
synchronizing:
  upgrade hello/0.1.0-a.0.20180512075852.7566fd12c353

+ bdep status
hello configured 0.1.0-a.0.20180512075852.7566fd12c353
[master 13e11b0] Another commit
 1 file changed, 1 insertion(+)

+ bdep status
hello configured 0.1.0-a.0.20180512075852.7566fd12c353 available 0.1.0-a.0.20180512075853.13e11b05aacb

+ bpkg create -d tools cc config.cxx=g++ config.cc.coptions=-O3 config.install.root=/opt/tools config.install.sudo=sudo config.bin.rpath=/opt/tools/lib
created new configuration in /tmp/tools/

+ cd tools

+ bpkg build hello@https://git.build2.org/hello/hello.git
added git:build2.org/hello/hello
fetching git:build2.org/hello/hello
querying https://git.build2.org/hello/hello.git
fetching from https://git.build2.org/hello/hello.git
fetching git:build2.org/hello/libhello (prerequisite of git:build2.org/hello/hello)
querying https://git.build2.org/hello/libhello.git
fetching from https://git.build2.org/hello/libhello.git
fetching git:build2.org/hello/libformat##HEAD (prerequisite of git:build2.org/hello/libhello)
querying https://git.build2.org/hello/libformat.git
fetching from https://git.build2.org/hello/libformat.git
fetching git:build2.org/hello/libprint##HEAD (prerequisite of git:build2.org/hello/libhello)
querying https://git.build2.org/hello/libprint.git
fetching from https://git.build2.org/hello/libprint.git
  new libformat/1.0.0 (required by libhello)
  new libprint/1.0.0 (required by libhello)
  new libhello/1.1.0 (required by hello)
  new hello/1.0.0
continue? [Y/n] distributing libformat/1.0.0
checked out libformat/1.0.0
configured libformat/1.0.0
distributing libprint/1.0.0
checked out libprint/1.0.0
configured libprint/1.0.0
distributing libhello/1.1.0
checked out libhello/1.1.0
configured libhello/1.1.0
distributing hello/1.0.0
checked out hello/1.0.0
configured hello/1.0.0
ver libhello-1.1.0/libhello/version.hxx.in
ver libprint-1.0.0/libprint/version.hxx.in
ver libformat-1.0.0/libformat/version.hxx.in
c++ libhello-1.1.0/libhello/cxx{hello}
c++ libprint-1.0.0/libprint/cxx{print}
c++ libformat-1.0.0/libformat/cxx{format}
c++ hello-1.0.0/hello/cxx{hello}
ld libprint-1.0.0/libprint/libs{print}
ld libformat-1.0.0/libformat/libs{format}
ld libhello-1.1.0/libhello/libs{hello}
ld hello-1.0.0/hello/exe{hello}
updated hello/1.0.0

+ bpkg install hello
ld libhello-1.1.0/libhello/libs{hello}
ld hello-1.0.0/hello/exe{hello}
install /opt/tools/
install /opt/tools/include/
install /opt/tools/include/libhello/
install libhello-1.1.0/libhello/hxx{export}
install libhello-1.1.0/libhello/hxx{hello}
install libhello-1.1.0/libhello/hxx{version}
install /opt/tools/include/libprint/
install libprint-1.0.0/libprint/hxx{print}
install libprint-1.0.0/libprint/hxx{export}
install libprint-1.0.0/libprint/hxx{version}
install libprint-1.0.0/libprint/libs{print}
install /opt/tools/include/libformat/
install libformat-1.0.0/libformat/hxx{export}
install libformat-1.0.0/libformat/hxx{format}
install libformat-1.0.0/libformat/hxx{version}
install libformat-1.0.0/libformat/libs{format}
install libhello-1.1.0/libhello/libs{hello}
install /opt/tools/bin/
install hello-1.0.0/hello/exe{hello}
installed hello/1.0.0

+ /opt/tools/bin/hello World
Hello, World!

+ bpkg uninstall hello
uninstall hello-1.0.0/hello/exe{hello}
uninstall /opt/tools/bin/
uninstall libhello-1.1.0/libhello/libs{hello}
uninstall libformat-1.0.0/libformat/libs{format}
uninstall libformat-1.0.0/libformat/hxx{version}
uninstall libformat-1.0.0/libformat/hxx{format}
uninstall libformat-1.0.0/libformat/hxx{export}
uninstall /opt/tools/include/libformat/
uninstall libprint-1.0.0/libprint/libs{print}
uninstall libprint-1.0.0/libprint/hxx{version}
uninstall libprint-1.0.0/libprint/hxx{export}
uninstall libprint-1.0.0/libprint/hxx{print}
uninstall /opt/tools/include/libprint/
uninstall libhello-1.1.0/libhello/hxx{version}
uninstall libhello-1.1.0/libhello/hxx{hello}
uninstall libhello-1.1.0/libhello/hxx{export}
uninstall /opt/tools/include/libhello/
uninstall /opt/tools/include/
uninstall /opt/tools/
uninstalled hello/1.0.0

+ bpkg drop hello
following dependencies were automatically built but will no longer be used:
  libhello
  libformat
  libprint
drop unused packages? [Y/n]   drop hello
  drop libhello
  drop libformat
  drop libprint
continue? [Y/n] disfigured hello
disfigured libhello
disfigured libformat
disfigured libprint
purged hello
purged libhello
purged libformat
purged libprint