Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)

cplex: meta.mainProgram, desktop entry, fix oplide GUI, misc fixes (#361105)

authored by

Wolfgang Walther and committed by
GitHub
153abc87 9f4fa041

+76 -29
+76 -29
pkgs/applications/science/math/cplex/default.nix
··· 1 - { lib, stdenv, makeWrapper, openjdk, gtk2, xorg, glibcLocales, releasePath ? null }: 1 + { lib, stdenv, autoPatchelfHook, makeDesktopItem, copyDesktopItems, makeWrapper, alsa-lib, glib, glib-networking, gsettings-desktop-schemas, gtk3, libsecret, openjdk, sqlite, unixODBC, gtk2, xorg, glibcLocales, releasePath ? null }: 2 2 3 3 # To use this package, you need to download your own cplex installer from IBM 4 4 # and override the releasePath attribute to point to the location of the file. ··· 26 26 else 27 27 releasePath; 28 28 29 - nativeBuildInputs = [ makeWrapper ]; 30 - buildInputs = [ openjdk gtk2 xorg.libXtst glibcLocales ]; 29 + nativeBuildInputs = [ autoPatchelfHook copyDesktopItems makeWrapper openjdk ]; 30 + buildInputs = [ alsa-lib gsettings-desktop-schemas gtk2 sqlite unixODBC xorg.libXtst glibcLocales ]; 31 31 32 32 unpackPhase = "cp $src $name"; 33 33 34 - patchPhase = '' 34 + postPatch = '' 35 35 sed -i -e 's|/usr/bin/tr"|tr" |' $name 36 36 ''; 37 37 38 38 buildPhase = '' 39 + runHook preBuild 40 + 39 41 export JAVA_TOOL_OPTIONS=-Djdk.util.zip.disableZip64ExtraFieldValidation=true 40 - sh $name LAX_VM ${openjdk}/bin/java -i silent -DLICENSE_ACCEPTED=TRUE -DUSER_INSTALL_DIR=$out 41 - ''; 42 + sh $name LAX_VM "$(command -v java)" -i silent -DLICENSE_ACCEPTED=TRUE -DUSER_INSTALL_DIR=$out 42 43 43 - installPhase = '' 44 - mkdir -p $out/bin 45 - ln -s $out/opl/bin/x86-64_linux/oplrun\ 46 - $out/opl/bin/x86-64_linux/oplrunjava\ 47 - $out/opl/oplide/oplide\ 48 - $out/cplex/bin/x86-64_linux/cplex\ 49 - $out/cpoptimizer/bin/x86-64_linux/cpoptimizer\ 50 - $out/bin 44 + runHook postBuild 51 45 ''; 52 46 53 - fixupPhase = 54 - let 55 - libraryPath = lib.makeLibraryPath [ stdenv.cc.cc gtk2 xorg.libXtst ]; 47 + installPhase = let 48 + libraryPath = lib.makeLibraryPath [ stdenv.cc.cc glib gtk2 gtk3 libsecret xorg.libXtst ]; 56 49 in '' 57 - interpreter=${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 50 + runHook preInstall 51 + 52 + mkdir -p $out/bin 58 53 59 - for pgm in $out/opl/bin/x86-64_linux/oplrun $out/opl/bin/x86-64_linux/oplrunjava $out/opl/oplide/oplide; 54 + for pgm in \ 55 + $out/opl/bin/x86-64_linux/oplrun \ 56 + $out/opl/bin/x86-64_linux/oplrunjava \ 57 + $out/opl/oplide/oplide \ 58 + $out/cplex/bin/x86-64_linux/cplex \ 59 + $out/cpoptimizer/bin/x86-64_linux/cpoptimizer 60 60 do 61 - patchelf --set-interpreter "$interpreter" $pgm; 62 - wrapProgram $pgm \ 63 - --prefix LD_LIBRARY_PATH : $out/opl/bin/x86-64_linux:${libraryPath} \ 64 - --set LOCALE_ARCHIVE ${glibcLocales}/lib/locale/locale-archive; 65 - done 61 + makeWrapperArgs=( 62 + --set-default LOCALE_ARCHIVE ${glibcLocales}/lib/locale/locale-archive 63 + ) 66 64 67 - for pgm in $out/cplex/bin/x86-64_linux/cplex $out/cpoptimizer/bin/x86-64_linux/cpoptimizer $out/opl/oplide/jre/bin/*; 68 - do 69 - if grep ELF $pgm > /dev/null; 70 - then 71 - patchelf --set-interpreter "$interpreter" $pgm; 65 + if [[ "$pgm" = "$out/opl/oplide/oplide" ]]; then 66 + makeWrapperArgs+=( 67 + --prefix LD_LIBRARY_PATH : ${libraryPath} 68 + --prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules" 69 + --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" 70 + ) 72 71 fi 72 + 73 + makeWrapper "$pgm" "$out/bin/$(basename "$pgm")" "''${makeWrapperArgs[@]}" 73 74 done 75 + 76 + mkdir -p $out/share/pixmaps 77 + ln -s $out/opl/oplide/icon.xpm $out/share/pixmaps/oplide.xpm 78 + 79 + mkdir -p $out/share/doc 80 + mv $out/doc $out/share/doc/$name 81 + 82 + mkdir -p $out/share/licenses 83 + mv $out/license $out/share/licenses/$name 84 + 85 + runHook postInstall 86 + ''; 87 + 88 + desktopItems = [ 89 + (makeDesktopItem { 90 + name = "oplide"; 91 + desktopName = "IBM ILOG CPLEX Optimization Studio"; 92 + genericName = "Optimization Software"; 93 + icon = "oplide"; 94 + exec = "oplide"; 95 + categories = [ "Development" "IDE" "Math" "Science" ]; 96 + }) 97 + ]; 98 + 99 + fixupPhase = '' 100 + runHook preFixup 101 + 102 + rm -r $out/Uninstall 103 + 104 + bins=( 105 + $out/bin/* 106 + $out/cplex/bin/x86-64_linux/cplex 107 + $out/cplex/bin/x86-64_linux/cplexamp 108 + $out/cpoptimizer/bin/x86-64_linux/cpoptimizer 109 + $out/opl/bin/x86-64_linux/oplrun 110 + $out/opl/bin/x86-64_linux/oplrunjava 111 + $out/opl/oplide/jre/bin/* 112 + $out/opl/oplide/oplide 113 + ) 114 + 115 + find $out -type d -exec chmod 755 {} \; 116 + find $out -type f -exec chmod 644 {} \; 117 + chmod +111 "''${bins[@]}" 118 + 119 + runHook postFixup 74 120 ''; 75 121 76 122 passthru = { ··· 81 127 meta = with lib; { 82 128 description = "Optimization solver for mathematical programming"; 83 129 homepage = "https://www.ibm.com/be-en/marketplace/ibm-ilog-cplex"; 130 + mainProgram = "cplex"; 84 131 sourceProvenance = with sourceTypes; [ binaryNativeCode ]; 85 132 license = licenses.unfree; 86 133 platforms = [ "x86_64-linux" ];