Commit 2948dee8 by Sam Stephenson

ruby-package

parent 97a48518
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
package_platform() {
echo "$(uname -m)-$(uname -s)" | tr '[A-Z] ' '[a-z]_'
}
resolve_link() { resolve_link() {
$(type -p greadlink readlink | head -1) $1 $(type -p greadlink readlink | head -1) $1
} }
...@@ -24,80 +20,28 @@ abs_dirname() { ...@@ -24,80 +20,28 @@ abs_dirname() {
} }
usage() { usage() {
echo "usage: ruby-package [-v | --verbose] [--resume] DEFINITION" echo "usage: ruby-package <command> [<args>]" >&2
exit 1 exit 1
} }
bin_root="$(abs_dirname "$0")" bin_dir="$(abs_dirname "$0")"
export PATH="${bin_dir}/../libexec:${bin_dir}:$PATH"
verbose="" command="$1"
resume="" command_path="$(command -v ruby-package-"$1" || true)"
while :; do if [ -z "$TMPDIR" ]; then
case "$1" in export TMPDIR="/tmp"
"-v" | "--verbose" ) else
verbose="-v" export TMPDIR="${TMPDIR%/}"
shift
;;
"--resume" )
resume=1
shift
;;
"-"* )
usage
;;
* )
break
;;
esac
done
definition="$1"
if [ -z "$definition" ]; then
usage
fi fi
package="${definition##*/}" if [ -z "$command" ]; then
prefix="/tmp/ruby-build/-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/$package" usage
elif [ -z "$command_path" ]; then
package_dir="${package}.$(package_platform)" echo "ruby-package: ${command}: command not found" >&2
usage
if [ -z "$resume" ]; then
"${bin_root}/ruby-build" $verbose "$definition" "$prefix"
fi fi
cwd="$(pwd)" shift
cd "${prefix}/.." exec "$command_path" "$@"
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"
#!/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"
#!/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
#!/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"
#!/usr/bin/env bash
set -e
echo "$(uname -m)-$(uname -s)" | tr '[A-Z] ' '[a-z]_'
#!/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%/*}" 2>/dev/null
local name="${path##*/}"
path="$(resolve_link "$name" || true)"
done
pwd
cd "$cwd"
}
usage() {
echo "usage: ruby-package unpack PACKAGE_FILE" >&2
exit 1
}
package_file="$1"
if [ -z "$package_file" ]; then
usage
fi
package_path="$(abs_dirname "$package_file")/${package_file##*/}"
if [ ! -f "$package_path" ]; then
echo "error: file not found: $1" >&2
exit 1
fi
root="${TMPDIR}/ruby-package.$$"
rm -fr "$root"
mkdir -p "$root"
cd "$root"
tar xzf "$package_path"
cd *
package_root="$(pwd)"
package_name="$(cat "$package_root"/metadata/package)"
package_name_with_platform="${package_root##*/}"
if [ "${package_name}.$(ruby-package platform)" != "$package_name_with_platform" ]; then
echo "error: invalid package format" >&2
exit 2
fi
echo "$package_root"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment