libt2n: (gerd) add lots of error handling code, unit tests for this error handling...
[libt2n] / test-build-install-use
index 66954cc..b45957e 100755 (executable)
@@ -2,63 +2,99 @@
 set -o errexit
 set -o nounset
 
+# where is the source? (todo: we could checkout from svn)
+
+LIBT2NSRC="$PWD"
+LIBT2N_EXAMPLES="$PWD/examples-codegen"
+EXAMPLES=2
+
+# general settings
+
 # todo: safe temp dir creation
 INSTDIR="/tmp/jens-delme"
+BUILDDIR="$INSTDIR/build"
 mkdir "$INSTDIR"
-INSTPREFIX="/tmp/jens-delme/usr"
+mkdir "$BUILDDIR"
+INSTPREFIX="$INSTDIR/usr"
 MAKE="dmake"
-./configure --prefix="$INSTPREFIX"
-# todo: at the moment running make dist on clean source does not work
-$MAKE
-$MAKE distcheck
-#$MAKE dist
-$MAKE install
-
-echo "OK: library and code generator compiled and installed"
+DOCLEAN="true"
 
-VERSION="0.1"
-TARFILE="libt2n-$VERSION.tar.gz"
-cp "$TARFILE" "$INSTDIR"
-EXAMPLE_LIBUSAGE="example-libusage"
-cp -af "$EXAMPLE_LIBUSAGE" "$INSTDIR"
-
-# now build example-client using installed libt2n
-cd "$INSTDIR"
-
-function append() {
+function prepend() {
        if [ "x$1" = "x" ]; then
                echo "$2"
        else
-               echo "$1:$2"
+               echo "$2:$1"
        fi
 }
 
+function build() {
+    # newer autoreconf (autoconf) versions don't have the -M option and no real replacement :-(
+    # (you can only set ACLOCAL_AMFLAGS in the Makefile.am)
+    # todo: this IMHO should be filed as bug against autoconf
+    # ugly workaround
+    autoreconf -f -i $@ || { aclocal --force $(echo "$@"|sed 's,-M,-I,') && libtoolize --copy --force && autoconf --force  && automake --add-missing --copy --force-missing; }
+    ./configure --prefix="$INSTPREFIX"
+    if $DOCLEAN; then
+       $MAKE distclean
+       ./configure --prefix="$INSTPREFIX"
+       $MAKE clean
+       # ensure make clean works twice (did not work at some point)
+       $MAKE clean
 
-# adjust some environment variables
-# (this is needed because we installed in non-standard directories)
+       # todo: at the moment distcheck does not work on a distclean source
+       $MAKE
+       $MAKE clean
+       $MAKE distcheck
+    fi
+
+    $MAKE install
+}
 
+# 1. build and install lib and codegen
+cd "$LIBT2NSRC"
+build
+echo "OK: library and code generator compiled and installed"
+
+# prepare environment to use installed libt2n and code generator in non-standard directory
 # temporarily disable nounset
+
 set +o nounset
-export PATH=$(append "$PATH" "$INSTPREFIX/bin")
-export LD_LIBRARY_PATH=$(append "$LD_LIBRARY_PATH" "$INSTPREFIX/lib")
-export PKG_CONFIG_PATH=$(append "$PKG_CONFIG_PATH" "$INSTPREFIX/lib/pkgconfig")
+export PATH=$(prepend "$PATH" "$INSTPREFIX/bin")
+export LD_LIBRARY_PATH=$(prepend "$LD_LIBRARY_PATH" "$INSTPREFIX/lib")
+export PKG_CONFIG_PATH=$(prepend "$PKG_CONFIG_PATH" "$INSTPREFIX/lib/pkgconfig")
 set -o nounset
 
-tar xzvf "$TARFILE"
-mv "libt2n-$VERSION/example-codegen" .
-cd example-codegen
-autoreconf -f -i -M "$INSTDIR/usr/share/aclocal"
-./configure --prefix="$INSTPREFIX"
-# todo: at the moment running make dist on clean source does not work
-$MAKE
-$MAKE distcheck
-$MAKE install
-cd ..
-echo "OK: example using installed libt2n works"
-
-# now compile client using the installed default lib
-cd "$EXAMPLE_LIBUSAGE"
-autoreconf -f -i -M "$INSTDIR/usr/share/aclocal"
-./configure --prefix="$INSTPREFIX"
-$MAKE distcheck
-echo "OK: example using installed example lib works"
+for EXAMPLE in $(seq 1 $EXAMPLES); do
+
+    # 2. build example
+
+    cp -af "$LIBT2N_EXAMPLES/example$EXAMPLE" "$BUILDDIR"
+    cd "$BUILDDIR/example$EXAMPLE"
+    build -M "$INSTPREFIX/share/aclocal"
+    echo "OK: example $EXAMPLE using installed libt2n works"
+
+    # 3. compile client using the now installed default lib
+    cp -af "$LIBT2N_EXAMPLES/example$EXAMPLE-client" "$BUILDDIR"
+    cd "$BUILDDIR/example$EXAMPLE-client"
+    build -M "$INSTPREFIX/share/aclocal"
+    echo "OK: example $EXAMPLE using installed example lib works"
+
+    # 4. test installed server and client
+    libt2n-example$EXAMPLE-server &
+    SPID="$!"
+    # ugly
+    sleep 1
+    if libt2n-example$EXAMPLE-client; then
+       echo "installed client and server work"
+       RET="0"
+    else
+       echo "installed client and server don't work"
+       RET="1"
+    fi
+    kill "$SPID"
+    if [ "$RET" = "1" ]; then
+       exit 1
+    fi
+done
+
+echo Everything is fine