{ lib
, stdenv
, fetchFromGitHub
, ppp } :
let
in
stdenv.mkDerivation rec {
  pname = "rp-pppoe";
  version = "3.15";

  src = fetchFromGitHub {
    owner = "dfskoll";
    repo = "rp-pppoe";
    rev = "7cfd8c0405d14cf1c8d799d41d8207fd707979c1";
    hash = "sha256-MFdCwNj8c52blxEuXH5ltT2yYDmKMH5MLUgtddZV25E=";
  };

  buildInputs = [ ppp ];

  preConfigure = ''
    cd src
    export PPPD=${ppp}/sbin/pppd
  '';

  configureFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ "rpppoe_cv_pack_bitfields=rev" ];

  postConfigure = ''
    sed -i Makefile -e 's@DESTDIR)/etc/ppp@out)/etc/ppp@'
    sed -i Makefile -e 's@PPPOESERVER_PPPD_OPTIONS=@&$(out)@'
  '';

  installPhase = ''
    mkdir -p $out/bin $out/lib
    cp pppoe pppoe-server $out/bin # ppoe-relay pppoe-sniff?
    test -e rp-pppoe.so && cp rp-pppoe.so $out/lib
    true
  '';
  makeFlags = [ "AR:=$(AR)" ];

  meta = with lib; {
    description = "Roaring Penguin Point-to-Point over Ethernet tool";
    platforms = platforms.linux;
    homepage = "https://www.roaringpenguin.com/products/pppoe";
    license = licenses.gpl2Plus;
  };
}