nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 137 lines 3.3 kB view raw
1{ 2 lib, 3 stdenv, 4 buildGoModule, 5 fetchFromGitHub, 6 php, 7 brotli, 8 watcher, 9 testers, 10 frankenphp, 11 cctools, 12 darwin, 13 libiconv, 14 pkg-config, 15 makeBinaryWrapper, 16 runCommand, 17 writeText, 18}: 19 20let 21 phpEmbedWithZts = php.override { 22 embedSupport = true; 23 ztsSupport = true; 24 staticSupport = stdenv.hostPlatform.isDarwin; 25 zendSignalsSupport = false; 26 zendMaxExecutionTimersSupport = stdenv.hostPlatform.isLinux; 27 }; 28 phpUnwrapped = phpEmbedWithZts.unwrapped; 29 phpConfig = "${phpUnwrapped.dev}/bin/php-config"; 30 pieBuild = stdenv.hostPlatform.isMusl; 31in 32buildGoModule rec { 33 pname = "frankenphp"; 34 version = "1.9.1"; 35 36 src = fetchFromGitHub { 37 owner = "dunglas"; 38 repo = "frankenphp"; 39 tag = "v${version}"; 40 hash = "sha256-zkB/kN6noCkUyUsXAbaWeRq1fpNErTcZPzDRoRp+LtM="; 41 }; 42 43 sourceRoot = "${src.name}/caddy"; 44 45 # frankenphp requires C code that would be removed with `go mod tidy` 46 # https://github.com/golang/go/issues/26366 47 proxyVendor = true; 48 vendorHash = "sha256-scL015vSSfhuK06UZFRxK0Sk9dG6W3AOuFSPTogTCfI="; 49 50 buildInputs = [ 51 phpUnwrapped 52 brotli 53 watcher 54 ] 55 ++ phpUnwrapped.buildInputs; 56 nativeBuildInputs = [ 57 makeBinaryWrapper 58 ] 59 ++ lib.optionals stdenv.hostPlatform.isDarwin [ 60 pkg-config 61 cctools 62 darwin.autoSignDarwinBinariesHook 63 ]; 64 65 subPackages = [ "frankenphp" ]; 66 67 tags = [ 68 "cgo" 69 "netgo" 70 "ousergo" 71 "static_build" 72 "nobadger" 73 "nomysql" 74 "nopgx" 75 ]; 76 77 ldflags = [ 78 "-s" 79 "-w" 80 "-X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ${version} PHP ${phpUnwrapped.version} Caddy'" 81 # pie mode is only available with pkgsMusl, it also automatically add -buildmode=pie to $GOFLAGS 82 ] 83 ++ (lib.optional pieBuild [ "-static-pie" ]); 84 85 preBuild = '' 86 export CGO_CFLAGS="$(${phpConfig} --includes)" 87 export CGO_LDFLAGS="-DFRANKENPHP_VERSION=${version} \ 88 $(${phpConfig} --ldflags) \ 89 $(${phpConfig} --libs)" 90 '' 91 + lib.optionalString stdenv.hostPlatform.isDarwin '' 92 # replace hard-code homebrew path 93 substituteInPlace ../frankenphp.go \ 94 --replace "-L/opt/homebrew/opt/libiconv/lib" "-L${libiconv}/lib" 95 ''; 96 97 preFixup = '' 98 mkdir -p $out/lib 99 ln -s "${phpEmbedWithZts}/lib/php.ini" "$out/lib/frankenphp.ini" 100 101 wrapProgram $out/bin/frankenphp --set-default PHP_INI_SCAN_DIR $out/lib 102 ''; 103 104 doCheck = false; 105 106 passthru = { 107 php = phpEmbedWithZts; 108 tests = { 109 # TODO: real NixOS test with Symfony application 110 version = testers.testVersion { 111 inherit version; 112 package = frankenphp; 113 command = "frankenphp version"; 114 }; 115 phpinfo = 116 runCommand "php-cli-phpinfo" 117 { 118 phpScript = writeText "phpinfo.php" '' 119 <?php phpinfo(); 120 ''; 121 } 122 '' 123 ${lib.getExe frankenphp} php-cli $phpScript > $out 124 ''; 125 }; 126 }; 127 128 meta = { 129 changelog = "https://github.com/dunglas/frankenphp/releases/tag/v${version}"; 130 description = "Modern PHP app server"; 131 homepage = "https://github.com/dunglas/frankenphp"; 132 license = lib.licenses.mit; 133 mainProgram = "frankenphp"; 134 maintainers = [ ]; 135 platforms = lib.platforms.linux ++ lib.platforms.darwin; 136 }; 137}