| #!/bin/sh |
| # Copyright (c) 2017 Petr Vorel <pvorel@suse.cz> |
| # Script for travis builds. |
| # |
| # TODO: Implement comparison of installed files. List of installed files can |
| # be used only for local builds as Travis currently doesn't support sharing |
| # file between jobs, see |
| # https://github.com/travis-ci/travis-ci/issues/6054 |
| |
| set -e |
| |
| DEFAULT_PREFIX="$HOME/ltp-install" |
| DEFAULT_BUILD="native" |
| DEFAULT_TREE="in" |
| CONFIGURE_OPTS_IN_TREE="--with-open-posix-testsuite --with-realtime-testsuite" |
| # TODO: open posix testsuite is currently broken in out-tree-build. Enable it once it's fixed. |
| CONFIGURE_OPTS_OUT_TREE="--with-realtime-testsuite" |
| MAKE_OPTS="-j$(getconf _NPROCESSORS_ONLN)" |
| CC= |
| |
| build_32() |
| { |
| echo "===== 32-bit ${1}-tree build into $PREFIX =====" |
| build $1 CFLAGS="-m32" CXXFLAGS="-m32" LDFLAGS="-m32" |
| } |
| |
| build_native() |
| { |
| echo "===== native ${1}-tree build into $PREFIX =====" |
| build $1 |
| } |
| |
| build_cross() |
| { |
| local host="${CC%-gcc}" |
| [ -n "$host" ] || \ |
| { echo "Missing CC variable, pass it with -c option." >&2; exit 1; } |
| |
| echo "===== cross-compile ${host} ${1}-tree build into $PREFIX =====" |
| build $1 "--host=$host" CROSS_COMPILE="${host}-" |
| } |
| |
| build() |
| { |
| local tree="$1" |
| shift |
| |
| echo "=== autotools ===" |
| make autotools |
| |
| if [ "$tree" = "in" ]; then |
| build_in_tree $@ |
| else |
| build_out_tree $@ |
| fi |
| } |
| |
| build_out_tree() |
| { |
| local tree="$PWD" |
| local build="$tree/../ltp-build" |
| local make_opts="$MAKE_OPTS -C $build -f $tree/Makefile top_srcdir=$tree top_builddir=$build" |
| |
| mkdir -p $build |
| cd $build |
| run_configure $tree/configure $CONFIGURE_OPTS_OUT_TREE CC="$CC" $@ |
| |
| echo "=== build ===" |
| make $make_opts |
| |
| echo "=== install ===" |
| make $make_opts DESTDIR="$PREFIX" SKIP_IDCHECK=1 install |
| } |
| |
| build_in_tree() |
| { |
| run_configure ./configure $CONFIGURE_OPTS_IN_TREE CC="$CC" --prefix=$PREFIX $@ |
| |
| echo "=== build ===" |
| make $MAKE_OPTS |
| |
| echo "=== install ===" |
| make $MAKE_OPTS install |
| } |
| |
| run_configure() |
| { |
| local configure=$1 |
| shift |
| |
| echo "=== configure $configure $@ ===" |
| if ! $configure $@; then |
| echo "== ERROR: configure failed, config.log ==" |
| cat config.log |
| exit 1 |
| fi |
| |
| echo "== include/config.h ==" |
| cat include/config.h |
| } |
| |
| usage() |
| { |
| cat << EOF |
| Usage: |
| $0 [ -c CC ] [ -o TREE ] [ -p DIR ] [ -t TYPE ] |
| $0 -h |
| |
| Options: |
| -h Print this help |
| -c CC Define compiler (\$CC variable) |
| -o TREE Specify build tree, default: $DEFAULT_TREE |
| -p DIR Change installation directory. For in-tree build is this value passed |
| to --prefix option of configure script. For out-of-tree build is this |
| value passed to DESTDIR variable (i.e. sysroot) of make install |
| target, which means that LTP will be actually installed into |
| DIR/PREFIX (i.e. DIR/opt/ltp). |
| Default for in-tree build: '$DEFAULT_PREFIX' |
| Default for out-of-tree build: '$DEFAULT_PREFIX/opt/ltp' |
| -t TYPE Specify build type, default: $DEFAULT_BUILD |
| |
| BUILD TREE: |
| in in-tree build |
| out out-of-tree build |
| |
| BUILD TYPES: |
| 32 32-bit in-tree build |
| cross cross-compile in-tree build (requires set compiler via -c switch) |
| native native in-tree build |
| EOF |
| } |
| |
| PREFIX="$DEFAULT_PREFIX" |
| build="$DEFAULT_BUILD" |
| tree="$DEFAULT_TREE" |
| |
| while getopts "c:ho:p:t:" opt; do |
| case "$opt" in |
| c) CC="$OPTARG";; |
| h) usage; exit 0;; |
| o) case "$OPTARG" in |
| in|out) tree="$OPTARG";; |
| *) echo "Wrong build tree '$OPTARG'" >&2; usage; exit 1;; |
| esac;; |
| p) PREFIX="$OPTARG";; |
| t) case "$OPTARG" in |
| 32|cross|native) build="$OPTARG";; |
| *) echo "Wrong build type '$OPTARG'" >&2; usage; exit 1;; |
| esac;; |
| ?) usage; exit 1;; |
| esac |
| done |
| |
| cd `dirname $0` |
| eval build_$build $tree |