2015-08-11 13:13:28 +02:00
|
|
|
{ lib, stdenv, fetchurl, composableDerivation, autoconf, automake, flex, bison
|
|
|
|
, mysql, libxml2, readline, zlib, curl, postgresql, gettext
|
2017-11-11 17:02:07 +01:00
|
|
|
, openssl, pcre, pkgconfig, sqlite, config, libjpeg, libpng, freetype
|
2015-08-11 13:13:28 +02:00
|
|
|
, libxslt, libmcrypt, bzip2, icu, openldap, cyrus_sasl, libmhash, freetds
|
2016-10-05 17:30:31 +02:00
|
|
|
, uwimap, pam, gmp, apacheHttpd, libiconv, systemd }:
|
2015-08-11 13:13:28 +02:00
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
generic =
|
2015-12-02 13:52:17 +01:00
|
|
|
{ version, sha256 }:
|
2015-08-11 13:13:28 +02:00
|
|
|
|
2017-01-25 18:00:48 +01:00
|
|
|
let php7 = lib.versionAtLeast version "7.0";
|
|
|
|
mysqlHeaders = mysql.lib.dev or mysql;
|
2015-08-11 13:13:28 +02:00
|
|
|
|
2017-01-25 18:00:48 +01:00
|
|
|
in composableDerivation.composableDerivation {} (fixed: {
|
2015-08-11 13:13:28 +02:00
|
|
|
|
|
|
|
inherit version;
|
|
|
|
|
|
|
|
name = "php-${version}";
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2017-11-07 06:54:10 +01:00
|
|
|
nativeBuildInputs = [ pkgconfig ];
|
2017-09-05 23:26:13 +02:00
|
|
|
buildInputs = [ flex bison ]
|
2016-10-19 09:35:06 +02:00
|
|
|
++ lib.optional stdenv.isLinux systemd;
|
2015-08-11 13:13:28 +02:00
|
|
|
|
2017-11-07 06:54:10 +01:00
|
|
|
CXXFLAGS = lib.optional stdenv.cc.isClang "-std=c++11";
|
|
|
|
|
2015-08-11 13:13:28 +02:00
|
|
|
flags = {
|
|
|
|
|
|
|
|
# much left to do here...
|
|
|
|
|
|
|
|
# SAPI modules:
|
|
|
|
|
|
|
|
apxs2 = {
|
2016-03-11 11:50:40 +01:00
|
|
|
configureFlags = ["--with-apxs2=${apacheHttpd.dev}/bin/apxs"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [apacheHttpd];
|
|
|
|
};
|
|
|
|
|
2016-10-01 21:16:55 +02:00
|
|
|
embed = {
|
|
|
|
configureFlags = ["--enable-embed"];
|
|
|
|
};
|
|
|
|
|
2015-08-11 13:13:28 +02:00
|
|
|
# Extensions
|
|
|
|
imap = {
|
|
|
|
configureFlags = [
|
|
|
|
"--with-imap=${uwimap}"
|
|
|
|
"--with-imap-ssl"
|
|
|
|
];
|
|
|
|
buildInputs = [ uwimap openssl pam ];
|
|
|
|
};
|
|
|
|
|
|
|
|
ldap = {
|
2015-10-18 15:41:03 +02:00
|
|
|
configureFlags = [
|
2017-11-04 00:58:01 +01:00
|
|
|
"--with-ldap=/invalid/path"
|
2015-10-18 15:41:03 +02:00
|
|
|
"LDAP_DIR=${openldap.dev}"
|
|
|
|
"LDAP_INCDIR=${openldap.dev}/include"
|
|
|
|
"LDAP_LIBDIR=${openldap.out}/lib"
|
2016-06-08 22:37:06 +02:00
|
|
|
(lib.optional stdenv.isLinux "--with-ldap-sasl=${cyrus_sasl.dev}")
|
2015-10-18 15:41:03 +02:00
|
|
|
];
|
2016-06-08 22:37:06 +02:00
|
|
|
buildInputs = [openldap openssl] ++ lib.optional stdenv.isLinux cyrus_sasl;
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
mhash = {
|
|
|
|
configureFlags = ["--with-mhash"];
|
|
|
|
buildInputs = [libmhash];
|
|
|
|
};
|
|
|
|
|
|
|
|
curl = {
|
2016-04-16 18:47:59 +02:00
|
|
|
configureFlags = ["--with-curl=${curl.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [curl openssl];
|
|
|
|
};
|
|
|
|
|
|
|
|
curlWrappers = {
|
|
|
|
configureFlags = ["--with-curlwrappers"];
|
|
|
|
};
|
|
|
|
|
|
|
|
zlib = {
|
2016-04-16 19:50:01 +02:00
|
|
|
configureFlags = ["--with-zlib=${zlib.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [zlib];
|
|
|
|
};
|
|
|
|
|
|
|
|
libxml2 = {
|
|
|
|
configureFlags = [
|
2015-10-05 13:23:01 +02:00
|
|
|
"--with-libxml-dir=${libxml2.dev}"
|
2015-08-11 13:13:28 +02:00
|
|
|
];
|
|
|
|
buildInputs = [ libxml2 ];
|
|
|
|
};
|
|
|
|
|
|
|
|
pcntl = {
|
|
|
|
configureFlags = [ "--enable-pcntl" ];
|
|
|
|
};
|
|
|
|
|
2017-11-12 08:05:27 +01:00
|
|
|
# pcre functionality is tested in nixos/tests/php-pcre.nix
|
2017-11-11 17:02:07 +01:00
|
|
|
pcre = {
|
|
|
|
configureFlags = ["--with-pcre-regex=${pcre.dev} PCRE_LIBDIR=${pcre}"];
|
|
|
|
buildInputs = [ pcre ];
|
|
|
|
};
|
|
|
|
|
2015-08-11 13:13:28 +02:00
|
|
|
readline = {
|
2016-04-16 19:46:17 +02:00
|
|
|
configureFlags = ["--with-readline=${readline.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [ readline ];
|
|
|
|
};
|
|
|
|
|
|
|
|
sqlite = {
|
2016-04-16 19:47:23 +02:00
|
|
|
configureFlags = ["--with-pdo-sqlite=${sqlite.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [ sqlite ];
|
|
|
|
};
|
|
|
|
|
|
|
|
postgresql = {
|
|
|
|
configureFlags = ["--with-pgsql=${postgresql}"];
|
|
|
|
buildInputs = [ postgresql ];
|
|
|
|
};
|
|
|
|
|
|
|
|
pdo_pgsql = {
|
|
|
|
configureFlags = ["--with-pdo-pgsql=${postgresql}"];
|
|
|
|
buildInputs = [ postgresql ];
|
|
|
|
};
|
|
|
|
|
|
|
|
mysql = {
|
2016-08-01 17:46:30 +02:00
|
|
|
configureFlags = ["--with-mysql"];
|
2017-01-25 18:00:48 +01:00
|
|
|
buildInputs = [ mysqlHeaders ];
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
mysqli = {
|
2017-01-25 18:00:48 +01:00
|
|
|
configureFlags = ["--with-mysqli=${mysqlHeaders}/bin/mysql_config"];
|
|
|
|
buildInputs = [ mysqlHeaders ];
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
mysqli_embedded = {
|
|
|
|
configureFlags = ["--enable-embedded-mysqli"];
|
|
|
|
depends = "mysqli";
|
|
|
|
assertion = fixed.mysqliSupport;
|
|
|
|
};
|
|
|
|
|
|
|
|
pdo_mysql = {
|
2017-01-25 18:00:48 +01:00
|
|
|
configureFlags = ["--with-pdo-mysql=${mysqlHeaders}"];
|
|
|
|
buildInputs = [ mysqlHeaders ];
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
bcmath = {
|
|
|
|
configureFlags = ["--enable-bcmath"];
|
|
|
|
};
|
|
|
|
|
|
|
|
gd = {
|
|
|
|
# FIXME: Our own gd package doesn't work, see https://bugs.php.net/bug.php?id=60108.
|
|
|
|
configureFlags = [
|
|
|
|
"--with-gd"
|
2016-04-16 18:52:29 +02:00
|
|
|
"--with-freetype-dir=${freetype.dev}"
|
2016-04-16 19:37:32 +02:00
|
|
|
"--with-png-dir=${libpng.dev}"
|
2016-04-16 19:36:59 +02:00
|
|
|
"--with-jpeg-dir=${libjpeg.dev}"
|
2015-08-11 13:13:28 +02:00
|
|
|
];
|
|
|
|
buildInputs = [ libpng libjpeg freetype ];
|
|
|
|
};
|
|
|
|
|
|
|
|
gmp = {
|
2016-04-16 18:58:41 +02:00
|
|
|
configureFlags = ["--with-gmp=${gmp.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [ gmp ];
|
|
|
|
};
|
|
|
|
|
|
|
|
soap = {
|
|
|
|
configureFlags = ["--enable-soap"];
|
|
|
|
};
|
|
|
|
|
|
|
|
sockets = {
|
|
|
|
configureFlags = ["--enable-sockets"];
|
|
|
|
};
|
|
|
|
|
|
|
|
openssl = {
|
2016-05-01 14:41:52 +02:00
|
|
|
configureFlags = ["--with-openssl"];
|
|
|
|
buildInputs = [openssl openssl.dev];
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
mbstring = {
|
|
|
|
configureFlags = ["--enable-mbstring"];
|
|
|
|
};
|
|
|
|
|
|
|
|
gettext = {
|
|
|
|
configureFlags = ["--with-gettext=${gettext}"];
|
|
|
|
buildInputs = [gettext];
|
|
|
|
};
|
|
|
|
|
|
|
|
intl = {
|
|
|
|
configureFlags = ["--enable-intl"];
|
|
|
|
buildInputs = [icu];
|
|
|
|
};
|
|
|
|
|
|
|
|
exif = {
|
|
|
|
configureFlags = ["--enable-exif"];
|
|
|
|
};
|
|
|
|
|
|
|
|
xsl = {
|
2016-04-16 19:40:27 +02:00
|
|
|
configureFlags = ["--with-xsl=${libxslt.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [libxslt];
|
|
|
|
};
|
|
|
|
|
|
|
|
mcrypt = let libmcrypt' = libmcrypt.override { disablePosixThreads = true; }; in {
|
|
|
|
configureFlags = ["--with-mcrypt=${libmcrypt'}"];
|
|
|
|
buildInputs = [libmcrypt'];
|
|
|
|
};
|
|
|
|
|
|
|
|
bz2 = {
|
2016-04-16 18:46:12 +02:00
|
|
|
configureFlags = ["--with-bz2=${bzip2.dev}"];
|
2015-08-11 13:13:28 +02:00
|
|
|
buildInputs = [bzip2];
|
|
|
|
};
|
|
|
|
|
|
|
|
zip = {
|
|
|
|
configureFlags = ["--enable-zip"];
|
|
|
|
};
|
|
|
|
|
|
|
|
ftp = {
|
|
|
|
configureFlags = ["--enable-ftp"];
|
|
|
|
};
|
|
|
|
|
|
|
|
fpm = {
|
|
|
|
configureFlags = ["--enable-fpm"];
|
|
|
|
};
|
|
|
|
|
|
|
|
mssql = stdenv.lib.optionalAttrs (!stdenv.isDarwin) {
|
|
|
|
configureFlags = ["--with-mssql=${freetds}"];
|
|
|
|
buildInputs = [freetds];
|
|
|
|
};
|
|
|
|
|
|
|
|
zts = {
|
|
|
|
configureFlags = ["--enable-maintainer-zts"];
|
|
|
|
};
|
|
|
|
|
|
|
|
calendar = {
|
|
|
|
configureFlags = ["--enable-calendar"];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
cfg = {
|
2016-06-08 22:37:06 +02:00
|
|
|
imapSupport = config.php.imap or (!stdenv.isDarwin);
|
2015-08-11 13:13:28 +02:00
|
|
|
ldapSupport = config.php.ldap or true;
|
|
|
|
mhashSupport = config.php.mhash or true;
|
|
|
|
mysqlSupport = (!php7) && (config.php.mysql or true);
|
|
|
|
mysqliSupport = config.php.mysqli or true;
|
|
|
|
pdo_mysqlSupport = config.php.pdo_mysql or true;
|
|
|
|
libxml2Support = config.php.libxml2 or true;
|
2016-06-08 22:37:06 +02:00
|
|
|
apxs2Support = config.php.apxs2 or (!stdenv.isDarwin);
|
2016-10-01 21:16:55 +02:00
|
|
|
embedSupport = config.php.embed or false;
|
2015-08-11 13:13:28 +02:00
|
|
|
bcmathSupport = config.php.bcmath or true;
|
|
|
|
socketsSupport = config.php.sockets or true;
|
|
|
|
curlSupport = config.php.curl or true;
|
|
|
|
curlWrappersSupport = (!php7) && (config.php.curlWrappers or true);
|
|
|
|
gettextSupport = config.php.gettext or true;
|
|
|
|
pcntlSupport = config.php.pcntl or true;
|
2017-11-11 17:02:07 +01:00
|
|
|
pcreSupport = config.php.pcreExternal or true;
|
2015-08-11 13:13:28 +02:00
|
|
|
postgresqlSupport = config.php.postgresql or true;
|
|
|
|
pdo_pgsqlSupport = config.php.pdo_pgsql or true;
|
|
|
|
readlineSupport = config.php.readline or true;
|
|
|
|
sqliteSupport = config.php.sqlite or true;
|
|
|
|
soapSupport = config.php.soap or true;
|
|
|
|
zlibSupport = config.php.zlib or true;
|
|
|
|
opensslSupport = config.php.openssl or true;
|
|
|
|
mbstringSupport = config.php.mbstring or true;
|
|
|
|
gdSupport = config.php.gd or true;
|
|
|
|
intlSupport = config.php.intl or true;
|
|
|
|
exifSupport = config.php.exif or true;
|
|
|
|
xslSupport = config.php.xsl or false;
|
|
|
|
mcryptSupport = config.php.mcrypt or true;
|
|
|
|
bz2Support = config.php.bz2 or false;
|
|
|
|
zipSupport = config.php.zip or true;
|
|
|
|
ftpSupport = config.php.ftp or true;
|
|
|
|
fpmSupport = config.php.fpm or true;
|
|
|
|
gmpSupport = config.php.gmp or true;
|
|
|
|
mssqlSupport = (!php7) && (config.php.mssql or (!stdenv.isDarwin));
|
|
|
|
ztsSupport = config.php.zts or false;
|
|
|
|
calendarSupport = config.php.calendar or true;
|
|
|
|
};
|
|
|
|
|
2016-03-30 20:45:31 +02:00
|
|
|
hardeningDisable = [ "bindnow" ];
|
2016-03-06 00:15:18 +01:00
|
|
|
|
2017-04-02 17:35:21 +02:00
|
|
|
preConfigure = ''
|
2015-08-11 13:13:28 +02:00
|
|
|
# Don't record the configure flags since this causes unnecessary
|
2017-04-02 17:35:21 +02:00
|
|
|
# runtime dependencies
|
2015-08-11 13:13:28 +02:00
|
|
|
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
|
|
|
|
|
2017-04-02 17:35:21 +02:00
|
|
|
#[[ -z "$libxml2" ]] || addToSearchPath PATH $libxml2/bin
|
|
|
|
|
2017-06-01 23:16:19 +02:00
|
|
|
export EXTENSION_DIR=$out/lib/php/extensions
|
|
|
|
|
2017-04-02 17:35:21 +02:00
|
|
|
configureFlags+=(--with-config-file-path=$out/etc \
|
2017-06-01 23:16:19 +02:00
|
|
|
--includedir=$dev/include)
|
2015-08-11 13:13:28 +02:00
|
|
|
'';
|
|
|
|
|
2017-04-02 17:35:21 +02:00
|
|
|
configureFlags = [
|
|
|
|
"--with-config-file-scan-dir=/etc/php.d"
|
|
|
|
] ++ lib.optional stdenv.isDarwin "--with-iconv=${libiconv}"
|
|
|
|
++ lib.optional stdenv.isLinux "--with-fpm-systemd";
|
|
|
|
|
2016-04-29 08:26:20 +02:00
|
|
|
postInstall = ''
|
|
|
|
cp php.ini-production $out/etc/php.ini
|
2015-08-11 13:13:28 +02:00
|
|
|
'';
|
|
|
|
|
2017-04-02 17:35:21 +02:00
|
|
|
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/
|
|
|
|
'';
|
|
|
|
|
2015-08-11 13:13:28 +02:00
|
|
|
src = fetchurl {
|
2015-12-02 13:52:17 +01:00
|
|
|
url = "http://www.php.net/distributions/php-${version}.tar.bz2";
|
|
|
|
inherit sha256;
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
meta = with stdenv.lib; {
|
|
|
|
description = "An HTML-embedded scripting language";
|
|
|
|
homepage = http://www.php.net/;
|
2016-06-22 10:45:52 +02:00
|
|
|
license = licenses.php301;
|
2015-08-11 13:13:28 +02:00
|
|
|
maintainers = with maintainers; [ globin ];
|
2016-06-22 10:45:52 +02:00
|
|
|
platforms = platforms.all;
|
2017-04-02 17:35:21 +02:00
|
|
|
outputsToInstall = [ "out" "dev" ];
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
patches = if !php7 then [ ./fix-paths.patch ] else [ ./fix-paths-php7.patch ];
|
|
|
|
|
2016-06-08 22:37:06 +02:00
|
|
|
postPatch = lib.optional stdenv.isDarwin ''
|
|
|
|
substituteInPlace configure --replace "-lstdc++" "-lc++"
|
|
|
|
'';
|
|
|
|
|
2017-03-20 16:49:45 +01:00
|
|
|
stripDebugList = "bin sbin lib modules";
|
|
|
|
|
2017-03-20 16:56:12 +01:00
|
|
|
outputs = [ "out" "dev" ];
|
|
|
|
|
2015-08-11 13:13:28 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
in {
|
|
|
|
php56 = generic {
|
2017-10-30 12:16:49 +01:00
|
|
|
version = "5.6.32";
|
|
|
|
sha256 = "0lfbmdkvijkm6xc4p9sykv66y8xwhws0vsmka8v5cax4bxx4xr1y";
|
2015-08-11 13:13:28 +02:00
|
|
|
};
|
|
|
|
|
2015-12-02 13:52:17 +01:00
|
|
|
php70 = generic {
|
2017-10-30 12:17:06 +01:00
|
|
|
version = "7.0.25";
|
|
|
|
sha256 = "09fc2lj447phprvilvq2sb6n0r1snj142f8faphrd896s6b4v8lm";
|
2015-12-02 13:52:17 +01:00
|
|
|
};
|
2016-12-13 21:55:05 +01:00
|
|
|
|
|
|
|
php71 = generic {
|
2017-10-30 12:17:30 +01:00
|
|
|
version = "7.1.11";
|
|
|
|
sha256 = "0ww5493w8w3jlks0xqlfm3v6mm53vpnv5vjy63inkj8zf3gdfikn";
|
2016-12-13 21:55:05 +01:00
|
|
|
};
|
2015-08-11 13:13:28 +02:00
|
|
|
}
|