#!/usr/bin/env bash
set -e

resolve_link() {
  $(type -p greadlink readlink | head -1) $1
}

abs_dirname() {
  local cwd="$(pwd)"
  local path="$1"

  while [ -n "$path" ]; do
    cd "${path%/*}"
    local name="${path##*/}"
    path="$(resolve_link "$name" || true)"
  done

  pwd
  cd "$cwd"
}

usage() {
  echo "usage: ruby-package build [-v | --verbose] [--resume] DEFINITION"
  exit 1
}

bin_root="$(abs_dirname "$0")"

verbose=""
resume=""

while :; do
  case "$1" in
    "-v" | "--verbose" )
      verbose="-v"
      shift
      ;;
    "--resume" )
      resume=1
      shift
      ;;
    "-"* )
      usage
      ;;
    * )
      break
      ;;
  esac
done

definition="$1"
if [ -z "$definition" ]; then
  usage
fi

package="${definition##*/}"
prefix="/tmp/ruby-build/-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/$package"

package_dir="${package}.$(ruby-package platform)"

if [ -z "$resume" ]; then
  ruby-build $verbose "$definition" "$prefix"
fi

cwd="$(pwd)"
cd "${prefix}/.."

mkdir -p "${package_dir}/bin"
cp "${bin_root}/../share/ruby-package/ruby-package-install" "${package_dir}/bin"
cp "${bin_root}/../share/ruby-package/ruby-package-rewrite-text" "${package_dir}/bin"
cc -Wall "${bin_root}/../share/ruby-package/ruby-package-rewrite-binary.c" -o "${package_dir}/bin/ruby-package-rewrite-binary"

mkdir -p "${package_dir}/metadata"
echo -n "$prefix" > "${package_dir}/metadata/prefix"
echo -n "$package" > "${package_dir}/metadata/package"

cd "$package"

while read line; do
  binary="${line#Binary file }"
  if [ "$line" = "$binary" ]; then
    # plain text match
    text="${line%%:*}"
    echo "$text" >> "../${package_dir}/metadata/text-files"
  else
    # binary match
    binary="${binary% matches}"
    echo "$binary" >> "../${package_dir}/metadata/binary-files"
  fi
done < <( grep -m 1 -R "$prefix" * )

tar cf "../${package_dir}/package.tar" *

cd ..

tar czf "${cwd}/${package_dir}.rubypackage" "$package_dir"
rm -fr "$package_dir"

echo "${package_dir}.rubypackage"
