blob: b053090e46a40843a51ff3e1942c5b67bcd6e8af [file] [log] [blame]
#!/usr/bin/env bash
# Build and install to a local prefix under this repository.
# Flags:
# -g: install globally instead for all users
# -s: link everything statically, no D-Bus communication. More likely to work!
# -c: client to build
# -p: number of processors to use
# -u: disable use of privileges (sudo) during install
set -ex
# Qt_MIN_VER required for client-qt
QT5_MIN_VER="5.14"
debug=
global=false
static=''
client=''
qt5ver=''
qt5path=''
proc='1'
priv_install=true
while getopts gsc:dq:Q:P:p:u OPT; do
case "$OPT" in
g)
global='true'
;;
s)
static='-DENABLE_STATIC=true'
;;
c)
client="${OPTARG}"
;;
d)
debug=true
;;
q)
qt5ver="${OPTARG}"
;;
Q)
qt5path="${OPTARG}"
;;
P)
prefix="${OPTARG}"
;;
p)
proc="${OPTARG}"
;;
u)
priv_install='false'
;;
\?)
exit 1
;;
esac
done
# $1: global-install?
# $2: private-install?
make_install() {
if [ "$1" = "true" ] && [ "$2" != "false" ]; then
sudo make install
# Or else the next non-sudo install will fail, because this generates some
# root owned files like install_manifest.txt under the build directory.
sudo chown -R "$USER" .
else
make install
fi
}
TOP="$(pwd)"
INSTALL="${TOP}/install"
if [ "${global}" = "true" ]; then
BUILDDIR="build-global"
else
BUILDDIR="build-local"
fi
# jamid
DAEMON=${TOP}/daemon
cd "$DAEMON"
# Build the contribs.
mkdir -p contrib/native
(
cd contrib/native
../bootstrap ${prefix:+"--prefix=$prefix"}
make -j"${proc}"
)
# Build the daemon itself.
test -f configure || ./autogen.sh
if [ "${global}" = "true" ]; then
./configure "$CONFIGURE_FLAGS" ${prefix:+"--prefix=$prefix"}
else
./configure "$CONFIGURE_FLAGS" --prefix="${INSTALL}/daemon"
fi
make -j"${proc}" V=1
make_install "${global}" "${priv_install}"
# For the client-qt, verify system's version if no path provided
if [ "${client}" = "client-qt" ] && [ -z "$qt5path" ]; then
sys_qt5ver=""
if command -v qmake &> /dev/null; then
sys_qt5ver=$(qmake -v)
elif command -v qmake-qt5 &> /dev/null; then
sys_qt5ver=$(qmake-qt5 -v) # Fedora
else
echo "No valid Qt found"; exit 1;
fi
sys_qt5ver=${sys_qt5ver#*Qt version}
sys_qt5ver=${sys_qt5ver%\ in\ *}
installed_qt5ver=$(echo "$sys_qt5ver" | cut -d'.' -f 2)
required_qt5ver=$(echo $QT5_MIN_VER | cut -d'.' -f 2)
if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then
# Disable qt5path and qt5ver in order to use system's Qt
qt5path=""
qt5ver=""
else
echo "No valid Qt found"; exit 1;
fi
fi
# libringclient
cd "${TOP}/lrc"
mkdir -p "${BUILDDIR}"
cd "${BUILDDIR}"
# Compute LRC CMake flags
lrc_cmake_flags=(-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
-DCMAKE_BUILD_TYPE=Debug
-DQT5_VER="${qt5ver}"
-DQT5_PATH="${qt5path}"
-DENABLE_LIBWRAP=true
$static)
if [ "${global}" = "true" ]; then
lrc_cmake_flags+=(${prefix:+"-DCMAKE_INSTALL_PREFIX=$prefix"})
else
lrc_cmake_flags+=(-DCMAKE_INSTALL_PREFIX="${INSTALL}/lrc"
-DRING_BUILD_DIR="${DAEMON}/src")
fi
echo "info: Configuring LRC with flags: ${lrc_cmake_flags[*]}"
cmake .. "${lrc_cmake_flags[@]}"
make -j"${proc}" V=1
make_install "${global}" "${priv_install}"
# client
cd "${TOP}/${client}"
mkdir -p "${BUILDDIR}"
cd "${BUILDDIR}"
client_cmake_flags=(-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}")
if [ "${client}" = "client-qt" ]; then
# Compute Qt client CMake flags.
client_cmake_flags+=(-DQT5_VER="${qt5ver}"
-DQT5_PATH="${qt5path}")
if [ "${global}" = "true" ]; then
client_cmake_flags+=(${prefix:+"-DCMAKE_INSTALL_PREFIX=$prefix"}
$static)
else
client_cmake_flags+=(-DCMAKE_INSTALL_PREFIX="${INSTALL}/${client}"
-DLRC="${INSTALL}/lrc")
fi
else
# Compute GNOME client CMake flags.
client_cmake_flags+=($static)
if [ "${global}" = "true" ]; then
client_cmake_flags+=(${prefix:+"-DCMAKE_INSTALL_PREFIX=$prefix"})
else
client_cmake_flags+=(
-DCMAKE_INSTALL_PREFIX="${INSTALL}/${client}"
-DRINGTONE_DIR="${INSTALL}/daemon/share/jami/ringtones"
-DLibRingClient_DIR="${INSTALL}/lrc/lib/cmake/LibRingClient")
fi
fi
echo "info: Configuring $client client with flags: ${client_cmake_flags[*]}"
cmake .. "${client_cmake_flags[@]}"
make -j"${proc}" V=1
make_install "${global}" "${priv_install}"