Last active
September 12, 2023 14:50
-
-
Save drupol/d8b3b79ac082ea38b66d864c47abf59f to your computer and use it in GitHub Desktop.
Flake providing all the PHP version from PHP >= 8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
inputs = { | |
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; | |
systems.url = "github:nix-systems/default"; | |
flake-compat.url = "github:nix-community/flake-compat"; | |
php-active = { | |
url = "https://www.php.net/releases/active"; | |
flake = false; | |
}; | |
}; | |
outputs = inputs@{ self, flake-parts, systems, ... }: flake-parts.lib.mkFlake { inherit inputs; } { | |
systems = import systems; | |
perSystem = { config, self', inputs', pkgs, system, lib, ... }: { | |
checks = self'.packages; | |
packages = | |
let | |
# Set of sets { PHP_VERSION = { filename = "", name = "", ... }, ... } | |
active = builtins.listToAttrs (builtins.concatMap (x: builtins.map (x: { name = x.version; value = builtins.elemAt x.source 2; }) (builtins.attrValues x)) (builtins.attrValues (builtins.fromJSON (builtins.readFile inputs.php-active)))); | |
activeVersions = lib.foldlAttrs (acc: name: value: acc ++ [{ version = name; rev = "php-${name}"; hash = "sha256:${value.sha256}"; }]) [] active; | |
oldVersions = [ | |
{ version = "8.0.0"; rev = "php-8.0.0"; hash = "sha256-++fStvRfv/PRFElp87ddczdu0WCD0zguesR99lxLFjo=";} | |
{ version = "8.0.1"; rev = "php-8.0.1"; hash = "sha256-BKGMYbE5WmxO5SHdwGpSY/+iit4aRiq/FejWQFdo3fA=";} | |
{ version = "8.0.2"; rev = "php-8.0.2"; hash = "sha256-SCEYet2l63o+O/cfx9kOKhqdcpOmsMDnpsj+pqn+ICo=";} | |
{ version = "8.0.3"; rev = "php-8.0.3"; hash = "sha256-nE6EpYMD6sjzDxeFz8PHIgQb6zmkZOAo/q87SaqqhqM=";} | |
{ version = "8.0.5"; rev = "php-8.0.5"; hash = "sha256-gLbpkgmhn48ZBKWmAWdeeJPI/cwVV9/9VVMw48h6I6Q=";} | |
{ version = "8.0.6"; rev = "php-8.0.6"; hash = "sha256-U0r5yWcvbpbars543RPSj/w0HMQkhrvhVziCZNGonbQ=";} | |
{ version = "8.0.7"; rev = "php-8.0.7"; hash = "sha256-BtyiRHzayM9XnR91LHCExydO3TLLvVLAwkI1Uk49ERc=";} | |
{ version = "8.0.8"; rev = "php-8.0.8"; hash = "sha256-x/DqSGJbRci0LfSPhvxEuC/FXP8j/6L1+WGqCUY8DNc=";} | |
{ version = "8.0.9"; rev = "php-8.0.9"; hash = "sha256-Rn0nRXzu3xnFoCYy2yscT/j1TQBy+/IJA9TSOAgaJxo=";} | |
{ version = "8.0.10"; rev = "php-8.0.10"; hash = "sha256-r26F6XfursnA+gUs3NTTKMvYgYgXOXYE+dmJhecpI9g=";} | |
{ version = "8.0.11"; rev = "php-8.0.11"; hash = "sha256-VxY+UyItIzKDK6dVrC6wy9s8z8zBHn5Nuq4OpZUPeVk=";} | |
{ version = "8.0.12"; rev = "php-8.0.12"; hash = "sha256-i7Zh4mGAaVzk/qRVX+9XIfwEVtVZZF/UL/Ix2kz2zM4=";} | |
{ version = "8.0.13"; rev = "php-8.0.13"; hash = "sha256-x+xPm3Db5W/efKwMN/dNVmypO/3TYEUV2YKOheEB5CI=";} | |
{ version = "8.0.14"; rev = "php-8.0.14"; hash = "sha256-SwxxfRm2YwbAZ+uf5RTRjg/P4Kw3nx38NFe6I1+1iuM=";} | |
{ version = "8.0.15"; rev = "php-8.0.15"; hash = "sha256-PKhYojiKhI0fYTyTRLURVTMsFiz0G55W/oY224JxdN8=";} | |
{ version = "8.0.16"; rev = "php-8.0.16"; hash = "sha256-KOutpF/3HlmHrBoscOFrUYPaMELHWvKNcfaN1Q80QhM=";} | |
{ version = "8.0.17"; rev = "php-8.0.17"; hash = "sha256-j7JOOiOjDaXBiYwe6mE57LU2bgSLsoREOsUVaP8UpJc=";} | |
{ version = "8.0.18"; rev = "php-8.0.18"; hash = "sha256-qMVgbyhjvjCs87y715Ycl+Cj55ThDXowgbiILakepxM=";} | |
{ version = "8.0.19"; rev = "php-8.0.19"; hash = "sha256-LnY9lDFIy0ogch1uiw46lcOTdoAYENR6AR9bYTX4Dds=";} | |
{ version = "8.0.20"; rev = "php-8.0.20"; hash = "sha256-LXNadNMKjuzGFvHGyRPLDbEJ1jo9aAqwd8BDUpfA2Qk=";} | |
{ version = "8.0.21"; rev = "php-8.0.21"; hash = "sha256-l6HvFZk5P1fpo7Hd5fdVldJrHetEchZl3GTXXc2PQCI=";} | |
{ version = "8.0.22"; rev = "php-8.0.22"; hash = "sha256-o5H26iLs5mM52OQZq7NyqdRSZ8ViIjFCr5U/eIM6E54=";} | |
{ version = "8.0.23"; rev = "php-8.0.23"; hash = "sha256-IsTkm8LFQoYZWZ/LP/5VZaTfuyEUwRzkiZrr9cVXgbE=";} | |
{ version = "8.0.24"; rev = "php-8.0.24"; hash = "sha256-9o/l3v/SRv70W0N3U57dZGH2dLLOYADUfrXBUks1ooU=";} | |
{ version = "8.0.25"; rev = "php-8.0.25"; hash = "sha256-o1RorpKNlJWlJqmHfVAJBy+triMQf6N0zxigeC6YUKQ=";} | |
{ version = "8.0.26"; rev = "php-8.0.26"; hash = "sha256-9wPt2V69KUjDrLsZGnnMQ9J1xQp1YjrBuqfTGfacgzs=";} | |
{ version = "8.0.27"; rev = "php-8.0.27"; hash = "sha256-QBwzMTNeXRdPJoGI6xa66xcvB7eDQ3CMoBFPcy58grk=";} | |
{ version = "8.0.28"; rev = "php-8.0.28"; hash = "sha256-o5H26iLs5mM52OQZq7NyqdRSZ8ViIjFCr5U/eIM6E54=";} | |
{ version = "8.0.29"; rev = "php-8.0.29"; hash = "sha256-k8I43fSJLsIppsjXzJoxmjUSWbwGJX3hkxxKyagz3ME=";} | |
{ version = "8.1.0"; rev = "php-8.1.0"; hash = "sha256-OYlZpWSzzq6YjqSAob9kzS+H1MvH1oYhExtYTcz/dVI=";} | |
{ version = "8.1.1"; rev = "php-8.1.1"; hash = "sha256-GAIj7w4LFThhWqD3KBtzedU1uAtzmmZcsFUxmkMG01s=";} | |
{ version = "8.1.2"; rev = "php-8.1.2"; hash = "sha256-GsoGYhafN0+a1DAVgOC4gMKRFLpGZLAwd0PCiaQbe9s=";} | |
{ version = "8.1.3"; rev = "php-8.1.3"; hash = "sha256-1MBjWhQABjENlKnpWVeerc+E31o90x7guhzjyhDJxdU=";} | |
{ version = "8.1.5"; rev = "php-8.1.5"; hash = "sha256-gmB2HaJzxZ1jSTdTp59mKePRvURD0p5EBj+kNxcMK7Y=";} | |
{ version = "8.1.6"; rev = "php-8.1.6"; hash = "sha256-xKWe01cjfEKLBiul2FXYbsWx65CpeYa6S+JFYVG0x0c=";} | |
{ version = "8.1.7"; rev = "php-8.1.7"; hash = "sha256-gztwTpDbTzGdiRZoyylYNz5GOD+OjFCx7fXVFMyk1yE=";} | |
{ version = "8.1.8"; rev = "php-8.1.8"; hash = "sha256-74rSZPLTaajHV2iA0pmUH7uEjUvCs/EUg99tcClyMvc=";} | |
{ version = "8.1.9"; rev = "php-8.1.9"; hash = "sha256-utoyzU66RfSYfHENC4fODrjRmLvwz6O1TNp2ILapE7I=";} | |
{ version = "8.1.10"; rev = "php-8.1.10"; hash = "sha256-5KQiZQs5OHoicyKUlEomloG4dXHge2hSORjPpbCxprQ=";} | |
{ version = "8.1.11"; rev = "php-8.1.11"; hash = "sha256-AY9oBQCzvXvdsnxs71cg7Z5r5J/uXrv9suHs4L7Hqsg=";} | |
{ version = "8.1.12"; rev = "php-8.1.12"; hash = "sha256-ZRJ5yGgsJvie7qVCJtZQRkFr75aIAGElFIKWW7vHfRQ=";} | |
{ version = "8.1.13"; rev = "php-8.1.13"; hash = "sha256-iHtur7ig7z584syMk1DmSTM2tHzpZ6xymV/ROICoq4U=";} | |
{ version = "8.1.14"; rev = "php-8.1.14"; hash = "sha256-YGyrlCm0jTYTIhTet9G6n+dlgsD2NDarUcSXtZupI/g=";} | |
{ version = "8.1.15"; rev = "php-8.1.15"; hash = "sha256-N3gXbvOC05oaIjri8Ox+RpinrA3CiOFuKtfElS8KFf0=";} | |
{ version = "8.1.16"; rev = "php-8.1.16"; hash = "sha256-85Ic56TqTPVm1YCmxmyWdl62eLEF6ezGU7Sp/ntzGZE=";} | |
{ version = "8.1.17"; rev = "php-8.1.17"; hash = "sha256-lb5IOfC+t15KpMFxL4WTL9Q7dvKjG7JBUnBOau70N5w=";} | |
{ version = "8.1.18"; rev = "php-8.1.18"; hash = "sha256-R23Wcqqm3bzvVfHbuN/XBUYu08eHC5AKZ3enzD3mseY=";} | |
{ version = "8.1.19"; rev = "php-8.1.19"; hash = "sha256-yF3d1KdJmlPgszrnOQbaXnX2o2MMqF5jOeK9Lbei96c=";} | |
{ version = "8.1.20"; rev = "php-8.1.20"; hash = "sha256-19a6JdkuD6hNZtdpYUIgNBDX1C/gck932VgxqP6r3TE=";} | |
{ version = "8.1.21"; rev = "php-8.1.21"; hash = "sha256-L01cSJm6afyNkZ3rF4BceasSRhlRAKlADlIXasEZPb0=";} | |
{ version = "8.1.22"; rev = "php-8.1.22"; hash = "sha256-rI3BLt79hKjF41TZbe/5jnghuTKSCTdz+T0/+HrFsFI=";} | |
{ version = "8.2.0"; rev = "php-8.2.0"; hash = "sha256-tR/sAhPuv2+OxIB9FZcVfOX5AEJk/Gz0T9+jglnl3DA=";} | |
{ version = "8.2.1"; rev = "php-8.2.1"; hash = "sha256-XoR1+A8trtjsNH2l3UKAmMl81gmMjzI4AjFphgOT4n8=";} | |
{ version = "8.2.2"; rev = "php-8.2.2"; hash = "sha256-Vlti7k9yN2sFWERctSPW11EOcXLNZU11EY7lL7E6kxU=";} | |
{ version = "8.2.3"; rev = "php-8.2.3"; hash = "sha256-OE8CBiQ6JYSR20Vplj2OZm2f3Sfr/XCh/aNWKqR443s=";} | |
{ version = "8.2.4"; rev = "php-8.2.4"; hash = "sha256-iFxI7LvPqjciG2rpLymFh02rpoV6t/MkTPrVtPnpvzQ=";} | |
{ version = "8.2.5"; rev = "php-8.2.5"; hash = "sha256-1ZpWDpsD/E64PyKE5OY/tzIwbQ/njIG0MA5xJ0LlFJ0=";} | |
{ version = "8.2.6"; rev = "php-8.2.6"; hash = "sha256-OzsZRjVbTaX0afCdIoV+5pVOGwqyAAmrWYrxjiAceZ4=";} | |
{ version = "8.2.7"; rev = "php-8.2.7"; hash = "sha256-8pCTXW0+t+PftI8sSzAegz4lZjkCGdVEp/61UkgLxOU=";} | |
{ version = "8.2.8"; rev = "php-8.2.8"; hash = "sha256-hpgt6pYJz0nGod3bWSarTzE32QubADWtQUloxbozwRQ=";} | |
{ version = "8.2.9"; rev = "php-8.2.9"; hash = "sha256-aIM9RNcFbtqeQmA7OtAANEZOOj6PGwVJ7IFcAnCA9tk=";} | |
]; | |
pear = pkgs.fetchurl { | |
url = "https://pear.php.net/install-pear-nozlib.phar"; | |
hash = "sha256-UblKVcsm030tNSA6mdeab+h7ZhANNz7MkFf4Z1iigjs="; | |
}; | |
patchName = patch: patch.name or (builtins.baseNameOf patch); | |
generic = "${inputs.nixpkgs}/pkgs/development/interpreters/php/generic.nix"; | |
base-snapshot = {src, version ? null}: (pkgs.callPackage generic { | |
hash = null; | |
version = if version != null then version else | |
let | |
configureFile = ./configure.ac; | |
extractVersionFromConfigureAc = configureText: | |
let | |
match = builtins.match ".*AC_INIT\\(\\[PHP],\\[([^]-]+)(-dev)?].*" configureText; | |
in | |
if match != null then builtins.head match else null; | |
version = | |
let | |
configureText = builtins.readFile configureFile; | |
version = extractVersionFromConfigureAc configureText; | |
in | |
if version != null then version else "0.0.0+unknown"; | |
in | |
"${version}.snapshot.${self.lastModifiedDate}"; | |
phpAttrsOverrides = attrs: { | |
inherit src; | |
preInstall = attrs.preInstall or "" + '' | |
cp -f ${pear} ./pear/install-pear-nozlib.phar | |
''; | |
}; | |
packageOverrides = final: prev: { | |
extensions = prev.extensions // { | |
dom = prev.extensions.dom.overrideAttrs (attrs: { | |
postPatch = | |
lib.concatStringsSep "\n" [ | |
(attrs.postPatch or "") | |
(lib.optionalString (lib.versionOlder prev.php.version "8.1") '' | |
# Removing tests failing with libxml2 (2.11.4) > 2.10.4 | |
rm ext/dom/tests/DOMDocument_loadXML_error2.phpt | |
rm ext/dom/tests/DOMDocument_load_error2.phpt | |
'') | |
]; | |
}); | |
openssl = prev.extensions.openssl.overrifolddeAttrs (attrs: { | |
buildInputs = | |
let | |
replaceOpenssl = pkg: | |
if pkg.pname == "openssl" && lib.versionOlder prev.php.version "8.1" then | |
pkgs.openssl_1_1.overrideAttrs | |
(old: { | |
meta = builtins.removeAttrs old.meta [ "knownVulnerabilities" ]; | |
}) | |
else | |
pkg; | |
in | |
builtins.map replaceOpenssl attrs.buildInputs; | |
}); | |
}; | |
}; | |
}); | |
oldSrcs = lib.foldl' | |
(a: set: a // { | |
"${builtins.replaceStrings [ "." "-" ] [ "_" "_" ] set.rev}" = { | |
version = set.version; | |
src = pkgs.fetchFromGitHub { owner = "php"; repo = "php-src"; rev = set.rev; hash = set.hash; }; | |
}; | |
}) | |
{} | |
oldVersions; | |
activeSrcs = lib.foldl' | |
(a: set: a // { | |
"${builtins.replaceStrings [ "." "-" ] [ "_" "_" ] set.rev}" = { | |
version = set.version; | |
src = pkgs.fetchurl { url = "https://www.php.net/distributions/php-${set.version}.tar.xz"; hash = set.hash; }; | |
}; | |
}) | |
{} | |
activeVersions; | |
in | |
lib.mapAttrs | |
(k: v: (base-snapshot {version = v.version; src = v.src;}).withExtensions({...}: [])) | |
(oldSrcs // activeSrcs); | |
}; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment