ruby-common/gem_install.sh

130 lines
4.0 KiB
Bash

#! /bin/bash
set -e
shopt -s nullglob
# options may be followed by one colon to indicate they have a required argument
if ! options=$(getopt -o dEf -l ignore-dependencies,force,no-rdoc,rdoc,no-ri,ri,env-shebang,no-env-shebang,symlink-binaries,default-gem:,build-root:,doc-files:,gem-name:,gem-version:,gem-suffix:,gem-binary: -- "$@")
then
# something went wrong, getopt will put out an error message for us
exit 1
fi
eval set -- "$options"
gem_binary="/usr/bin/gem.* /usr/bin/gem[0-9].[0-9]"
defaultgem=
gemfile=
otheropts=
buildroot=
docfiles=
gemname=
gemversion=
gemsuffix=
ua_dir="/etc/alternatives"
docdir="/usr/share/doc/packages"
# once we start fixing packages set this to true
symlinkbinaries="false"
while [ $# -gt 0 ]
do
case $1 in
--default-gem) defaultgem=$2 ; shift;;
--gem-binary) echo "Ignored --gem-binary option" >&2 ; shift;;
--doc-files) docfiles="$2" ; shift;;
--gem-name) gemname="$2" ; shift;;
--gem-version) gemversion="$2" ; shift;;
--gem-suffix) gemsuffix="$2" ; shift;;
--symlink-binaries) symlinkbinaries="true" ;;
--build-root) otheropts="$otheropts $1=$2"; buildroot=$2; shift;;
(--) ;;
(-*) otheropts="$otheropts $1";;
(*) gemfile=$1; otheropts="$otheropts $1"; break;;
esac
shift
done
if [ "x$gemfile" = "x" ] ; then
gemfile=$(find . -maxdepth 2 -type f -name "$defaultgem")
# if still empty, we pick the sources
if [ "x$gemfile" = "x" ] ; then
gemfile=$(find $RPM_SOURCE_DIR -name "$defaultgem")
fi
otheropts="$otheropts $gemfile"
fi
set -x
mkdir -p "${RPM_BUILD_ROOT}${ua_dir}"
mkdir -p "${RPM_BUILD_ROOT}$docdir"
for gem in $gem_binary ; do
$gem install --verbose --local $otheropts
# get the ruby interpreter
ruby="${gem#/usr/bin/gem}"
if [[ $ruby == [0-9]* ]] ; then
destruby=".ruby$ruby"
else
destruby="$ruby"
fi
rpmname="${destruby#.}-rubygem-${gemname}${gemsuffix:+$gemsuffix}"
if test -d $RPM_BUILD_ROOT/usr/bin; then
pushd $RPM_BUILD_ROOT/usr/bin
if [ "x$symlinkbinaries" = "xtrue" ] ; then
for i in *$ruby ; do
unversioned="${i%$ruby}"
fullyversioned="$unversioned$destruby-${gemversion}"
rubyversioned="$unversioned$destruby"
gemversioned="$unversioned-$gemversion"
mv -v ${i} $fullyversioned
perl -p -i -e "s/>= 0/= $gemversion/" $fullyversioned
if [ ! -L ${RPM_BUILD_ROOT}${ua_dir}/${unversioned} ] ; then
ln -sv ${unversioned} ${RPM_BUILD_ROOT}${ua_dir}/${unversioned}
fi
# unversioned
if [ ! -L $unversioned ] ; then
ln -sv ${ua_dir}/${unversioned} $unversioned
fi
# ruby versioned
if [ ! -L ${RPM_BUILD_ROOT}${ua_dir}/$rubyversioned ] ; then
ln -sv ${rubyversioned} ${RPM_BUILD_ROOT}${ua_dir}/$rubyversioned
fi
if [ ! -L $rubyversioned ] ; then
ln -sv ${ua_dir}/${rubyversioned} $rubyversioned
fi
# gem versioned
if [ ! -L ${RPM_BUILD_ROOT}${ua_dir}/$gemversioned ] ; then
ln -sv $gemversioned ${RPM_BUILD_ROOT}${ua_dir}/$gemversioned
fi
if [ ! -L $gemversioned ] ; then
ln -sv ${ua_dir}/$gemversioned $gemversioned
fi
done ;
else
for i in *$ruby ; do
# lets undo the format-executable to avoid breaking more spec files
unversioned="${i%$ruby}"
mv -v $i $unversioned
done
fi
popd
fi
gemdir="$($gem env gemdir)"
if [ "x$docfiles" != "x" ] ; then
mkdir -p "${RPM_BUILD_ROOT}${docdir}/${rpmname}"
for i in $docfiles ; do
ln -sfv "${gemdir}/gems/${gemname}-${gemversion}/${i}" "${RPM_BUILD_ROOT}${docdir}/${rpmname}/${i}"
done
fi
if [ -d "$buildroot" ]; then
find ${buildroot}${gemdir} -type f -perm /u+x | while read file; do
# TODO: scripts in ruby/1.9.1 should call ruby1.9 for consistency
perl -p -i -e "s,^#!/usr/bin/env ruby,#!/usr/bin/ruby,; s,^#! *[^ ]*/ruby\S*,#!/usr/bin/ruby$ruby," "$file"
done
# some windows made gems are broken
find $buildroot -ls
chmod -R u+w $buildroot
chmod -R o-w $buildroot
fi
done