add build script
This commit is contained in:
295
build.sh
Normal file
295
build.sh
Normal file
@ -0,0 +1,295 @@
|
||||
#!/bin/bash
|
||||
#######################################################################
|
||||
# Copyright (c): 2020-2025, Huawei Tech. Co., Ltd.
|
||||
# descript: Compile and pack python driver for openGauss
|
||||
# Return 0 means OK.
|
||||
# Return 1 means failed.
|
||||
# version: 2.0
|
||||
# date: 2020-08-09
|
||||
#######################################################################
|
||||
declare install_package_format='tar'
|
||||
declare serverlib_dir='None'
|
||||
|
||||
#detect platform information.
|
||||
PLATFORM=32
|
||||
bit=$(getconf LONG_BIT)
|
||||
if [ "$bit" -eq 64 ]; then
|
||||
PLATFORM=64
|
||||
fi
|
||||
|
||||
#get OS distributed version.
|
||||
if [ -f "/etc/euleros-release" ]; then
|
||||
kernel=$(cat /etc/euleros-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
||||
version=$(cat /etc/euleros-release | awk -F '(' '{print $2}'| awk -F ')' '{print $1}' | tr A-Z a-z)
|
||||
elif [ -f "/etc/openEuler-release" ]; then
|
||||
kernel=$(cat /etc/openEuler-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
||||
version=$(cat /etc/openEuler-release | awk -F '(' '{print $2}'| awk -F ')' '{print $1}' | tr A-Z a-z)
|
||||
elif [ -f "/etc/centos-release" ]; then
|
||||
kernel=$(cat /etc/centos-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
||||
version=$(cat /etc/centos-release | awk -F '(' '{print $2}'| awk -F ')' '{print $1}' | tr A-Z a-z)
|
||||
elif [ -f "/etc/kylin-release" ]; then
|
||||
kernel=$(cat /etc/kylin-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
||||
version=$(cat /etc/kylin-release | awk '{print $6}' | tr A-Z a-z)
|
||||
else
|
||||
kernel=$(lsb_release -d | awk -F ' ' '{print $2}'| tr A-Z a-z)
|
||||
version=$(lsb_release -r | awk -F ' ' '{print $2}')
|
||||
fi
|
||||
|
||||
if [ X"$kernel" == X"euleros" ]; then
|
||||
dist_version="EULER"
|
||||
elif [ X"$kernel" == X"centos" ]; then
|
||||
dist_version="CENTOS"
|
||||
elif [ X"$kernel" == X"openeuler" ]; then
|
||||
dist_version="OPENEULER"
|
||||
elif [ X"$kernel" == X"kylin" ]; then
|
||||
dist_version="KYLIN"
|
||||
else
|
||||
echo "We only support EulerOS, OPENEULER(aarch64) and CentOS platform."
|
||||
echo "Kernel is $kernel"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
##default install version storage path
|
||||
declare db_name_for_package='openGauss'
|
||||
declare version_number='2.0.0'
|
||||
|
||||
if [ $# = 0 ] ; then
|
||||
echo "missing option"
|
||||
print_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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}")
|
||||
#########################################################################
|
||||
##read command line paramenters
|
||||
#######################################################################
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
print_help
|
||||
exit 1
|
||||
;;
|
||||
-bd|--serverlib_dir)
|
||||
if [ "$2"X = X ]; then
|
||||
echo "no given binarylib directory values"
|
||||
exit 1
|
||||
fi
|
||||
serverlib_dir=$2
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
echo "Internal Error: option processing error: $1" 1>&2
|
||||
echo "please input right paramtenter, the following command may help you"
|
||||
echo "./build.sh --help or ./build.sh -h"
|
||||
exit 1
|
||||
esac
|
||||
done
|
||||
|
||||
#######################################################################
|
||||
## declare all package name
|
||||
#######################################################################
|
||||
declare version_string="${db_name_for_package}-${version_number}"
|
||||
declare package_pre_name="${version_string}-${dist_version}-${PLATFORM}bit"
|
||||
declare python_package_name="${package_pre_name}-Python.${install_package_format}.gz"
|
||||
|
||||
declare BUILD_DIR="${LOCAL_DIR}/build"
|
||||
declare MKGS_OK=0
|
||||
SERVERLIBS_PATH="${serverlib_dir}"
|
||||
PSYCOPG_VERSION=psycopg2-2.9
|
||||
declare LOG_FILE="${LOCAL_DIR}/build_psycopg2.log"
|
||||
declare ERR_MKGS_FAILED=1
|
||||
echo "[makepython] $(date +%y-%m-%d' '%T): script dir : ${LOCAL_DIR}"
|
||||
|
||||
#######################################################################
|
||||
## print help information
|
||||
#######################################################################
|
||||
function print_help()
|
||||
{
|
||||
echo "Usage: $0 [OPTION]
|
||||
-h|--help show help information.
|
||||
-bd|--serverlib_dir the directory of sever binarylibs.
|
||||
"
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# Print log.
|
||||
#######################################################################
|
||||
log()
|
||||
{
|
||||
echo "[Build psycopg2] $(date +%y-%m-%d' '%T): $@"
|
||||
echo "[Build psycopg2] $(date +%y-%m-%d' '%T): $@" >> "$LOG_FILE" 2>&1
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# print log and exit.
|
||||
#######################################################################
|
||||
die()
|
||||
{
|
||||
log "$@"
|
||||
echo "$@"
|
||||
exit $ERR_MKGS_FAILED
|
||||
}
|
||||
|
||||
# clean build python log
|
||||
function clean_environment()
|
||||
{
|
||||
|
||||
if [ -f "$LOG_FILE" ]; then
|
||||
rm -rf "$LOG_FILE"
|
||||
fi
|
||||
|
||||
if [ -d "${LOCAL_DIR}/build" ]; then
|
||||
rm -rf ${LOCAL_DIR}/build
|
||||
fi
|
||||
|
||||
echo "clean completely"
|
||||
}
|
||||
|
||||
function check_python()
|
||||
{
|
||||
array=(python3 python2 python)
|
||||
for py in ${array[@]}; do
|
||||
${py} -c 'import setuptools' >> /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
log "choose python: $(which ${py})"
|
||||
PYTHON=${py}
|
||||
version=$(${py} --version 2>&1)
|
||||
PYTHON_VERSION=python${version:7:1}
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
die "the python in your current enviroment is invalid, please check again and install setuptools."
|
||||
}
|
||||
|
||||
function change_gaussdb_version()
|
||||
{
|
||||
if [ ! -f setup.py ]; then
|
||||
die "not found psycopg2 code in current working directory."
|
||||
fi
|
||||
|
||||
src_text='(pgmajor, pgminor, pgpatch)'
|
||||
dst_text='(9, 2, 4)'
|
||||
sed -i "s/${src_text}/${dst_text}/g" setup.py
|
||||
search_result=$(cat setup.py | grep "$src_text")
|
||||
if [ "${search_result}"X != "X" ]; then
|
||||
die "failed to replace PG_VERSION_NUM at setup.py."
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################
|
||||
## copy the target to set path
|
||||
###############################################################
|
||||
function target_file_copy()
|
||||
{
|
||||
cd ${LOCAL_DIR}/build/lib*
|
||||
mv psycopg2/_psycopg*.so psycopg2/_psycopg.so
|
||||
|
||||
mkdir -p lib
|
||||
#copy libraries into lib
|
||||
cd ./psycopg2
|
||||
libs=$(ldd _psycopg.so | awk '{print $3}' | grep $GAUSSHOME/lib)
|
||||
for lib in ${libs[@]}; do
|
||||
cp $lib ../lib
|
||||
done
|
||||
cd ..
|
||||
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# build and install component
|
||||
#######################################################################
|
||||
function build_python()
|
||||
{
|
||||
cd ${LOCAL_DIR}
|
||||
# set GAUSSHOME enviroment variable with BUILD_OPTION
|
||||
export GAUSSHOME=$SERVERLIBS_PATH
|
||||
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
|
||||
export PATH=${GAUSSHOME}/bin:${PATH}
|
||||
|
||||
echo "GAUSSHOME: ${GAUSSHOME}"
|
||||
|
||||
change_gaussdb_version
|
||||
check_python
|
||||
${PYTHON} ./setup.py build
|
||||
if [ $? -ne 0 ]; then
|
||||
die "failed to compile psycopg2."
|
||||
fi
|
||||
|
||||
echo "End make python" >> "$LOG_FILE" 2>&1
|
||||
}
|
||||
|
||||
declare package_command
|
||||
#######################################################################
|
||||
##select package command accroding to install_package_format
|
||||
#######################################################################
|
||||
function select_package_command()
|
||||
{
|
||||
case "$install_package_format" in
|
||||
tar)
|
||||
tar='tar'
|
||||
option=' -zcvf'
|
||||
package_command="$tar$option"
|
||||
;;
|
||||
rpm)
|
||||
rpm='rpm'
|
||||
option=' -i'
|
||||
package_command="$rpm$option"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
##function make_package have tree actions
|
||||
##1.copy target file into a newly created temporary directory temp
|
||||
##2.package all file in the temp directory and renome to destination package_path
|
||||
#######################################################################
|
||||
function make_package()
|
||||
{
|
||||
target_file_copy
|
||||
cd ${BUILD_DIR}/lib*
|
||||
select_package_command
|
||||
|
||||
echo "packaging python..."
|
||||
$package_command "${python_package_name}" ./lib ./psycopg2 >>"$LOG_FILE" 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
die "$package_command ${python_package_name} failed"
|
||||
fi
|
||||
|
||||
mv ${python_package_name} ${BUILD_DIR}/
|
||||
|
||||
echo "install python tools is ${python_package_name} of ${BUILD_DIR} directory " >> "$LOG_FILE" 2>&1
|
||||
echo "success!"
|
||||
}
|
||||
|
||||
#############################################################
|
||||
# main function
|
||||
#############################################################
|
||||
|
||||
# 1. clean environment
|
||||
echo "clean enviroment"
|
||||
echo "[makedb] $(date +%y-%m-%d' '%T): remove ${BUILD_DIR}" >>"$LOG_FILE" 2>&1
|
||||
clean_environment
|
||||
|
||||
|
||||
# 2. build python
|
||||
build_python
|
||||
|
||||
# 3. make python package
|
||||
make_package
|
||||
|
||||
# 4. cp python package to output
|
||||
mkdir ${LOCAL_DIR}/output
|
||||
mv ${BUILD_DIR}/*.tar.gz ${LOCAL_DIR}/output/
|
||||
|
||||
echo "now, python driver package has finished!"
|
||||
|
||||
exit 0
|
||||
|
||||
2
setup.py
2
setup.py
@ -409,7 +409,7 @@ For further information please check the 'doc/src/install.rst' file (also at
|
||||
sys.exit(1)
|
||||
|
||||
define_macros.append(("PG_VERSION_NUM", "%d%02d%02d" %
|
||||
(pgmajor, pgminor, pgpatch)))
|
||||
(9, 2, 4)))
|
||||
|
||||
# enable lo64 if libpq >= 9.3 and Python 64 bits
|
||||
if (pgmajor, pgminor) >= (9, 3) and is_py_64():
|
||||
|
||||
Reference in New Issue
Block a user