at 22.05-pre 1.6 kB view raw
1#! /usr/bin/env nix-shell 2#! nix-shell -i bash -p coreutils findutils gnused nix wget 3 4set -efuo pipefail 5 6SRCS= 7if [ -d "$1" ]; then 8 SRCS="$(pwd)/$1/srcs.nix" 9 . "$1/fetch.sh" 10else 11 SRCS="$(pwd)/$(dirname $1)/srcs.nix" 12 . "$1" 13fi 14 15tmp=$(mktemp -d) 16pushd $tmp >/dev/null 17wget -nH -r -c --no-parent "${WGET_ARGS[@]}" >/dev/null 18 19csv=$(mktemp) 20find . -type f | while read src; do 21 # Sanitize file name 22 filename=$(basename "$src" | tr '@' '_') 23 nameVersion="${filename%.tar.*}" 24 name=$(echo "$nameVersion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,' | sed -e 's,-everywhere-src$,,') 25 version=$(echo "$nameVersion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,') 26 echo "$name,$version,$src,$filename" >>$csv 27done 28 29cat >"$SRCS" <<EOF 30# DO NOT EDIT! This file is generated automatically. 31# Command: $0 $@ 32{ fetchurl, mirror }: 33 34{ 35EOF 36 37gawk -F , "{ print \$1 }" $csv | sort | uniq | while read name; do 38 versions=$(gawk -F , "/^$name,/ { print \$2 }" $csv) 39 latestVersion=$(echo "$versions" | sort -rV | head -n 1) 40 src=$(gawk -F , "/^$name,$latestVersion,/ { print \$3 }" $csv) 41 filename=$(gawk -F , "/^$name,$latestVersion,/ { print \$4 }" $csv) 42 url="${src:2}" 43 sha256=$(nix-hash --type sha256 --base32 --flat "$src") 44 cat >>"$SRCS" <<EOF 45 $name = { 46 version = "$latestVersion"; 47 src = fetchurl { 48 url = "\${mirror}/$url"; 49 sha256 = "$sha256"; 50 name = "$filename"; 51 }; 52 }; 53EOF 54done 55 56echo "}" >>"$SRCS" 57 58popd >/dev/null 59rm -fr $tmp >/dev/null 60 61rm -f $csv >/dev/null