virtualbox: Use Linux's kbuild to build modules.

Don't rely on VirtualBox's in-tree build scripts to set include paths correctly
and use the official way of the Linux kernel to build the modules. That way we
don't need to make ugly symlinks in the kernel tree or heavily patch VirtualBox.
This commit is contained in:
aszlig 2012-08-17 12:36:43 +02:00
parent 10aa2bd5c3
commit 830e9db5dd

View File

@ -45,7 +45,7 @@ stdenv.mkDerivation {
./configure --with-qt4-dir=${qt4} \ ./configure --with-qt4-dir=${qt4} \
${optionalString (!javaBindings) "--disable-java"} \ ${optionalString (!javaBindings) "--disable-java"} \
${optionalString (!pythonBindings) "--disable-python"} \ ${optionalString (!pythonBindings) "--disable-python"} \
--disable-pulse --disable-hardening \ --disable-pulse --disable-hardening --disable-kmods \
--with-mkisofs=${xorriso}/bin/xorrisofs --with-mkisofs=${xorriso}/bin/xorrisofs
sed -e 's@PKG_CONFIG_PATH=.*@PKG_CONFIG_PATH=${libIDL}/lib/pkgconfig:${glib}/lib/pkgconfig ${libIDL}/bin/libIDL-config-2@' \ sed -e 's@PKG_CONFIG_PATH=.*@PKG_CONFIG_PATH=${libIDL}/lib/pkgconfig:${glib}/lib/pkgconfig ${libIDL}/bin/libIDL-config-2@' \
-i AutoConfig.kmk -i AutoConfig.kmk
@ -63,51 +63,43 @@ stdenv.mkDerivation {
enableParallelBuilding = true; enableParallelBuilding = true;
preBuild = '' buildPhase = ''
source env.sh source env.sh
kmk kmk
cd out/linux.*/release/bin/src
export KERN_DIR=${kernel}/lib/modules/*/build
''; '';
postBuild = ''
cd ../../../../..
'';
installPhase = '' installPhase = ''
libexec=$out/libexec/virtualbox libexec=$out/libexec/virtualbox
# Install VirtualBox files # Install VirtualBox files
cd out/linux.*/release/bin cd out/linux.*/release/bin
mkdir -p $libexec mkdir -p $libexec
cp -av * $libexec cp -av * $libexec
# Install kernel module
cd src
kernelVersion=$(cd ${kernel}/lib/modules; ls)
export MODULE_DIR=$out/lib/modules/$kernelVersion/misc
# Remove root ownership stuff, since this does not work in a chroot environment
for i in `find . -name Makefile`; do
sed -i -e "s|-o root||g" \
-e "s|-g root||g" $i
done
# Install kernel modules # Install kernel modules
make install curdir="$(pwd)"
for makefile in $curdir/out/linux.*/release/bin/src/*/Makefile \
$curdir/out/linux.*/release/bin/additions/src/*/Makefile
do
mod="$(dirname "$makefile")"
name="$(basename "$mod")"
export INSTALL_MOD_PATH="$out"
export INSTALL_MOD_DIR=misc
make -C "$MODULES_BUILD_DIR" "M=$mod" DEPMOD= modules_install
done
# Create wrapper script # Create wrapper script
mkdir -p $out/bin mkdir -p $out/bin
for file in VirtualBox VBoxManage VBoxSDL VBoxBalloonCtrl VBoxBFE VBoxHeadless; do for file in VirtualBox VBoxManage VBoxSDL VBoxBalloonCtrl VBoxBFE VBoxHeadless; do
ln -s "$libexec/$file" $out/bin/$file ln -s "$libexec/$file" $out/bin/$file
done done
# Create and fix desktop item # Create and fix desktop item
mkdir -p $out/share/applications mkdir -p $out/share/applications
sed -i -e "s|Icon=VBox|Icon=$libexec/VBox.png|" $libexec/virtualbox.desktop sed -i -e "s|Icon=VBox|Icon=$libexec/VBox.png|" $libexec/virtualbox.desktop
ln -sfv $libexec/virtualbox.desktop $out/share/applications ln -sfv $libexec/virtualbox.desktop $out/share/applications
''; '';
meta = { meta = {
description = "PC emulator"; description = "PC emulator";
homepage = http://www.virtualbox.org/; homepage = http://www.virtualbox.org/;