lol
at 18.09-beta 122 lines 5.2 kB view raw
1{ stdenv, lib, pkgArches, 2 name, version, src, monos, geckos, platforms, 3 # flex 2.6.3 causes: undefined reference to `yywrap' 4 pkgconfig, fontforge, makeWrapper, flex_2_6_1, bison, 5 supportFlags, 6 buildScript ? null, configureFlags ? [] 7}: 8 9with import ./util.nix { inherit lib; }; 10 11stdenv.mkDerivation ((lib.optionalAttrs (! isNull buildScript) { 12 builder = buildScript; 13}) // rec { 14 inherit name src configureFlags; 15 16 nativeBuildInputs = [ 17 pkgconfig fontforge makeWrapper flex_2_6_1 bison 18 ]; 19 20 buildInputs = toBuildInputs pkgArches (with supportFlags; (pkgs: 21 [ pkgs.freetype ] 22 ++ lib.optional stdenv.isLinux pkgs.libcap 23 ++ lib.optional pngSupport pkgs.libpng 24 ++ lib.optional jpegSupport pkgs.libjpeg 25 ++ lib.optional cupsSupport pkgs.cups 26 ++ lib.optional colorManagementSupport pkgs.lcms2 27 ++ lib.optional gettextSupport pkgs.gettext 28 ++ lib.optional dbusSupport pkgs.dbus 29 ++ lib.optional mpg123Support pkgs.mpg123 30 ++ lib.optional openalSupport pkgs.openal 31 ++ lib.optional cairoSupport pkgs.cairo 32 ++ lib.optional tiffSupport pkgs.libtiff 33 ++ lib.optional odbcSupport pkgs.unixODBC 34 ++ lib.optional netapiSupport pkgs.samba4 35 ++ lib.optional cursesSupport pkgs.ncurses 36 ++ lib.optional vaSupport pkgs.libva 37 ++ lib.optional pcapSupport pkgs.libpcap 38 ++ lib.optional v4lSupport pkgs.libv4l 39 ++ lib.optional saneSupport pkgs.sane-backends 40 ++ lib.optional gsmSupport pkgs.gsm 41 ++ lib.optional gphoto2Support pkgs.libgphoto2 42 ++ lib.optional ldapSupport pkgs.openldap 43 ++ lib.optional fontconfigSupport pkgs.fontconfig 44 ++ lib.optional alsaSupport pkgs.alsaLib 45 ++ lib.optional pulseaudioSupport pkgs.libpulseaudio 46 ++ lib.optional xineramaSupport pkgs.xorg.libXinerama 47 ++ lib.optional udevSupport pkgs.udev 48 ++ lib.optional vulkanSupport pkgs.vulkan-loader 49 ++ lib.optionals gstreamerSupport (with pkgs.gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav ]) 50 ++ lib.optionals gtkSupport [ pkgs.gtk3 pkgs.glib ] 51 ++ lib.optionals openclSupport [ pkgs.opencl-headers pkgs.ocl-icd ] 52 ++ lib.optionals xmlSupport [ pkgs.libxml2 pkgs.libxslt ] 53 ++ lib.optionals tlsSupport [ pkgs.openssl pkgs.gnutls ] 54 ++ lib.optionals openglSupport [ pkgs.libGLU_combined pkgs.mesa_noglu.osmesa pkgs.libdrm ] 55 ++ lib.optionals stdenv.isDarwin (with pkgs.buildPackages.darwin.apple_sdk.frameworks; [ 56 CoreServices Foundation ForceFeedback AppKit OpenGL IOKit DiskArbitration Security 57 ApplicationServices AudioToolbox CoreAudio AudioUnit CoreMIDI OpenAL OpenCL Cocoa Carbon 58 ]) 59 ++ lib.optionals stdenv.isLinux (with pkgs.xorg; [ 60 libXi libXcursor libXrandr libXrender libXxf86vm libXcomposite libXext 61 ]) 62 ++ [ pkgs.xorg.libX11 ])); 63 64 # Wine locates a lot of libraries dynamically through dlopen(). Add 65 # them to the RPATH so that the user doesn't have to set them in 66 # LD_LIBRARY_PATH. 67 NIX_LDFLAGS = map (path: "-rpath " + path) ( 68 map (x: "${lib.getLib x}/lib") ([ stdenv.cc.cc ] ++ buildInputs) 69 # libpulsecommon.so is linked but not found otherwise 70 ++ lib.optionals supportFlags.pulseaudioSupport (map (x: "${lib.getLib x}/lib/pulseaudio") 71 (toBuildInputs pkgArches (pkgs: [ pkgs.libpulseaudio ]))) 72 ); 73 74 # Don't shrink the ELF RPATHs in order to keep the extra RPATH 75 # elements specified above. 76 dontPatchELF = true; 77 78 # Disable stripping to avoid breaking placeholder DLLs/EXEs. 79 # Symptoms of broken placeholders are: when the wineprefix is created 80 # drive_c/windows/system32 will only contain a few files instead of 81 # hundreds, there will be an error about winemenubuilder and MountMgr 82 # on startup of Wine, and the Drives tab in winecfg will show an error. 83 dontStrip = true; 84 85 ## FIXME 86 # Add capability to ignore known failing tests 87 # and enable doCheck 88 doCheck = false; 89 90 postInstall = let 91 links = prefix: pkg: "ln -s ${pkg} $out/${prefix}/${pkg.name}"; 92 in '' 93 mkdir -p $out/share/wine/gecko $out/share/wine/mono/ 94 ${lib.strings.concatStringsSep "\n" 95 ((map (links "share/wine/gecko") geckos) 96 ++ (map (links "share/wine/mono") monos))} 97 '' + lib.optionalString supportFlags.gstreamerSupport '' 98 for i in wine ; do 99 if [ -e "$out/bin/$i" ]; then 100 wrapProgram "$out/bin/$i" \ 101 --argv0 "" \ 102 --prefix GST_PLUGIN_SYSTEM_PATH_1_0 ":" "$GST_PLUGIN_SYSTEM_PATH_1_0" 103 fi 104 done 105 ''; 106 107 enableParallelBuilding = true; 108 109 # https://bugs.winehq.org/show_bug.cgi?id=43530 110 # https://github.com/NixOS/nixpkgs/issues/31989 111 hardeningDisable = [ "bindnow" ] 112 ++ lib.optional (stdenv.hostPlatform.isDarwin) "fortify"; 113 114 passthru = { inherit pkgArches; }; 115 meta = { 116 inherit version platforms; 117 homepage = http://www.winehq.org/; 118 license = "LGPL"; 119 description = "An Open Source implementation of the Windows API on top of X, OpenGL, and Unix"; 120 maintainers = with stdenv.lib.maintainers; [ avnik raskin bendlas ]; 121 }; 122})