unity3d: 5.1.0f3 -> 5.3.5f1

This commit is contained in:
Nikolay Amiantov 2016-05-26 17:45:45 +03:00
parent 788ee3bcc1
commit 846893aabb
3 changed files with 139 additions and 96 deletions

View File

@ -1,135 +1,142 @@
{ GConf { stdenv, lib, fetchurl, makeWrapper, fakeroot, file, getopt
, alsaLib , gtk2, gdk_pixbuf, glib, mesa_glu, postgresql, nss, nspr
, fetchurl , alsaLib, GConf, cups, libcap, fontconfig, freetype, pango
, stdenv , cairo, dbus, expat, zlib, libpng12, nodejs, gnutar, gcc, gcc_32bit
, makeWrapper , libX11, libXcursor, libXdamage, libXfixes, libXrender, libXi
, cairo , libXcomposite, libXext, libXrandr, libXtst, libSM, libICE, libxcb
, libcap , mono, libgnomeui, gnome_vfs, gnome-sharp, gtk-sharp
, cups
, dbus
, expat
, postgresql
, fontconfig
, freetype
, gdk_pixbuf
, getopt
, fakeroot
, glib
, gtk
, mesa_glu
, nspr
, nss
, pango
, xorg
, monodevelop
, xdg_utils
}: }:
let let
deps = [ libPath64 = lib.makeLibraryPath [
GConf gcc.cc gtk2 gdk_pixbuf glib mesa_glu postgresql nss nspr
alsaLib alsaLib GConf cups libcap fontconfig freetype pango
cairo cairo dbus expat zlib libpng12
cups libX11 libXcursor libXdamage libXfixes libXrender libXi
libcap libXcomposite libXext libXrandr libXtst libSM libICE libxcb
dbus
expat
fontconfig
freetype
glib
gtk
gdk_pixbuf
mesa_glu
nspr
postgresql
nss
pango
xorg.libXcomposite
xorg.libX11
xorg.libXcursor
xorg.libXdamage
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
]; ];
libPath = stdenv.lib.makeLibraryPath deps; libPath32 = lib.makeLibraryPath [ gcc_32bit.cc ];
ver = "5.1.0"; binPath = lib.makeBinPath [ nodejs gnutar ];
build = "f3"; developBinPath = lib.makeBinPath [ mono ];
date = "2015091501"; developLibPath = lib.makeLibraryPath [
glib libgnomeui gnome_vfs gnome-sharp gtk-sharp gtk-sharp.gtk
];
developDotnetPath = lib.concatStringsSep ":" [
gnome-sharp gtk-sharp
];
ver = "5.3.5";
build = "f1";
date = "20160525";
pkgVer = "${ver}${build}"; pkgVer = "${ver}${build}";
fullVer = "${pkgVer}+${date}"; fullVer = "${pkgVer}+${date}";
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
name = "unity-editor-${version}"; name = "unity-editor-${version}";
version = pkgVer; version = pkgVer;
buildInputs = [ makeWrapper monodevelop xdg_utils getopt fakeroot ];
src = fetchurl { src = fetchurl {
url = "http://download.unity3d.com/download_unity/unity-editor-installer-${fullVer}.sh"; url = "http://download.unity3d.com/download_unity/linux/unity-editor-installer-${fullVer}.sh";
sha256 = "77b351d80fc4b63284f118093df486e16c13d7b136debae6534245878029a5ca"; sha256 = "0lmc65175fdvbyn3565pjlg6cc4l5i58fj7bxzi5cqykkbzv5wdm";
}; };
outputs = ["out" "sandbox"]; nosuidLib = ./unity-nosuid.c;
nativeBuildInputs = [ makeWrapper fakeroot file getopt ];
outputs = [ "out" "monodevelop" "sandbox" ];
unpackPhase = '' unpackPhase = ''
# 'yes | fakeroot'
echo -e 'q\ny' | fakeroot sh $src echo -e 'q\ny' | fakeroot sh $src
sourceRoot="unity-editor-${pkgVer}" sourceRoot="unity-editor-${pkgVer}"
''; '';
buildPhase = ''
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
rpath="$(patchelf --print-rpath "$1"):$rpath"
if [[ "$ftype" =~ LSB\ shared ]]; then
patchelf \
--set-rpath "$rpath" \
"$1"
elif [[ "$ftype" =~ LSB\ executable ]]; then
patchelf \
--set-rpath "$rpath" \
--interpreter "$intp" \
"$1"
fi
fi
}
cd Editor
$CC -fPIC -shared -o libunity-nosuid.so $nosuidLib -ldl
strip libunity-nosuid.so
# Exclude PlaybackEngines to build something that can be run on FHS-compliant Linuxes
find . -name PlaybackEngines -prune -o -executable -type f -print | while read path; do
patchFile "$path"
done
cd ..
'';
installPhase = '' installPhase = ''
unitydir=$out/opt/Unity install -Dm755 Editor/chrome-sandbox $sandbox/bin/unity-chrome-sandbox
mkdir -p $out/{bin,opt} unitydir="$out/opt/Unity/Editor"
mkdir -p $sandbox/bin
mkdir -p $unitydir mkdir -p $unitydir
mv Editor/* $unitydir
ln -sf /var/setuid-wrappers/unity-chrome-sandbox $unitydir/chrome-sandbox
mkdir -p $out/share/applications mkdir -p $out/share/applications
mkdir -p $out/share/icons/hicolor/{256x256,48x48}/apps sed "/^Exec=/c\Exec=$out/bin/unity-editor" \
< unity-editor.desktop \
> $out/share/applications/unity-editor.desktop
mv Editor $unitydir install -D unity-editor-icon.png $out/share/icons/hicolor/256x256/apps/unity-editor-icon.png
mv MonoDevelop $unitydir
echo "exec $unitydir/Editor/Unity \"\$@\"" > $out/bin/unity-editor mkdir -p $out/bin
chmod +x $out/bin/unity-editor makeWrapper $unitydir/Unity $out/bin/unity-editor \
--prefix LD_PRELOAD : "$unitydir/libunity-nosuid.so" \
--prefix PATH : "${binPath}"
sed "/^Exec=/c\Exec=$out/bin/unity-editor" < unity-editor.desktop \ developdir="$monodevelop/opt/Unity/MonoDevelop"
> $out/share/applications/unity-editor.desktop mkdir -p $developdir
mv MonoDevelop/* $developdir
#sed -i "/^Exec=/c\Exec=$out/bin/monodevelop-unity" unity-monodevelop.desktop mkdir -p $monodevelop/share/applications
sed "/^Exec=/c\Exec=$monodevelop/bin/unity-monodevelop" \
cp unity-editor-icon.png $out/share/icons/hicolor/256x256/apps < unity-monodevelop.desktop \
# cp $unitydir/unity-monodevelop.png $out/share/icons/hicolor/48x48/apps > $monodevelop/share/applications/unity-monodevelop.desktop
rpath="$unitydir/Editor/Data/Tools:$unitydir/Editor:${stdenv.cc.cc}/lib"
patchelf \
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
$unitydir/Editor/chrome-sandbox
cp $unitydir/Editor/chrome-sandbox $sandbox/bin
rm $unitydir/Editor/chrome-sandbox
patchelf \
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath "$rpath" \
$unitydir/Editor/Unity
wrapProgram $out/bin/unity-editor \
--prefix LD_LIBRARY_PATH : "${libPath}"
mkdir -p $monodevelop/bin
makeWrapper $developdir/bin/monodevelop $monodevelop/bin/unity-monodevelop \
--prefix PATH : "${developBinPath}" \
--prefix LD_LIBRARY_PATH : "${developLibPath}" \
--prefix MONO_GAC_PREFIX : "${developDotnetPath}"
''; '';
dontStrip = true; dontStrip = true;
meta = { meta = with stdenv.lib; {
homepage = https://unity3d.com/; homepage = https://unity3d.com/;
description = "Game development tool"; description = "Game development tool";
longDescription = '' longDescription = ''
Popular development platform for creating 2D and 3D multiplatform games Popular development platform for creating 2D and 3D multiplatform games
and interactive experiences. and interactive experiences.
''; '';
license = stdenv.lib.licenses.unfree; license = licenses.unfree;
maintainers = with stdenv.lib.maintainers; [ jb55 ]; platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ jb55 ];
}; };
} }

View File

@ -0,0 +1,32 @@
#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;
}

View File

@ -16749,7 +16749,11 @@ in
ums = callPackage ../servers/ums { }; ums = callPackage ../servers/ums { };
unity3d = callPackage ../development/tools/unity3d { inherit (gnome) GConf; }; unity3d = callPackage ../development/tools/unity3d {
stdenv = stdenv_32bit;
gcc_32bit = pkgsi686Linux.gcc;
inherit (gnome2) GConf libgnomeui gnome_vfs;
};
urbit = callPackage ../misc/urbit { }; urbit = callPackage ../misc/urbit { };