Commit 7311e0dc authored by Sam Stephenson's avatar Sam Stephenson
Browse files

WIP on binary packages

parent 69a4691a
Loading
Loading
Loading
Loading

bin/ruby-package

0 → 100755
+45 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

definition="$1"
if [ -z "$definition" ]; then
  echo "usage: ruby-package DEFINITION"
fi

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


# ruby-build "$definition" "$prefix"
cwd="$(pwd)"
cd "${prefix}/.."

# FIXME don't assume share is in cwd
mkdir -p "${package}.rubypackage/bin"
cp "${cwd}/share/ruby-package/"* "${package}.rubypackage/bin"

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

cd "$package"

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

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

cd ..

tar czf "${cwd}/${package}.rubypackage.tar.gz" "${package}.rubypackage"
rm -fr "${package}.rubypackage"
+49 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

prefix="$1"
if [ -z "$prefix" ]; then
  echo "usage: ruby-package-install PREFIX" >&2
  exit 1
fi

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"
}

bin_root="$(abs_dirname "$0")"
package_root="${bin_root}/.."
package_prefix="$(cat "${package_root}/metadata/prefix")"
package="$(cat "${package_root}/metadata/package")"

mkdir -p "$prefix"
cd "$prefix"
prefix="$(pwd)"

rewrite() {
  kind="$1"
  while read file; do
    path="${prefix}/$file"
    cp "$path" "${path}.orig"
    "${bin_root}/ruby-package-rewrite-$kind" "$package_prefix" "$prefix" < "${path}.orig" > "$path"
    rm "${path}.orig"
  done < "${package_root}/metadata/${kind}-files"
}

tar xzf "${package_root}/package.tar"
rewrite binary
rewrite text
+40 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

src_prefix="$1"
dst_prefix="$2"

if [ -z "$src_prefix" ] || [ -z "$dst_prefix" ]; then
  echo "usage: ruby-package-install-binary SRC_PREFIX DST_PREFIX" >&2
  exit 1
fi

hexify() {
  xxd -c 1 -p | sed 's/^00$/,/' | tr ',\n' '\n '
}

search_hex="$(echo -n "$src_prefix" | hexify)"
replace_hex="$(echo -n "$dst_prefix" | hexify)"

hexify |
awk '
  BEGIN {
    search_hex=" '"$search_hex"'";
    replace_hex=" '"$replace_hex"'";
    split(search_hex, search);
    split(replace_hex, replace);
    search_len=length(search);
    replace_len=length(replace);
  }
  { matched=0 }
  / '"$search_hex"'/ {
    result=replace_hex substr($0, length(search_hex) + 1);
    for (i=length(replace)+1; i<=length(search); i++)
      result=result "00 ";
    print result;
    matched=1
  }
  { if (matched == 0) print $0 }
' |
sed 's/$/00/' |
xxd -p -r
+12 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -e

src_prefix="$1"
dst_prefix="$2"

if [ -z "$src_prefix" ] || [ -z "$dst_prefix" ]; then
  echo "usage: ruby-package-install-text SRC_PREFIX DST_PREFIX" >&2
  exit 1
fi

sed "s:${src_prefix}:${dst_prefix}:g"