Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 stdenv, 3 kernel, 4 fetchurl, 5 lib, 6 pam, 7 libxslt, 8 libXext, 9 libXcursor, 10 libXmu, 11 glib, 12 libXrandr, 13 dbus, 14 xz, 15 pkg-config, 16 which, 17 xorg, 18 yasm, 19 patchelf, 20 makeself, 21 linuxHeaders, 22 openssl, 23 virtualboxVersion, 24 virtualboxSubVersion, 25 virtualboxSha256, 26}: 27 28let 29 buildType = "release"; 30in 31stdenv.mkDerivation (finalAttrs: { 32 pname = "VirtualBox-GuestAdditions-builder-${kernel.version}"; 33 version = "${virtualboxVersion}${virtualboxSubVersion}"; 34 35 inherit virtualboxVersion virtualboxSubVersion; 36 37 src = fetchurl { 38 url = "https://download.virtualbox.org/virtualbox/${finalAttrs.virtualboxVersion}/VirtualBox-${finalAttrs.virtualboxVersion}${finalAttrs.virtualboxSubVersion}.tar.bz2"; 39 sha256 = virtualboxSha256; 40 }; 41 42 env.NIX_CFLAGS_COMPILE = "-Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration"; 43 44 nativeBuildInputs = [ 45 patchelf 46 pkg-config 47 which 48 yasm 49 makeself 50 xorg.xorgserver 51 openssl 52 linuxHeaders 53 xz 54 ] 55 ++ kernel.moduleBuildDependencies; 56 buildInputs = [ 57 dbus 58 libxslt 59 libXext 60 libXcursor 61 pam 62 libXmu 63 libXrandr 64 ]; 65 66 KERN_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"; 67 KERN_INCL = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/source/include"; 68 69 prePatch = '' 70 rm -r src/VBox/Additions/x11/x11include/ 71 rm -r src/VBox/Additions/3D/mesa/mesa-*/ 72 rm -r src/libs/openssl-*/ 73 rm -r src/libs/curl-*/ 74 rm -r src/libs/libpng-*/ 75 rm -r src/libs/libxml2-*/ 76 rm -r src/libs/liblzma-*/ 77 rm -r src/libs/zlib*/ 78 ''; 79 80 postPatch = '' 81 set -x 82 sed -e 's@MKISOFS --version@MKISOFS -version@' \ 83 -e 's@CXX_FLAGS="\(.*\)"@CXX_FLAGS="-std=c++17 \1"@' \ 84 -i configure 85 ls kBuild/bin/linux.x86/k* tools/linux.x86/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux.so.2 86 ls kBuild/bin/linux.amd64/k* tools/linux.amd64/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 87 88 substituteInPlace ./include/VBox/dbus-calls.h --replace-fail libdbus-1.so.3 ${dbus.lib}/lib/libdbus-1.so.3 89 90 substituteInPlace ./src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDrmClient.cpp --replace-fail /usr/bin/VBoxDRMClient /run/current-system/sw/bin/VBoxDRMClient 91 substituteInPlace ./src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDrmClient.cpp --replace-fail /usr/bin/VBoxClient /run/current-system/sw/bin/VBoxClient 92 substituteInPlace ./src/VBox/Additions/x11/VBoxClient/display.cpp --replace-fail /usr/X11/bin/xrandr ${xorg.xrandr}/bin/xrandr 93 substituteInPlace ./src/VBox/Additions/x11/vboxvideo/Makefile.kmk --replace-fail /usr/include/xorg "${xorg.xorgserver.dev}/include/xorg " 94 ''; 95 96 configurePhase = '' 97 NIX_CFLAGS_COMPILE=$(echo "$NIX_CFLAGS_COMPILE" | sed 's,\-isystem ${lib.getDev stdenv.cc.libc}/include,,g') 98 99 cat >> LocalConfig.kmk <<LOCAL_CONFIG 100 VBOX_WITH_TESTCASES := 101 VBOX_WITH_TESTSUITE := 102 VBOX_WITH_VALIDATIONKIT := 103 VBOX_WITH_DOCS := 104 VBOX_WITH_WARNINGS_AS_ERRORS := 105 106 VBOX_WITH_ORIGIN := 107 VBOX_PATH_APP_PRIVATE_ARCH_TOP := $out/share/virtualbox 108 VBOX_PATH_APP_PRIVATE_ARCH := $out/libexec/virtualbox 109 VBOX_PATH_SHARED_LIBS := $out/libexec/virtualbox 110 VBOX_WITH_RUNPATH := $out/libexec/virtualbox 111 VBOX_PATH_APP_PRIVATE := $out/share/virtualbox 112 VBOX_PATH_APP_DOCS := $out/doc 113 114 VBOX_USE_SYSTEM_XORG_HEADERS := 1 115 VBOX_USE_SYSTEM_GL_HEADERS := 1 116 VBOX_NO_LEGACY_XORG_X11 := 1 117 SDK_VBoxLibPng_INCS := 118 SDK_VBoxLibXml2_INCS := 119 SDK_VBoxLibLzma_INCS := ${xz.dev}/include 120 SDK_VBoxLibLzma_LIBS := ${xz.out}/lib 121 122 SDK_VBoxOpenSslStatic_INCS := ${openssl.dev}/include/ssl 123 124 VBOX_ONLY_ADDITIONS := 1 125 VBOX_WITH_SHARED_CLIPBOARD := 1 126 VBOX_WITH_GUEST_PROPS := 1 127 VBOX_WITH_VMSVGA := 1 128 VBOX_WITH_SHARED_FOLDERS := 1 129 VBOX_WITH_GUEST_CONTROL := 1 130 VBOX_WITHOUT_LINUX_GUEST_PACKAGE := 1 131 VBOX_WITH_PAM := 132 VBOX_WITH_UPDATE_AGENT := 133 VBOX_WITH_AUDIO_ALSA := 134 VBOX_WITH_AUDIO_PULSE := 135 136 VBOX_BUILD_PUBLISHER := _NixOS 137 LOCAL_CONFIG 138 139 ./configure \ 140 --only-additions \ 141 --with-linux=${kernel.dev} \ 142 --disable-kmods 143 144 sed -e 's@PKG_CONFIG_PATH=.*@PKG_CONFIG_PATH=${glib.dev}/lib/pkgconfig @' \ 145 -i AutoConfig.kmk 146 sed -e 's@arch/x86/@@' \ 147 -i Config.kmk 148 149 export USER=nix 150 set +x 151 ''; 152 153 enableParallelBuilding = true; 154 155 buildPhase = '' 156 runHook preBuild 157 158 source env.sh 159 VBOX_ONLY_ADDITIONS=1 VBOX_ONLY_BUILD=1 kmk -j $NIX_BUILD_CORES BUILD_TYPE="${buildType}" 160 VBOX_ONLY_ADDITIONS=1 VBOX_ONLY_BUILD=1 kmk packing 161 162 runHook postBuild 163 ''; 164 165 installPhase = '' 166 runHook preInstall 167 168 mkdir -p $out 169 cp -rv ./out/linux.${ 170 if stdenv.hostPlatform.is32bit then "x86" else "amd64" 171 }/${buildType}/bin/additions/VBoxGuestAdditions-${ 172 if stdenv.hostPlatform.is32bit then "x86" else "amd64" 173 }.tar.bz2 $out/ 174 175 runHook postInstall 176 ''; 177})