2010-10-07 16:14:15 +01:00
|
|
|
{ stdenv, fetchurl, lib, iasl, dev86, pam, libxslt, libxml2, libX11, xproto, libXext
|
2013-01-10 01:21:02 +00:00
|
|
|
, libXcursor, libXmu, qt4, libIDL, SDL, libcap, zlib, libpng, glib, kernel, lvm2
|
2012-03-20 13:54:01 +00:00
|
|
|
, which, alsaLib, curl, gawk
|
|
|
|
, xorriso, makeself, perl, pkgconfig
|
|
|
|
, javaBindings ? false, jdk ? null
|
|
|
|
, pythonBindings ? false, python ? null
|
2012-12-12 06:12:46 +00:00
|
|
|
, enableExtensionPack ? false, requireFile ? null, patchelf ? null
|
2009-04-16 14:44:06 +01:00
|
|
|
}:
|
2009-04-12 22:59:40 +01:00
|
|
|
|
2012-03-20 13:54:01 +00:00
|
|
|
with stdenv.lib;
|
|
|
|
|
2012-08-18 15:47:13 +01:00
|
|
|
let
|
2012-08-22 21:48:03 +01:00
|
|
|
|
2013-01-10 01:21:02 +00:00
|
|
|
version = "4.2.6";
|
|
|
|
extpackRevision = "82870";
|
2012-08-22 21:48:03 +01:00
|
|
|
|
2012-08-18 15:47:13 +01:00
|
|
|
forEachModule = action: ''
|
2012-08-18 18:20:28 +01:00
|
|
|
for mod in \
|
|
|
|
$sourcedir/out/linux.*/release/bin/src/vboxdrv \
|
|
|
|
$sourcedir/out/linux.*/release/bin/src/vboxpci \
|
|
|
|
$sourcedir/out/linux.*/release/bin/src/vboxnetadp \
|
|
|
|
$sourcedir/out/linux.*/release/bin/src/vboxnetflt
|
2012-08-18 15:47:13 +01:00
|
|
|
do
|
2012-08-18 18:20:28 +01:00
|
|
|
if [ "x$(basename "$mod")" != xvboxdrv -a ! -e "$mod/Module.symvers" ]
|
|
|
|
then
|
|
|
|
cp -v $sourcedir/out/linux.*/release/bin/src/vboxdrv/Module.symvers \
|
|
|
|
"$mod/Module.symvers"
|
|
|
|
fi
|
|
|
|
INSTALL_MOD_PATH="$out" INSTALL_MOD_DIR=misc \
|
2012-08-18 15:47:13 +01:00
|
|
|
make -C "$MODULES_BUILD_DIR" "M=$mod" DEPMOD=/do_not_use_depmod ${action}
|
|
|
|
done
|
|
|
|
'';
|
2012-08-22 21:48:03 +01:00
|
|
|
|
2012-12-12 06:12:46 +00:00
|
|
|
extensionPack = requireFile {
|
|
|
|
name = "Oracle_VM_VirtualBox_Extension_Pack-${version}-${extpackRevision}"
|
|
|
|
+ ".vbox-extpack";
|
|
|
|
# Has to be base16 because it's used as an input to VBoxExtPackHelperApp!
|
2013-01-10 01:21:02 +00:00
|
|
|
sha256 = "f0113688a76efa0426c27c5541c78506b18637025c35aa682ecc6eeed5d56582";
|
2012-12-12 06:12:46 +00:00
|
|
|
url = "https://www.virtualbox.org/wiki/Downloads";
|
|
|
|
};
|
|
|
|
|
2012-08-18 15:47:13 +01:00
|
|
|
in stdenv.mkDerivation {
|
2011-04-18 20:24:10 +01:00
|
|
|
name = "virtualbox-${version}-${kernel.version}";
|
2009-04-12 22:59:40 +01:00
|
|
|
|
|
|
|
src = fetchurl {
|
2011-04-18 20:24:10 +01:00
|
|
|
url = "http://download.virtualbox.org/virtualbox/${version}/VirtualBox-${version}.tar.bz2";
|
2013-01-10 01:21:02 +00:00
|
|
|
sha256 = "54526091bc2aa66b88ca878dd9ecc4466f96d607db2f6678a9d673ecf6646ae3";
|
2009-04-12 22:59:40 +01:00
|
|
|
};
|
|
|
|
|
2012-02-23 22:04:54 +00:00
|
|
|
buildInputs =
|
|
|
|
[ iasl dev86 libxslt libxml2 xproto libX11 libXext libXcursor qt4 libIDL SDL
|
2013-01-10 01:21:02 +00:00
|
|
|
libcap glib kernel lvm2 python alsaLib curl pam xorriso makeself perl
|
2012-03-20 13:54:01 +00:00
|
|
|
pkgconfig which libXmu ]
|
|
|
|
++ optional javaBindings jdk
|
|
|
|
++ optional pythonBindings python;
|
2009-04-12 22:59:40 +01:00
|
|
|
|
2013-01-10 01:21:02 +00:00
|
|
|
prePatch = ''
|
2009-04-12 22:59:40 +01:00
|
|
|
set -x
|
|
|
|
MODULES_BUILD_DIR=`echo ${kernel}/lib/modules/*/build`
|
2012-02-23 22:04:54 +00:00
|
|
|
sed -e 's@/lib/modules/`uname -r`/build@'$MODULES_BUILD_DIR@ \
|
|
|
|
-e 's@MKISOFS --version@MKISOFS -version@' \
|
2012-03-20 13:54:01 +00:00
|
|
|
-e 's@PYTHONDIR=.*@PYTHONDIR=${if pythonBindings then python else ""}@' \
|
2009-04-12 22:59:40 +01:00
|
|
|
-i configure
|
2012-08-22 21:48:03 +01:00
|
|
|
ls kBuild/bin/linux.x86/k* tools/linux.x86/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux.so.2
|
|
|
|
ls kBuild/bin/linux.amd64/k* tools/linux.amd64/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2
|
2011-08-06 21:52:11 +01:00
|
|
|
find . -type f | xargs sed 's/depmod -a/true/' -i
|
2009-04-12 22:59:40 +01:00
|
|
|
export USER=nix
|
|
|
|
set +x
|
2012-02-23 22:04:54 +00:00
|
|
|
'';
|
2009-04-12 22:59:40 +01:00
|
|
|
|
|
|
|
configurePhase = ''
|
2012-08-18 15:47:13 +01:00
|
|
|
sourcedir="$(pwd)"
|
2012-03-20 13:54:01 +00:00
|
|
|
./configure --with-qt4-dir=${qt4} \
|
|
|
|
${optionalString (!javaBindings) "--disable-java"} \
|
|
|
|
${optionalString (!pythonBindings) "--disable-python"} \
|
2012-08-17 11:36:43 +01:00
|
|
|
--disable-pulse --disable-hardening --disable-kmods \
|
2012-03-20 13:54:01 +00:00
|
|
|
--with-mkisofs=${xorriso}/bin/xorrisofs
|
2009-04-12 22:59:40 +01:00
|
|
|
sed -e 's@PKG_CONFIG_PATH=.*@PKG_CONFIG_PATH=${libIDL}/lib/pkgconfig:${glib}/lib/pkgconfig ${libIDL}/bin/libIDL-config-2@' \
|
|
|
|
-i AutoConfig.kmk
|
|
|
|
sed -e 's@arch/x86/@@' \
|
|
|
|
-i Config.kmk
|
2010-11-20 10:41:53 +00:00
|
|
|
substituteInPlace Config.kmk --replace "VBOX_WITH_TESTCASES = 1" "#"
|
2009-04-12 22:59:40 +01:00
|
|
|
cat >> AutoConfig.kmk << END_PATHS
|
|
|
|
VBOX_PATH_APP_PRIVATE := $out
|
|
|
|
VBOX_PATH_APP_DOCS := $out/doc
|
2012-08-22 20:55:46 +01:00
|
|
|
${optionalString javaBindings ''
|
|
|
|
VBOX_JAVA_HOME := ${jdk}
|
|
|
|
''}
|
2009-04-12 22:59:40 +01:00
|
|
|
END_PATHS
|
2011-01-31 09:42:48 +00:00
|
|
|
echo "VBOX_WITH_DOCS :=" >> LocalConfig.kmk
|
2011-01-02 18:43:27 +00:00
|
|
|
echo "VBOX_WITH_WARNINGS_AS_ERRORS :=" >> LocalConfig.kmk
|
2009-04-12 22:59:40 +01:00
|
|
|
'';
|
|
|
|
|
2012-03-02 14:54:14 +00:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2012-08-17 11:36:43 +01:00
|
|
|
buildPhase = ''
|
2009-04-12 22:59:40 +01:00
|
|
|
source env.sh
|
|
|
|
kmk
|
2012-08-18 15:47:13 +01:00
|
|
|
${forEachModule "modules"}
|
2012-03-02 14:54:14 +00:00
|
|
|
'';
|
|
|
|
|
2009-04-12 22:59:40 +01:00
|
|
|
installPhase = ''
|
2012-03-20 13:54:01 +00:00
|
|
|
libexec=$out/libexec/virtualbox
|
2012-08-17 11:36:43 +01:00
|
|
|
|
2009-10-08 13:57:05 +01:00
|
|
|
# Install VirtualBox files
|
2009-04-12 22:59:40 +01:00
|
|
|
cd out/linux.*/release/bin
|
2012-03-20 13:54:01 +00:00
|
|
|
mkdir -p $libexec
|
|
|
|
cp -av * $libexec
|
2012-08-17 11:36:43 +01:00
|
|
|
|
2010-02-18 14:04:22 +00:00
|
|
|
# Install kernel modules
|
2012-08-18 15:47:13 +01:00
|
|
|
${forEachModule "modules_install"}
|
2012-08-17 11:36:43 +01:00
|
|
|
|
2009-10-08 13:57:05 +01:00
|
|
|
# Create wrapper script
|
2012-03-02 14:54:14 +00:00
|
|
|
mkdir -p $out/bin
|
2012-03-20 13:54:01 +00:00
|
|
|
for file in VirtualBox VBoxManage VBoxSDL VBoxBalloonCtrl VBoxBFE VBoxHeadless; do
|
|
|
|
ln -s "$libexec/$file" $out/bin/$file
|
2009-04-14 14:29:19 +01:00
|
|
|
done
|
2012-08-17 11:36:43 +01:00
|
|
|
|
2012-12-12 06:12:46 +00:00
|
|
|
${optionalString enableExtensionPack ''
|
|
|
|
"$libexec/VBoxExtPackHelperApp" install \
|
|
|
|
--base-dir "$libexec/ExtensionPacks" \
|
|
|
|
--cert-dir "$libexec/ExtPackCertificates" \
|
|
|
|
--name "Oracle VM VirtualBox Extension Pack" \
|
|
|
|
--tarball "${extensionPack}"
|
|
|
|
--sha-256 "${extensionPack.outputHash}"
|
|
|
|
''}
|
|
|
|
|
2009-10-08 13:57:05 +01:00
|
|
|
# Create and fix desktop item
|
2012-03-02 14:54:14 +00:00
|
|
|
mkdir -p $out/share/applications
|
2012-03-20 13:54:01 +00:00
|
|
|
sed -i -e "s|Icon=VBox|Icon=$libexec/VBox.png|" $libexec/virtualbox.desktop
|
|
|
|
ln -sfv $libexec/virtualbox.desktop $out/share/applications
|
2012-10-16 18:35:59 +01:00
|
|
|
# Icons
|
|
|
|
mkdir -p $out/share/icons/hicolor
|
|
|
|
for size in `ls -1 $libexec/icons`; do
|
|
|
|
mkdir -p $out/share/icons/hicolor/$size/apps
|
2012-10-17 13:11:08 +01:00
|
|
|
ln -s $libexec/icons/$size/*.png $out/share/icons/hicolor/$size/apps
|
2012-10-16 18:35:59 +01:00
|
|
|
done
|
2009-04-12 22:59:40 +01:00
|
|
|
'';
|
2012-08-17 11:36:43 +01:00
|
|
|
|
2009-04-12 22:59:40 +01:00
|
|
|
meta = {
|
|
|
|
description = "PC emulator";
|
|
|
|
homepage = http://www.virtualbox.org/;
|
2009-09-11 13:24:32 +01:00
|
|
|
maintainers = [ lib.maintainers.sander ];
|
2009-09-16 15:56:53 +01:00
|
|
|
platforms = lib.platforms.linux;
|
2009-04-12 22:59:40 +01:00
|
|
|
};
|
|
|
|
}
|