From b330329768cc753b6bd8f0e6e3f398382566f7c8 Mon Sep 17 00:00:00 2001 From: Alastair Pharo Date: Mon, 3 Apr 2017 01:35:21 +1000 Subject: [PATCH] php: fix php-config header file paths Split outputs mean that the "include" folder from PHP gets placed into a "dev" derivation. However php-config is not aware of this, which means that compiling extensions with phpize fails with an error about being unable to find header files (see #24357, #24420). This fixes that by: 1. passing the `--includedir` flag to `configure` so that `php-config` gives the correct paths. 2. moving the `phpize` and `php-config` scripts and man pages to the dev derivation, to prevent cylic references. 3. ensuring that the `configure` script arguments are stripped from all binaries, including `php-embed`, to prevent cyclic references. --- pkgs/development/interpreters/php/default.nix | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/pkgs/development/interpreters/php/default.nix b/pkgs/development/interpreters/php/default.nix index c3f56b4c6649..96ea21e02057 100644 --- a/pkgs/development/interpreters/php/default.nix +++ b/pkgs/development/interpreters/php/default.nix @@ -23,11 +23,6 @@ let buildInputs = [ flex bison pkgconfig ] ++ lib.optional stdenv.isLinux systemd; - configureFlags = [ - "EXTENSION_DIR=$(out)/lib/php/extensions" - ] ++ lib.optional stdenv.isDarwin "--with-iconv=${libiconv}" - ++ lib.optional stdenv.isLinux "--with-fpm-systemd"; - flags = { # much left to do here... @@ -267,26 +262,40 @@ let hardeningDisable = [ "bindnow" ]; - configurePhase = '' + preConfigure = '' # Don't record the configure flags since this causes unnecessary - # runtime dependencies - except for php-embed, as uwsgi needs them. - ${lib.optionalString (!(config.php.embed or false)) '' + # runtime dependencies for i in main/build-defs.h.in scripts/php-config.in; do substituteInPlace $i \ --replace '@CONFIGURE_COMMAND@' '(omitted)' \ --replace '@CONFIGURE_OPTIONS@' "" \ --replace '@PHP_LDFLAGS@' "" done - ''} - [[ -z "$libxml2" ]] || export PATH=$PATH:$libxml2/bin - ./configure --with-config-file-scan-dir=/etc/php.d --with-config-file-path=$out/etc --prefix=$out $configureFlags + #[[ -z "$libxml2" ]] || addToSearchPath PATH $libxml2/bin + + configureFlags+=(--with-config-file-path=$out/etc \ + --includedir=$dev/include \ + EXTENSION_DIR=$out/lib/php/extensions) ''; + configureFlags = [ + "--with-config-file-scan-dir=/etc/php.d" + ] ++ lib.optional stdenv.isDarwin "--with-iconv=${libiconv}" + ++ lib.optional stdenv.isLinux "--with-fpm-systemd"; + postInstall = '' cp php.ini-production $out/etc/php.ini ''; + postFixup = '' + mkdir -p $dev/bin $dev/share/man/man1 + mv $out/bin/phpize $out/bin/php-config $dev/bin/ + mv $out/share/man/man1/phpize.1.gz \ + $out/share/man/man1/php-config.1.gz \ + $dev/share/man/man1/ + ''; + src = fetchurl { url = "http://www.php.net/distributions/php-${version}.tar.bz2"; inherit sha256; @@ -298,6 +307,7 @@ let license = licenses.php301; maintainers = with maintainers; [ globin ]; platforms = platforms.all; + outputsToInstall = [ "out" "dev" ]; }; patches = if !php7 then [ ./fix-paths.patch ] else [ ./fix-paths-php7.patch ];