#!/usr/bin/env 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. # VERSION=${1:-3.0.0-SNAPSHOT} TARGETDIR=${2:-/tmp/target} TOOLSDIR=${3:-/tmp/tools} function getfilename { declare module=$1 declare modtype=$2 if [[ ${modtype} = builtin ]]; then echo "${TARGETDIR}/hadoop-${VERSION}/libexec/tools/${module}.sh" else echo "${TARGETDIR}/hadoop-${VERSION}/libexec/shellprofile.d/${module}.sh" fi } function header { declare fn=$1 cat >>"${fn}" <<-'TOKEN' #!/usr/bin/env 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. # # # # IMPORTANT: This file is automatically generated by hadoop-dist at # -Pdist time. # # TOKEN } function optional_prologue { declare fn=$1 declare module=$2 if [[ -z "${OPTMODS}" ]]; then OPTMODS=${module} else OPTMODS="${OPTMODS},${module}" fi { echo "if hadoop_verify_entry HADOOP_TOOLS_OPTIONS \"${module}\"; then" echo " hadoop_add_profile \"${module}\"" echo "fi" echo "" echo "function _${module}_hadoop_classpath" echo "{" } >> "${fn}" } function builtin_prologue { declare fn=$1 declare module=$2 { echo "" echo "function hadoop_classpath_tools_${module}" echo "{" } >> "${fn}" } function dependencywork { declare fn=$1 declare module=$2 declare depfn=$3 declare depline declare jarname while read -r depline; do jarname=$(echo "${depline}" | awk -F: '{print $2"-"$4".jar"}') if [[ -f "${TARGETDIR}/hadoop-${VERSION}/share/hadoop/tools/lib/${jarname}" ]]; then { echo " if [[ -f \"\${HADOOP_TOOLS_HOME}/\${HADOOP_TOOLS_LIB_JARS_DIR}/${jarname}\" ]]; then" echo " hadoop_add_classpath \"\${HADOOP_TOOLS_HOME}/\${HADOOP_TOOLS_LIB_JARS_DIR}/${jarname}\"" echo " fi" } >> "${fn}" elif [[ -f "${TARGETDIR}/hadoop-${VERSION}/share/hadoop/common/${jarname}" || -f "${TARGETDIR}/hadoop-${VERSION}/share/hadoop/common/lib/${jarname}" ]]; then true else echo "ERROR: ${module} has missing dependencies: ${jarname}" fi done < <(grep compile "${depfn}") { echo " hadoop_add_classpath \"\${HADOOP_TOOLS_HOME}/\${HADOOP_TOOLS_LIB_JARS_DIR}/${module}-${VERSION}.jar\"" echo "}" echo "" } >> "${fn}" } function document_optionals { echo "Rewriting ${TARGETDIR}/hadoop-${VERSION}/etc/hadoop/hadoop-env.sh" sed -e "s^@@@HADOOP_OPTIONAL_TOOLS@@@^${OPTMODS}^" \ "${TARGETDIR}/hadoop-${VERSION}/etc/hadoop/hadoop-env.sh" \ > "${TARGETDIR}/hadoop-${VERSION}/etc/hadoop/hadoop-env.sh.new" mv "${TARGETDIR}/hadoop-${VERSION}/etc/hadoop/hadoop-env.sh.new" \ "${TARGETDIR}/hadoop-${VERSION}/etc/hadoop/hadoop-env.sh" } function process { declare fn declare basefn declare modtype declare module declare newfile declare newdir while read -r fn; do basefn=${fn##*/} module=$(echo "${basefn}" | cut -f1 -d.) modtype=$(echo "${basefn}" | cut -f2 -d.) modtype=${modtype##tools-} newfile=$(getfilename "${module}" "${modtype}") newdir=$(dirname "${newfile}") mkdir -p "${newdir}" if [[ -f "${newfile}" ]]; then rm "${newfile}" fi touch "${newfile}" header "${newfile}" "${module}" "${modtype}_prologue" "${newfile}" "${module}" dependencywork "${newfile}" "${module}" "${fn}" chmod a+rx "${newfile}" done < <(find "${TOOLSDIR}" -name '*.tools-builtin.txt' -o -name '*.tools-optional.txt') document_optionals } process