#! /bin/bash

set -e

# 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,default-gem:,build-root:,gem-binary: -- "$@")
then
    # something went wrong, getopt will put out an error message for us
    exit 1
fi

eval set -- "$options"

gem_binary=gem
defaultgem=
gemfile=
otheropts=
buildroot=

while [ $# -gt 0 ]
do
    case $1 in
    --default-gem) defaultgem=$2 ; shift;;
    --gem-binary) gem_binary="$2" ; shift;;
    --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
$gem_binary install --verbose --local $otheropts
if test -d $RPM_BUILD_ROOT/usr/bin; then
  cd $RPM_BUILD_ROOT/usr/bin
  # backward compat
  bins=`ls -1 *1.9 *2.0 2> /dev/null` || true
  if test -n "$bins"; then 
    for bin in $bins; do 
      mv -v $bin $(echo "$bin" | sed -e 's,2.0$,,; s,1.9$,,')
    done
  fi
fi

if [ -d "$buildroot" ]; then
  find $buildroot -type f -perm /u+x | while read file; do
    # TODO: scripts in ruby/1.9.1 should call ruby1.9 for consistency
    sed -i -e 's,^#!/usr/bin/env ruby,#!/usr/bin/ruby,; s,^#! *[^ ]*/ruby,#!/usr/bin/ruby,' "$file"
  done
  # some windows made gems are broken
  find $buildroot -type d | xargs ls -ld || :
  find $buildroot -type f | xargs ls -l || :
  chmod -R u+w $buildroot
  chmod -R o-w $buildroot
fi

