nixpkgs/pkgs/development/interpreters/php/default.nix

317 lines
8.9 KiB
Nix
Raw Normal View History

2015-08-11 12:13:28 +01:00
{ lib, stdenv, fetchurl, composableDerivation, autoconf, automake, flex, bison
, mysql, libxml2, readline, zlib, curl, postgresql, gettext
, openssl, pkgconfig, sqlite, config, libjpeg, libpng, freetype
, libxslt, libmcrypt, bzip2, icu, openldap, cyrus_sasl, libmhash, freetds
2016-06-08 21:37:06 +01:00
, uwimap, pam, gmp, apacheHttpd, libiconv }:
2015-08-11 12:13:28 +01:00
let
generic =
2015-12-02 12:52:17 +00:00
{ version, sha256 }:
2015-08-11 12:13:28 +01:00
let php7 = lib.versionAtLeast version "7.0"; in
composableDerivation.composableDerivation {} (fixed: {
inherit version;
name = "php-${version}";
enableParallelBuilding = true;
buildInputs = [ flex bison pkgconfig ];
2016-06-08 21:37:06 +01:00
configureFlags = [
"EXTENSION_DIR=$(out)/lib/php/extensions"
2016-06-13 17:25:58 +01:00
] ++ lib.optional stdenv.isDarwin "--with-iconv=${libiconv}";
2015-08-11 12:13:28 +01:00
flags = {
# much left to do here...
# SAPI modules:
apxs2 = {
configureFlags = ["--with-apxs2=${apacheHttpd.dev}/bin/apxs"];
2015-08-11 12:13:28 +01:00
buildInputs = [apacheHttpd];
};
# Extensions
imap = {
configureFlags = [
"--with-imap=${uwimap}"
"--with-imap-ssl"
];
buildInputs = [ uwimap openssl pam ];
};
ldap = {
configureFlags = [
"--with-ldap"
"LDAP_DIR=${openldap.dev}"
"LDAP_INCDIR=${openldap.dev}/include"
"LDAP_LIBDIR=${openldap.out}/lib"
2016-06-08 21:37:06 +01:00
(lib.optional stdenv.isLinux "--with-ldap-sasl=${cyrus_sasl.dev}")
];
2016-06-08 21:37:06 +01:00
buildInputs = [openldap openssl] ++ lib.optional stdenv.isLinux cyrus_sasl;
2015-08-11 12:13:28 +01:00
};
mhash = {
configureFlags = ["--with-mhash"];
buildInputs = [libmhash];
};
curl = {
configureFlags = ["--with-curl=${curl.dev}"];
2015-08-11 12:13:28 +01:00
buildInputs = [curl openssl];
};
curlWrappers = {
configureFlags = ["--with-curlwrappers"];
};
zlib = {
configureFlags = ["--with-zlib=${zlib.dev}"];
2015-08-11 12:13:28 +01:00
buildInputs = [zlib];
};
libxml2 = {
configureFlags = [
"--with-libxml-dir=${libxml2.dev}"
2015-08-11 12:13:28 +01:00
];
buildInputs = [ libxml2 ];
};
pcntl = {
configureFlags = [ "--enable-pcntl" ];
};
readline = {
configureFlags = ["--with-readline=${readline.dev}"];
2015-08-11 12:13:28 +01:00
buildInputs = [ readline ];
};
sqlite = {
configureFlags = ["--with-pdo-sqlite=${sqlite.dev}"];
2015-08-11 12:13:28 +01:00
buildInputs = [ sqlite ];
};
postgresql = {
configureFlags = ["--with-pgsql=${postgresql}"];
buildInputs = [ postgresql ];
};
pdo_pgsql = {
configureFlags = ["--with-pdo-pgsql=${postgresql}"];
buildInputs = [ postgresql ];
};
mysql = {
configureFlags = ["--with-mysql=${mysql.lib}"];
buildInputs = [ mysql.lib ];
};
mysqli = {
configureFlags = ["--with-mysqli=${mysql.lib}/bin/mysql_config"];
buildInputs = [ mysql.lib ];
};
mysqli_embedded = {
configureFlags = ["--enable-embedded-mysqli"];
depends = "mysqli";
assertion = fixed.mysqliSupport;
};
pdo_mysql = {
configureFlags = ["--with-pdo-mysql=${mysql.lib}"];
buildInputs = [ mysql.lib ];
};
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"
"--with-freetype-dir=${freetype.dev}"
"--with-png-dir=${libpng.dev}"
"--with-jpeg-dir=${libjpeg.dev}"
2015-08-11 12:13:28 +01:00
];
buildInputs = [ libpng libjpeg freetype ];
};
gmp = {
configureFlags = ["--with-gmp=${gmp.dev}"];
2015-08-11 12:13:28 +01:00
buildInputs = [ gmp ];
};
soap = {
configureFlags = ["--enable-soap"];
};
sockets = {
configureFlags = ["--enable-sockets"];
};
openssl = {
2016-05-01 13:41:52 +01:00
configureFlags = ["--with-openssl"];
buildInputs = [openssl openssl.dev];
2015-08-11 12:13:28 +01:00
};
mbstring = {
configureFlags = ["--enable-mbstring"];
};
gettext = {
configureFlags = ["--with-gettext=${gettext}"];
buildInputs = [gettext];
};
intl = {
configureFlags = ["--enable-intl"];
buildInputs = [icu];
};
exif = {
configureFlags = ["--enable-exif"];
};
xsl = {
configureFlags = ["--with-xsl=${libxslt.dev}"];
2015-08-11 12:13:28 +01:00
buildInputs = [libxslt];
};
mcrypt = let libmcrypt' = libmcrypt.override { disablePosixThreads = true; }; in {
configureFlags = ["--with-mcrypt=${libmcrypt'}"];
buildInputs = [libmcrypt'];
};
bz2 = {
configureFlags = ["--with-bz2=${bzip2.dev}"];
2015-08-11 12:13:28 +01: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 21:37:06 +01:00
imapSupport = config.php.imap or (!stdenv.isDarwin);
2015-08-11 12:13:28 +01: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 21:37:06 +01:00
apxs2Support = config.php.apxs2 or (!stdenv.isDarwin);
2015-08-11 12:13:28 +01: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;
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;
};
configurePhase = ''
# Don't record the configure flags since this causes unnecessary
# 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 --with-config-file-path=$out/etc --prefix=$out $configureFlags
'';
2016-04-29 07:26:20 +01:00
postInstall = ''
cp php.ini-production $out/etc/php.ini
2015-08-11 12:13:28 +01:00
'';
src = fetchurl {
2015-12-02 12:52:17 +00:00
url = "http://www.php.net/distributions/php-${version}.tar.bz2";
inherit sha256;
2015-08-11 12:13:28 +01:00
};
meta = with stdenv.lib; {
description = "An HTML-embedded scripting language";
homepage = http://www.php.net/;
2016-06-22 09:45:52 +01:00
license = licenses.php301;
2015-08-11 12:13:28 +01:00
maintainers = with maintainers; [ globin ];
2016-06-22 09:45:52 +01:00
platforms = platforms.all;
2015-08-11 12:13:28 +01:00
};
patches = if !php7 then [ ./fix-paths.patch ] else [ ./fix-paths-php7.patch ];
2016-06-08 21:37:06 +01:00
postPatch = lib.optional stdenv.isDarwin ''
substituteInPlace configure --replace "-lstdc++" "-lc++"
'';
2015-08-11 12:13:28 +01:00
});
in {
php55 = generic {
version = "5.5.38";
sha256 = "0f1y76whg6yx9a18mh97f8yq8lb64ri1f0zfr9la9374nbmq2g27";
2015-08-11 12:13:28 +01:00
};
php56 = generic {
version = "5.6.24";
sha256 = "1iiqmjgxr10ci69f33fzyhplp06km6ybgqmxr1g142pdqdz628xz";
2015-08-11 12:13:28 +01:00
};
2015-12-02 12:52:17 +00:00
php70 = generic {
version = "7.0.9";
sha256 = "0yrv5ijw6bgc0ahplczwhl5nm6l5mnd1i2n5023z7wkmb25rdrif";
2015-12-02 12:52:17 +00:00
};
2015-08-11 12:13:28 +01:00
}