Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 173 lines 4.8 kB view raw
1{ 2 stdenv, 3 lib, 4 makeDesktopItem, 5 makeWrapper, 6 patchelf, 7 writeText, 8 coreutils, 9 gnugrep, 10 which, 11 git, 12 unzip, 13 libsecret, 14 libnotify, 15 udev, 16 e2fsprogs, 17 python3, 18 autoPatchelfHook, 19 vmopts ? null, 20 glibcLocales, 21}: 22 23{ 24 pname, 25 product, 26 productShort ? product, 27 version, 28 src, 29 wmClass, 30 buildNumber, 31 jdk, 32 meta, 33 libdbm, 34 fsnotifier, 35 extraLdPath ? [ ], 36 extraWrapperArgs ? [ ], 37 extraBuildInputs ? [ ], 38 ... 39}@args: 40 41let 42 loName = lib.toLower productShort; 43 hiName = lib.toUpper productShort; 44 vmoptsName = loName + lib.optionalString stdenv.hostPlatform.is64bit "64" + ".vmoptions"; 45in 46 47with stdenv; 48lib.makeOverridable mkDerivation ( 49 rec { 50 inherit pname version src; 51 passthru.buildNumber = buildNumber; 52 passthru.tests = args.passthru.tests; 53 meta = args.meta // { 54 mainProgram = pname; 55 }; 56 57 desktopItem = makeDesktopItem { 58 name = pname; 59 exec = pname; 60 comment = lib.replaceStrings [ "\n" ] [ " " ] meta.longDescription; 61 desktopName = product; 62 genericName = meta.description; 63 categories = [ "Development" ]; 64 icon = pname; 65 startupWMClass = wmClass; 66 }; 67 68 vmoptsIDE = if hiName == "WEBSTORM" then "WEBIDE" else hiName; 69 vmoptsFile = lib.optionalString (vmopts != null) (writeText vmoptsName vmopts); 70 71 nativeBuildInputs = [ 72 makeWrapper 73 patchelf 74 unzip 75 autoPatchelfHook 76 ]; 77 buildInputs = extraBuildInputs; 78 79 postPatch = '' 80 rm -rf jbr 81 # When using the IDE as a remote backend using gateway, it expects the jbr directory to contain the jdk 82 ln -s ${jdk.home} jbr 83 84 if [ -d "plugins/remote-dev-server" ]; then 85 patch -F3 -p1 < ${../patches/jetbrains-remote-dev.patch} 86 fi 87 88 vmopts_file=bin/linux/${vmoptsName} 89 if [[ ! -f $vmopts_file ]]; then 90 vmopts_file=bin/${vmoptsName} 91 if [[ ! -f $vmopts_file ]]; then 92 echo "ERROR: $vmopts_file not found" 93 exit 1 94 fi 95 fi 96 echo -Djna.library.path=${ 97 lib.makeLibraryPath ([ 98 libsecret 99 e2fsprogs 100 libnotify 101 # Required for Help -> Collect Logs 102 # in at least rider and goland 103 udev 104 ]) 105 } >> $vmopts_file 106 ''; 107 108 installPhase = '' 109 runHook preInstall 110 111 mkdir -p $out/{bin,$pname,share/pixmaps,share/icons/hicolor/scalable/apps} 112 cp -a . $out/$pname 113 [[ -f $out/$pname/bin/${loName}.png ]] && ln -s $out/$pname/bin/${loName}.png $out/share/pixmaps/${pname}.png 114 [[ -f $out/$pname/bin/${loName}.svg ]] && ln -s $out/$pname/bin/${loName}.svg $out/share/pixmaps/${pname}.svg \ 115 && ln -s $out/$pname/bin/${loName}.svg $out/share/icons/hicolor/scalable/apps/${pname}.svg 116 cp ${libdbm}/lib/libdbm.so $out/$pname/bin/libdbm.so 117 cp ${fsnotifier}/bin/fsnotifier $out/$pname/bin/fsnotifier 118 119 jdk=${jdk.home} 120 item=${desktopItem} 121 122 needsWrapping=() 123 124 if [ -f "$out/$pname/bin/${loName}" ]; then 125 needsWrapping+=("$out/$pname/bin/${loName}") 126 fi 127 if [ -f "$out/$pname/bin/${loName}.sh" ]; then 128 needsWrapping+=("$out/$pname/bin/${loName}.sh") 129 fi 130 131 for launcher in "''${needsWrapping[@]}" 132 do 133 wrapProgram "$launcher" \ 134 --prefix PATH : "${ 135 lib.makeBinPath [ 136 jdk 137 coreutils 138 gnugrep 139 which 140 git 141 ] 142 }" \ 143 --suffix PATH : "${lib.makeBinPath [ python3 ]}" \ 144 --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath extraLdPath}" \ 145 ${lib.concatStringsSep " " extraWrapperArgs} \ 146 --set-default JDK_HOME "$jdk" \ 147 --set-default ANDROID_JAVA_HOME "$jdk" \ 148 --set-default JAVA_HOME "$jdk" \ 149 --set-default JETBRAINS_CLIENT_JDK "$jdk" \ 150 --set-default ${hiName}_JDK "$jdk" \ 151 --set-default LOCALE_ARCHIVE "${glibcLocales}/lib/locale/locale-archive" \ 152 --set-default ${vmoptsIDE}_VM_OPTIONS ${vmoptsFile} 153 done 154 155 launcher="$out/$pname/bin/${loName}" 156 if [ ! -e "$launcher" ]; then 157 launcher+=.sh 158 fi 159 160 ln -s "$launcher" $out/bin/$pname 161 rm -rf $out/$pname/plugins/remote-dev-server/selfcontained/ 162 echo -e '#!/usr/bin/env bash\n'"$out/$pname/bin/remote-dev-server.sh"' "$@"' > $out/$pname/bin/remote-dev-server-wrapped.sh 163 chmod +x $out/$pname/bin/remote-dev-server-wrapped.sh 164 ln -s "$out/$pname/bin/remote-dev-server-wrapped.sh" $out/bin/$pname-remote-dev-server 165 ln -s "$item/share/applications" $out/share 166 167 runHook postInstall 168 ''; 169 } 170 // lib.optionalAttrs (!(meta.license.free or true)) { 171 preferLocalBuild = true; 172 } 173)