63 lines
1.6 KiB
Bash
63 lines
1.6 KiB
Bash
|
#! /usr/bin/env nix-shell
|
||
|
#! nix-shell -i bash -p coreutils findutils gnused nix wget
|
||
|
|
||
|
set -efuo pipefail
|
||
|
|
||
|
SRCS=
|
||
|
if [ -d "$1" ]; then
|
||
|
SRCS="$(pwd)/$1/srcs.nix"
|
||
|
. "$1/fetch.sh"
|
||
|
else
|
||
|
SRCS="$(pwd)/$(dirname $1)/srcs.nix"
|
||
|
. "$1"
|
||
|
fi
|
||
|
|
||
|
tmp=$(mktemp -d)
|
||
|
pushd $tmp >/dev/null
|
||
|
wget -nH -r -c --no-parent "${WGET_ARGS[@]}" -A '*.tar.xz.sha256' -A '*.mirrorlist' >/dev/null
|
||
|
find -type f -name '*.mirrorlist' -delete
|
||
|
|
||
|
csv=$(mktemp)
|
||
|
find . -type f | while read src; do
|
||
|
# Sanitize file name
|
||
|
filename=$(gawk '{ print $2 }' "$src" | tr '@' '_')
|
||
|
nameVersion="${filename%.tar.*}"
|
||
|
name=$(echo "$nameVersion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,' | sed -e 's,-everywhere-src$,,')
|
||
|
version=$(echo "$nameVersion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,')
|
||
|
echo "$name,$version,$src,$filename" >>$csv
|
||
|
done
|
||
|
|
||
|
cat >"$SRCS" <<EOF
|
||
|
# DO NOT EDIT! This file is generated automatically.
|
||
|
# Command: $0 $@
|
||
|
{ fetchurl, mirror }:
|
||
|
|
||
|
{
|
||
|
EOF
|
||
|
|
||
|
gawk -F , "{ print \$1 }" $csv | sort | uniq | while read name; do
|
||
|
versions=$(gawk -F , "/^$name,/ { print \$2 }" $csv)
|
||
|
latestVersion=$(echo "$versions" | sort -rV | head -n 1)
|
||
|
src=$(gawk -F , "/^$name,$latestVersion,/ { print \$3 }" $csv)
|
||
|
filename=$(gawk -F , "/^$name,$latestVersion,/ { print \$4 }" $csv)
|
||
|
url="$(dirname "${src:2}")/$filename"
|
||
|
sha256=$(gawk '{ print $1 }' "$src")
|
||
|
cat >>"$SRCS" <<EOF
|
||
|
$name = {
|
||
|
version = "$latestVersion";
|
||
|
src = fetchurl {
|
||
|
url = "\${mirror}/$url";
|
||
|
sha256 = "$sha256";
|
||
|
name = "$filename";
|
||
|
};
|
||
|
};
|
||
|
EOF
|
||
|
done
|
||
|
|
||
|
echo "}" >>"$SRCS"
|
||
|
|
||
|
popd >/dev/null
|
||
|
rm -fr $tmp >/dev/null
|
||
|
|
||
|
rm -f $csv >/dev/null
|