Merge pull request #40977 from Mic92/radare2

radare2: 2.5.0 -> 2.6.0
This commit is contained in:
Jörg Thalheim 2018-05-23 16:12:35 +01:00 committed by GitHub
commit d6b9e625d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 102 additions and 11 deletions

View file

@ -1,4 +1,6 @@
{stdenv, fetchFromGitHub, pkgconfig, libusb, readline, libewf, perl, zlib, openssl
{stdenv, fetchFromGitHub
, ninja, meson , pkgconfig
, libusb, readline, libewf, perl, zlib, openssl
, gtk2 ? null, vte ? null, gtkdialog ? null
, python ? null
, ruby ? null
@ -10,40 +12,57 @@ assert useX11 -> (gtk2 != null && vte != null && gtkdialog != null);
assert rubyBindings -> ruby != null;
assert pythonBindings -> python != null;
let
inherit (stdenv.lib) optional;
#<generated>
# DO NOT EDIT! Automatically generated by ./update.py
version_commit = "18177";
gittap = "2.6.0";
gittip = "83ef480221ec29d82c16003c61d0dc86b8851d38";
version = "2.6.0";
sha256 = "18jhb9w8c1m09383d2xm2qp0rc240psjygbbs222hzpx32hald5s";
cs_tip = "37569a6874c8547b349a80823adda9284499fe80";
cs_sha256 = "0v31367g4jn4baswl62y0rvvm2nf57y91n3731xqblvi6qxj8qkv";
#</generated>
in
stdenv.mkDerivation rec {
version = "2.5.0";
name = "radare2-${version}";
src = fetchFromGitHub {
owner = "radare";
repo = "radare2";
rev = version;
sha256 = "07x94chkhpn3wgw4pypn35psxq370j6xwmhf1mh5z27cqkq7c2yd";
inherit sha256;
};
# do not try to update capstone
WITHOUT_PULL=1;
postPatch = let
cs_tip = "4a1b580d069c82d60070d0869a87000db7cdabe2"; # version from $sourceRoot/shlr/Makefile
capstone = fetchFromGitHub {
owner = "aquynh";
repo = "capstone";
# version from $sourceRoot/shlr/Makefile
rev = cs_tip;
sha256 = "0v6rxfpxjq0hf40qn1n5m5wsv1dv6p1j8vm94a708lhvcbk9nkv8";
sha256 = cs_sha256;
};
in ''
if ! grep -F "CS_TIP=${cs_tip}" shlr/Makefile; then echo "CS_TIP mismatch"; exit 1; fi
cp -r ${capstone} shlr/capstone
chmod -R u+rw shlr/capstone
ln -s ${capstone} shlr/capstone
'';
postInstall = ''
ln -s $out/bin/radare2 $out/bin/r2
install -D -m755 $src/binr/r2pm/r2pm $out/bin/r2pm
'';
mesonFlags = [
"-Dr2_version_commit=${version_commit}"
"-Dr2_gittap=${gittap}"
"-Dr2_gittip=${gittip}"
];
enableParallelBuilding = true;
nativeBuildInputs = [ pkgconfig ];
nativeBuildInputs = [ pkgconfig ninja meson ];
buildInputs = [ readline libusb libewf perl zlib openssl]
++ optional useX11 [gtkdialog vte gtk2]
++ optional rubyBindings [ruby]

View file

@ -0,0 +1,72 @@
#!/usr/bin/env nix-shell
#!nix-shell -p nix -p python3 -p git -i python
# USAGE - just run the script: ./update.py
# When editing this file, make also sure it passes the mypy typecheck
# and is formatted with yapf.
import urllib.request
import json
import tempfile
import subprocess
import fileinput
import re
from pathlib import Path
def sh(*args: str) -> str:
out = subprocess.check_output(list(args))
return out.strip().decode("utf-8")
def prefetch_github(owner: str, repo: str, ref: str) -> str:
return sh("nix-prefetch-url", "--unpack",
f"https://github.com/{owner}/{repo}/archive/{ref}.tar.gz")
def main() -> None:
url = "https://api.github.com/repos/radare/radare2/releases/latest"
with urllib.request.urlopen(url) as response:
release = json.load(response) # type: ignore
version = release["tag_name"]
with tempfile.TemporaryDirectory() as dirname:
def git(*args: str) -> str:
return sh("git", "-C", dirname, *args)
git("clone", "--branch", version, "https://github.com/radare/radare2",
".")
sha256 = prefetch_github("radare", "radare2", version)
nix_file = str(Path(__file__).parent.joinpath("default.nix"))
cs_tip = None
with open(Path(dirname).joinpath("shlr", "Makefile")) as makefile:
for l in makefile:
match = re.match("CS_TIP=(\S+)", l)
if match:
cs_tip = match.group(1)
assert cs_tip is not None
cs_sha256 = prefetch_github("aquynh", "capstone", cs_tip)
in_block = False
with fileinput.FileInput(nix_file, inplace=True) as f:
for l in f:
if "#<generated>" in l:
in_block = True
print(f""" #<generated>
# DO NOT EDIT! Automatically generated by ./update.py
version_commit = "{git("rev-list", "--all", "--count")}";
gittap = "{git("describe", "--tags", "--match", "[0-9]*")}";
gittip = "{git("rev-parse", "HEAD")}";
version = "{version}";
sha256 = "{sha256}";
cs_tip = "{cs_tip}";
cs_sha256 = "{cs_sha256}";
#</generated>""")
elif "#</generated>" in l:
in_block = False
elif not in_block:
print(l, end="")
if __name__ == "__main__":
main()