Skip to content

Commit

Permalink
uwsgi: the php plugin needs to link with session.so
Browse files Browse the repository at this point in the history
On NixOS the session.so php extension is a separate package (and not builtin
in libphp.so). But since the uwsgi php plugin uses the session
mechanisms, we need to link the plugin to that library too.

With this change uwsgipluginpy is hacked to take an additional UWSGICONFIG_PHP_LDFLAGS
environment variable and add it to its LDFLAGS, and then in the nix
expression the UWSGICONFIG_PHP_LDFLAGS is set to point to php.extensions.session
  • Loading branch information
gdamjan committed Dec 22, 2020
1 parent 6dd858d commit 87bed6c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
13 changes: 13 additions & 0 deletions pkgs/servers/uwsgi/additional-php-ldflags.patch
Original file line number Diff line number Diff line change
@@ -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
15 changes: 14 additions & 1 deletion pkgs/servers/uwsgi/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,10 @@ stdenv.mkDerivation rec {
sha256 = "0256v72b7zr6ds4srpaawk1px3bp0djdwm239w3wrxpw7dzk1gjn";
};

patches = [ ./0001-no-ext-session-php_session.h-on-NixOS.patch ];
patches = [
./no-ext-session-php_session.h-on-NixOS.patch
./additional-php-ldflags.patch
];

nativeBuildInputs = [ python3 pkgconfig ];

Expand All @@ -89,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
Expand Down

0 comments on commit 87bed6c

Please sign in to comment.