Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 146 lines 3.6 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchurl, 5 python311Packages, 6 makeWrapper, 7 gawk, 8 bash, 9 getopt, 10 procps, 11 which, 12 jre, 13 nixosTests, 14 # generation is the attribute version suffix such as 4 in pkgs.cassandra_4 15 generation, 16 version, 17 sha256, 18 extraMeta ? { }, 19 callPackage, 20 ... 21}: 22 23let 24 libPath = lib.makeLibraryPath [ stdenv.cc.cc ]; 25 binPath = lib.makeBinPath [ 26 bash 27 getopt 28 gawk 29 which 30 jre 31 procps 32 ]; 33in 34 35stdenv.mkDerivation rec { 36 pname = "cassandra"; 37 inherit version; 38 39 src = fetchurl { 40 inherit sha256; 41 url = "mirror://apache/cassandra/${version}/apache-cassandra-${version}-bin.tar.gz"; 42 }; 43 44 pythonPath = with python311Packages; [ cassandra-driver ]; 45 46 nativeBuildInputs = [ python311Packages.wrapPython ]; 47 48 buildInputs = [ python311Packages.python ] ++ pythonPath; 49 50 installPhase = '' 51 runHook preInstall 52 53 mkdir $out 54 mv * $out 55 56 # Clean up documentation. 57 mkdir -p $out/share/doc/${pname}-${version} 58 mv $out/CHANGES.txt \ 59 $out/LICENSE.txt \ 60 $out/NEWS.txt \ 61 $out/NOTICE.txt \ 62 $out/share/doc/${pname}-${version} 63 64 if [[ -d $out/doc ]]; then 65 mv "$out/doc/"* $out/share/doc/${pname}-${version} 66 rmdir $out/doc 67 fi 68 69 70 for cmd in bin/cassandra \ 71 bin/nodetool \ 72 bin/sstablekeys \ 73 bin/sstableloader \ 74 bin/sstablescrub \ 75 bin/sstableupgrade \ 76 bin/sstableutil \ 77 bin/sstableverify; do 78 # Check if file exists because some don't exist across all versions 79 if [ -f $out/$cmd ]; then 80 wrapProgram $out/bin/$(basename "$cmd") \ 81 --suffix-each LD_LIBRARY_PATH : ${libPath} \ 82 --prefix PATH : ${binPath} \ 83 --set JAVA_HOME ${jre} 84 fi 85 done 86 87 for cmd in tools/bin/cassandra-stress \ 88 tools/bin/cassandra-stressd \ 89 tools/bin/sstabledump \ 90 tools/bin/sstableexpiredblockers \ 91 tools/bin/sstablelevelreset \ 92 tools/bin/sstablemetadata \ 93 tools/bin/sstableofflinerelevel \ 94 tools/bin/sstablerepairedset \ 95 tools/bin/sstablesplit \ 96 tools/bin/token-generator; do 97 # Check if file exists because some don't exist across all versions 98 if [ -f $out/$cmd ]; then 99 makeWrapper $out/$cmd $out/bin/$(basename "$cmd") \ 100 --suffix-each LD_LIBRARY_PATH : ${libPath} \ 101 --prefix PATH : ${binPath} \ 102 --set JAVA_HOME ${jre} 103 fi 104 done 105 106 runHook postInstall 107 ''; 108 109 postFixup = '' 110 # Remove cassandra bash script wrapper. 111 # The wrapper searches for a suitable python version and is not necessary with Nix. 112 rm $out/bin/cqlsh 113 # Make "cqlsh.py" accessible by invoking "cqlsh" 114 ln -s $out/bin/cqlsh.py $out/bin/cqlsh 115 wrapPythonPrograms 116 ''; 117 118 passthru = { 119 tests = 120 let 121 test = nixosTests."cassandra_${generation}"; 122 in 123 { 124 nixos = 125 assert test.testPackage.version == version; 126 test; 127 }; 128 129 updateScript = callPackage ./update-script.nix { inherit generation; }; 130 }; 131 132 meta = 133 with lib; 134 { 135 homepage = "https://cassandra.apache.org/"; 136 description = "Massively scalable open source NoSQL database"; 137 platforms = platforms.unix; 138 license = licenses.asl20; 139 sourceProvenance = with sourceTypes; [ 140 binaryBytecode 141 binaryNativeCode # bundled dependency libsigar 142 ]; 143 maintainers = [ maintainers.roberth ]; 144 } 145 // extraMeta; 146}