Updating SBCL to freshest release 1.1.1.
Replacing SBCL upstream tracking expression with a new version in a new format. Minuses: gave up on defining everything in Nix language (now update expression is a series of actions to do when downloading fresh release, it is actually interpreted by shell), now Nix expression contains meaningful whitespace (the area to regenerate is determined by the line with a specific comment and the closing brace on the otherwise empty line). Plusses: only one extra file which could even be moved out-of-tree if desired, clean semantics for traversing multiple links (it is not found in either Debian uscan or Gentoo euscan), the main expression is in one file and is less different from usual style.
This commit is contained in:
parent
6c48c3c230
commit
af2fd342cd
5 changed files with 146 additions and 17 deletions
127
pkgs/build-support/upstream-updater/update-walker.sh
Executable file
127
pkgs/build-support/upstream-updater/update-walker.sh
Executable file
|
@ -0,0 +1,127 @@
|
|||
#! /bin/sh
|
||||
|
||||
own_dir="$(cd "$(dirname "$0")"; pwd)"
|
||||
|
||||
CURRENT_URL=
|
||||
|
||||
url () {
|
||||
CURRENT_URL="$1"
|
||||
}
|
||||
|
||||
version_unpack () {
|
||||
sed -re '
|
||||
s/[.]/ /g;
|
||||
s@/@ / @g
|
||||
s/-(rc|pre)/ -1 \1 /g;
|
||||
s/-(gamma)/ -2 \1 /g;
|
||||
s/-(beta)/ -3 \1 /g;
|
||||
s/-(alpha)/ -4 \1 /g;
|
||||
'
|
||||
}
|
||||
|
||||
version_repack () {
|
||||
sed -re '
|
||||
s/ -[0-9]+ ([a-z]+) /-\1/g;
|
||||
s@ / @/@g
|
||||
s/ /./g;
|
||||
'
|
||||
}
|
||||
|
||||
version_sort () {
|
||||
version_unpack |
|
||||
sort -t ' ' -k 1n -k 2n -k 3n -k 4n -k 5n -k 6n -k 7n -n | tac |
|
||||
version_repack
|
||||
}
|
||||
|
||||
position_choice () {
|
||||
head -n "${1:-1}" | tail -n "${2:-1}"
|
||||
}
|
||||
|
||||
matching_links () {
|
||||
"$own_dir"/urls-from-page.sh "$CURRENT_URL" | grep -E "$1"
|
||||
}
|
||||
|
||||
link () {
|
||||
CURRENT_URL="$(matching_links "$1" | position_choice "$2" "$3")"
|
||||
echo "Linked by: $*"
|
||||
echo "URL: $CURRENT_URL" >&2
|
||||
}
|
||||
|
||||
version_link () {
|
||||
CURRENT_URL="$(matching_links "$1" | version_sort | position_choice "$2" "$3")"
|
||||
echo "Linked version by: $*"
|
||||
echo "URL: $CURRENT_URL" >&2
|
||||
}
|
||||
|
||||
redirect () {
|
||||
CURRENT_URL="$(curl -I -L --max-redirs "${1:-99}" "$CURRENT_URL" |
|
||||
grep -E '^Location: ' | position_choice "${2:-999999}" "$3" |
|
||||
sed -e 's/^Location: //; s/\r//')"
|
||||
echo "Redirected: $*"
|
||||
echo "URL: $CURRENT_URL" >&2
|
||||
}
|
||||
|
||||
replace () {
|
||||
sed -re "s $1 $2 g"
|
||||
}
|
||||
|
||||
process () {
|
||||
CURRENT_URL="$(echo "$CURRENT_URL" | replace "$1" "$2")"
|
||||
echo "Processed: $*"
|
||||
echo "URL: $CURRENT_URL" >&2
|
||||
}
|
||||
|
||||
version () {
|
||||
CURRENT_VERSION="$(echo "$CURRENT_URL" | replace "$1" "$2")"
|
||||
echo "Version: $CURRENT_VERSION" >&2
|
||||
}
|
||||
|
||||
hash () {
|
||||
CURRENT_HASH="$(nix-prefetch-url "$CURRENT_URL")"
|
||||
}
|
||||
|
||||
name () {
|
||||
CURRENT_NAME="$1"
|
||||
}
|
||||
|
||||
retrieve_version () {
|
||||
PACKAGED_VERSION="$(nix-instantiate --eval-only '<nixpkgs>' -A "$CURRENT_NAME".meta.version | xargs)"
|
||||
}
|
||||
|
||||
target () {
|
||||
CURRENT_TARGET="$1"
|
||||
}
|
||||
|
||||
update_found () {
|
||||
echo "Compare: $CURRENT_VERSION vs $PACKAGED_VERSION"
|
||||
[ "$CURRENT_VERSION" != "$PACKAGED_VERSION" ]
|
||||
}
|
||||
|
||||
do_regenerate () {
|
||||
cat "$1" | grep -F '# Generated upstream information' -B 999999;
|
||||
echo " rec {"
|
||||
echo " baseName=\"$CURRENT_NAME\";"
|
||||
echo " version=\"$CURRENT_VERSION\";"
|
||||
echo ' name="${baseName}-${version}";'
|
||||
echo " hash=\"$CURRENT_HASH\";"
|
||||
echo " url=\"$CURRENT_URL\";"
|
||||
cat "$1" | grep -F '# Generated upstream information' -A 999999 | grep -E '^ *[}]; *$' -A 999999;
|
||||
}
|
||||
|
||||
do_overwrite () {
|
||||
hash
|
||||
do_regenerate "$1" > "$1.new.tmp"
|
||||
mv "$1.new.tmp" "$1"
|
||||
}
|
||||
|
||||
full_path () {
|
||||
echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"
|
||||
}
|
||||
|
||||
process_config () {
|
||||
source "$(full_path "$1")"
|
||||
retrieve_version
|
||||
update_found && do_overwrite "$CURRENT_TARGET"
|
||||
}
|
||||
|
||||
process_config "$1"
|
|
@ -1,7 +1,14 @@
|
|||
a :
|
||||
let
|
||||
fetchurl = a.fetchurl;
|
||||
s= import ./src-for-default.nix;
|
||||
s= # Generated upstream information
|
||||
rec {
|
||||
baseName="sbcl";
|
||||
version="1.1.1";
|
||||
name="${baseName}-${version}";
|
||||
hash="1gkwz0248zl2nhx79ck5wiyxj8407c10gcrpgg1c67102pgyiikv";
|
||||
url="mirror://sourceforge/project/sbcl/sbcl/1.1.1/sbcl-1.1.1-source.tar.bz2";
|
||||
};
|
||||
buildInputs = with a; [
|
||||
clisp makeWrapper
|
||||
];
|
||||
|
@ -73,12 +80,14 @@ rec {
|
|||
'') ["doBuild" "minInit" "addInputs"];
|
||||
|
||||
inherit(s) name;
|
||||
inherit(s) version;
|
||||
meta = {
|
||||
description = "Lisp compiler";
|
||||
homepage = "http://www.sbcl.org";
|
||||
license = "bsd";
|
||||
maintainers = [a.lib.maintainers.raskin];
|
||||
platforms = with a.lib.platforms; all;
|
||||
inherit(s) version;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
9
pkgs/development/compilers/sbcl/default.upstream
Normal file
9
pkgs/development/compilers/sbcl/default.upstream
Normal file
|
@ -0,0 +1,9 @@
|
|||
name sbcl
|
||||
target default.nix
|
||||
url http://sf.net/projects/sbcl/files/sbcl/
|
||||
version_link '/sbcl/[0-9.]+/$'
|
||||
link "source.tar.bz2"
|
||||
version '.*/sbcl-([0-9.]+)-source.*' '\1'
|
||||
redirect
|
||||
process 'http://[a-z]+[.]dl[.]sourceforge[.]net/' 'mirror://sourceforge/'
|
||||
process '[?].*' ''
|
|
@ -1,9 +0,0 @@
|
|||
rec {
|
||||
version="1.1.0";
|
||||
name="sbcl-1.1.0";
|
||||
hash="128zb7i6w2a93yjvh8mc6f36w47psnda671y81a9yl6mr5696k00";
|
||||
url="http://downloads.sourceforge.net/project/sbcl/sbcl/1.1.0/sbcl-1.1.0-source.tar.bz2";
|
||||
advertisedUrl="http://downloads.sourceforge.net/project/sbcl/sbcl/1.1.0/sbcl-1.1.0-source.tar.bz2";
|
||||
|
||||
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
baseName = "sbcl";
|
||||
downloadPage = "http://sourceforge.net/projects/sbcl/files/sbcl/";
|
||||
choiceCommand = "head -n 1 | sed -re 's%.*/([0-9.]+)/%http://downloads.sourceforge.net/project/sbcl/sbcl/\\1/sbcl-\\1-source.tar.bz2%'";
|
||||
sourceRegexp = "[/][0-9.]+/\$";
|
||||
versionExtractorSedScript = "s/.*-([0-9.rc]+)-.*/\\1/";
|
||||
}
|
Loading…
Reference in a new issue