Files
openGauss-connector-odbc/third_party/unixodbc/build_unixodbc.sh
2020-12-31 02:09:42 +08:00

320 lines
10 KiB
Bash
Executable File

#!/bin/bash
#######################################################################
# Copyright (c): 2020-2025, Huawei Tech. Co., Ltd.
# descript: Compile and pack MPPDB
# Return 0 means OK.
# Return 1 means failed.
# version: 2.0
# date: 2020-08-09
#######################################################################
######################################################################
# Parameter setting
######################################################################
LOCAL_PATH=${0}
FIRST_CHAR=$(expr substr "$LOCAL_PATH" 1 1)
if [ "$FIRST_CHAR" = "/" ]; then
LOCAL_PATH=${0}
else
LOCAL_PATH="$(pwd)/${LOCAL_PATH}"
fi
LOCAL_DIR=$(dirname "${LOCAL_PATH}")
CONFIG_FILE_NAME=config.ini
BUILD_OPTION=release
TAR_FILE_NAME=unixODBC-2.3.9.tar.gz
SOURCE_CODE_PATH=unixODBC-2.3.9
LOG_FILE=${LOCAL_DIR}/build_unixODBC.log
BUILD_FAILED=1
#######################################################################
## print help information
#######################################################################
function print_help()
{
echo "Usage: $0 [OPTION]
-h|--help show help information
-m|--build_option provode type of operation, values of paramenter is build, shrink, dist or clean
"
}
#######################################################################
# Print log.
#######################################################################
log()
{
echo "[Build unixODBC] $(date +%y-%m-%d' '%T): $@"
echo "[Build unixODBC] $(date +%y-%m-%d' '%T): $@" >> "$LOG_FILE" 2>&1
}
#######################################################################
# print log and exit.
#######################################################################
die()
{
log "$@"
echo "$@"
exit $BUILD_FAILED
}
ls ${LOCAL_DIR}/${CONFIG_FILE_NAME} >/dev/null 2>&1
if [ $? -ne 0 ]; then
die "[Error] the file ${CONFIG_FILE_NAME} not exist."
fi
COMPLIE_TYPE_LIST=$(cat ${LOCAL_DIR}/${CONFIG_FILE_NAME} | grep -v '#' | grep -v '^$' | awk -F '=' '{print $2}' | sed 's/|/ /g')
COMPONENT_NAME=$(cat ${LOCAL_DIR}/${CONFIG_FILE_NAME} | grep -v '#' | grep -v '^$' |awk -F '=' '{print $1}'| awk -F '@' '{print $2}')
COMPONENT_TYPE=$(cat ${LOCAL_DIR}/${CONFIG_FILE_NAME} | grep -v '#' | grep -v '^$' | awk -F '@' '{print $1}')
if [ "${COMPONENT_NAME}"X = ""X ]
then
die "[Error] get component name failed!"
fi
if [ "${COMPONENT_TYPE}"X = ""X ]
then
die "[Error] get component type failed!"
fi
ROOT_DIR="${LOCAL_DIR}/../../"
INSTALL_COMPOENT_PATH_NAME="${ROOT_DIR}/${COMPONENT_TYPE}/${COMPONENT_NAME}"
#######################################################################
# build and install component
#######################################################################
function build_component()
{
cd ${LOCAL_DIR}
tar -xvf ${TAR_FILE_NAME}
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}
if [ $? -ne 0 ]; then
die "[Error] change dir to $SRC_DIR failed."
fi
log "[Notice] start autoreconf."
autoreconf -fi
if [ $? -ne 0 ]; then
die "[Error] autoreconf failed, please install libtool and libtool-ltdl-devel."
fi
chmod +x configure
for COMPILE_TYPE in ${COMPLIE_TYPE_LIST}
do
case "${COMPILE_TYPE}" in
release)
die "[Error] unixODBC not supported build type."
;;
debug)
die "[Error] unixODBC not supported build type."
;;
comm)
mkdir -p ${LOCAL_DIR}/install_comm/unixODBC-2.3.9
log "[Notice] unixODBC configure string: ./configure CFLAGS='-fstack-protector-all -Wl,-z,relro,-z,now -Wl,-z,noexecstack -fPIC -fPIE -pie' --enable-gui=no --prefix=${LOCAL_DIR}/install_comm"
./configure CFLAGS='-fstack-protector-all -Wl,-z,relro,-z,now -Wl,-z,noexecstack -fPIC -fPIE -pie' --enable-gui=no --prefix=${LOCAL_DIR}/install_comm/unixODBC-2.3.9
;;
release_llt)
die "[Error] unixODBC not supported build type."
;;
debug_llt)
die "[Error] unixODBC not supported build type."
;;
llt)
die "[Error] unixODBC not supported build type."
;;
*)
log "Internal Error: option processing error: $1"
log "please write right paramenter in ${CONFIG_FILE_NAME}"
exit 1
esac
if [ $? -ne 0 ]; then
die "[Error] unixODBC configure failed."
fi
log "[Notice] unixODBC End configure"
log "[Notice] disable rpath"
sed -i 's/runpath_var=LD_RUN_PATH/runpath_var=""/g' ./libtool
sed -i 's/hardcode_libdir_flag_spec="\\\${wl}-rpath \\\${wl}\\\$libdir"/hardcode_libdir_flag_spec=""/g' ./libtool
PLAT_FORM_STR=`uname -p`
if [ "${PLAT_FORM_STR}"X = "aarch64"X ]
then
sed -i "250c runpath_var=" libtool
sed -i "385c hardcode_libdir_flag_spec=" libtool
fi
log "[Notice] unixODBC using \"${COMPILE_TYPE}\" Begin make"
make -sj
if [ $? -ne 0 ]; then
die "unixODBC make failed."
fi
log "[Notice] unixODBC End make"
log "[Notice] unixODBC using \"${COMPILE_TYPE}\" Begin make install"
make install -sj
if [ $? -ne 0 ]; then
die "[Error] unixODBC make install failed."
fi
log "[Notice] unixODBC using \"${COMPILE_TYPE}\" End make install"
make clean
log "[Notice] unixODBC build using \"${COMPILE_TYPE}\" has been finished"
done
}
#######################################################################
# choose the real files
#######################################################################
function shrink_component()
{
for COMPILE_TYPE in ${COMPLIE_TYPE_LIST}
do
case "${COMPILE_TYPE}" in
comm)
mkdir ${LOCAL_DIR}/install_comm_dist
cp -r ${LOCAL_DIR}/install_comm/* ${LOCAL_DIR}/install_comm_dist
if [ $? -ne 0 ]; then
die "[Error] \"cp -r ${LOCAL_DIR}/install_comm/* ${LOCAL_DIR}/install_comm_dist\" failed."
fi
;;
release)
;;
debug)
;;
llt)
;;
release_llt)
;;
debug_llt)
;;
*)
esac
log "[Notice] unixODBC shrink using \"${COMPILE_TYPE}\" has been finished!"
done
}
##############################################################################################################
# dist the real files to the matched path
# we could makesure that $INSTALL_COMPOENT_PATH_NAME is not null, '.' or '/'
##############################################################################################################
function dist_component()
{
for COMPILE_TYPE in ${COMPLIE_TYPE_LIST}
do
case "${COMPILE_TYPE}" in
comm)
rm -rf ${INSTALL_COMPOENT_PATH_NAME}/comm/*
cp -r ${LOCAL_DIR}/install_comm_dist/* ${INSTALL_COMPOENT_PATH_NAME}/comm
if [ $? -ne 0 ]; then
die "[Error] \"cp -r ${LOCAL_DIR}/install_comm_dist/* ${INSTALL_COMPOENT_PATH_NAME}/comm\" failed."
fi
;;
release)
;;
debug)
;;
llt)
;;
release_llt)
;;
debug_llt)
;;
*)
esac
log "[Notice] unixODBC dist using \"${COMPILE_TYPE}\" has been finished!"
done
}
#######################################################################
# clean component
#######################################################################
function clean_component()
{
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}
if [ $? -ne 0 ]; then
die "[Error] cd ${LOCAL_DIR}/${SOURCE_CODE_PATH} failed."
fi
cd ${LOCAL_DIR}
if [ $? -ne 0 ]; then
die "[Error] cd ${LOCAL_DIR} failed."
fi
[ -n "${SOURCE_CODE_PATH}" ] && rm -rf ${SOURCE_CODE_PATH}
rm -rf install_*
log "[Notice] unixODBC clean has been finished!"
}
#######################################################################
#######################################################################
#######################################################################
# main
#######################################################################
#######################################################################
#######################################################################
function main()
{
case "${BUILD_OPTION}" in
build)
build_component
;;
shrink)
shrink_component
;;
dist)
dist_component
;;
clean)
clean_component
;;
all)
build_component
shrink_component
dist_component
clean_component
;;
*)
log "Internal Error: option processing error: $2"
log "please input right paramenter values build, shrink, dist or clean "
esac
}
########################################################################
if [ $# = 0 ] ; then
log "missing option"
print_help
exit 1
fi
##########################################################################
#read command line paramenters
##########################################################################
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
print_help
exit 1
;;
-m|--build_option)
if [ "$2"X = X ];then
die "no given version number values"
fi
BUILD_OPTION=$2
shift 2
;;
*)
log "Internal Error: option processing error: $1" 1>&2
log "please input right paramtenter, the following command may help you"
log "./build.sh --help or ./build.sh -h"
exit 1
esac
done
###########################################################################
main