diff options
author | Pol Dellaiera <pol.dellaiera@protonmail.com> | 2023-08-01 09:31:47 +0200 |
---|---|---|
committer | Дамјан Георгиевски <gdamjan@gmail.com> | 2023-08-01 10:42:05 +0200 |
commit | 77829e4496d188c93909e2dcfa68e092afaddb97 (patch) | |
tree | 0d6a305c5705e2ba5df4d57ddc3a22d92ab4c4dd /pkgs/servers/uwsgi | |
parent | 80b45192a4ec0d604ac540dc14d2c9527da1a31d (diff) |
uwsgi: use `finalAttrs` pattern
Diffstat (limited to 'pkgs/servers/uwsgi')
-rw-r--r-- | pkgs/servers/uwsgi/default.nix | 184 |
1 files changed, 104 insertions, 80 deletions
diff --git a/pkgs/servers/uwsgi/default.nix b/pkgs/servers/uwsgi/default.nix index 7dcdfbdbfd09e..acf4b07516201 100644 --- a/pkgs/servers/uwsgi/default.nix +++ b/pkgs/servers/uwsgi/default.nix @@ -1,5 +1,12 @@ -{ stdenv, nixosTests, lib, pkg-config, jansson, pcre, libxcrypt -, expat, zlib +{ stdenv +, nixosTests +, lib +, pkg-config +, jansson +, pcre +, libxcrypt +, expat +, zlib # plugins: list of strings, eg. [ "python2" "python3" ] , plugins ? [] , pam, withPAM ? stdenv.isLinux @@ -10,90 +17,97 @@ , makeWrapper, fetchFromGitHub }: -let php-embed = php.override { - embedSupport = true; - apxs2Support = false; - }; - - pythonPlugin = pkg : lib.nameValuePair "python${if pkg.isPy2 then "2" else "3"}" { - interpreter = pkg.pythonForBuild.interpreter; - path = "plugins/python"; - inputs = [ pkg ncurses ]; - install = '' - install -Dm644 uwsgidecorators.py $out/${pkg.sitePackages}/uwsgidecorators.py - ${pkg.pythonForBuild.executable} -m compileall $out/${pkg.sitePackages}/ - ${pkg.pythonForBuild.executable} -O -m compileall $out/${pkg.sitePackages}/ - ''; - }; - - available = lib.listToAttrs [ - (pythonPlugin python2) - (pythonPlugin python3) - (lib.nameValuePair "rack" { - path = "plugins/rack"; - inputs = [ ruby ]; - }) - (lib.nameValuePair "cgi" { - # usage: https://uwsgi-docs.readthedocs.io/en/latest/CGI.html?highlight=cgi - path = "plugins/cgi"; - inputs = [ ]; - }) - (lib.nameValuePair "php" { - # usage: https://uwsgi-docs.readthedocs.io/en/latest/PHP.html#running-php-apps-with-nginx - path = "plugins/php"; - inputs = [ - php-embed - php-embed.extensions.session - php-embed.extensions.session.dev - php-embed.unwrapped.dev - ] ++ php-embed.unwrapped.buildInputs; - }) - ]; - - getPlugin = name: - let all = lib.concatStringsSep ", " (lib.attrNames available); - in if lib.hasAttr name available - then lib.getAttr name available // { inherit name; } - else throw "Unknown UWSGI plugin ${name}, available : ${all}"; - - needed = builtins.map getPlugin plugins; +let + php-embed = php.override { + embedSupport = true; + apxs2Support = false; + }; + + pythonPlugin = pkg : lib.nameValuePair "python${if pkg.isPy2 then "2" else "3"}" { + interpreter = pkg.pythonForBuild.interpreter; + path = "plugins/python"; + inputs = [ pkg ncurses ]; + install = '' + install -Dm644 uwsgidecorators.py $out/${pkg.sitePackages}/uwsgidecorators.py + ${pkg.pythonForBuild.executable} -m compileall $out/${pkg.sitePackages}/ + ${pkg.pythonForBuild.executable} -O -m compileall $out/${pkg.sitePackages}/ + ''; + }; + + available = lib.listToAttrs [ + (pythonPlugin python2) + (pythonPlugin python3) + (lib.nameValuePair "rack" { + path = "plugins/rack"; + inputs = [ ruby ]; + }) + (lib.nameValuePair "cgi" { + # usage: https://uwsgi-docs.readthedocs.io/en/latest/CGI.html?highlight=cgi + path = "plugins/cgi"; + inputs = [ ]; + }) + (lib.nameValuePair "php" { + # usage: https://uwsgi-docs.readthedocs.io/en/latest/PHP.html#running-php-apps-with-nginx + path = "plugins/php"; + inputs = [ + php-embed + php-embed.extensions.session + php-embed.extensions.session.dev + php-embed.unwrapped.dev + ] ++ php-embed.unwrapped.buildInputs; + }) + ]; + + getPlugin = name: + let + all = lib.concatStringsSep ", " (lib.attrNames available); + in + if lib.hasAttr name available + then lib.getAttr name available // { inherit name; } + else throw "Unknown UWSGI plugin ${name}, available : ${all}"; + + needed = builtins.map getPlugin plugins; in -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "uwsgi"; version = "2.0.22"; src = fetchFromGitHub { owner = "unbit"; repo = "uwsgi"; - rev = version; - sha256 = "sha256-pfy3EDXq3KVY2mC3BMAp/87IUiP4NhdTWZo+zVBJ+Pc="; + rev = finalAttrs.version; + hash = "sha256-pfy3EDXq3KVY2mC3BMAp/87IUiP4NhdTWZo+zVBJ+Pc="; }; patches = [ - ./no-ext-session-php_session.h-on-NixOS.patch - ./additional-php-ldflags.patch + ./no-ext-session-php_session.h-on-NixOS.patch + ./additional-php-ldflags.patch ]; - nativeBuildInputs = [ python3 pkg-config makeWrapper ]; + nativeBuildInputs = [ + makeWrapper + pkg-config + python3 + ]; buildInputs = [ jansson pcre libxcrypt ] - ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [ expat zlib ] - ++ lib.optional withPAM pam - ++ lib.optional withSystemd systemd - ++ lib.optional withCap libcap - ++ lib.concatMap (x: x.inputs) needed - ; + ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [ expat zlib ] + ++ lib.optional withPAM pam + ++ lib.optional withSystemd systemd + ++ lib.optional withCap libcap + ++ lib.concatMap (x: x.inputs) needed; basePlugins = lib.concatStringsSep "," - ( lib.optional withPAM "pam" - ++ lib.optional withSystemd "systemd_logger" - ); + ( lib.optional withPAM "pam" + ++ lib.optional withSystemd "systemd_logger" + ); UWSGI_INCLUDES = lib.optionalString withCap "${libcap.dev}/include"; passthru = { inherit python2 python3; + tests.uwsgi = nixosTests.uwsgi; }; postPatch = '' @@ -105,29 +119,42 @@ stdenv.mkDerivation rec { ''; configurePhase = '' + runHook preConfigure + export pluginDir=$out/lib/uwsgi substituteAll ${./nixos.ini} buildconf/nixos.ini + + runHook postConfigure ''; # this is a hack to make the php plugin link with session.so (which on nixos is a separate package) # the hack works in coordination with ./additional-php-ldflags.patch - UWSGICONFIG_PHP_LDFLAGS = lib.optionalString (builtins.any (x: x.name == "php") needed) - (lib.concatStringsSep "," [ - "-Wl" - "-rpath=${php-embed.extensions.session}/lib/php/extensions/" - "--library-path=${php-embed.extensions.session}/lib/php/extensions/" - "-l:session.so" - ]); + UWSGICONFIG_PHP_LDFLAGS = lib.optionalString + (builtins.any (x: x.name == "php") needed) + (lib.concatStringsSep "," [ + "-Wl" + "-rpath=${php-embed.extensions.session}/lib/php/extensions/" + "--library-path=${php-embed.extensions.session}/lib/php/extensions/" + "-l:session.so" + ]); buildPhase = '' + runHook preBuild + mkdir -p $pluginDir python3 uwsgiconfig.py --build nixos ${lib.concatMapStringsSep ";" (x: "${x.preBuild or ""}\n ${x.interpreter or "python3"} uwsgiconfig.py --plugin ${x.path} nixos ${x.name}") needed} + + runHook postBuild ''; installPhase = '' + runHook preInstall + install -Dm755 uwsgi $out/bin/uwsgi ${lib.concatMapStringsSep "\n" (x: x.install or "") needed} + + runHook postInstall ''; postFixup = lib.optionalString (builtins.any (x: x.name == "php") needed) @@ -135,14 +162,11 @@ stdenv.mkDerivation rec { wrapProgram $out/bin/uwsgi --set PHP_INI_SCAN_DIR ${php-embed}/lib ''; - meta = with lib; { - homepage = "https://uwsgi-docs.readthedocs.org/en/latest/"; + meta = { description = "A fast, self-healing and developer/sysadmin-friendly application container server coded in pure C"; - license = licenses.gpl2; - maintainers = with maintainers; [ abbradar schneefux globin ]; - platforms = platforms.unix; + homepage = "https://uwsgi-docs.readthedocs.org/en/latest/"; + license = lib.licenses.gpl2; + maintainers = with lib.maintainers; [ abbradar schneefux globin ]; + platforms = lib.platforms.unix; }; - - passthru.tests.uwsgi = nixosTests.uwsgi; - -} +}) |