Current section

Files

Jump to
elibphonenumber build_deps.sh
Raw

build_deps.sh

#!/usr/bin/env bash
DEPS_LOCATION=_build/deps
DESTINATION=libphonenumber
if [ -f "${DEPS_LOCATION}/${DESTINATION}/cpp/build/libphonenumber.a" ]; then
echo "libphonenumber fork already exists. Delete ${DEPS_LOCATION}/${DESTINATION} for a fresh checkout."
exit 0
fi
GITHUB_REPO=https://github.com/google/libphonenumber
LIB_PHONE_NUMBER_ARCHIVE=${GITHUB_REPO}/archive/refs/tags/$1.tar.gz
LIB_PHONE_NUMBER_REPO=${GITHUB_REPO}.git
LIB_PHONE_NUMBER_REV=$1
DRIVER_SRC="git"
if [ "$2" = "archive" ]; then
DRIVER_SRC="archive"
ARCHIVE_VER=$(echo "$LIB_PHONE_NUMBER_REV" | sed -e 's/^v//g')
fi
OS=$(uname -s)
KERNEL=$(echo $(lsb_release -ds 2>/dev/null || cat /etc/system-release 2>/dev/null || cat /etc/*release 2>/dev/null | head -n1 | awk '{print $1;}') | awk '{print $1;}')
echo "Use repo ${LIB_PHONE_NUMBER_REPO} and revision ${LIB_PHONE_NUMBER_REV}"
echo "OS detected: ${OS} ${KERNEL}"
function fail_check {
"$@"
local status=$?
if [ $status -ne 0 ]; then
echo "Error with $1" >&2
exit 1
fi
}
# Enable ccache based on $ELIBPHONENUMBER_USE_CCACHE environment variable
CCACHE_ENABLED=0
if [ "$ELIBPHONENUMBER_USE_CCACHE" = "1" ]; then
if command -v ccache &> /dev/null; then
echo "ccache is enabled and will be used."
export PATH="/usr/local/bin/ccache:$PATH"
CCACHE_ENABLED=1
else
echo "ccache is not installed. Proceeding without ccache..."
fi
fi
qmake_unix() {
local cmake_args=(
-DCMAKE_C_FLAGS="-fPIC"
-DCMAKE_CXX_FLAGS="-fPIC -std=c++17"
-DCMAKE_INSTALL_PREFIX:PATH=install
-DBUILD_TESTING=OFF
-DBUILD_SHARED_LIBS=OFF
-DUSE_BOOST=OFF
-DUSE_STDMUTEX=ON
)
# Add ccache launcher if enabled
if [ $CCACHE_ENABLED -eq 1 ]; then
cmake_args+=(-DCMAKE_C_COMPILER_LAUNCHER=ccache)
fi
fail_check cmake "${cmake_args[@]}" ..
}
qmake_darwin() {
local ICU4_DIR=$(brew --prefix icu4c)
local PROTOBUF_DIR=$(brew --prefix protobuf@3)
export PKG_CONFIG_PATH="$ICU4_DIR/lib/pkgconfig"
local cmake_args=(
-DCMAKE_CXX_FLAGS="-std=c++17 -DNDEBUG"
-DCMAKE_INSTALL_PREFIX:PATH=install
-DBUILD_TESTING=OFF
-DBUILD_SHARED_LIBS=OFF
-DUSE_BOOST=OFF
-DUSE_STDMUTEX=ON
-DICU_UC_INCLUDE_DIR="$ICU4_DIR/include"
-DICU_UC_LIB="$ICU4_DIR/lib/libicuuc.dylib"
-DICU_I18N_INCLUDE_DIR="$ICU4_DIR/include"
-DICU_I18N_LIB="$ICU4_DIR/lib/libicui18n.dylib"
-DPROTOBUF_INCLUDE_DIR="$PROTOBUF_DIR/include"
-DPROTOBUF_LIB="$PROTOBUF_DIR/lib"
-DPROTOC_BIN="$PROTOBUF_DIR/bin/protoc"
)
# Add ccache launcher if enabled
if [ $CCACHE_ENABLED -eq 1 ]; then
cmake_args+=(-DCMAKE_C_COMPILER_LAUNCHER=ccache)
fi
fail_check cmake "${cmake_args[@]}" ..
}
install_libphonenumber() {
if [ "${DRIVER_SRC}" = "git" ]; then
echo "Building from Git tag"
fail_check git clone "${LIB_PHONE_NUMBER_REPO}" "${DESTINATION}"
pushd "${DESTINATION}" || exit
fail_check git checkout "${LIB_PHONE_NUMBER_REV}"
popd || exit
elif [ "${DRIVER_SRC}" = "archive" ]; then
echo "Building from Git archive: ${LIB_PHONE_NUMBER_ARCHIVE}"
if [ ! -d "${DESTINATION}" ]; then
fail_check wget -q -O libphonenumber.tar.gz "$LIB_PHONE_NUMBER_ARCHIVE"
fail_check tar -xf libphonenumber.tar.gz
fail_check rm libphonenumber.tar.gz
fail_check mv "libphonenumber-${ARCHIVE_VER}" "${DESTINATION}"
fi
fi;
mkdir -p "${DESTINATION}/cpp/build"
pushd "${DESTINATION}/cpp/build" || exit
case $OS in
Linux)
qmake_unix
;;
Darwin)
qmake_darwin
;;
*)
echo "Your system $OS is not supported"
exit 1
esac
fail_check make -j 8
fail_check make install
popd || exit
}
copy_resources() {
rm -rf priv
fail_check mkdir priv
fail_check cp -R "${DEPS_LOCATION}/${DESTINATION}/resources/carrier" priv/carrier
fail_check cp -R "${DEPS_LOCATION}/${DESTINATION}/resources/timezones" priv/timezones
}
run_installation() {
mkdir -p "$DEPS_LOCATION"
pushd "$DEPS_LOCATION" || exit
case $OS in
Linux)
case $KERNEL in
Ubuntu | Debian)
echo "Check Dependencies for $KERNEL"
fail_check dpkg -s cmake cmake-curses-gui libicu-dev protobuf-compiler libprotobuf-dev
install_libphonenumber
;;
CentOS | Amazon)
echo "Check Dependencies for $KERNEL"
fail_check rpm -q --dump cmake libicu-devel protobuf-compiler protobuf-devel
install_libphonenumber
;;
*)
echo "Your system $KERNEL is not supported"
exit 1
esac
;;
Darwin)
export HOMEBREW_NO_INSTALL_UPGRADE=true
export HOMEBREW_NO_INSTALL_CLEANUP=true
export HOMEBREW_NO_AUTO_UPDATE=1
brew install cmake pkg-config icu4c protobuf@3 wget
install_libphonenumber
;;
*)
echo "Your system $OS is not supported"
exit 1
esac
popd || exit
}
run_installation
copy_resources