1{
2 lib,
3 stdenvNoCC,
4 fetchFromGitHub,
5 callPackage,
6 php,
7 unzip,
8 _7zz,
9 xz,
10 gitMinimal,
11 curl,
12 cacert,
13 makeBinaryWrapper,
14 versionCheckHook,
15}:
16
17stdenvNoCC.mkDerivation (finalAttrs: {
18 pname = "composer";
19 version = "2.8.12";
20
21 # Hash used by ../../../build-support/php/pkgs/composer-phar.nix to
22 # use together with the version from this package to keep the
23 # bootstrap phar file up-to-date together with the end user composer
24 # package.
25 passthru.pharHash = "sha256-9EbqcZcIu4X8v07xje9dBRXx+bTXA/bYIMnBZW4QovI=";
26
27 composer = callPackage ../../../build-support/php/pkgs/composer-phar.nix {
28 inherit (finalAttrs) version;
29 inherit (finalAttrs.passthru) pharHash;
30 };
31
32 src = fetchFromGitHub {
33 owner = "composer";
34 repo = "composer";
35 tag = finalAttrs.version;
36 hash = "sha256-UHCsdJmoE7X2ZiiBAWfC004FUMqHyd0URt+v8R3hn70=";
37 };
38
39 nativeBuildInputs = [ makeBinaryWrapper ];
40
41 buildInputs = [ php ];
42
43 vendor = stdenvNoCC.mkDerivation {
44 pname = "${finalAttrs.pname}-vendor";
45
46 inherit (finalAttrs) src version;
47
48 nativeBuildInputs = [
49 cacert
50 finalAttrs.composer
51 ];
52
53 dontPatchShebangs = true;
54 doCheck = true;
55
56 buildPhase = ''
57 runHook preBuild
58
59 composer install --no-dev --no-interaction --no-progress --optimize-autoloader
60
61 runHook postBuild
62 '';
63
64 checkPhase = ''
65 runHook preCheck
66
67 composer validate
68
69 runHook postCheck
70 '';
71
72 installPhase = ''
73 runHook preInstall
74
75 cp -ar . $out/
76
77 runHook postInstall
78 '';
79
80 env = {
81 COMPOSER_CACHE_DIR = "/dev/null";
82 COMPOSER_DISABLE_NETWORK = "0";
83 COMPOSER_HTACCESS_PROTECT = "0";
84 COMPOSER_MIRROR_PATH_REPOS = "1";
85 COMPOSER_ROOT_VERSION = finalAttrs.version;
86 };
87
88 outputHashMode = "recursive";
89 outputHashAlgo = "sha256";
90 outputHash = "sha256-gnCPcp+c2dFL+9MJf0JRCQ5E95/dET1F0ZZAYj/rWq4=";
91 };
92
93 installPhase = ''
94 runHook preInstall
95
96 mkdir -p $out
97 cp -ar ${finalAttrs.vendor}/* $out/
98 chmod +w $out/bin
99
100 wrapProgram $out/bin/composer \
101 --prefix PATH : ${
102 lib.makeBinPath [
103 _7zz
104 curl
105 gitMinimal
106 unzip
107 xz
108 ]
109 }
110
111 runHook postInstall
112 '';
113
114 doInstallCheck = true;
115 nativeInstallCheckInputs = [ versionCheckHook ];
116 versionCheckProgramArg = "--version";
117
118 meta = {
119 changelog = "https://github.com/composer/composer/releases/tag/${finalAttrs.version}";
120 description = "Dependency Manager for PHP";
121 homepage = "https://getcomposer.org/";
122 license = lib.licenses.mit;
123 mainProgram = "composer";
124 teams = [ lib.teams.php ];
125 };
126})