diff --git a/pkgs/development/tools/analysis/radare2/cutter.nix b/pkgs/development/tools/analysis/radare2/cutter.nix
deleted file mode 100644
index 6d9543e3836f..000000000000
--- a/pkgs/development/tools/analysis/radare2/cutter.nix
+++ /dev/null
@@ -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 ];
- };
-}
diff --git a/pkgs/development/tools/analysis/radare2/default.nix b/pkgs/development/tools/analysis/radare2/default.nix
index 287321804e21..f5ce1bbde769 100644
--- a/pkgs/development/tools/analysis/radare2/default.nix
+++ b/pkgs/development/tools/analysis/radare2/default.nix
@@ -1,9 +1,21 @@
-{lib, stdenv, fetchFromGitHub
+{ lib
+, stdenv
+, fetchFromGitHub
, buildPackages
, pkg-config
-, libusb-compat-0_1, readline, libewf, perl, zlib, openssl
-, libuv, file, libzip, xxHash
-, gtk2 ? null, vte ? null, gtkdialog ? null
+, libusb-compat-0_1
+, readline
+, libewf
+, perl
+, zlib
+, openssl
+, libuv
+, file
+, libzip
+, xxHash
+, gtk2 ? null
+, vte ? null
+, gtkdialog ? null
, python3 ? null
, ruby ? null
, lua ? null
@@ -21,108 +33,84 @@ assert pythonBindings -> python3 != null;
let
inherit (lib) optional;
- generic = {
- version_commit, # unused
- gittap,
- gittip,
- rev,
- version,
- sha256,
- cs_ver,
- cs_sha256
- }:
- stdenv.mkDerivation {
- pname = "radare2";
- inherit version;
-
- src = fetchFromGitHub {
- owner = "radare";
- repo = "radare2";
- inherit rev sha256;
- };
-
- postPatch = let
- capstone = fetchFromGitHub {
- owner = "aquynh";
- repo = "capstone";
- # version from $sourceRoot/shlr/Makefile
- rev = cs_ver;
- sha256 = cs_sha256;
- };
- in ''
- mkdir -p build/shlr
- cp -r ${capstone} 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}
- '';
-
- postInstall = ''
- install -D -m755 $src/binr/r2pm/r2pm $out/bin/r2pm
- '';
-
- WITHOUT_PULL="1";
- makeFlags = [
- "GITTAP=${gittap}"
- "GITTIP=${gittip}"
- "RANLIB=${stdenv.cc.bintools.bintools}/bin/${stdenv.cc.bintools.targetPrefix}ranlib"
- ];
- configureFlags = [
- "--with-sysmagic"
- "--with-syszip"
- "--with-sysxxhash"
- "--with-openssl"
- ];
-
- enableParallelBuilding = true;
- depsBuildBuild = [ buildPackages.stdenv.cc ];
-
- nativeBuildInputs = [ pkg-config ];
- buildInputs = [ file readline libusb-compat-0_1 libewf perl zlib openssl libuv ]
- ++ optional useX11 [ gtkdialog vte gtk2 ]
- ++ optional rubyBindings [ ruby ]
- ++ optional pythonBindings [ python3 ]
- ++ optional luaBindings [ lua ];
-
- propagatedBuildInputs = [
- # radare2 exposes r_lib which depends on these libraries
- file # for its list of magic numbers (`libmagic`)
- libzip
- xxHash
- ];
-
- meta = {
- description = "unix-like reverse engineering framework and commandline tools";
- homepage = "http://radare.org/";
- license = lib.licenses.gpl2Plus;
- maintainers = with lib.maintainers; [ raskin makefu mic92 ];
- platforms = with lib.platforms; linux;
- inherit version;
- };
- };
-in {
#
# 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";
- };
+ gittap = "5.1.1";
+ gittip = "a86f8077fc148abd6443384362a3717cd4310e64";
+ rev = "5.1.1";
+ version = "5.1.1";
+ sha256 = "0hv9x31iabasj12g8f04incr1rbcdkxi3xnqn3ggp8gl4h6pf2f3";
+ cs_ver = "4.0.2";
+ cs_sha256 = "0y5g74yjyliciawpn16zhdwya7bd3d7b1cccpcccc2wg8vni1k2w";
#
+in
+stdenv.mkDerivation {
+ pname = "radare2";
+ inherit version;
+
+ src = fetchFromGitHub {
+ owner = "radare";
+ repo = "radare2";
+ inherit rev sha256;
+ };
+
+ postPatch =
+ let
+ capstone = fetchFromGitHub {
+ owner = "aquynh";
+ repo = "capstone";
+ # version from $sourceRoot/shlr/Makefile
+ rev = cs_ver;
+ sha256 = cs_sha256;
+ };
+ in
+ ''
+ mkdir -p build/shlr
+ cp -r ${capstone} capstone-${cs_ver}
+ chmod -R +w capstone-${cs_ver}
+ tar -czvf shlr/capstone-${cs_ver}.tar.gz capstone-${cs_ver}
+ '';
+
+ postInstall = ''
+ install -D -m755 $src/binr/r2pm/r2pm $out/bin/r2pm
+ '';
+
+ WITHOUT_PULL = "1";
+ makeFlags = [
+ "GITTAP=${gittap}"
+ "GITTIP=${gittip}"
+ "RANLIB=${stdenv.cc.bintools.bintools}/bin/${stdenv.cc.bintools.targetPrefix}ranlib"
+ ];
+ configureFlags = [
+ "--with-sysmagic"
+ "--with-syszip"
+ "--with-sysxxhash"
+ "--with-openssl"
+ ];
+
+ enableParallelBuilding = true;
+ depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+ nativeBuildInputs = [ pkg-config ];
+ buildInputs = [ file readline libusb-compat-0_1 libewf perl zlib openssl libuv ]
+ ++ optional useX11 [ gtkdialog vte gtk2 ]
+ ++ optional rubyBindings [ ruby ]
+ ++ optional pythonBindings [ python3 ]
+ ++ optional luaBindings [ lua ];
+
+ propagatedBuildInputs = [
+ # radare2 exposes r_lib which depends on these libraries
+ file # for its list of magic numbers (`libmagic`)
+ libzip
+ xxHash
+ ];
+
+ meta = {
+ description = "unix-like reverse engineering framework and commandline tools";
+ homepage = "http://radare.org/";
+ license = lib.licenses.gpl2Plus;
+ maintainers = with lib.maintainers; [ raskin makefu mic92 ];
+ platforms = with lib.platforms; linux;
+ inherit version;
+ };
}
diff --git a/pkgs/development/tools/analysis/radare2/update.py b/pkgs/development/tools/analysis/radare2/update.py
index a9a0a2343171..ede0a6058a94 100755
--- a/pkgs/development/tools/analysis/radare2/update.py
+++ b/pkgs/development/tools/analysis/radare2/update.py
@@ -48,24 +48,6 @@ def get_radare2_rev() -> str:
raise RuntimeError(f"No release found at {feed_url}")
-def get_cutter_version() -> str:
- version_expr = """
-(with import {}; lib.getVersion (qt5.callPackage {}))
-"""
- 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:
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:
- radare2_rev = get_radare2_rev()
- r2_cutter_rev = get_r2_cutter_rev()
+ version = get_radare2_rev()
with tempfile.TemporaryDirectory() as dirname:
git(
dirname,
"clone",
"--branch",
- radare2_rev,
+ version,
"https://github.com/radare/radare2",
".",
)
nix_file = str(SCRIPT_DIR.joinpath("default.nix"))
- radare2_info = get_repo_info(dirname, radare2_rev)
-
- git(dirname, "fetch", r2_cutter_rev)
- git(dirname, "checkout", r2_cutter_rev)
+ info = get_repo_info(dirname, version)
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
with fileinput.FileInput(nix_file, inplace=True) as f:
@@ -140,8 +102,13 @@ def main() -> None:
print(
f""" #
# DO NOT EDIT! Automatically generated by ./update.py
- radare2 = {write_package_expr(radare2_rev, radare2_info)};
- r2-for-cutter = {write_package_expr(r2_cutter_version, r2_cutter_info)};
+ gittap = "{info["gittap"]}";
+ gittip = "{info["gittip"]}";
+ rev = "{info["rev"]}";
+ version = "{version}";
+ sha256 = "{info["sha256"]}";
+ cs_ver = "{info["cs_ver"]}";
+ cs_sha256 = "{info["cs_sha256"]}";
#"""
)
elif "#" in l:
diff --git a/pkgs/development/tools/analysis/rizin/cutter.nix b/pkgs/development/tools/analysis/rizin/cutter.nix
new file mode 100644
index 000000000000..14d815f04b1e
--- /dev/null
+++ b/pkgs/development/tools/analysis/rizin/cutter.nix
@@ -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 ];
+ };
+}
diff --git a/pkgs/development/tools/analysis/rizin/default.nix b/pkgs/development/tools/analysis/rizin/default.nix
new file mode 100644
index 000000000000..bbcc432ea997
--- /dev/null
+++ b/pkgs/development/tools/analysis/rizin/default.nix
@@ -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;
+ };
+}
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index 040914662996..eed37dea32c4 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -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
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
+ radare2-cutter = cutter;
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_1_0 = throw "ruby_2_1_0 was deprecated on 2018-02-13: use a newer version of ruby";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index e6620c0f162f..b794e617e33c 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -13035,12 +13035,14 @@ in
r10k = callPackage ../tools/system/r10k { };
- inherit (callPackages ../development/tools/analysis/radare2 ({
+ radare2 = callPackage ../development/tools/analysis/radare2 ({
inherit (gnome2) vte;
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;