diff --git a/nixos/tests/uwsgi.nix b/nixos/tests/uwsgi.nix index 7f4945a88030..5c0b294e2d29 100644 --- a/nixos/tests/uwsgi.nix +++ b/nixos/tests/uwsgi.nix @@ -4,12 +4,13 @@ import ./make-test-python.nix ({ pkgs, ... }: meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ lnl7 ]; }; + machine = { pkgs, ... }: { services.uwsgi.enable = true; - services.uwsgi.plugins = [ "python3" ]; + services.uwsgi.plugins = [ "python3" "php" ]; services.uwsgi.instance = { type = "emperor"; - vassals.hello = { + vassals.python = { type = "normal"; master = true; workers = 2; @@ -25,6 +26,17 @@ import ./make-test-python.nix ({ pkgs, ... }: ''; pythonPackages = self: with self; [ flask ]; }; + vassals.php = { + type = "normal"; + master = true; + workers = 2; + http-socket = ":8001"; + http-socket-modifier1 = 14; + php-index = "index.php"; + php-docroot = pkgs.writeTextDir "index.php" '' + + ''; + }; }; }; @@ -33,6 +45,8 @@ import ./make-test-python.nix ({ pkgs, ... }: machine.wait_for_unit("multi-user.target") machine.wait_for_unit("uwsgi.service") machine.wait_for_open_port(8000) + machine.wait_for_open_port(8001) assert "Hello World" in machine.succeed("curl -fv 127.0.0.1:8000") + assert "Hello World" in machine.succeed("curl -fv 127.0.0.1:8001") ''; }) diff --git a/pkgs/servers/uwsgi/additional-php-ldflags.patch b/pkgs/servers/uwsgi/additional-php-ldflags.patch new file mode 100644 index 000000000000..8549d5c2d03c --- /dev/null +++ b/pkgs/servers/uwsgi/additional-php-ldflags.patch @@ -0,0 +1,13 @@ +diff --git a/plugins/php/uwsgiplugin.py b/plugins/php/uwsgiplugin.py +index d930c44e..2fcbc22a 100644 +--- a/plugins/php/uwsgiplugin.py ++++ b/plugins/php/uwsgiplugin.py +@@ -17,6 +17,8 @@ php_version = os.popen(PHPPATH + ' --version').read().rstrip().split('.')[0] + CFLAGS = [os.popen(PHPPATH + ' --includes').read().rstrip(), '-Wno-sign-compare'] + LDFLAGS = os.popen(PHPPATH + ' --ldflags').read().rstrip().split() + ++LDFLAGS.append(os.environ.get('UWSGICONFIG_PHP_LDFLAGS', [])) ++ + if ld_run_path: + LDFLAGS.append('-L%s' % ld_run_path) + os.environ['LD_RUN_PATH'] = ld_run_path diff --git a/pkgs/servers/uwsgi/default.nix b/pkgs/servers/uwsgi/default.nix index 39a3113eb410..18f2846b47db 100644 --- a/pkgs/servers/uwsgi/default.nix +++ b/pkgs/servers/uwsgi/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchurl, pkgconfig, jansson, pcre +{ stdenv, nixosTests, lib, fetchurl, pkgconfig, jansson, pcre # plugins: list of strings, eg. [ "python2" "python3" ] , plugins ? [] , pam, withPAM ? stdenv.isLinux @@ -38,8 +38,12 @@ let php-embed = php.override { (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.buildInputs; - NIX_CFLAGS_LINK = [ "-L${libmysqlclient}/lib/mysql" ]; + inputs = [ + php-embed + php-embed.extensions.session + php-embed.extensions.session.dev + php-embed.unwrapped.dev + ] ++ php-embed.unwrapped.buildInputs; }) ]; @@ -61,6 +65,11 @@ stdenv.mkDerivation rec { sha256 = "0256v72b7zr6ds4srpaawk1px3bp0djdwm239w3wrxpw7dzk1gjn"; }; + patches = [ + ./no-ext-session-php_session.h-on-NixOS.patch + ./additional-php-ldflags.patch + ]; + nativeBuildInputs = [ python3 pkgconfig ]; buildInputs = [ jansson pcre ] @@ -83,6 +92,16 @@ stdenv.mkDerivation rec { substituteAll ${./nixos.ini} buildconf/nixos.ini ''; + # 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" + ]; + buildPhase = '' mkdir -p $pluginDir python3 uwsgiconfig.py --build nixos @@ -94,8 +113,6 @@ stdenv.mkDerivation rec { ${lib.concatMapStringsSep "\n" (x: x.install or "") needed} ''; - NIX_CFLAGS_LINK = toString (lib.optional withSystemd "-lsystemd" ++ lib.concatMap (x: x.NIX_CFLAGS_LINK or []) needed); - meta = with stdenv.lib; { homepage = "https://uwsgi-docs.readthedocs.org/en/latest/"; description = "A fast, self-healing and developer/sysadmin-friendly application container server coded in pure C"; @@ -103,4 +120,7 @@ stdenv.mkDerivation rec { maintainers = with maintainers; [ abbradar schneefux globin ]; platforms = platforms.unix; }; + + passthru.tests.uwsgi = nixosTests.uwsgi; + } diff --git a/pkgs/servers/uwsgi/no-ext-session-php_session.h-on-NixOS.patch b/pkgs/servers/uwsgi/no-ext-session-php_session.h-on-NixOS.patch new file mode 100644 index 000000000000..bde8f4fda1dc --- /dev/null +++ b/pkgs/servers/uwsgi/no-ext-session-php_session.h-on-NixOS.patch @@ -0,0 +1,29 @@ +From 6b9b3559d8ce59eda6c5cd6f04224cebaaa5d0ea Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=94=D0=B0=D0=BC=D1=98=D0=B0=D0=BD=20=D0=93=D0=B5=D0=BE?= + =?UTF-8?q?=D1=80=D0=B3=D0=B8=D0=B5=D0=B2=D1=81=D0=BA=D0=B8?= + +Date: Tue, 8 Sep 2020 17:11:39 +0200 +Subject: [PATCH] no ext/session/php_session.h on NixOS + +on NixOS php_session.h is in its own package, and is not installed in +ext/session/ +--- + plugins/php/common.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/php/common.h b/plugins/php/common.h +index 9bf1c069..be93f519 100644 +--- a/plugins/php/common.h ++++ b/plugins/php/common.h +@@ -10,7 +10,7 @@ + #endif + #include "ext/standard/info.h" + +-#include "ext/session/php_session.h" ++#include "php_session.h" + + #include + +-- +2.28.0 +