Skip to content

Commit 7311e0d

Browse files
committed
WIP on binary packages
1 parent 69a4691 commit 7311e0d

File tree

4 files changed

+146
-0
lines changed

4 files changed

+146
-0
lines changed

bin/ruby-package

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
definition="$1"
5+
if [ -z "$definition" ]; then
6+
echo "usage: ruby-package DEFINITION"
7+
fi
8+
9+
package="${definition##*/}"
10+
prefix="/tmp/ruby-build/-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/$package"
11+
12+
13+
# ruby-build "$definition" "$prefix"
14+
cwd="$(pwd)"
15+
cd "${prefix}/.."
16+
17+
# FIXME don't assume share is in cwd
18+
mkdir -p "${package}.rubypackage/bin"
19+
cp "${cwd}/share/ruby-package/"* "${package}.rubypackage/bin"
20+
21+
mkdir -p "${package}.rubypackage/metadata"
22+
echo -n "$prefix" > "${package}.rubypackage/metadata/prefix"
23+
echo -n "$package" > "${package}.rubypackage/metadata/package"
24+
25+
cd "$package"
26+
27+
while read line; do
28+
binary="${line#Binary file }"
29+
if [ "$line" = "$binary" ]; then
30+
# plain text match
31+
text="${line%%:*}"
32+
echo "$text" >> "../${package}.rubypackage/metadata/text-files"
33+
else
34+
# binary match
35+
binary="${binary% matches}"
36+
echo "$binary" >> "../${package}.rubypackage/metadata/binary-files"
37+
fi
38+
done < <( grep -m 1 -R "$prefix" * )
39+
40+
tar cf "../${package}.rubypackage/package.tar" *
41+
42+
cd ..
43+
44+
tar czf "${cwd}/${package}.rubypackage.tar.gz" "${package}.rubypackage"
45+
rm -fr "${package}.rubypackage"
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
prefix="$1"
5+
if [ -z "$prefix" ]; then
6+
echo "usage: ruby-package-install PREFIX" >&2
7+
exit 1
8+
fi
9+
10+
resolve_link() {
11+
$(type -p greadlink readlink | head -1) $1
12+
}
13+
14+
abs_dirname() {
15+
local cwd="$(pwd)"
16+
local path="$1"
17+
18+
while [ -n "$path" ]; do
19+
cd "${path%/*}"
20+
local name="${path##*/}"
21+
path="$(resolve_link "$name" || true)"
22+
done
23+
24+
pwd
25+
cd "$cwd"
26+
}
27+
28+
bin_root="$(abs_dirname "$0")"
29+
package_root="${bin_root}/.."
30+
package_prefix="$(cat "${package_root}/metadata/prefix")"
31+
package="$(cat "${package_root}/metadata/package")"
32+
33+
mkdir -p "$prefix"
34+
cd "$prefix"
35+
prefix="$(pwd)"
36+
37+
rewrite() {
38+
kind="$1"
39+
while read file; do
40+
path="${prefix}/$file"
41+
cp "$path" "${path}.orig"
42+
"${bin_root}/ruby-package-rewrite-$kind" "$package_prefix" "$prefix" < "${path}.orig" > "$path"
43+
rm "${path}.orig"
44+
done < "${package_root}/metadata/${kind}-files"
45+
}
46+
47+
tar xzf "${package_root}/package.tar"
48+
rewrite binary
49+
rewrite text
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
src_prefix="$1"
5+
dst_prefix="$2"
6+
7+
if [ -z "$src_prefix" ] || [ -z "$dst_prefix" ]; then
8+
echo "usage: ruby-package-install-binary SRC_PREFIX DST_PREFIX" >&2
9+
exit 1
10+
fi
11+
12+
hexify() {
13+
xxd -c 1 -p | sed 's/^00$/,/' | tr ',\n' '\n '
14+
}
15+
16+
search_hex="$(echo -n "$src_prefix" | hexify)"
17+
replace_hex="$(echo -n "$dst_prefix" | hexify)"
18+
19+
hexify |
20+
awk '
21+
BEGIN {
22+
search_hex=" '"$search_hex"'";
23+
replace_hex=" '"$replace_hex"'";
24+
split(search_hex, search);
25+
split(replace_hex, replace);
26+
search_len=length(search);
27+
replace_len=length(replace);
28+
}
29+
{ matched=0 }
30+
/ '"$search_hex"'/ {
31+
result=replace_hex substr($0, length(search_hex) + 1);
32+
for (i=length(replace)+1; i<=length(search); i++)
33+
result=result "00 ";
34+
print result;
35+
matched=1
36+
}
37+
{ if (matched == 0) print $0 }
38+
' |
39+
sed 's/$/00/' |
40+
xxd -p -r
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
src_prefix="$1"
5+
dst_prefix="$2"
6+
7+
if [ -z "$src_prefix" ] || [ -z "$dst_prefix" ]; then
8+
echo "usage: ruby-package-install-text SRC_PREFIX DST_PREFIX" >&2
9+
exit 1
10+
fi
11+
12+
sed "s:${src_prefix}:${dst_prefix}:g"

0 commit comments

Comments
 (0)