| #!/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. |
| |
| # ---------------------------------------------------------------------- |
| # This script is invoked during the Impala build process, and creates |
| # a distributable python package of the Impala shell. The resulting |
| # archive will be saved to: |
| # |
| # ${IMPALA_HOME}/shell/dist/impala_shell-<version>.tar.gz |
| # |
| # Until the thrift-generated python files in ${IMPALA_HOME}/shell/gen-py |
| # have been created by the build process, this script will not work. |
| # It also relies upon the impala_build_version.py file created by the |
| # parent packaging script, ${IMPALA_HOME}/shell/make_shell_tarball.sh, |
| # which needs to be run before this script will work. |
| # |
| # After those files exist, however, this script can be run again at will. |
| |
| set -eu -o pipefail |
| |
| WORKING_DIR="$(cd "$(dirname "$0")" ; pwd -P )" |
| SHELL_HOME="${IMPALA_HOME}"/shell |
| STAGING_DIR="${WORKING_DIR}"/staging |
| DIST_DIR="${DIST_DIR:-$WORKING_DIR/dist}" |
| PACKAGE_DIR="${STAGING_DIR}"/impala_shell_package |
| MODULE_LIB_DIR="${PACKAGE_DIR}"/impala_shell |
| NO_CLEAN_DIST="${NO_CLEAN_DIST:-}" |
| |
| THRIFT_GEN_PY_DIR=${SHELL_HOME}/build/thrift-11-gen/gen-py |
| THRIFT_PY_ROOT="${IMPALA_TOOLCHAIN_PACKAGES_HOME}/thrift-${IMPALA_THRIFT11_VERSION}" |
| |
| assemble_package_files() { |
| mkdir -p "${MODULE_LIB_DIR}" |
| |
| cp -r "${THRIFT_GEN_PY_DIR}"/* "${MODULE_LIB_DIR}" |
| cp -r "${THRIFT_PY_ROOT}/python/lib/python2.7/site-packages/thrift" "${MODULE_LIB_DIR}" |
| |
| cp "${WORKING_DIR}/__init__.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/compatibility.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/impala_shell.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/impala_client.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/option_parser.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/shell_output.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/impala_shell_config_defaults.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/TSSLSocketWithWildcardSAN.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/ImpalaHttpClient.py" "${MODULE_LIB_DIR}" |
| cp "${SHELL_HOME}/shell_exceptions.py" "${MODULE_LIB_DIR}" |
| |
| cp "${SHELL_HOME}/packaging/README.md" "${PACKAGE_DIR}" |
| cp "${SHELL_HOME}/packaging/MANIFEST.in" "${PACKAGE_DIR}" |
| cp "${SHELL_HOME}/packaging/requirements.txt" "${PACKAGE_DIR}" |
| cp "${SHELL_HOME}/packaging/setup.py" "${PACKAGE_DIR}" |
| |
| cp "${IMPALA_HOME}/LICENSE.txt" "${PACKAGE_DIR}" |
| } |
| |
| create_distributable_python_package() { |
| # Generate a new python package tarball in ${IMPALA_HOME}/shell/dist |
| if [[ "${NO_CLEAN_DIST}" != "true" ]]; then |
| rm -rf "${DIST_DIR}" |
| fi |
| |
| mkdir -p "${DIST_DIR}" |
| |
| pushd "${PACKAGE_DIR}" |
| echo "Building package..." |
| PACKAGE_TYPE="${PACKAGE_TYPE:-}" OFFICIAL="${OFFICIAL:-}" \ |
| python setup.py sdist --dist-dir "${DIST_DIR}" |
| popd |
| |
| if [[ "${NO_CLEAN_DIST}" != "true" ]]; then |
| rm -rf "${STAGING_DIR}" |
| fi |
| } |
| |
| assemble_package_files |
| create_distributable_python_package |