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:
Michael Raskin 2012-11-04 23:52:19 +04:00
parent 6c48c3c230
commit af2fd342cd
5 changed files with 146 additions and 17 deletions

View 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"

View File

@ -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;
};
}

View 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 '[?].*' ''

View File

@ -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";
}

View File

@ -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/";
}