summaryrefslogtreecommitdiff
path: root/intro
diff options
context:
space:
mode:
Diffstat (limited to 'intro')
-rwxr-xr-xintro242
1 files changed, 242 insertions, 0 deletions
diff --git a/intro b/intro
new file mode 100755
index 0000000..85d038c
--- /dev/null
+++ b/intro
@@ -0,0 +1,242 @@
+#! /usr/bin/env bash
+
+# Test examples from the into.
+#
+# Usage: install [options] <hello-repo>
+#
+# -t <toolchain>
+# Specify the build2 toolchain install/stage directory. The script will
+# use <toolchain>/bin/b and <toolchain>/bin/bpkd instead of just b and
+# bpkg.
+#
+# -c1
+# -c2
+# -c3
+# C++ compilers 1 (g++-5), 2 (clang++-3.6), and 3 prefix
+# (x86_64-w64-mingw32). If the value for 2 or 2 is empty, then this test
+# is skipped.
+#
+# -h
+# The hello2 source directory, by default hello/hello2
+#
+# For example:
+#
+# intro https://pkg.cppget.org/1/hello
+# intro /var/bpkg/1/hello
+#
+usage="usage: $0 [options] <hello-repo>"
+
+owd=`pwd`
+trap "{ cd $owd; exit 1; }" ERR
+set -o errtrace # Trap in functions.
+
+function error () { echo "$*" 1>&2; exit 1; }
+
+tmp=/tmp
+rep=
+toolchain=
+hello2=hello/hello2
+
+c1=g++-5
+c2=clang++-3.6
+c3=x86_64-w64-mingw32
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -t)
+ shift
+ toolchain=${1%/}
+ shift
+ ;;
+ -c1)
+ shift
+ c1=$1
+ shift
+ ;;
+ -c2)
+ shift
+ c2=$1
+ shift
+ ;;
+ -c3)
+ shift
+ c3=$1
+ shift
+ ;;
+ -h)
+ shift
+ hello2=${1%/}
+ shift
+ ;;
+ *)
+ rep=${1%/}
+ break
+ ;;
+ esac
+done
+
+if [ -z "$rep" ]; then
+ error "$usage"
+fi
+
+if [[ $hello2 != /* ]]; then
+ hello2=$owd/$hello2
+fi
+
+if [ ! -d "$hello2" ]; then
+ error "hello2 directory $hello2 does not exist"
+fi
+
+if [ -n "$toolchain" ]; then
+ export PATH="$toolchain/bin:$PATH"
+
+ if [ "`which b`" != "$toolchain/bin/b" ]; then
+ error "b does not appear to be in $toolchain/bin/"
+ fi
+
+ if [ "`which bpkg`" != "$toolchain/bin/bpkg" ]; then
+ error "bpkg does not appear to be in $toolchain/bin/"
+ fi
+fi
+
+if [ -z "`which tree`" ]; then
+ tree="ls -1"
+else
+ tree=tree
+fi
+
+function create () # <dir> <bpkg-args>
+{
+ local d=$1; shift
+
+ rm -rf $tmp/$d
+ mkdir $tmp/$d
+ cd $tmp/$d
+ bpkg create $*
+}
+
+function info () # stable|testing
+{
+ local d=$1; shift
+ bpkg rep-info $rep/$d
+}
+
+function add () # stable|testing
+{
+ local d=$1; shift
+ bpkg add $rep/$d
+}
+
+function fetch ()
+{
+ bpkg fetch
+}
+
+function build () # <bpkg-args>
+{
+ bpkg build -y $*
+}
+
+function drop () # <bpkg-args>
+{
+ bpkg drop -y $*
+}
+
+function status () # <pkg> <expected>
+{
+ local s=`bpkg status $1`
+ echo "$s"
+
+ if [ "$s" != "$2" ]; then
+ error "status $1: '"$s"', expected: '"$2"'"
+ fi
+}
+
+function update () # <bpk>
+{
+ bpkg update $*
+}
+
+function test () # <bpk>
+{
+ bpkg test $*
+}
+
+create hello-gcc5-release cxx config.cxx=$c1 config.cxx.coptions=-O3
+info stable
+add stable
+fetch
+build hello
+drop hello
+build -v hello
+status libhello "configured 1.0.0+1"
+status hello "configured 1.0.0 hold_package"
+drop hello
+status hello "available 1.0.0"
+status libfoobar "unknown"
+
+build hello
+add testing
+fetch
+build hello
+build libhello
+update hello
+build libhello/1.0.0 hello
+
+test libhello hello
+ls -1F
+ls -1F hello-1.0.0/
+hello-1.0.0/hello || true
+hello-1.0.0/hello World
+
+bpkg install config.install.root=/opt/hello config.install.root.sudo=sudo hello
+$tree -F /opt/hello/
+/opt/hello/bin/hello World
+sudo rm -rf /opt/hello
+
+cd $hello2
+b config.cxx=$c1 config.import.libhello=$tmp/hello-gcc5-release
+$tree -F
+./hello
+b config.cxx=$c1 config.import.libhello=$tmp/hello-gcc5-release clean # Extra.
+
+cd $tmp
+rm -rf hello2-gcc5-release
+mkdir hello2-gcc5-release
+b config.cxx=$c1 config.cxx.coptions=-O3 \
+config.import.libhello=$tmp/hello-gcc5-release \
+"configure($hello2/@hello2-gcc5-release/)"
+b hello2-gcc5-release/
+cd hello2-gcc5-release/
+b
+b clean
+b -v
+
+cd $tmp
+b "configure($hello2/@$tmp/hello-gcc5-release/hello2/)"
+b $tmp/hello-gcc5-release/hello2/
+b "{clean disfigure}($tmp/hello-gcc5-release/hello2/)"
+
+build -d $tmp/hello-gcc5-release $hello2/
+build -d $tmp/hello-gcc5-release libhello
+update -d $tmp/hello-gcc5-release hello2
+$tmp/hello-gcc5-release/hello2-1.0.0/hello
+
+if [ -n "$c2" ]; then
+ create hello-clang36-release cxx config.cxx=$c2 config.cxx.coptions=-O3
+ add testing
+ fetch
+ build libhello/1.0.0 $hello2/
+fi
+
+if [ -n "$c3" ]; then
+ create hello-mingw32 cxx \
+ config.cxx=$c3-g++ \
+ config.bin.ar=$c3-ar \
+ config.bin.lib=static config.cxx.loptions=-static
+ add stable
+ fetch
+ build hello
+ export WINEDEBUG=fixme-all
+ wine hello-1.0.0/hello.exe Windows
+fi