Commit 4161b3d1 authored by Klemens Nanni's avatar Klemens Nanni
Browse files

unity3d: Remove

The package is non-free, starts but requires an account to work with and
crashes upon exit:

```
$ unity-editor
Segmentation fault (core dumped)
```
The last nixpkgs update in 2019 bumped it to a version from 2018, while
upstream continues to update regularly.

`meta.maintainer` is not empty but this package is effectively
unmaintained.

Unless someone invests into this package, it ought to be removed as it
depends on deprecated GTK2.

See #39976.
parent b1957596
Loading
Loading
Loading
Loading
+0 −143
Original line number Diff line number Diff line
{ stdenv, lib, fetchurl, makeWrapper, file, getopt
, gtk2, gtk3, gdk-pixbuf, glib, libGL, libGLU, nss, nspr, udev, tbb
, alsa-lib, GConf, cups, libcap, fontconfig, freetype, pango
, cairo, dbus, expat, zlib, libpng12, nodejs, gnutar, gcc, gcc_32bit
, libX11, libXcursor, libXdamage, libXfixes, libXrender, libXi
, libXcomposite, libXext, libXrandr, libXtst, libSM, libICE, libxcb, chromium
, libpqxx, libselinux, pciutils, libpulseaudio
}:

let
  libPath64 = lib.makeLibraryPath [
    gcc.cc gtk2 gdk-pixbuf glib libGL libGLU nss nspr
    alsa-lib GConf cups libcap fontconfig freetype pango
    cairo dbus expat zlib libpng12 udev tbb
    libX11 libXcursor libXdamage libXfixes libXrender libXi
    libXcomposite libXext libXrandr libXtst libSM libICE libxcb
    libpqxx gtk3

    libselinux pciutils libpulseaudio
  ];
  libPath32 = lib.makeLibraryPath [ gcc_32bit.cc ];
  binPath = lib.makeBinPath [ nodejs gnutar ];

  ver = "2018.3.0";
  build = "f2";

in stdenv.mkDerivation {
  pname = "unity-editor";
  version = "${ver}x${build}";

  src = fetchurl {
    url = "https://beta.unity3d.com/download/6e9a27477296/LinuxEditorInstaller/Unity.tar.xz";
    sha256 = "10gppnqacs1qzahj077nkcgbfz2lryd0dxnfcmvyc64xpxnj9nlk";
  };

  nosuidLib = ./unity-nosuid.c;

  nativeBuildInputs = [ makeWrapper file getopt ];

  outputs = [ "out" ];

  sourceRoot = ".";

  buildPhase = ''
    cd Editor

    $CC -fPIC -shared -o libunity-nosuid.so $nosuidLib -ldl
    strip libunity-nosuid.so

    cd ..
  '';

  installPhase = ''
    unitydir="$out/opt/Unity/Editor"
    mkdir -p $unitydir
    mv Editor/* $unitydir
    ln -sf /run/wrappers/bin/${chromium.sandboxExecutableName} $unitydir/chrome-sandbox

    mkdir -p $out/bin
    makeWrapper $unitydir/Unity $out/bin/unity-editor \
      --prefix LD_LIBRARY_PATH : "${libPath64}" \
      --prefix LD_PRELOAD : "$unitydir/libunity-nosuid.so" \
      --prefix PATH : "${binPath}"
  '';

  preFixup = ''
    patchFile() {
      ftype="$(file -b "$1")"
      if [[ "$ftype" =~ LSB\ .*dynamically\ linked ]]; then
        if [[ "$ftype" =~ 32-bit ]]; then
          rpath="${libPath32}"
          intp="$(cat $NIX_CC/nix-support/dynamic-linker-m32)"
        else
          rpath="${libPath64}"
          intp="$(cat $NIX_CC/nix-support/dynamic-linker)"
        fi

        # Save origin-relative parts of rpath.
        originRpath="$(patchelf --print-rpath "$1" | sed "s/:/\n/g" | grep "^\$ORIGIN" | paste -sd ":" - || echo "")"
        rpath="$originRpath:$rpath"

        patchelf --set-rpath "$rpath" "$1"
        patchelf --set-interpreter "$intp" "$1" 2> /dev/null || true
      fi
    }

    upm_linux=$unitydir/Data/Resources/PackageManager/Server/UnityPackageManager


    orig_size=$(stat --printf=%s $upm_linux)

    # Exclude PlaybackEngines to build something that can be run on FHS-compliant Linuxes
    find $unitydir -name PlaybackEngines -prune -o -type f -print | while read path; do
      patchFile "$path"
    done

    new_size=$(stat --printf=%s $upm_linux)

    ###### zeit-pkg fixing starts here.
    # we're replacing plaintext js code that looks like
    # PAYLOAD_POSITION = '1234                  ' | 0
    # [...]
    # PRELUDE_POSITION = '1234                  ' | 0
    # ^-----20-chars-----^^------22-chars------^
    # ^-- grep points here
    #
    # var_* are as described above
    # shift_by seems to be safe so long as all patchelf adjustments occur
    # before any locations pointed to by hardcoded offsets

    var_skip=20
    var_select=22
    shift_by=$(expr $new_size - $orig_size)

    function fix_offset {
      # $1 = name of variable to adjust
      location=$(grep -obUam1 "$1" $upm_linux | cut -d: -f1)
      location=$(expr $location + $var_skip)
      value=$(dd if=$upm_linux iflag=count_bytes,skip_bytes skip=$location \
                 bs=1 count=$var_select status=none)
      value=$(expr $shift_by + $value)
      echo -n $value | dd of=$upm_linux bs=1 seek=$location conv=notrunc
    }

    fix_offset PAYLOAD_POSITION
    fix_offset PRELUDE_POSITION
  '';

  dontStrip = true;
  dontPatchELF = true;

  meta = with lib; {
    homepage = "https://unity3d.com/";
    description = "Game development tool";
    longDescription = ''
      Popular development platform for creating 2D and 3D multiplatform games
      and interactive experiences.
    '';
    license = licenses.unfree;
    platforms = [ "x86_64-linux" ];
    maintainers = with maintainers; [ tesq0 ];
  };
}
+0 −32
Original line number Diff line number Diff line
#define _GNU_SOURCE

#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>

static const char sandbox_path[] = "/chrome-sandbox";

int __xstat(int ver, const char* path, struct stat* stat_buf) {
  static int (*original_xstat)(int, const char*, struct stat*) = NULL;
  if (original_xstat == NULL) {
    int (*fun)(int, const char*, struct stat*) = dlsym(RTLD_NEXT, "__xstat");
    if (fun == NULL) {
      return -1;
    };
    original_xstat = fun;
  };

  int res = (*original_xstat)(ver, path, stat_buf);
  if (res == 0) {
    char* pos = strstr(path, sandbox_path);
    if (pos != NULL && *(pos + sizeof(sandbox_path) - 1) == '\0') {
      printf("Lying about chrome-sandbox access rights...\n");
      stat_buf->st_uid = 0;
      stat_buf->st_gid = 0;
      stat_buf->st_mode = 0104755;
    };
  }
  return res;
}
+1 −0
Original line number Diff line number Diff line
@@ -1412,6 +1412,7 @@ mapAliases ({
  ultrastardx-beta = throw "'ultrastardx-beta' has been renamed to/replaced by 'ultrastardx'"; # Converted to throw 2022-02-22
  unicorn-emu = unicorn; # Added 2020-10-29
  unifiStable = unifi6; # Added 2020-12-28
  unity3d = throw "'unity3d' is unmaintained, has seen no updates in years and depends on deprecated GTK2"; # Added 2022-06-16
  untrunc = untrunc-anthwlock; # Added 2021-02-01
  urxvt_autocomplete_all_the_things = rxvt-unicode-plugins.autocomplete-all-the-things; # Added 2020-02-02
  urxvt_bidi = rxvt-unicode-plugins.bidi; # Added 2020-02-02
+0 −6
Original line number Diff line number Diff line
@@ -34879,12 +34879,6 @@ with pkgs;
  ums = callPackage ../servers/ums { };
  unity3d = callPackage ../development/tools/unity3d {
    stdenv = stdenv_32bit;
    gcc_32bit = pkgsi686Linux.gcc;
    inherit (gnome2) GConf;
  };
  unityhub = callPackage ../development/tools/unityhub { };
  urbit = callPackage ../misc/urbit { };