ruoyunbai 2bb9621e30 1
2021-09-29 21:06:16 +08:00

360 lines
9.3 KiB
Bash

#!/bin/bash
POSIXLY_CORRECT=1
# If there are any errors at all, fail.
set -e
usage() {
echo "Usage: torque-build [<options>]"
echo " Where <options> can be one of:"
echo " -h|--help Print this help page"
echo " -r|--root-path <path> Root path of the MOAB source code"
echo " (default is the current"
echo " directory)"
echo " -d|--debug Enable debug mode"
echo " -q|--quiet Enable quiet mode"
echo " -p|--hwloc-path <path> Path to the hwloc package (required by cgroups)"
echo " (default is /usr/local)"
echo " -v|--verbose Enable verbose mode"
echo
echo " -t|--tarball Make the TORQUE distribution tarball"
echo " -T|--no-tarball Do not make the TORQUE distribution tarball"
echo " (takes precedent over quiet mode)"
echo " -a|--adaptive-rpm Make the adaptive RPM (default)"
echo " -A|--no-adaptive-rpm Do not make the adaptive RPM"
echo ""
echo " -c|--coverity <cov-build> Run coverity using the <cov-build>"
echo " script (e.g.,"
echo " /opt/coverity/default/bin/cov-build)"
echo " -C|--no-coverity Do not run coverity (default)"
echo ""
echo " -g|--enable-cgroups Enable cgroups (default)"
echo " -G|--disable-cgroups Do not enable cgroups"
echo " -u|--unit-tests Run unit-tests (default)"
echo " -U|--no-unit-tests Do not run unit tests"
echo ""
echo " -j <number> Passes '-j <number>' to make"
echo " ('3' by default)"
exit 1
}
# Default values for options
root_path="${PWD}"
verbose=0
debug=0
quiet=0
adaptive_rpm=1
coverity=0
unit_tests=1
parallel=3
tarball=1
cgroups=1
hwloc_path=/usr/local
configure_options=""
# To be set later
version=
release=
cov_build=
while [ -n "${1}" ]
do
case "${1}" in
-h|--help)
usage
;;
-r|--root-path)
shift
root_path="${1}"
shift
;;
-p|--hwloc-path)
shift
hwloc_path="${1}"
shift
;;
-n|--name-suffix)
shift
name_suffix="${1}"
shift
;;
-d|--debug)
debug=1
verbose=1
shift
;;
-q|--quiet)
quiet=1
shift
;;
-v|--verbose)
verbose=1
shift
;;
-a|--adaptive-rpm)
adaptive_rpm=1
shift
;;
-A|--no-adaptive-rpm)
adaptive_rpm=0
shift
;;
-t|--tarball)
tarball=1
shift
;;
-T|--no-tarball)
tarball=0
shift
;;
-c|--coverity)
coverity=1
shift
cov_build="${1}"
shift
;;
-C|--no-coverity)
coverity=0
shift
;;
-u|--unit-tests)
unit_tests=1
shift
;;
-U|--no-unit-tests)
unit_tests=0
shift
;;
-j)
shift
parallel="${1}"
shift
;;
-g|--enable-cgroups)
cgroups=1
shift
;;
-G|--disable-cgroups)
cgroups=0
with_option="$with_option --without cgroups --without hwloc"
shift
;;
*)
echo "Invalid argument '${1}' specified." >&2
usage
;;
esac
done
# Argument processing
if [ ${tarball} -eq 0 -a \
${adaptive_rpm} -eq 0 -a \
${coverity} -eq 0 -a \
${unit_tests} -eq 0 ]
then
echo "No artifacts or tests were requested." >&2
usage
fi
# Root path needs to be an absolute path
if ! echo "${root_path}" | grep -q -E '^(/[^/]*)+$'
then
root_path="${PWD}/${root_path}"
fi
if echo "${root_path}" | grep -q -E '^/+$'
then
echo "The root path to the source code must not be '/'." >&2
usage
fi
if [ ! -s "${root_path}/configure.ac" -o ! -d "${root_path}/buildutils" ] || \
! grep -q -E 'AC_INIT[[:blank:]]*\([[:blank:]]*\[torque\]' \
"${root_path}/configure.ac"
then
echo "It appears that '${root_path}' doesn't describe the root source" >&2
echo " path for TORQUE." >&2
usage
fi
cd "${root_path}"
if [ ${verbose} -ne 0 ]
then
set -x
fi
if [ ${verbose} -ne 0 ]
then
quiet=0
fi
quiet_redirect=""
if [ ${quiet} -ne 0 ]
then
quiet_redirect=">/dev/null"
fi
if ! echo "${parallel}" | grep -q -E '^[[:digit:]]+$'
then
echo "Argument provided to the '-j' option must be a number." >&2
usage
fi
epoch=`date +%s`
print_build_date="`date --date="@$epoch"`"
branch=`git branch | awk '/^[*]/ { print $2}'`
version=`buildutils/determine.version`
release=`buildutils/determine.release`
distro=`buildutils/determine.distro -c`
if [ -z "${version}" ]
then
echo "A <version> could not be found." >&2
echo " Perhaps this is not a TORQUE repository?" >&2
usage
fi
if [ "${release}" = "_" ]
then
echo "Something went wrong in creating the release number." >&2
usage
fi
echo "Started ${0}, version ${version}, release ${release}." \
${quiet_redirect}
if [ $cgroups -ne 0 ]
then
cgroupsopts="--enable-cgroups"
configure_options="$configure_options --enable-cgroups --with-hwloc-path=$hwloc_path"
else
hwloc_path=none
cgroupsopts="--disable-cgroups"
fi
# set so child makefiles know this
export FROM_TORQUE_BUILD=1
echo $(git rev-parse HEAD) > current_hash
sh autogen.sh
./configure $configure_options
if [ ${coverity} -ne 0 -o ${unit_tests} -ne 0 ]
then
./configure --with-debug --with-check
make -j${parallel} clean || :
fi
if [ ${coverity} -ne 0 ]
then
if [ ! -x "${cov_build}" ]
then
echo "'${cov_build}' is not a valid script." >&2
usage
fi
"${cov_build}" --dir cov-int make
fi
if [ ${unit_tests} -ne 0 ]
then
make -j${parallel}
chmod +x src/test/test_scripts/*
make check
make check | ./parse_cov_results.py
fi
if [[ ${version} =~ ^[0-9]+\.[0-9]+((\.[0-9]+)*\.?(a|b|r?c)[0-9]+|(\.[0-9]+)+(\.h[0-9]+)?)$ ]]
then
package_version="${version}"
release=1
else
package_version="${version}-${release}"
fi
distdir="torque-${package_version}"
if [ ${tarball} -ne 0 ]
then
make -j${parallel} clean
make -j${parallel} distclean
sh autogen.sh
./configure $configure_options
make distcheck -j${parallel} distdir="${distdir}"
fi
# TORQUE RPMs ##################################################################
if [ ${adaptive_rpm} -ne 0 ]
then
# blow away old build stuff
rm -rf buildutils/rpmbuild
mkdir -p buildutils/rpmbuild/tmp
chmod a+rwxt buildutils/rpmbuild/tmp
mkdir -p buildutils/rpmbuild/BUILD
mkdir -p buildutils/rpmbuild/SOURCES
mkdir -p buildutils/rpmbuild/SPECS
mkdir -p buildutils/rpmbuild/RPMS/{i386,i686,noarch,x86_64}
# ignore SP version suffix for SLES12
echo "${distro}" | fgrep -q sles12. && distro=sles12
if [ "${distro}" = el7 ]; then
cp buildutils/torque.adaptive.spec.el7 \
buildutils/rpmbuild/SPECS/torque.adaptive.spec
elif [ "${distro}" = el6 ]; then
cp buildutils/torque.adaptive.spec.el6 \
buildutils/rpmbuild/SPECS/torque.adaptive.spec
elif [ "${distro}" = sles12 ]; then
cp buildutils/torque.adaptive.spec.sles12 \
buildutils/rpmbuild/SPECS/torque.adaptive.spec
else
echo "RPM building not supported for distro $distro" >&2
exit 1
fi
source_file=${distdir}.tar.gz
if [ ! -s "${source_file}" ]
then
echo "TORQUE tarball '${source_file}' not found!" >&2
exit 1
fi
cp -f "${source_file}" buildutils/rpmbuild/SOURCES
verbose_option=
if [ ${debug} -ne 0 ]
then
verbose_option="-vv"
elif [ ${quiet} -ne 0 ]
then
verbose_option="--quiet"
elif [ ${verbose} -ne 0 ]
then
verbose_option="-v"
else
verbose_option=""
fi
rpmbuild_option="-ba"
test ${quiet} -eq 0 && echo "Making adaptive rpm..."
mkdir -p buildutils/rpmbuild/moab-workload-manager-${version}
rpmbuild ${verbose_option} ${rpmbuild_option} ${with_option} \
buildutils/rpmbuild/SPECS/torque.adaptive.spec \
--buildroot "%{_topdir}/moab-torque${version}" \
--define "_topdir ${root_path}/buildutils/rpmbuild" \
--define "_rpmdir ${root_path}/buildutils/rpmbuild/RPMS" \
--define "_sourcedir ${root_path}/buildutils/rpmbuild/SOURCES" \
--define "_specdir ${root_path}/buildutils/rpmbuild/SPECS" \
--define "_tmppath ${root_path}/buildutils/rpmbuild/tmp" \
--define "_hwlocpath $hwloc_path" \
--define "_cgroupsopt ${cgroupsopts}" \
--define "version ${version}" \
--define "release ${release}.${distro}" \
--define "source_file ${source_file}" \
--define "base_name ${distdir}"
fi