File gem_install.sh of Package ruby-common

#! /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
openSUSE Build Service is sponsored by