cutter: 1.12.0 -> 2.0.0
This also introduces rizin, which cutter builds on top
This commit is contained in:
parent
77ca695ff9
commit
ca9ca6eec9
7 changed files with 226 additions and 214 deletions
|
@ -1,63 +0,0 @@
|
||||||
{ fetchFromGitHub, lib, mkDerivation
|
|
||||||
# nativeBuildInputs
|
|
||||||
, qmake, pkg-config
|
|
||||||
# Qt
|
|
||||||
, qtbase, qtsvg, qtwebengine
|
|
||||||
# buildInputs
|
|
||||||
, r2-for-cutter
|
|
||||||
, python3
|
|
||||||
, wrapQtAppsHook }:
|
|
||||||
|
|
||||||
mkDerivation rec {
|
|
||||||
pname = "radare2-cutter";
|
|
||||||
version = "1.12.0";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "radareorg";
|
|
||||||
repo = "cutter";
|
|
||||||
rev = "v${version}";
|
|
||||||
sha256 = "0ljj3j3apbbw628n2nyrxpbnclixx20bqjxm0xwggqzz9vywsar0";
|
|
||||||
};
|
|
||||||
|
|
||||||
postUnpack = "export sourceRoot=$sourceRoot/src";
|
|
||||||
|
|
||||||
# Remove this "very helpful" helper file intended for discovering r2,
|
|
||||||
# as it's a doozy of harddcoded paths and unexpected behavior.
|
|
||||||
# Happily Nix has everything all set so we don't need it,
|
|
||||||
# other than as basis for the qmakeFlags set below.
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace Cutter.pro \
|
|
||||||
--replace "include(lib_radare2.pri)" ""
|
|
||||||
'';
|
|
||||||
|
|
||||||
nativeBuildInputs = [ qmake pkg-config python3 wrapQtAppsHook ];
|
|
||||||
propagatedBuildInputs = [ python3.pkgs.pyside2 ];
|
|
||||||
buildInputs = [ qtbase qtsvg qtwebengine r2-for-cutter python3 ];
|
|
||||||
|
|
||||||
qmakeFlags = with python3.pkgs; [
|
|
||||||
"CONFIG+=link_pkg-config"
|
|
||||||
"PKGCONFIG+=r_core"
|
|
||||||
# Leaving this enabled doesn't break build but generates errors
|
|
||||||
# at runtime (to console) about being unable to load needed bits.
|
|
||||||
# Disable until can be looked at.
|
|
||||||
"CUTTER_ENABLE_JUPYTER=false"
|
|
||||||
# Enable support for Python plugins
|
|
||||||
"CUTTER_ENABLE_PYTHON=true"
|
|
||||||
"CUTTER_ENABLE_PYTHON_BINDINGS=true"
|
|
||||||
"SHIBOKEN_EXTRA_OPTIONS+=-I${r2-for-cutter}/include/libr"
|
|
||||||
];
|
|
||||||
|
|
||||||
preBuild = ''
|
|
||||||
export NIX_LDFLAGS="$NIX_LDFLAGS $(pkg-config --libs python3-embed)"
|
|
||||||
qtWrapperArgs+=(--prefix PYTHONPATH : "$PYTHONPATH")
|
|
||||||
'';
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "A Qt and C++ GUI for radare2 reverse engineering framework";
|
|
||||||
homepage = src.meta.homepage;
|
|
||||||
license = licenses.gpl3;
|
|
||||||
maintainers = with maintainers; [ mic92 dtzWill ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,9 +1,21 @@
|
||||||
{lib, stdenv, fetchFromGitHub
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, fetchFromGitHub
|
||||||
, buildPackages
|
, buildPackages
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, libusb-compat-0_1, readline, libewf, perl, zlib, openssl
|
, libusb-compat-0_1
|
||||||
, libuv, file, libzip, xxHash
|
, readline
|
||||||
, gtk2 ? null, vte ? null, gtkdialog ? null
|
, libewf
|
||||||
|
, perl
|
||||||
|
, zlib
|
||||||
|
, openssl
|
||||||
|
, libuv
|
||||||
|
, file
|
||||||
|
, libzip
|
||||||
|
, xxHash
|
||||||
|
, gtk2 ? null
|
||||||
|
, vte ? null
|
||||||
|
, gtkdialog ? null
|
||||||
, python3 ? null
|
, python3 ? null
|
||||||
, ruby ? null
|
, ruby ? null
|
||||||
, lua ? null
|
, lua ? null
|
||||||
|
@ -21,16 +33,17 @@ assert pythonBindings -> python3 != null;
|
||||||
let
|
let
|
||||||
inherit (lib) optional;
|
inherit (lib) optional;
|
||||||
|
|
||||||
generic = {
|
#<generated>
|
||||||
version_commit, # unused
|
# DO NOT EDIT! Automatically generated by ./update.py
|
||||||
gittap,
|
gittap = "5.1.1";
|
||||||
gittip,
|
gittip = "a86f8077fc148abd6443384362a3717cd4310e64";
|
||||||
rev,
|
rev = "5.1.1";
|
||||||
version,
|
version = "5.1.1";
|
||||||
sha256,
|
sha256 = "0hv9x31iabasj12g8f04incr1rbcdkxi3xnqn3ggp8gl4h6pf2f3";
|
||||||
cs_ver,
|
cs_ver = "4.0.2";
|
||||||
cs_sha256
|
cs_sha256 = "0y5g74yjyliciawpn16zhdwya7bd3d7b1cccpcccc2wg8vni1k2w";
|
||||||
}:
|
#</generated>
|
||||||
|
in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
pname = "radare2";
|
pname = "radare2";
|
||||||
inherit version;
|
inherit version;
|
||||||
|
@ -41,7 +54,8 @@ let
|
||||||
inherit rev sha256;
|
inherit rev sha256;
|
||||||
};
|
};
|
||||||
|
|
||||||
postPatch = let
|
postPatch =
|
||||||
|
let
|
||||||
capstone = fetchFromGitHub {
|
capstone = fetchFromGitHub {
|
||||||
owner = "aquynh";
|
owner = "aquynh";
|
||||||
repo = "capstone";
|
repo = "capstone";
|
||||||
|
@ -49,12 +63,11 @@ let
|
||||||
rev = cs_ver;
|
rev = cs_ver;
|
||||||
sha256 = cs_sha256;
|
sha256 = cs_sha256;
|
||||||
};
|
};
|
||||||
in ''
|
in
|
||||||
|
''
|
||||||
mkdir -p build/shlr
|
mkdir -p build/shlr
|
||||||
cp -r ${capstone} capstone-${cs_ver}
|
cp -r ${capstone} capstone-${cs_ver}
|
||||||
chmod -R +w capstone-${cs_ver}
|
chmod -R +w capstone-${cs_ver}
|
||||||
# radare 3.3 compat for radare2-cutter
|
|
||||||
(cd shlr && ln -s ../capstone-${cs_ver} capstone)
|
|
||||||
tar -czvf shlr/capstone-${cs_ver}.tar.gz capstone-${cs_ver}
|
tar -czvf shlr/capstone-${cs_ver}.tar.gz capstone-${cs_ver}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -100,29 +113,4 @@ let
|
||||||
platforms = with lib.platforms; linux;
|
platforms = with lib.platforms; linux;
|
||||||
inherit version;
|
inherit version;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
in {
|
|
||||||
#<generated>
|
|
||||||
# DO NOT EDIT! Automatically generated by ./update.py
|
|
||||||
radare2 = generic {
|
|
||||||
version_commit = "25741";
|
|
||||||
gittap = "5.1.1";
|
|
||||||
gittip = "a86f8077fc148abd6443384362a3717cd4310e64";
|
|
||||||
rev = "5.1.1";
|
|
||||||
version = "5.1.1";
|
|
||||||
sha256 = "0hv9x31iabasj12g8f04incr1rbcdkxi3xnqn3ggp8gl4h6pf2f3";
|
|
||||||
cs_ver = "4.0.2";
|
|
||||||
cs_sha256 = "0y5g74yjyliciawpn16zhdwya7bd3d7b1cccpcccc2wg8vni1k2w";
|
|
||||||
};
|
|
||||||
r2-for-cutter = generic {
|
|
||||||
version_commit = "24959";
|
|
||||||
gittap = "4.5.1";
|
|
||||||
gittip = "293cf5ae65ba4e28828095dcae212955593ba255";
|
|
||||||
rev = "4.5.1";
|
|
||||||
version = "4.5.1";
|
|
||||||
sha256 = "0qigy1px0jy74c5ig73dc2fqjcy6vcy76i25dx9r3as6zfpkkaxj";
|
|
||||||
cs_ver = "4.0.2";
|
|
||||||
cs_sha256 = "0y5g74yjyliciawpn16zhdwya7bd3d7b1cccpcccc2wg8vni1k2w";
|
|
||||||
};
|
|
||||||
#</generated>
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,24 +48,6 @@ def get_radare2_rev() -> str:
|
||||||
raise RuntimeError(f"No release found at {feed_url}")
|
raise RuntimeError(f"No release found at {feed_url}")
|
||||||
|
|
||||||
|
|
||||||
def get_cutter_version() -> str:
|
|
||||||
version_expr = """
|
|
||||||
(with import <nixpkgs> {}; lib.getVersion (qt5.callPackage <radare2/cutter.nix> {}))
|
|
||||||
"""
|
|
||||||
return sh("nix", "eval", "--raw", version_expr.strip(), "-I", "radare2={0}".format(SCRIPT_DIR))
|
|
||||||
|
|
||||||
|
|
||||||
def get_r2_cutter_rev() -> str:
|
|
||||||
version = get_cutter_version()
|
|
||||||
url = f"https://api.github.com/repos/radareorg/cutter/contents?ref=v{version}"
|
|
||||||
with urllib.request.urlopen(url) as response:
|
|
||||||
data = json.load(response) # type: ignore
|
|
||||||
for entry in data:
|
|
||||||
if entry["name"] == "radare2":
|
|
||||||
return entry["sha"]
|
|
||||||
raise Exception("no radare2 submodule found in github.com/radareorg/cutter")
|
|
||||||
|
|
||||||
|
|
||||||
def git(dirname: str, *args: str) -> str:
|
def git(dirname: str, *args: str) -> str:
|
||||||
return sh("git", "-C", dirname, *args)
|
return sh("git", "-C", dirname, *args)
|
||||||
|
|
||||||
|
@ -94,43 +76,23 @@ def get_repo_info(dirname: str, rev: str) -> Dict[str, str]:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def write_package_expr(version: str, info: Dict[str, str]) -> str:
|
|
||||||
return f"""generic {{
|
|
||||||
version_commit = "{info["version_commit"]}";
|
|
||||||
gittap = "{info["gittap"]}";
|
|
||||||
gittip = "{info["gittip"]}";
|
|
||||||
rev = "{info["rev"]}";
|
|
||||||
version = "{version}";
|
|
||||||
sha256 = "{info["sha256"]}";
|
|
||||||
cs_ver = "{info["cs_ver"]}";
|
|
||||||
cs_sha256 = "{info["cs_sha256"]}";
|
|
||||||
}}"""
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
radare2_rev = get_radare2_rev()
|
version = get_radare2_rev()
|
||||||
r2_cutter_rev = get_r2_cutter_rev()
|
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as dirname:
|
with tempfile.TemporaryDirectory() as dirname:
|
||||||
git(
|
git(
|
||||||
dirname,
|
dirname,
|
||||||
"clone",
|
"clone",
|
||||||
"--branch",
|
"--branch",
|
||||||
radare2_rev,
|
version,
|
||||||
"https://github.com/radare/radare2",
|
"https://github.com/radare/radare2",
|
||||||
".",
|
".",
|
||||||
)
|
)
|
||||||
nix_file = str(SCRIPT_DIR.joinpath("default.nix"))
|
nix_file = str(SCRIPT_DIR.joinpath("default.nix"))
|
||||||
|
|
||||||
radare2_info = get_repo_info(dirname, radare2_rev)
|
info = get_repo_info(dirname, version)
|
||||||
|
|
||||||
git(dirname, "fetch", r2_cutter_rev)
|
|
||||||
git(dirname, "checkout", r2_cutter_rev)
|
|
||||||
|
|
||||||
timestamp = git(dirname, "log", "-n1", "--format=%at")
|
timestamp = git(dirname, "log", "-n1", "--format=%at")
|
||||||
r2_cutter_version = datetime.fromtimestamp(int(timestamp)).strftime("%Y-%m-%d")
|
|
||||||
|
|
||||||
r2_cutter_info = get_repo_info(dirname, r2_cutter_rev)
|
|
||||||
|
|
||||||
in_block = False
|
in_block = False
|
||||||
with fileinput.FileInput(nix_file, inplace=True) as f:
|
with fileinput.FileInput(nix_file, inplace=True) as f:
|
||||||
|
@ -140,8 +102,13 @@ def main() -> None:
|
||||||
print(
|
print(
|
||||||
f""" #<generated>
|
f""" #<generated>
|
||||||
# DO NOT EDIT! Automatically generated by ./update.py
|
# DO NOT EDIT! Automatically generated by ./update.py
|
||||||
radare2 = {write_package_expr(radare2_rev, radare2_info)};
|
gittap = "{info["gittap"]}";
|
||||||
r2-for-cutter = {write_package_expr(r2_cutter_version, r2_cutter_info)};
|
gittip = "{info["gittip"]}";
|
||||||
|
rev = "{info["rev"]}";
|
||||||
|
version = "{version}";
|
||||||
|
sha256 = "{info["sha256"]}";
|
||||||
|
cs_ver = "{info["cs_ver"]}";
|
||||||
|
cs_sha256 = "{info["cs_sha256"]}";
|
||||||
#</generated>"""
|
#</generated>"""
|
||||||
)
|
)
|
||||||
elif "#</generated>" in l:
|
elif "#</generated>" in l:
|
||||||
|
|
46
pkgs/development/tools/analysis/rizin/cutter.nix
Normal file
46
pkgs/development/tools/analysis/rizin/cutter.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{ fetchFromGitHub, lib, mkDerivation
|
||||||
|
# nativeBuildInputs
|
||||||
|
, qmake, pkg-config, cmake
|
||||||
|
# Qt
|
||||||
|
, qtbase, qtsvg, qtwebengine, qttools
|
||||||
|
# buildInputs
|
||||||
|
, rizin
|
||||||
|
, python3
|
||||||
|
, wrapQtAppsHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
mkDerivation rec {
|
||||||
|
pname = "cutter";
|
||||||
|
version = "2.0.0";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "rizinorg";
|
||||||
|
repo = "cutter";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "sha256-uIN/NR+swu9Ie0wP2aBhw5WBvTe9NDmzSs+lQMCeavc=";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [ cmake qmake pkg-config python3 wrapQtAppsHook ];
|
||||||
|
propagatedBuildInputs = [ python3.pkgs.pyside2 ];
|
||||||
|
buildInputs = [ qtbase qttools qtsvg qtwebengine rizin python3 ];
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
"-DCUTTER_USE_BUNDLED_RIZIN=OFF"
|
||||||
|
"-DCUTTER_ENABLE_PYTHON=ON"
|
||||||
|
"-DCUTTER_ENABLE_PYTHON_BINDINGS=ON"
|
||||||
|
];
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
qtWrapperArgs+=(--prefix PYTHONPATH : "$PYTHONPATH")
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Free and Open Source Reverse Engineering Platform powered by rizin";
|
||||||
|
homepage = src.meta.homepage;
|
||||||
|
license = licenses.gpl3;
|
||||||
|
maintainers = with maintainers; [ mic92 dtzWill ];
|
||||||
|
};
|
||||||
|
}
|
71
pkgs/development/tools/analysis/rizin/default.nix
Normal file
71
pkgs/development/tools/analysis/rizin/default.nix
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, fetchurl
|
||||||
|
, pkg-config
|
||||||
|
, libusb-compat-0_1
|
||||||
|
, readline
|
||||||
|
, libewf
|
||||||
|
, perl
|
||||||
|
, zlib
|
||||||
|
, openssl
|
||||||
|
, libuv
|
||||||
|
, file
|
||||||
|
, libzip
|
||||||
|
, lz4
|
||||||
|
, xxHash
|
||||||
|
, meson
|
||||||
|
, cmake
|
||||||
|
, ninja
|
||||||
|
, capstone
|
||||||
|
, tree-sitter
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "rizin";
|
||||||
|
version = "0.1.2";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/rizinorg/rizin/releases/download/v${version}/rizin-src-${version}.tar.xz";
|
||||||
|
sha256 = "sha256-npUp8wJiKAaQKSigXtndhJLTJ4+pyFqa0FwDLBqR/sE=";
|
||||||
|
};
|
||||||
|
|
||||||
|
mesonFlags = [
|
||||||
|
"-Duse_sys_capstone=true"
|
||||||
|
"-Duse_sys_magic=true"
|
||||||
|
"-Duse_sys_libzip=true"
|
||||||
|
"-Duse_sys_zlib=true"
|
||||||
|
"-Duse_sys_xxhash=true"
|
||||||
|
"-Duse_sys_lz4=true"
|
||||||
|
"-Duse_sys_openssl=true"
|
||||||
|
"-Duse_sys_tree_sitter=true"
|
||||||
|
];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ pkg-config meson ninja cmake ];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
file
|
||||||
|
libzip
|
||||||
|
capstone
|
||||||
|
readline
|
||||||
|
libusb-compat-0_1
|
||||||
|
libewf
|
||||||
|
perl
|
||||||
|
zlib
|
||||||
|
lz4
|
||||||
|
openssl
|
||||||
|
libuv
|
||||||
|
tree-sitter
|
||||||
|
xxHash
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "UNIX-like reverse engineering framework and command-line toolset.";
|
||||||
|
homepage = "https://rizin.re/";
|
||||||
|
license = lib.licenses.gpl3Plus;
|
||||||
|
maintainers = with lib.maintainers; [ raskin makefu mic92 ];
|
||||||
|
platforms = with lib.platforms; linux;
|
||||||
|
inherit version;
|
||||||
|
};
|
||||||
|
}
|
|
@ -608,6 +608,7 @@ mapAliases ({
|
||||||
qt-3 = throw "qt-3 has been removed from nixpkgs, as it's unmaintained and insecure"; # added 2021-02-15
|
qt-3 = throw "qt-3 has been removed from nixpkgs, as it's unmaintained and insecure"; # added 2021-02-15
|
||||||
rfkill = throw "rfkill has been removed, as it's included in util-linux"; # added 2020-08-23
|
rfkill = throw "rfkill has been removed, as it's included in util-linux"; # added 2020-08-23
|
||||||
riak-cs = throw "riak-cs is not maintained anymore"; # added 2020-10-14
|
riak-cs = throw "riak-cs is not maintained anymore"; # added 2020-10-14
|
||||||
|
radare2-cutter = cutter;
|
||||||
rkt = throw "rkt was archived by upstream"; # added 2020-05-16
|
rkt = throw "rkt was archived by upstream"; # added 2020-05-16
|
||||||
ruby_2_0_0 = throw "ruby_2_0_0 was deprecated on 2018-02-13: use a newer version of ruby";
|
ruby_2_0_0 = throw "ruby_2_0_0 was deprecated on 2018-02-13: use a newer version of ruby";
|
||||||
ruby_2_1_0 = throw "ruby_2_1_0 was deprecated on 2018-02-13: use a newer version of ruby";
|
ruby_2_1_0 = throw "ruby_2_1_0 was deprecated on 2018-02-13: use a newer version of ruby";
|
||||||
|
|
|
@ -13035,12 +13035,14 @@ in
|
||||||
|
|
||||||
r10k = callPackage ../tools/system/r10k { };
|
r10k = callPackage ../tools/system/r10k { };
|
||||||
|
|
||||||
inherit (callPackages ../development/tools/analysis/radare2 ({
|
radare2 = callPackage ../development/tools/analysis/radare2 ({
|
||||||
inherit (gnome2) vte;
|
inherit (gnome2) vte;
|
||||||
lua = lua5;
|
lua = lua5;
|
||||||
} // (config.radare or {}))) radare2 r2-for-cutter;
|
} // (config.radare or {}));
|
||||||
|
|
||||||
radare2-cutter = libsForQt515.callPackage ../development/tools/analysis/radare2/cutter.nix { };
|
rizin = pkgs.callPackage ../development/tools/analysis/rizin { };
|
||||||
|
|
||||||
|
cutter = libsForQt515.callPackage ../development/tools/analysis/rizin/cutter.nix { };
|
||||||
|
|
||||||
ragel = ragelStable;
|
ragel = ragelStable;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue