blob: a850911fa3527b9b25ac0e1fbb629e6f4f0b272d [file] [log] [blame]
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#set -e
################################################################
# This script will download all thirdparties and java libraries
# which are defined in *vars.sh*, unpack patch them if necessary.
# You can run this script multi-times.
# Things will only be downloaded, unpacked and patched once.
################################################################
curdir=`dirname "$0"`
curdir=`cd "$curdir"; pwd`
if [[ -z "${DORIS_HOME}" ]]; then
DORIS_HOME=$curdir/..
fi
# include custom environment variables
if [[ -f ${DORIS_HOME}/custom_env.sh ]]; then
. ${DORIS_HOME}/custom_env.sh
fi
if [[ -z "${TP_DIR}" ]]; then
TP_DIR=$curdir
fi
if [ ! -f ${TP_DIR}/vars.sh ]; then
echo "vars.sh is missing".
exit 1
fi
. ${TP_DIR}/vars.sh
mkdir -p ${TP_DIR}/src
md5sum_bin=md5sum
if ! command -v ${md5sum_bin} >/dev/null 2>&1; then
echo "Warn: md5sum is not installed"
md5sum_bin=""
fi
md5sum_func() {
local FILENAME=$1
local DESC_DIR=$2
local MD5SUM=$3
if [ "$md5sum_bin" == "" ]; then
return 0
else
md5=`md5sum "$DESC_DIR/$FILENAME"`
if [ "$md5" != "$MD5SUM $DESC_DIR/$FILENAME" ]; then
echo "$DESC_DIR/$FILENAME md5sum check failed!"
echo -e "except-md5 $MD5SUM \nactual-md5 $md5"
return 1
fi
fi
return 0
}
download_func() {
local FILENAME=$1
local DOWNLOAD_URL=$2
local DESC_DIR=$3
local MD5SUM=$4
if [ -z "$FILENAME" ]; then
echo "Error: No file name specified to download"
exit 1
fi
if [ -z "$DOWNLOAD_URL" ]; then
echo "Error: No download url specified for $FILENAME"
exit 1
fi
if [ -z "$DESC_DIR" ]; then
echo "Error: No dest dir specified for $FILENAME"
exit 1
fi
SUCCESS=0
for attemp in 1 2; do
if [ -r "$DESC_DIR/$FILENAME" ]; then
if md5sum_func $FILENAME $DESC_DIR $MD5SUM; then
echo "Archive $FILENAME already exist."
SUCCESS=1
break;
fi
echo "Archive $FILENAME will be removed and download again."
rm -f "$DESC_DIR/$FILENAME"
else
echo "Downloading $FILENAME from $DOWNLOAD_URL to $DESC_DIR"
wget --no-check-certificate $DOWNLOAD_URL -O $DESC_DIR/$FILENAME
if [ "$?"x == "0"x ]; then
if md5sum_func $FILENAME $DESC_DIR $MD5SUM; then
SUCCESS=1
echo "Success to download $FILENAME"
break;
fi
echo "Archive $FILENAME will be removed and download again."
rm -f "$DESC_DIR/$FILENAME"
else
echo "Failed to download $FILENAME. attemp: $attemp"
fi
fi
done
if [ $SUCCESS -ne 1 ]; then
echo "Failed to download $FILENAME"
fi
return $SUCCESS
}
# download thirdparty archives
echo "===== Downloading thirdparty archives..."
for TP_ARCH in ${TP_ARCHIVES[*]}
do
NAME=$TP_ARCH"_NAME"
MD5SUM=$TP_ARCH"_MD5SUM"
if test "x$REPOSITORY_URL" = x; then
URL=$TP_ARCH"_DOWNLOAD"
download_func ${!NAME} ${!URL} $TP_SOURCE_DIR ${!MD5SUM}
if [ "$?"x == "0"x ]; then
echo "Failed to download ${!NAME}"
exit 1
fi
else
URL="${REPOSITORY_URL}/${!NAME}"
download_func ${!NAME} ${URL} $TP_SOURCE_DIR ${!MD5SUM}
if [ "$?x" == "0x" ]; then
#try to download from home
URL=$TP_ARCH"_DOWNLOAD"
download_func ${!NAME} ${!URL} $TP_SOURCE_DIR ${!MD5SUM}
if [ "$?x" == "0x" ]; then
echo "Failed to download ${!NAME}"
exit 1 # download failed again exit.
fi
fi
fi
done
echo "===== Downloading thirdparty archives...done"
# check if all tp archievs exists
echo "===== Checking all thirdpart archives..."
for TP_ARCH in ${TP_ARCHIVES[*]}
do
NAME=$TP_ARCH"_NAME"
if [ ! -r $TP_SOURCE_DIR/${!NAME} ]; then
echo "Failed to fetch ${!NAME}"
exit 1
fi
done
echo "===== Checking all thirdpart archives...done"
# unpacking thirdpart archives
echo "===== Unpacking all thirdparty archives..."
TAR_CMD="tar"
UNZIP_CMD="unzip"
SUFFIX_TGZ="\.(tar\.gz|tgz)$"
SUFFIX_XZ="\.tar\.xz$"
SUFFIX_ZIP="\.zip$"
for TP_ARCH in ${TP_ARCHIVES[*]}
do
NAME=$TP_ARCH"_NAME"
SOURCE=$TP_ARCH"_SOURCE"
if [ -z "${!SOURCE}" ]; then
continue
fi
if [ ! -d $TP_SOURCE_DIR/${!SOURCE} ]; then
if [[ "${!NAME}" =~ $SUFFIX_TGZ ]]; then
echo "$TP_SOURCE_DIR/${!NAME}"
echo "$TP_SOURCE_DIR/${!SOURCE}"
if ! $TAR_CMD xzf "$TP_SOURCE_DIR/${!NAME}" -C "$TP_SOURCE_DIR/"; then
echo "Failed to untar ${!NAME}"
exit 1
fi
elif [[ "${!NAME}" =~ $SUFFIX_XZ ]]; then
echo "$TP_SOURCE_DIR/${!NAME}"
echo "$TP_SOURCE_DIR/${!SOURCE}"
if ! $TAR_CMD xJf "$TP_SOURCE_DIR/${!NAME}" -C "$TP_SOURCE_DIR/"; then
echo "Failed to untar ${!NAME}"
exit 1
fi
elif [[ "${!NAME}" =~ $SUFFIX_ZIP ]]; then
if ! $UNZIP_CMD "$TP_SOURCE_DIR/${!NAME}" -d "$TP_SOURCE_DIR/"; then
echo "Failed to unzip ${!NAME}"
exit 1
fi
fi
else
echo "${!SOURCE} already unpacked."
fi
done
echo "===== Unpacking all thirdparty archives...done"
echo "===== Patching thirdparty archives..."
###################################################################################
# PATCHED_MARK is a empty file which will be created in some thirdparty source dir
# only after that thirdparty source is patched.
# This is to avoid duplicated patch.
###################################################################################
PATCHED_MARK="patched_mark"
# glog patch
cd $TP_SOURCE_DIR/$GLOG_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p1 < $TP_PATCH_DIR/glog-0.3.3-vlog-double-lock-bug.patch
patch -p1 < $TP_PATCH_DIR/glog-0.3.3-for-palo2.patch
patch -p1 < $TP_PATCH_DIR/glog-0.3.3-remove-unwind-dependency.patch
# patch Makefile.am to make autoreconf work
patch -p0 < $TP_PATCH_DIR/glog-0.3.3-makefile.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $GLOG_SOURCE"
# re2 patch
cd $TP_SOURCE_DIR/$RE2_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p0 < $TP_PATCH_DIR/re2-2017-05-01.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $RE2_SOURCE"
# mysql patch
cd $TP_SOURCE_DIR/$MYSQL_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p0 < $TP_PATCH_DIR/mysql-5.7.18.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $MYSQL_SOURCE"
# libevent patch
cd $TP_SOURCE_DIR/$LIBEVENT_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p1 < $TP_PATCH_DIR/libevent_on_free_cb.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $LIBEVENT_SOURCE"
# thrift patch
# cd $TP_SOURCE_DIR/$THRIFT_SOURCE
# if [ ! -f $PATCHED_MARK ]; then
# patch -p0 < $TP_PATCH_DIR/thrift-0.9.3-aclocal.patch
# touch $PATCHED_MARK
# fi
# cd -
# echo "Finished patching $THRIFT_SOURCE"
# this patch is only used inside Baidu
if test "x$PATCH_COMPILER_RT" == "xtrue"; then
cd $TP_SOURCE_DIR/$COMPILER_RT_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p0 < $TP_PATCH_DIR/compiler-rt.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $COMPILER_RT_SOURCE"
fi
# patch to llvm to support aarch64 platform
cd $TP_SOURCE_DIR/$LLVM_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p0 < $TP_PATCH_DIR/llvm-3.4.2.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $LLVM_SOURCE"
# lz4 patch to disable shared library
cd $TP_SOURCE_DIR/$LZ4_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p0 < $TP_PATCH_DIR/lz4-1.7.5.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $LZ4_SOURCE"
# brpc patch to disable shared library
cd $TP_SOURCE_DIR/$BRPC_SOURCE
if [ ! -f $PATCHED_MARK ] && [ $BRPC_SOURCE == "incubator-brpc-0.9.5" ]; then
patch -p0 < $TP_PATCH_DIR/incubator-brpc-0.9.5.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $BRPC_SOURCE"
# s2 patch to disable shared library
cd $TP_SOURCE_DIR/$S2_SOURCE
if [ ! -f $PATCHED_MARK ]; then
patch -p1 < $TP_PATCH_DIR/s2geometry-0.9.0.patch
# replace uint64 with uint64_t to make compiler happy
patch -p0 < $TP_PATCH_DIR/s2geometry-0.9.0-uint64.patch
touch $PATCHED_MARK
fi
cd -
echo "Finished patching $S2_SOURCE"