198 строки
3.8 KiB
Bash
Исполняемый файл
198 строки
3.8 KiB
Bash
Исполняемый файл
#!/bin/bash
|
|
#
|
|
# Last Change: 2008-06-18 14:13:46
|
|
#
|
|
# Script to build libssh on UNIX.
|
|
#
|
|
# Copyright (c) 2006-2007 Andreas Schneider <mail@cynapses.org>
|
|
#
|
|
|
|
SOURCE_DIR=".."
|
|
|
|
LANG=C
|
|
export LANG
|
|
|
|
SCRIPT="$0"
|
|
COUNT=0
|
|
while [ -L "${SCRIPT}" ]
|
|
do
|
|
SCRIPT=$(readlink ${SCRIPT})
|
|
COUNT=$(expr ${COUNT} + 1)
|
|
if [ ${COUNT} -gt 100 ]; then
|
|
echo "Too many symbolic links"
|
|
exit 1
|
|
fi
|
|
done
|
|
BUILDDIR=$(dirname ${SCRIPT})
|
|
|
|
cleanup_and_exit () {
|
|
if test "$1" = 0 -o -z "$1" ; then
|
|
exit 0
|
|
else
|
|
exit $1
|
|
fi
|
|
}
|
|
|
|
function configure() {
|
|
if [ -n "${CMAKEDIR}" ]; then
|
|
${CMAKEDIR}/bin/cmake "$@" ${SOURCE_DIR} || cleanup_and_exit $?
|
|
else
|
|
cmake "$@" ${SOURCE_DIR} || cleanup_and_exit $?
|
|
fi
|
|
}
|
|
|
|
function compile() {
|
|
if [ -f /proc/cpuinfo ]; then
|
|
CPUCOUNT=$(grep -c processor /proc/cpuinfo)
|
|
elif test `uname` = "SunOS" ; then
|
|
CPUCOUNT=$(psrinfo -p)
|
|
else
|
|
CPUCOUNT="1"
|
|
fi
|
|
|
|
if [ "${CPUCOUNT}" -gt "1" ]; then
|
|
${MAKE} -j${CPUCOUNT} $1 || cleanup_and_exit $?
|
|
else
|
|
${MAKE} $1 || exit $?
|
|
fi
|
|
}
|
|
|
|
function clean_build_dir() {
|
|
find ! -path "*.svn*" ! -name "*.bat" ! -name "*.sh" ! -name "." -print0 | xargs -0 rm -rf
|
|
}
|
|
|
|
function usage () {
|
|
echo "Usage: `basename $0` [--prefix /install_prefix|--build [debug|final]|--clean|--verbose|--libsuffix (32|64)|--help|--clang|--cmakedir /directory|--make
|
|
(gmake|make)|--ccompiler (gcc|cc)|--withstaticlib|--unittesting|--clientunittesting|--withssh1|--withserver]"
|
|
cleanup_and_exit
|
|
}
|
|
|
|
cd ${BUILDDIR}
|
|
|
|
# the default CMake options:
|
|
OPTIONS="--graphviz=${BUILDDIR}/libssh.dot"
|
|
|
|
# the default 'make' utility:
|
|
MAKE="make"
|
|
|
|
while test -n "$1"; do
|
|
PARAM="$1"
|
|
ARG="$2"
|
|
shift
|
|
case ${PARAM} in
|
|
*-*=*)
|
|
ARG=${PARAM#*=}
|
|
PARAM=${PARAM%%=*}
|
|
set -- "----noarg=${PARAM}" "$@"
|
|
esac
|
|
case ${PARAM} in
|
|
*-help|-h)
|
|
#echo_help
|
|
usage
|
|
cleanup_and_exit
|
|
;;
|
|
*-build)
|
|
DOMAKE="1"
|
|
BUILD_TYPE="${ARG}"
|
|
test -n "${BUILD_TYPE}" && shift
|
|
;;
|
|
*-clean)
|
|
clean_build_dir
|
|
cleanup_and_exit
|
|
;;
|
|
*-clang)
|
|
OPTIONS="${OPTIONS} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
|
|
;;
|
|
*-verbose)
|
|
DOVERBOSE="1"
|
|
;;
|
|
*-memtest)
|
|
OPTIONS="${OPTIONS} -DMEM_NULL_TESTS=ON"
|
|
;;
|
|
*-libsuffix)
|
|
OPTIONS="${OPTIONS} -DLIB_SUFFIX=${ARG}"
|
|
shift
|
|
;;
|
|
*-prefix)
|
|
OPTIONS="${OPTIONS} -DCMAKE_INSTALL_PREFIX=${ARG}"
|
|
shift
|
|
;;
|
|
*-sysconfdir)
|
|
OPTIONS="${OPTIONS} -DSYSCONF_INSTALL_DIR=${ARG}"
|
|
shift
|
|
;;
|
|
*-cmakedir)
|
|
CMAKEDIR="${ARG}"
|
|
shift
|
|
;;
|
|
*-make)
|
|
MAKE="${ARG}"
|
|
shift
|
|
;;
|
|
*-ccompiler)
|
|
OPTIONS="${OPTIONS} -DCMAKE_C_COMPILER=${ARG}"
|
|
shift
|
|
;;
|
|
*-withstaticlib)
|
|
OPTIONS="${OPTIONS} -DWITH_STATIC_LIB=ON"
|
|
;;
|
|
*-unittesting)
|
|
OPTIONS="${OPTIONS} -DWITH_TESTING=ON"
|
|
;;
|
|
*-clientunittesting)
|
|
OPTIONS="${OPTIONS} -DWITH_CLIENT_TESTING=ON"
|
|
;;
|
|
*-withssh1)
|
|
OPTIONS="${OPTIONS} -DWITH_SSH1=ON"
|
|
;;
|
|
*-withserver)
|
|
OPTIONS="${OPTIONS} -DWITH_SERVER=ON"
|
|
;;
|
|
----noarg)
|
|
echo "$ARG does not take an argument"
|
|
cleanup_and_exit
|
|
;;
|
|
-*)
|
|
echo Unknown Option "$PARAM". Exit.
|
|
cleanup_and_exit 1
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "${DOMAKE}" == "1" ]; then
|
|
OPTIONS="${OPTIONS} -DCMAKE_BUILD_TYPE=${BUILD_TYPE}"
|
|
fi
|
|
|
|
if [ -n "${DOVERBOSE}" ]; then
|
|
OPTIONS="${OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=1"
|
|
else
|
|
OPTIONS="${OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=0"
|
|
fi
|
|
|
|
test -f "${BUILDDIR}/.build.log" && rm -f ${BUILDDIR}/.build.log
|
|
touch ${BUILDDIR}/.build.log
|
|
# log everything from here to .build.log
|
|
exec 1> >(exec -a 'build logging tee' tee -a ${BUILDDIR}/.build.log) 2>&1
|
|
echo "${HOST} started build at $(date)."
|
|
echo
|
|
|
|
configure ${OPTIONS} "$@"
|
|
|
|
if [ -n "${DOMAKE}" ]; then
|
|
test -n "${DOVERBOSE}" && compile VERBOSE=1 || compile
|
|
fi
|
|
|
|
DOT=$(which dot 2>/dev/null)
|
|
if [ -n "${DOT}" ]; then
|
|
${DOT} -Tpng -o${BUILDDIR}/libssh.png ${BUILDDIR}/libssh.dot
|
|
${DOT} -Tsvg -o${BUILDDIR}/libssh.svg ${BUILDDIR}/libssh.dot
|
|
fi
|
|
|
|
exec >&0 2>&0 # so that the logging tee finishes
|
|
sleep 1 # wait till tee terminates
|
|
|
|
cleanup_and_exit 0
|