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.
This commit is contained in:
Alastair Pharo 2017-04-03 01:35:21 +10:00
parent 1dcb587d93
commit b330329768

View File

@ -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 ];