forked from mirrors/nixpkgs
Add an automated updater script and definitions for its use for WebKit
svn path=/nixpkgs/trunk/; revision=16816
This commit is contained in:
parent
c8886f7215
commit
5a6e313abf
20
pkgs/build-support/upstream-updater/attrset-to-dir.nix
Normal file
20
pkgs/build-support/upstream-updater/attrset-to-dir.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
a :
|
||||||
|
a.stdenv.mkDerivation rec {
|
||||||
|
buildCommand = ''
|
||||||
|
ensureDir "$out/attributes"
|
||||||
|
|
||||||
|
'' + (a.lib.concatStrings (map
|
||||||
|
(n: ''
|
||||||
|
ln -s "${a.writeTextFile {name=n; text=builtins.getAttr n a.theAttrSet;}}" $out/attributes/${n};
|
||||||
|
'')
|
||||||
|
(builtins.attrNames a.theAttrSet)
|
||||||
|
));
|
||||||
|
|
||||||
|
name = "attribute-set";
|
||||||
|
meta = {
|
||||||
|
description = "Contents of an attribute set";
|
||||||
|
maintainers = [
|
||||||
|
a.lib.maintainers.raskin
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
21
pkgs/build-support/upstream-updater/attrset-to-dir.sh
Executable file
21
pkgs/build-support/upstream-updater/attrset-to-dir.sh
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
[ -n "$2" ] && NIXPKGS_ALL="$2";
|
||||||
|
[ -z "$NIXPKGS_ALL" ] && [ -f "/etc/nixos/nixpkgs" ] && NIXPKGS_ALL="/etc/nixos/nixpkgs";
|
||||||
|
[ -z "$NIXPKGS_ALL" ] && [ -f "$HOME/nixpkgs" ] && NIXPKGS_ALL="$HOME/nixpkgs";
|
||||||
|
[ -z "$NIXPKGS_ALL" ] && {
|
||||||
|
echo "Cannot find Nixpkgs source. Please specify it via NIXPKGS_ALL or second command line argument"
|
||||||
|
exit 1
|
||||||
|
};
|
||||||
|
|
||||||
|
derivation="$(nix-instantiate --show-trace - << EOF
|
||||||
|
let
|
||||||
|
pkgs = import "${NIXPKGS_ALL}" {};
|
||||||
|
attrSet = import "${1}";
|
||||||
|
in
|
||||||
|
pkgs.attrSetToDir attrSet
|
||||||
|
EOF
|
||||||
|
)"
|
||||||
|
echo "Derivation is: $derivation" >&2
|
||||||
|
output="$(nix-store -r "$derivation")"
|
||||||
|
echo "$output/attributes"
|
26
pkgs/build-support/upstream-updater/design.txt
Normal file
26
pkgs/build-support/upstream-updater/design.txt
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
Next to file.nix we get src-for-file.nix
|
||||||
|
src-for-file.nix should evaluate to a flat attribute set with
|
||||||
|
string values.
|
||||||
|
It is supposed to be imported in the main expression.
|
||||||
|
In the ideal world it can export url, hash, version.
|
||||||
|
|
||||||
|
src-for-file.nix generation is directed by
|
||||||
|
src-info-for-file.nix.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
|
||||||
|
src-info-for-file.nix:
|
||||||
|
|
||||||
|
downloadPage
|
||||||
|
sourceRegexp (default = '.*[.]tar[.].*')
|
||||||
|
choiceCommand (default = 'head -1')
|
||||||
|
versionExtractorSedScript (default = 's/.*-([0-9.a-z]+)[.].*/\1/')
|
||||||
|
versionReferenceCreator (default = 's/-([0-9.a-z]+)[.]/-${version}./')
|
||||||
|
mirrorSedScript (default = none)
|
||||||
|
|
||||||
|
src-for-file.nix:
|
||||||
|
|
||||||
|
advertisedUrl (its match is the check for update presence)
|
||||||
|
url
|
||||||
|
hash
|
||||||
|
version
|
13
pkgs/build-support/upstream-updater/test-case.nix
Normal file
13
pkgs/build-support/upstream-updater/test-case.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
a=1;
|
||||||
|
b="text";
|
||||||
|
c=''
|
||||||
|
text
|
||||||
|
'';
|
||||||
|
d=''
|
||||||
|
Multi-line text with special characters -
|
||||||
|
like \ (backslash) and ''${} (dollar +
|
||||||
|
curly braces) and $ (dollar) and ' (quote)
|
||||||
|
and " (double quote).
|
||||||
|
'';
|
||||||
|
}
|
51
pkgs/build-support/upstream-updater/update-upstream-data.sh
Executable file
51
pkgs/build-support/upstream-updater/update-upstream-data.sh
Executable file
|
@ -0,0 +1,51 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
own_dir="$(cd "$(dirname "$0")"; sh -c pwd)"
|
||||||
|
|
||||||
|
main_file="$1"
|
||||||
|
main_dir="$(cd "$(dirname "$main_file")" ; sh -c pwd)"
|
||||||
|
file_name="$(basename "$main_file")"
|
||||||
|
defs_file="$main_dir"/src-info-for-"$file_name"
|
||||||
|
src_file="$main_dir"/src-for-"$file_name"
|
||||||
|
new_src_file="$main_dir"/updated-src-for-"$file_name"
|
||||||
|
|
||||||
|
defs_dir="$("$own_dir"/attrset-to-dir.sh "$defs_file")"
|
||||||
|
src_defs_dir="$("$own_dir"/attrset-to-dir.sh "$src_file")"
|
||||||
|
|
||||||
|
getAttr () {
|
||||||
|
file="$defs_dir"/"$1"
|
||||||
|
data="$( ( [ -f "$file" ] && cat "$file" ) || echo "$2" )"
|
||||||
|
echo "attribute $1 obtained as: [[$data]]" >&2
|
||||||
|
echo "$data"
|
||||||
|
}
|
||||||
|
|
||||||
|
freshUrl="$("$own_dir"/urls-from-page.sh "$(getAttr downloadPage)" |
|
||||||
|
egrep "$(getAttr sourceRegexp '.*[.]tar[.].*')" |
|
||||||
|
sh -c "$(getAttr choiceCommand 'head -1')")"
|
||||||
|
|
||||||
|
echo "Found download link: $freshUrl" >&2
|
||||||
|
|
||||||
|
if [ x"$freshUrl" = x"$(cat "$src_defs_dir"/advertisedUrl)" ]; then
|
||||||
|
echo "Source link not changed" >&2
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
version="$(echo "$freshUrl" |
|
||||||
|
sed -re "$(getAttr versionExtractorSedScript \
|
||||||
|
's/.*-([0-9.]+)[.].*/\1/')")"
|
||||||
|
|
||||||
|
mirrorUrl="$(echo "$freshUrl" |
|
||||||
|
sed -r -e "$(getAttr versionReferenceCreator \
|
||||||
|
's/-([0-9.]+)[.]/-${version}./')" |
|
||||||
|
sed -r -e "$(getAttr mirrorSedScript)")"
|
||||||
|
|
||||||
|
hash=$(nix-prefetch-url "$freshUrl")
|
||||||
|
|
||||||
|
cat << EOF > "$new_src_file"
|
||||||
|
rec {
|
||||||
|
advertisedUrl="$freshUrl";
|
||||||
|
version = "$version";
|
||||||
|
url="$mirrorUrl";
|
||||||
|
hash = "$hash";
|
||||||
|
}
|
||||||
|
EOF
|
12
pkgs/build-support/upstream-updater/urls-from-page.sh
Executable file
12
pkgs/build-support/upstream-updater/urls-from-page.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
url="$1"
|
||||||
|
protocol="${url%%:*}"
|
||||||
|
path="${url#$protocol://}"
|
||||||
|
server="${path%%/*}"
|
||||||
|
relpath="${path#$server}"
|
||||||
|
|
||||||
|
echo "URL: $url" >&2
|
||||||
|
|
||||||
|
curl -k "$url" | sed -re 's/^/-/;s/[hH][rR][eE][fF]="([^"]*)"/\n+\1\n-/g' | \
|
||||||
|
sed -e '/^-/d; s/^[+]//; /^#/d;'"s/^\\//$protocol:\\/\\/$server\\//g"
|
|
@ -1,9 +1,12 @@
|
||||||
args : with args;
|
args : with args;
|
||||||
let version = lib.attrByPath ["version"] "r46809" args; in
|
let
|
||||||
|
s = import ./src-for-default.nix;
|
||||||
|
version = lib.attrByPath ["version"] s.version args;
|
||||||
|
in
|
||||||
rec {
|
rec {
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://nightly.webkit.org/files/trunk/src/WebKit-${version}.tar.bz2";
|
url = s.url;
|
||||||
sha256 = "12isv3rjvjfn45mgp42nsv812cmfcfrpgbgzqgf88qyldcmq0qs5";
|
sha256 = s.hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [gtk atk cairo curl fontconfig freetype
|
buildInputs = [gtk atk cairo curl fontconfig freetype
|
||||||
|
|
6
pkgs/development/libraries/webkit/src-for-default.nix
Normal file
6
pkgs/development/libraries/webkit/src-for-default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
rec {
|
||||||
|
advertisedUrl="http://builds.nightly.webkit.org/files/trunk/src/WebKit-r47686.tar.bz2";
|
||||||
|
version = "r47686";
|
||||||
|
url="http://builds.nightly.webkit.org/files/trunk/src/WebKit-${version}.tar.bz2";
|
||||||
|
hash = "1h1frvvp8hfv3q2drjnrpgadgin55p7nv8747kxxhdkj4gv9dzqg";
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
downloadPage = "http://nightly.webkit.org/";
|
||||||
|
versionExtractorSedScript = "s/.*-(r[0-9]+)[.].*/\\1/";
|
||||||
|
versionReferenceCreator = "s/-(r[0-9.]+)[.]/-\${version}./";
|
||||||
|
}
|
|
@ -227,6 +227,10 @@ let
|
||||||
|
|
||||||
### BUILD SUPPORT
|
### BUILD SUPPORT
|
||||||
|
|
||||||
|
attrSetToDir = arg : import ../build-support/upstream-updater/attrset-to-dir.nix {
|
||||||
|
inherit writeTextFile stdenv lib;
|
||||||
|
theAttrSet = arg;
|
||||||
|
};
|
||||||
|
|
||||||
buildEnv = import ../build-support/buildenv {
|
buildEnv = import ../build-support/buildenv {
|
||||||
inherit stdenv perl;
|
inherit stdenv perl;
|
||||||
|
|
Loading…
Reference in a new issue