diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix | 82 |
1 files changed, 34 insertions, 48 deletions
diff --git a/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix b/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix index ecefc9bc07e9..1a5c6c670c85 100644 --- a/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix +++ b/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, lib, patchelf, cdrkit, kernel, which, makeWrapper -, xorg, dbus, virtualbox }: +, zlib, xorg, dbus, virtualbox }: let version = virtualbox.version; @@ -19,32 +19,23 @@ stdenv.mkDerivation { src = fetchurl { url = "http://download.virtualbox.org/virtualbox/${version}/VBoxGuestAdditions_${version}.iso"; - sha256 = "0cwdmdgcd1jysyw7c9b3cdk1ngk5nq7slh1zkhxkvvq142cnm1v9"; + sha256 = "1srcsf9264l5yxbq2x83z66j38blbfrywq5lkzwb5kih6sv548c3"; }; KERN_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"; KERN_INCL = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/source/include"; - patchFlags = [ "-p1" "-d" "install/src/vboxguest-${version}" ]; - - patches = [ - ./fix_kerndir.patch - ./fix_kernincl.patch - ]; + # If you add a patch you probably need this. + #patchFlags = [ "-p1" "-d" "install/src/vboxguest-${version}" ]; hardeningDisable = [ "pic" ]; NIX_CFLAGS_COMPILE = "-Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration"; nativeBuildInputs = [ patchelf makeWrapper ]; - buildInputs = [ cdrkit dbus ] ++ kernel.moduleBuildDependencies; + buildInputs = [ cdrkit ] ++ kernel.moduleBuildDependencies; - installPhase = '' - mkdir -p $out - cp -r install/* $out - ''; - - buildCommand = with xorg; '' + unpackPhase = '' ${if stdenv.hostPlatform.system == "i686-linux" || stdenv.hostPlatform.system == "x86_64-linux" then '' isoinfo -J -i $src -x /VBoxLinuxAdditions.run > ./VBoxLinuxAdditions.run chmod 755 ./VBoxLinuxAdditions.run @@ -63,39 +54,30 @@ stdenv.mkDerivation { '' else throw ("Architecture: "+stdenv.hostPlatform.system+" not supported for VirtualBox guest additions") } + ''; - cd ../ - patchPhase - cd install/src - - # Build kernel modules - export INSTALL_MOD_PATH=$out + doConfigure = false; + buildPhase = '' + # Build kernel modules. + cd src find . -type f | xargs sed 's/depmod -a/true/' -i - cd vboxguest-${version} - + # Run just make first. If we only did make install, we get symbol warnings during build. make - cd ../.. # Change the interpreter for various binaries - for i in sbin/VBoxService bin/{VBoxClient,VBoxControl} other/mount.vboxsf - do - ${if stdenv.hostPlatform.system == "i686-linux" then '' - patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux.so.2 $i - '' - else if stdenv.hostPlatform.system == "x86_64-linux" then '' - patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux-x86-64.so.2 $i - '' - else throw ("Architecture: "+stdenv.hostPlatform.system+" not supported for VirtualBox guest additions") - } - patchelf --set-rpath ${lib.makeLibraryPath [ stdenv.cc.cc dbus libX11 libXt libXext libXmu libXfixes libXrandr libXcursor ]} $i + for i in sbin/VBoxService bin/{VBoxClient,VBoxControl} other/mount.vboxsf; do + patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} $i + patchelf --set-rpath ${lib.makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc zlib + xorg.libX11 xorg.libXt xorg.libXext xorg.libXmu xorg.libXfixes xorg.libXrandr xorg.libXcursor ]} $i done for i in lib/VBoxOGL*.so do - patchelf --set-rpath ${lib.makeLibraryPath [ "$out" dbus libXcomposite libXdamage libXext libXfixes ]} $i + patchelf --set-rpath ${lib.makeLibraryPath [ "$out" + xorg.libXcomposite xorg.libXdamage xorg.libXext xorg.libXfixes ]} $i done # FIXME: Virtualbox 4.3.22 moved VBoxClient-all (required by Guest Additions @@ -105,6 +87,13 @@ stdenv.mkDerivation { # Remove references to /usr from various scripts and files sed -i -e "s|/usr/bin|$out/bin|" other/vboxclient.desktop sed -i -e "s|/usr/bin|$out/bin|" bin/VBoxClient-all + ''; + + installPhase = '' + # Install kernel modules. + cd src/vboxguest-${version} + make install INSTALL_MOD_PATH=$out + cd ../.. # Install binaries install -D -m 755 other/mount.vboxsf $out/bin/mount.vboxsf @@ -131,21 +120,18 @@ stdenv.mkDerivation { # Install Xorg drivers mkdir -p $out/lib/xorg/modules/{drivers,input} install -m 644 other/vboxvideo_drv_${xserverABI}.so $out/lib/xorg/modules/drivers/vboxvideo_drv.so + ''; - # Install kernel modules - cd src + # Stripping breaks these binaries for some reason. + dontStrip = true; - for i in * - do - cd $i - kernelVersion=$(cd ${kernel.dev}/lib/modules; ls) - export MODULE_DIR=$out/lib/modules/$kernelVersion/misc - find . -type f | xargs sed -i -e "s|-o root||g" \ - -e "s|-g root||g" - make install - cd .. + # Some code dlopen() libdbus, patch RUNPATH in fixupPhase so it isn't stripped. + postFixup = '' + for i in $(grep -F libdbus-1.so -l -r $out/{lib,bin}); do + origRpath=$(patchelf --print-rpath "$i") + patchelf --set-rpath "$origRpath:${lib.makeLibraryPath [ dbus ]}" "$i" done - ''; # */ + ''; meta = { description = "Guest additions for VirtualBox"; |