This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/ThirdParty/tools/makeThirdPartyFunctionsForRPM
2013-12-11 16:09:41 +00:00

254 lines
7.1 KiB
Bash
Executable file

#---------------------------------*- sh -*-------------------------------------
# ========= |
# \\ / F ield | foam-extend: Open Source CFD
# \\ / O peration |
# \\ / A nd | For copyright notice see file Copyright
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
# This file is part of foam-extend.
#
# foam-extend is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# foam-extend is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
#
# File
# makeThirdPartyFunctionsForRPM
#
# Description
# Functions for managing the third-party packages with RPM
#
#------------------------------------------------------------------------------
# define the build and the system architecture type
buildBase=$WM_THIRD_PARTY_DIR/rpmBuild
architecture=`rpm --eval "%{_target_cpu}"`
RPM_CMD='rpm'
RPM_CMD_XTRA_OPTIONS=''
# Adjust the rpm command options on Ubuntu/Debian based systems
${RPM_CMD} --force-debian >& /dev/null
RETVAL=$?
[ $RETVAL -eq 0 ] && RPM_CMD_XTRA_OPTIONS="--force-debian" #Success : Debian system
echo ""
echo "This system rpm command: ${RPM_CMD} ${RPM_CMD_XTRA_OPTIONS}"
echo ""
#
# Download/Build/Uninstall/Install a package
#
rpm_make()
{
# Avoid word splitting on 'space'
IFS=$'\n'
# sort arguments
_PACKAGE=''
_SPECFILE=''
_PACKAGE_URL=''
_ADDITIONALFLAGS=''
_RPMFILENAME=''
while getopts p:s:u:f:n:a: flags
do
case $flags in
p) _PACKAGE=$OPTARG
;;
u) _PACKAGE_URL=$OPTARG
;;
s) _SPECFILE=$OPTARG
;;
f) _ADDITIONALFLAGS=$OPTARG
;;
n) _RPMFILENAME=$OPTARG
;;
a) architecture=$OPTARG
;;
esac
done
echo "Package name : $_PACKAGE"
echo "Package URL : $_PACKAGE_URL"
echo "RPM spec file name: $_SPECFILE"
echo "Additional flags : $_ADDITIONALFLAGS"
# Shift options
shift `expr $OPTIND - 1`
# Make sure the ThirdParty environment is up-to-date
echo "Updating the ThirdParty environment variables before building package $_PACKAGE"
. $WM_PROJECT_DIR/etc/settings.sh
if [ "$_RPMFILENAME" = "" ]; then
rpmName=$_PACKAGE-$WM_OPTIONS.$architecture
else
# Filename for the RPM was overridden from the command line
rpmName=$_RPMFILENAME
fi
rpmFile=$buildBase/RPMS/$architecture/$rpmName.rpm
echo "RPM file name : $rpmFile"
# We check immediatly if the RPM binary package is available in the local RPMs vault.
# If so, we basically uninstall/reinstall the package. This is handy for installation
# on machines with no Internet access, so without downloading capabilities. If one wants to
# force the recompilation of a given package, just make sure to move the corresponding RPM
# binary package away from the local RPM vault.
#
if [ ! -e "$rpmFile" ]; then
#
# The package's RPM is absent. We build from the package source tarball
#
cd $buildBase
#
# Do we need to download the package using the supplied URL
if [ -n "$_PACKAGE_URL" ]; then
packageTarBall=`basename $_PACKAGE_URL`
if [ ! -e "SOURCES/$packageTarBall" ]; then
echo "Download $packageTarBall from : $_PACKAGE_URL"
( cd SOURCES; wget --no-check-certificate $_PACKAGE_URL )
fi
fi
echo "Making package $_PACKAGE using RPM."
rpm_build ${_PACKAGE} ${_SPECFILE} ${_ADDITIONALFLAGS} "$@"
fi
# Install RPM package if not done already
if [ "$architecture" = "noarch" ]; then
installDir=$WM_THIRD_PARTY_DIR/packages/$_PACKAGE/platforms/noarch
else
installDir=$WM_THIRD_PARTY_DIR/packages/$_PACKAGE/platforms/$WM_OPTIONS
fi
if [ ! -e "$installDir" ]; then
echo "Installing package: $_PACKAGE"
rpm_uninstall $_PACKAGE $rpmName
rpm_install $_PACKAGE $rpmName $rpmFile
else
echo "Package $_PACKAGE is already installed"
fi
unset _PACKAGE
unset _SPECFILE
unset _PACKAGE_URL
unset _ADDITIONALFLAGS
unset _RPMFILENAME
echo "Done installing package $_PACKAGE"
echo ""
}
#
# Build a RPM file using the package SPEC file
#
rpm_build()
{
package="$1"
specFile="$2"
shift 2
cd $buildBase
[ -e ./SPECS/$specFile ] || {
echo "rpm_build: Error: missing SPEC file for package $package. Aborting."
exit -1
}
#Build RPM package
echo "Building package $package using SPEC file : $specFile. Optional args: $@"
#rpmbuild --define "_topdir $buildBase" --dbpath $buildBase/rpmDB --clean -bb ./SPECS/$specFile "$@"
#
# Let's keep the compilation directory alive for now in order to facilitate postmortems of failed compilations
rpmbuild --define "_topdir $buildBase" --dbpath $buildBase/rpmDB -bb ./SPECS/$specFile "$@"
}
#
# Uninstall a package using its RPM
#
rpm_uninstall()
{
package="$1"
rpmName="$2"
cd $buildBase
echo " Uninstalling $package using RPM: $rpmName"
${RPM_CMD} ${RPM_CMD_XTRA_OPTIONS} -e $rpmName --dbpath $buildBase/rpmDB --norepackage >& /dev/null
# Note: rpm will rant when uninstalling packages with an error message
# starting with "error: LOOP:"
# Googling about this problem shows that this error is benign, and
# is related to the list of the files included in the RPM, and the
# syntax used in the SPEC file. Need to revisit later... MB
}
#
# Install a package using its relocatable RPM
#
rpm_install()
{
package="$1";
rpmName="$2";
rpmFile="$3";
echo " Installing $package using RPM file: $rpmFile";
${RPM_CMD} ${RPM_CMD_XTRA_OPTIONS} -ivh \
$rpmFile \
--dbpath $buildBase/rpmDB --force --nodeps;
}
#
# Populate the local RPM vault with comand-line supplied list of RPMs
#
rpm_populateRPMvault()
{
rpmVault=$buildBase/RPMS/$architecture
echo " Local RPM vault location: $rpmVault"
echo ""
echo " Moving the following RPMs to the local RPM vault: `echo $@`"
mkdir -p $rpmVault
mv $@ $rpmVault
echo ""
echo " Current content of the local RPM vault:"
ls -axlt $rpmVault
echo ""
}
#
# Remove an installed package
#
uninstallPackage()
{
pkg="$1";
if [ -d $WM_THIRD_PARTY_DIR/packages/${pkg} ]; then
set -x
rm -f $WM_THIRD_PARTY_DIR/rpmBuild/RPMS/$architecture/${pkg}*.rpm
rm -f $WM_THIRD_PARTY_DIR/rpmBuild/TGZS/$architecture/${pkg}.tgz
rm -rf $WM_THIRD_PARTY_DIR/rpmBuild/BUILD/${pkg}*
rm -rf $WM_THIRD_PARTY_DIR/packages/$pkg
set +x
else
echo "Package ${pkg} is already removed."
fi
}
# ----------------------------------------------------------------- end-of-file