Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 176 lines 4.7 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchurl, 5 fetchpatch, 6 openssl, 7 pkg-config, 8 libnl, 9 nixosTests, 10 wpa_supplicant_gui, 11 dbusSupport ? !stdenv.hostPlatform.isStatic, 12 dbus, 13 withReadline ? true, 14 readline, 15 withPcsclite ? !stdenv.hostPlatform.isStatic, 16 pcsclite, 17}: 18 19stdenv.mkDerivation rec { 20 version = "2.11"; 21 22 pname = "wpa_supplicant"; 23 24 src = fetchurl { 25 url = "https://w1.fi/releases/${pname}-${version}.tar.gz"; 26 sha256 = "sha256-kS6gb3TjCo42+7aAZNbN/yGNjVkdsPxddd7myBrH/Ao="; 27 }; 28 29 patches = [ 30 (fetchpatch { 31 name = "revert-change-breaking-auth-broadcom.patch"; 32 url = "https://w1.fi/cgit/hostap/patch/?id=41638606054a09867fe3f9a2b5523aa4678cbfa5"; 33 hash = "sha256-X6mBbj7BkW66aYeSCiI3JKBJv10etLQxaTRfRgwsFmM="; 34 revert = true; 35 }) 36 ./unsurprising-ext-password.patch 37 (fetchpatch { 38 name = "suppress-ctrl-event-signal-change.patch"; 39 url = "https://w1.fi/cgit/hostap/patch/?id=c330b5820eefa8e703dbce7278c2a62d9c69166a"; 40 hash = "sha256-5ti5OzgnZUFznjU8YH8Cfktrj4YBzsbbrEbNvec+ppQ="; 41 }) 42 ]; 43 44 # TODO: Patch epoll so that the dbus actually responds 45 # TODO: Figure out how to get privsep working, currently getting SIGBUS 46 extraConfig = '' 47 #CONFIG_ELOOP_EPOLL=y 48 #CONFIG_PRIVSEP=y 49 #CONFIG_TLSV12=y see #8332 50 CONFIG_AP=y 51 CONFIG_BGSCAN_LEARN=y 52 CONFIG_BGSCAN_SIMPLE=y 53 CONFIG_DEBUG_SYSLOG=y 54 CONFIG_EAP_EKE=y 55 CONFIG_EAP_FAST=y 56 CONFIG_EAP_GPSK=y 57 CONFIG_EAP_GPSK_SHA256=y 58 CONFIG_EAP_IKEV2=y 59 CONFIG_EAP_PAX=y 60 CONFIG_EAP_PWD=y 61 CONFIG_EAP_SAKE=y 62 CONFIG_ELOOP=eloop 63 CONFIG_EXT_PASSWORD_FILE=y 64 CONFIG_HS20=y 65 CONFIG_HT_OVERRIDES=y 66 CONFIG_IEEE80211AC=y 67 CONFIG_IEEE80211AX=y 68 CONFIG_IEEE80211BE=y 69 CONFIG_IEEE80211N=y 70 CONFIG_IEEE80211R=y 71 CONFIG_IEEE80211W=y 72 CONFIG_INTERNETWORKING=y 73 CONFIG_L2_PACKET=linux 74 CONFIG_LIBNL32=y 75 CONFIG_MESH=y 76 CONFIG_OWE=y 77 CONFIG_P2P=y 78 CONFIG_SAE_PK=y 79 CONFIG_TDLS=y 80 CONFIG_TLS=openssl 81 CONFIG_TLSV11=y 82 CONFIG_VHT_OVERRIDES=y 83 CONFIG_WNM=y 84 CONFIG_WPS=y 85 CONFIG_WPS_ER=y 86 CONFIG_WPS_NFS=y 87 CONFIG_SUITEB=y 88 CONFIG_SUITEB192=y 89 '' 90 + lib.optionalString withPcsclite '' 91 CONFIG_EAP_SIM=y 92 CONFIG_EAP_AKA=y 93 CONFIG_EAP_AKA_PRIME=y 94 CONFIG_PCSC=y 95 '' 96 + lib.optionalString dbusSupport '' 97 CONFIG_CTRL_IFACE_DBUS=y 98 CONFIG_CTRL_IFACE_DBUS_NEW=y 99 CONFIG_CTRL_IFACE_DBUS_INTRO=y 100 '' 101 # Upstream uses conditionals based on ifdef, so opposite of =y is 102 # not =n, as one may expect, but undefine. 103 # 104 # This config is sourced into makefile. 105 + lib.optionalString (!dbusSupport) '' 106 undefine CONFIG_CTRL_IFACE_DBUS 107 undefine CONFIG_CTRL_IFACE_DBUS_NEW 108 undefine CONFIG_CTRL_IFACE_DBUS_INTRO 109 '' 110 + ( 111 if withReadline then 112 '' 113 CONFIG_READLINE=y 114 '' 115 else 116 '' 117 CONFIG_WPA_CLI_EDIT=y 118 '' 119 ); 120 121 preBuild = '' 122 for manpage in wpa_supplicant/doc/docbook/wpa_supplicant.conf* ; do 123 substituteInPlace "$manpage" --replace /usr/share/doc $out/share/doc 124 done 125 cd wpa_supplicant 126 cp -v defconfig .config 127 echo "$extraConfig" >> .config 128 cat -n .config 129 substituteInPlace Makefile --replace /usr/local $out 130 export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE \ 131 -I$(echo "${lib.getDev libnl}"/include/libnl*/) \ 132 ${lib.optionalString withPcsclite "-I${lib.getDev pcsclite}/include/PCSC/"}" 133 ''; 134 135 buildInputs = [ 136 openssl 137 libnl 138 ] 139 ++ lib.optional dbusSupport dbus 140 ++ lib.optional withReadline readline 141 ++ lib.optional withPcsclite pcsclite; 142 143 nativeBuildInputs = [ pkg-config ]; 144 145 postInstall = '' 146 mkdir -p $out/share/man/man5 $out/share/man/man8 147 cp -v "doc/docbook/"*.5 $out/share/man/man5/ 148 cp -v "doc/docbook/"*.8 $out/share/man/man8/ 149 '' 150 + lib.optionalString dbusSupport '' 151 mkdir -p $out/share/dbus-1/system.d $out/share/dbus-1/system-services $out/etc/systemd/system 152 cp -v "dbus/"*service $out/share/dbus-1/system-services 153 cp -v dbus/dbus-wpa_supplicant.conf $out/share/dbus-1/system.d 154 cp -v "systemd/"*.service $out/etc/systemd/system 155 '' 156 + '' 157 rm $out/share/man/man8/wpa_priv.8 158 install -Dm444 wpa_supplicant.conf $out/share/doc/wpa_supplicant/wpa_supplicant.conf.example 159 ''; 160 161 passthru.tests = { 162 inherit (nixosTests) wpa_supplicant; 163 inherit wpa_supplicant_gui; # inherits the src+version updates 164 }; 165 166 meta = with lib; { 167 homepage = "https://w1.fi/wpa_supplicant/"; 168 description = "Tool for connecting to WPA and WPA2-protected wireless networks"; 169 license = licenses.bsd3; 170 maintainers = with maintainers; [ 171 marcweber 172 ma27 173 ]; 174 platforms = platforms.linux; 175 }; 176}