Commit 2948dee8 authored by Sam Stephenson's avatar Sam Stephenson
Browse files

ruby-package

parent 97a48518
Loading
Loading
Loading
Loading
+16 −72
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

package_platform() {
  echo "$(uname -m)-$(uname -s)" | tr '[A-Z] ' '[a-z]_'
}

resolve_link() {
  $(type -p greadlink readlink | head -1) $1
}
@@ -24,80 +20,28 @@ abs_dirname() {
}

usage() {
  echo "usage: ruby-package [-v | --verbose] [--resume] DEFINITION"
  echo "usage: ruby-package <command> [<args>]" >&2
  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"
bin_dir="$(abs_dirname "$0")"
export PATH="${bin_dir}/../libexec:${bin_dir}:$PATH"

package_dir="${package}.$(package_platform)"
command="$1"
command_path="$(command -v ruby-package-"$1" || true)"

if [ -z "$resume" ]; then
  "${bin_root}/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"
if [ -z "$TMPDIR" ]; then
  export TMPDIR="/tmp"
else
    # binary match
    binary="${binary% matches}"
    echo "$binary" >> "../${package_dir}/metadata/binary-files"
  export TMPDIR="${TMPDIR%/}"
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"
if [ -z "$command" ]; then
  usage
elif [ -z "$command_path" ]; then
  echo "ruby-package: ${command}: command not found" >&2
  usage
fi

echo "${package_dir}.rubypackage"
shift
exec "$command_path" "$@"
+99 −0
Original line number Diff line number Diff line
#!/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
  "${bin_root}/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"
+33 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

usage() {
  echo "usage: ruby-package fetch PACKAGE" >&2
  exit 1
}

if [ -z "$1" ]; then
  usage
fi
package_name="${1}.$(ruby-package platform).rubypackage"

package_repo="${RUBY_PACKAGE_REPO%/}"
if [ -z "$ruby_package_repo" ]; then
  package_repo="https://github.com/downloads/sstephenson/ruby-packages"
fi

url="${package_repo}/${package_name}"
filename="${TMPDIR}/${package_name}.$$"

set +e
curl -Lfs "$url" > "$filename"
result="$?"
set -e

if [ "$result" -eq 22 ]; then
  exit 3
elif [ ! -f "$filename" ]; then
  exit 2
else
  echo "$filename"
fi
+41 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

usage() {
  echo "usage: ruby-package install PACKAGE DESTINATION" >&2
  exit 1
}

cleanup_packages() {
  if [ -n "$package_root" ]; then
    rm -rf "${package_root}/.."
  fi

  if [ -n "$package_file" ]; then
    if [ "$package" != "$package_file" ]; then
      rm -rf "$package_file"
    fi
  fi
}

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

destination="$2"
if [ -z "$destination" ]; then
  usage
fi

if [ -f "$package" ]; then
  package_file="$package"
else
  package_file="$(ruby-package fetch "$package")"
fi

trap cleanup_packages SIGINT SIGTERM EXIT

package_root="$(ruby-package unpack "$package_file")"

"${package_root}/bin/ruby-package-install" "$destination"
+4 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

echo "$(uname -m)-$(uname -s)" | tr '[A-Z] ' '[a-z]_'
Loading