rbenv-ruby-build/libexec/ruby-package-build
2011-10-18 17:11:29 -05:00

99 lines
2.1 KiB
Bash
Executable file

#!/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"