Created
April 14, 2017 00:34
-
-
Save jirutka/59be5141dd442abcbc183431e0cef8eb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# vim: set ts=4: | |
#---- | |
# Usage: @SCRIPT_NAME@ [PATH | -h | --help] | |
# | |
# Parse crate dependencies from metadata section of the Cargo.lock, | |
# derive their download URIs and print them in format suitable for | |
# APKBUILD's $source. | |
# | |
# PATH Path to Cargo.lock or directory containing Cargo.lock file. | |
# Defaults to the current working directory. | |
#---- | |
set -eu | |
CRATE_DOWNLOAD_URI='\1-\2.crate::https://crates.io/api/v1/crates/\1/\2/download' | |
help_message() { | |
sed -En '/^#----$/,/^#----$/p' "$0" \ | |
| sed -E -e 's/^# ?//; 1d;$d;' -e "s|@SCRIPT_NAME@|$0|" | |
} | |
case "${1:-}" in | |
-h | --help) help_message; exit 0;; | |
esac | |
lock_file="${1:-$(pwd)}" | |
if [ -d "$lock_file" ]; then | |
lock_file="$lock_file/Cargo.lock" | |
fi | |
if [ ! -r "$lock_file" ]; then | |
echo "ERROR: $lock_file does not exist or not readable!" >&2 | |
exit 1 | |
fi | |
sed -En "/^\s*\[metadata\]/,/^\s*\[/\ | |
s|['\"]checksum (\w[^ ]+) (\d+[^ ]+) \(registry.*|$CRATE_DOWNLOAD_URI|p" \ | |
"$lock_file" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# vim: set ts=4: | |
#---- | |
# Usage: | |
# @SCRIPT_NAME@ [options] DIR CRATE... | |
# @SCRIPT_NAME@ -h | |
# | |
# Unpack crates into DIR, generate .cargo-checksum.json for each and | |
# optionally generate Cargo config file to use DIR as a Directory Source | |
# (aka vendored sources). | |
# | |
# DIR The directory source, i.e. where to put unpacked crates. | |
# CRATE The crate archive. | |
# | |
# Options: | |
# -c Create Cargo config file in $CARGO_HOME with settings to use | |
# DIR as a Directory Source. | |
# -q Be quiet, do not print any messages except errors. | |
# -s Strip version from name of the crate directory. | |
# -h Print this message. | |
#---- | |
set -eu | |
# Prints a help message parsed from the initial comment in this file. | |
help_message() { | |
sed -En '/^#----$/,/^#----$/p' "$0" \ | |
| sed -E -e 's/^# ?//; 1d;$d;' -e "s|@SCRIPT_NAME@|$0|" | |
} | |
# Prints the error message and exists with code 1. | |
die() { | |
if [ -t 1 ]; then # stdout is a terminal | |
printf '\033[1;31mERROR:\033[0m %s\n' "$0" >&2 # bold red | |
else | |
printf 'ERROR: %s\n' "$0" >&2 | |
fi | |
exit 1 | |
} | |
# Prints the message. Note that this function is overriden to no-op function | |
# when -q (quiet) is used. | |
log() { | |
printf '%s\n' "$@" >&2 | |
} | |
# Generates cargo-checksum metadata for given crate and prints it to stdout. | |
# | |
# $1: Path to the .crate file. | |
cargo_checksum() { | |
local crate_file="$1" | |
local shasum="$(sha256sum "$crate_file" | cut -d ' ' -f 1)" | |
cat <<-EOF | |
{ | |
"package": "$shasum", | |
"files": {} | |
} | |
EOF | |
} | |
# Generates cargo config for a "directory source" (aka vendored dependencies) | |
# and prints it to stdout. | |
# See http://doc.crates.io/source-replacement.html#directory-sources. | |
# | |
# $1: The directory with unpacked crates. | |
cargo_config() { | |
local source_dir="$(readlink -f "$1")" | |
cat <<-EOF | |
[source.crates-io] | |
replace-with = "local" | |
local-registry = "/dummy" | |
[source.local] | |
directory = "$source_dir" | |
EOF | |
} | |
# Unpack the crate under the specified directory and create | |
# .cargo-checksum.json for it. The actual directory with unpacked crate sources | |
# will be `$2/<name>-<version>`, or `$2/<name>` for stripped version. This | |
# directory must not exists prior running this function! | |
# | |
# $1: Path to the .crate file. | |
# $2: The base destination directory where to unpack crate. | |
# $3: Strip version from name of the crate directory? | |
# Missing argument, empty string and "no" means no, anything else is yes. | |
unpack_crate() { | |
local crate_file="$1" | |
local dest_dir="$2" | |
local strip_version="${3:-no}" | |
local crate_name="$(basename "$crate_file" .crate)" | |
if [ "$strip_version" != 'no' ]; then | |
crate_name="${crate_name%-*}" | |
fi | |
local crate_dir="$dest_dir/$crate_name" | |
log "Unpacking $crate_file into $crate_dir" | |
test ! -e "$crate_dir" || die "$crate_dir already exists!" | |
if [ "$strip_version" != 'no' ]; then | |
mkdir -p "$crate_dir" | |
tar -xf "$crate_file" -C "$crate_dir"/ --strip-components=1 | |
else | |
tar -xf "$crate_file" -C "$dest_dir"/ | |
fi | |
cargo_checksum "$crate_file" > "$crate_dir"/.cargo-checksum.json | |
} | |
#-------------------- M a i n --------------------# | |
create_config='no' | |
strip_version='no' | |
while getopts 'chqs' OPT; do | |
case "$OPT" in | |
c) create_config='yes';; | |
h) help_message; exit 0;; | |
q) log() { :; };; # replace log function with no-op | |
s) strip_version='yes';; | |
--) break;; | |
esac | |
done | |
shift $(($OPTIND - 1)) | |
if [ $# -lt 2 ]; then | |
help_message >&2; exit 1 | |
fi | |
destdir="$1"; shift | |
mkdir -p "$destdir" | |
for crate in "$@"; do | |
test -r "$crate" \ | |
|| die "Crate file '$crate' does not exist or not readable!" | |
unpack_crate "$crate" "$destdir" "$strip_version" | |
done | |
if [ "$create_config" = 'yes' ]; then | |
test -n "${CARGO_HOME:-}" || die '$CARGO_HOME is not set!' | |
test ! -e "$CARGO_HOME/config" || die "$CARGO_HOME/config already exists!" | |
log "Writing $CARGO_HOME/config" | |
mkdir -p "$CARGO_HOME" | |
cargo_config "$destdir" > "$CARGO_HOME"/config | |
fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Contributor: André Klitzing <[email protected]> | |
# Maintainer: André Klitzing <[email protected]> | |
pkgname=ripgrep | |
pkgver=0.5.1 | |
pkgrel=0 | |
pkgdesc="ripgrep combines the usability of The Silver Searcher with the raw speed of grep" | |
url="https://github.com/BurntSushi/ripgrep" | |
arch="x86_64" # limited by cargo pkg | |
license="MIT public-domain" | |
makedepends="cargo" | |
subpackages="$pkgname-doc | |
$pkgname-bash-completion:bashcomp:noarch | |
$pkgname-zsh-completion:zshcomp:noarch | |
$pkgname-fish-completion:fishcomp:noarch" | |
# https://github.com/BurntSushi/ripgrep/issues/448 | |
source="$pkgname-$pkgver.tar.gz::https://github.com/BurntSushi/$pkgname/archive/$pkgver.tar.gz | |
avoid_issue_448.patch | |
$(acargo-dep-uris)" | |
builddir="$srcdir/"$pkgname-$pkgver | |
export CARGO_HOME="$srcdir/.cargo" | |
unpack() { | |
cd "$srcdir" | |
acargo-unpack-crates -c deps/ *.crate | |
default_unpack | |
} | |
build() { | |
cd "$builddir" | |
cargo build --release --frozen | |
} | |
check() { | |
cd "$builddir" | |
cargo test | |
} | |
package() { | |
cd "$builddir" | |
install -Dm755 target/release/rg "$pkgdir"/usr/bin/rg | |
install -Dm644 doc/rg.1 "$pkgdir"/usr/share/man/man1/rg.1 | |
} | |
bashcomp() { | |
pkgdesc="Bash completions for $pkgname" | |
depends="" | |
install_if="$pkgname=$pkgver-r$pkgrel bash-completion" | |
mkdir -p "$subpkgdir"/usr/share/bash-completion/completions/ | |
install -Dm644 "$builddir"/target/release/build/ripgrep-*/out/rg.bash-completion \ | |
"$subpkgdir"/usr/share/bash-completion/completions/rg | |
} | |
zshcomp() { | |
pkgdesc="Zsh completions for $pkgname" | |
depends="" | |
install_if="$pkgname=$pkgver-r$pkgrel zsh" | |
mkdir -p "$subpkgdir"/usr/share/zsh/site-functions/ | |
install -Dm644 "$builddir"/target/release/build/ripgrep-*/out/_rg \ | |
"$subpkgdir"/usr/share/zsh/site-functions/_rg | |
} | |
fishcomp() { | |
pkgdesc="Fish completions for $pkgname" | |
depends="" | |
install_if="$pkgname=$pkgver-r$pkgrel fish" | |
mkdir -p "$subpkgdir"/usr/share/fish/completions/ | |
install -Dm644 "$builddir"/target/release/build/ripgrep-*/out/rg.fish \ | |
"$subpkgdir"/usr/share/fish/completions/rg.fish | |
} | |
sha512sums="20efefbf0e5c5ae95434cdf2dc0e0d45956291a9705614e02cee4e316c1e1e2394dd81ba46f7eff5e67f4447c86f935006f42ff55a2ddc60ef095a10a77184a3 ripgrep-0.5.1.tar.gz | |
72414b133db84b1ddb41ddb6e0e470e8383fcca8d83b4cce1022cf1166977ed04f4d0ca874a3d0caa4a7090e642ae2e412c7a45d9c540ba9f4708e880397e5a5 avoid_issue_448.patch | |
4d0d55d8a6657fe13009d66728b7417926325dd9ca4f7ad7cd5d40e59cf0a55b906cd109d724a0b385ee988526535fc64a467ded171419e452c5a8c90196ae45 aho-corasick-0.6.3.crate | |
4b5297d80f2a7fa840aeb1c31e7b893b33abcc7ce7f6f54371f6d7fc8e2915b43b5e3be3baab32b0821e174d8f7b58961029569a4f9e59b8a46c05f24ecaf04b ansi_term-0.9.0.crate | |
6e6e2cede7f280a53a61c78126783ec0338c13a8e9bbabb91d4b6fc43aacc56a4f7e86556210029595acf18e444121998101992b40e35a64cce884ec08247d0a atty-0.2.2.crate | |
c38b9c52b43d3c6bda5096bf67d5d02d04ec628a958204cae12effa30a20754a8469e6c6a3dfb2e5e528a86940860a75ce6a3437389e31d813727739849ee87b bitflags-0.8.2.crate | |
e9d75cb5b0565f7faacbfa83c9bf4a389d392378ce4c24373a8bd7bfe39959dc5e0e03c3d77ce614e8eb277edce20143041ce03f34f486dcb9fd502c42b52265 bytecount-0.1.6.crate | |
d2f10ae39a7fe712cd9d228e3b5a96448acaeab3b92d1b97229d54e5201237b9434ceecb1f38f1ebc1f678da5cfc33aa46c810f422f68a21aa341666c27572fb cfg-if-0.1.0.crate | |
44cddc285945b56420a23bfa98aa68c93c6b22b99e7538894010532bcc2c6cfc7083309e5e7c8895a522e8aea916147cc96a35fe3dfd81f3a93eb41d1c4e0a6d clap-2.23.1.crate | |
cdefcda7626c08ca59bdf5581e0e8d3e6367081089cc32dad6e84b5f643c7cbc5b08ce47034dd925fe2f5e2dfcfd18afb51fba511265ee3598fc1844838948f2 crossbeam-0.2.10.crate | |
6b3bda8aa401d39290a60adc68c663552d78815151111b420294149ea7c182afdd973245164ae6162190fd48bcfffb788a4ded51fab2d663760be9fcde73c5a5 encoding_rs-0.5.0.crate | |
97d73292892bdc9439252494ccdf27e27c5871637ec0d6053dd8eef8df71913baea54ae45ceee3dcf8425a8be797f136957eece69eb1ecbe876dafa74c070703 env_logger-0.4.2.crate | |
a851ed060bf49224436acb1b5cc3125d30a3b527be9d7abd09f4170eee6243de8067b0bae5b136e62fdb8ee026e42a150109e90fcdf4cc4258f4de045d6069a8 fnv-1.0.5.crate | |
2c27424c716fa69a0d53784285683d8d87a26abe2875bfb9135502622ec4656ac6ebfe508a24b413444aa5c0077c2a022dfdb3d19bf4836d8dd9d006af5c418d fs2-0.4.1.crate | |
682bc7c629aefd035966a2873518fd60719121cca7d63d89d6c97ff5306f24d8b5055a3c91b4eedaec22b1d5dd3fb8b48ff7341a05bbd72d86e06c422dab473b kernel32-sys-0.2.2.crate | |
2aef8842be22e88cfa89df0900b312eb1d516a700d2e8edf3f4dee85390150c526b2dfbe8aa752c98781b21c0449f8ec97d1c0be266868948a07a809d9de6b7f lazy_static-0.2.6.crate | |
987cb36af3e333ff93a79b0164c24ea481aa72354a9294e9824fbb29bcb4ecc4fc95f68315c5831fc2d59521cb395825e7fd400ca943f36f5dd30b595c34c1bd libc-0.2.21.crate | |
6befd815071738e24b62feb8f45de23d9927406dc185f37c63c0d9141e315cc75077194dc8e8e1d3cddb279836decfcbf077346a086ed7673b43b4aa512e0dfb log-0.3.7.crate | |
70ee14fcba41cf896f563da48c8acc683f8cdf77c54cf9786d6a938bd14eca7bcc22c86d0d70a3cae56b2c2f9eeecad2950be759abf02fc98ef96a643af91be6 memchr-1.0.1.crate | |
c2ccb0afa6795831f1a032c4995d74daeb3bd739059146007b2524ec066517f39f7a2fcf56e69d17a5d091511011b9c0794a8e3ada7322dfc5f20a3d9f6c1b05 memmap-0.5.2.crate | |
000a17ed9c1e7b65697cd79658ae78b16816aa55ca7ba82ba4fc184f01543c01d69ae19c836f23c2fdcdd78034909e8b0db3e8fae581e220813c628ae56a8fe7 num_cpus-1.3.0.crate | |
d098065bc8365e2ec584634bbf2547b89f51fc08825d10cc26fa6b8c81213612a552420fc16ebff322637baff95669552bf95400cbef0bc9a86fe7e0bed9a0f4 regex-0.2.1.crate | |
c2167926c7bc383c71205e607f21490f434b90a0802eacecd0805c9307bf58cbfa7437e1034f96586e472dfc09d63b2907b4a8179321efb38365b4029458616b regex-syntax-0.4.0.crate | |
2d3d03ab0dd4add93cd32e7ca43041d541bee41000fd8d98575a58cbd192fe4498234ab80baa3c4791de9f3d4214feae90f628fd655e3510ede61f757be3a82c same-file-0.1.3.crate | |
ed58383bbee3d0a5bc537629cdb242d5ae8ff46d4e8911df16e34a9fe9da693f1347b89f77614d1835391f57c27176824c46feb9733de89915ed4709217466f2 simd-0.1.1.crate | |
43cbcf2cab7f91515f52f20719e8013cff23807ca79a9a69f1997ec1ba2eacf713d64c88e33f4c9ba852fb3dda4b87e943587ae4b6ff5bfbbb81deb6dbf76a97 strsim-0.6.0.crate | |
09a7e95e82c673b55b11acd18b9a7f9507247967f5ec9d8576aff91b2d64f68172cab8dcdd3a626c1d12edabee4f7b55c72db0d7eed3eb89d049e2cad4d59261 term_size-0.2.3.crate | |
39d02053fc3b0f667e0a0e8d8dff26ab393d9fcedecf54541ff3cd5abd0fb25a445a4a72160e97fb36b137ca15f7e8e751cd8bc93d537d73b743049146e92bf0 thread-id-3.0.0.crate | |
19b4d445c2688898d149a05aec7c157f5c8cf48a60fa98b8890bc70ee8f391fc94d454ec218002063bbaaa715326957ab2dfda0537b782a2643e908b64e0f22d thread_local-0.3.3.crate | |
1cac2212b05d196ef3109390a9fd902430d88f01a8df9a66367c2535ebc57546ba5a923e0b1262f9858ad5a6851e6aaf7eb22d20ffaf1ed77d38009e7af64bc0 unicode-segmentation-1.1.0.crate | |
f06b243e533ab9c68d88ccd06a283dfff5fd13e9340cf11bfa74473fc9100bb704c34e7fb66919202a97e7d2ba2e7eed968eced02d557835a06e6a0166865ea3 unicode-width-0.1.4.crate | |
81d7e8740630ef90341bed76f5be55c928c1f28cf46ef23431a7f610445cae884eea532df805784b2fa04034e831255a3102a29fe2c228b8c1c1afe15d01cca0 unreachable-0.1.1.crate | |
da498433597582970860db1c66ff1cc2ed8b0e2bf816e6aabdb40424ec03c3f28e6ca5e7592e464442004077735dca4144acd13c8f6a2e799d67504699422643 utf8-ranges-1.0.0.crate | |
ce4b3e1ed8a7846ff63dbef7051cac76232295c443f560d3c5f7b658a2123c7881c40ebfa90907d500d3e943beaf32b25c8a8068999ac7a28528db273f2e0983 vec_map-0.7.0.crate | |
1cc7d282600dc0164d7e410aa895d5dc99de1174991549c6733c94cc2027026517f66797751d737869eae58c560fa26edbf43f36b3015eb2fd99828fe40e0aa1 void-1.0.2.crate | |
d5752c39c055dcd163bd74db3495a16e1865fd32e3f0cd779455fb818e78106ee4bdf0cbbcd36331f860c5ca8de658f848988a47194c5b9e130f28a77c4576d3 walkdir-1.0.7.crate | |
115e6f027cdd4a56f77ca24f4ab249d2a6cac1e1f955c826a9b6ee05db4861790a533f5e674aebbb540370fff52ed41618c2cd7c906e73200e92df213109cebe winapi-0.2.8.crate | |
8b0a239e205a5368892f41c870a8a7ea16e3468c364b03382bef7fa3a2e7159b09c07661e95b1227578f6d72c14879daa4444b28c51ae20ef15d985d59ca5a77 winapi-build-0.1.1.crate" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment