nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 110 lines 2.6 kB view raw
1{ 2 lib, 3 stdenv, 4 unzip, 5 jdk, 6 gradle, 7 ghidra, 8}: 9 10let 11 metaCommon = 12 oldMeta: 13 oldMeta 14 // { 15 maintainers = 16 (oldMeta.maintainers or [ ]) 17 ++ (with lib.maintainers; [ 18 vringar 19 ivyfanchiang 20 ]); 21 platforms = oldMeta.platforms or ghidra.meta.platforms; 22 }; 23 24 buildGhidraExtension = lib.extendMkDerivation { 25 constructDrv = stdenv.mkDerivation; 26 extendDrvArgs = 27 finalAttrs: 28 { 29 pname, 30 nativeBuildInputs ? [ ], 31 meta ? { }, 32 ... 33 }@args: 34 { 35 nativeBuildInputs = nativeBuildInputs ++ [ 36 unzip 37 jdk 38 gradle 39 ]; 40 41 preBuild = '' 42 # Set project name, otherwise defaults to directory name 43 echo -e '\nrootProject.name = "${pname}"' >> settings.gradle 44 # A config directory needs to exist when ghidra's GHelpBuilder is run 45 export XDG_CONFIG_HOME="''${XDG_CONFIG_HOME:-$(mktemp -d)}" 46 ${args.preBuild or ""} 47 ''; 48 49 # Needed to run gradle on darwin 50 __darwinAllowLocalNetworking = true; 51 52 gradleBuildTask = args.gradleBuildTask or "buildExtension"; 53 gradleFlags = args.gradleFlags or [ ] ++ [ "-PGHIDRA_INSTALL_DIR=${ghidra}/lib/ghidra" ]; 54 55 installPhase = 56 args.installPhase or '' 57 runHook preInstall 58 59 mkdir -p $out/lib/ghidra/Ghidra/Extensions 60 unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip 61 62 # Prevent attempted creation of plugin lock files in the Nix store. 63 for i in $out/lib/ghidra/Ghidra/Extensions/*; do 64 touch "$i/.dbDirLock" 65 done 66 67 runHook postInstall 68 ''; 69 70 meta = metaCommon meta; 71 }; 72 }; 73 74 buildGhidraScripts = lib.extendMkDerivation { 75 constructDrv = stdenv.mkDerivation; 76 extendDrvArgs = 77 finalAttrs: 78 { 79 pname, 80 meta ? { }, 81 ... 82 }@args: 83 { 84 installPhase = '' 85 runHook preInstall 86 87 GHIDRA_HOME=$out/lib/ghidra/Ghidra/Extensions/${pname} 88 mkdir -p $GHIDRA_HOME 89 cp -r . $GHIDRA_HOME/ghidra_scripts 90 91 touch $GHIDRA_HOME/Module.manifest 92 cat <<'EOF' > extension.properties 93 name=${pname} 94 description=${meta.description or ""} 95 author= 96 createdOn= 97 version=${lib.getVersion ghidra} 98 99 EOF 100 101 runHook postInstall 102 ''; 103 104 meta = metaCommon meta; 105 }; 106 }; 107in 108{ 109 inherit buildGhidraExtension buildGhidraScripts; 110}