nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 155 lines 4.2 kB view raw
1{ 2 stdenvNoCC, 3 writeText, 4 lib, 5 makeBinaryWrapper, 6 php, 7 cacert, 8 nix-update-script, 9}: 10 11let 12 composerJsonBuilder = 13 pluginName: pluginVersion: 14 writeText "composer.json" ( 15 builtins.toJSON { 16 name = "nix/plugin"; 17 description = "Nix Composer plugin"; 18 license = "MIT"; 19 require = { 20 "${pluginName}" = "${pluginVersion}"; 21 }; 22 config = { 23 "allow-plugins" = { 24 "${pluginName}" = true; 25 }; 26 }; 27 repositories = [ 28 { 29 type = "path"; 30 url = "./src"; 31 options = { 32 versions = { 33 "${pluginName}" = "${pluginVersion}"; 34 }; 35 }; 36 } 37 ]; 38 } 39 ); 40 41 buildComposerWithPluginOverride = 42 finalAttrs: previousAttrs: 43 44 let 45 phpDrv = finalAttrs.php or php; 46 composer = finalAttrs.composer or phpDrv.packages.composer; 47 in 48 { 49 composerLock = previousAttrs.composerLock or null; 50 composerNoDev = previousAttrs.composerNoDev or true; 51 composerNoPlugins = previousAttrs.composerNoPlugins or true; 52 composerNoScripts = previousAttrs.composerNoScripts or true; 53 composerStrictValidation = previousAttrs.composerStrictValidation or true; 54 composerGlobal = true; 55 56 nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ 57 composer 58 phpDrv 59 makeBinaryWrapper 60 ]; 61 62 buildInputs = (previousAttrs.buildInputs or [ ]) ++ [ phpDrv ]; 63 64 patches = previousAttrs.patches or [ ]; 65 strictDeps = previousAttrs.strictDeps or true; 66 67 # Should we keep these empty phases? 68 configurePhase = 69 previousAttrs.configurePhase or '' 70 runHook preConfigure 71 72 runHook postConfigure 73 ''; 74 75 buildPhase = 76 previousAttrs.buildPhase or '' 77 runHook preBuild 78 79 runHook postBuild 80 ''; 81 82 doCheck = previousAttrs.doCheck or true; 83 84 checkPhase = 85 previousAttrs.checkPhase or '' 86 runHook preCheck 87 88 runHook postCheck 89 ''; 90 91 installPhase = 92 previousAttrs.installPhase or '' 93 runHook preInstall 94 95 makeWrapper ${lib.getExe composer} $out/bin/composer \ 96 --prefix COMPOSER_HOME : ${finalAttrs.vendor} 97 98 runHook postInstall 99 ''; 100 101 doInstallCheck = previousAttrs.doInstallCheck or false; 102 installCheckPhase = 103 previousAttrs.installCheckPhase or '' 104 runHook preInstallCheck 105 106 composer global show ${finalAttrs.pname} 107 108 runHook postInstallCheck 109 ''; 110 111 vendor = previousAttrs.vendor or stdenvNoCC.mkDerivation { 112 pname = "${finalAttrs.pname}-vendor"; 113 pluginName = finalAttrs.pname; 114 115 inherit (finalAttrs) version src; 116 117 composerLock = previousAttrs.composerLock or null; 118 composerNoDev = previousAttrs.composerNoDev or true; 119 composerNoPlugins = previousAttrs.composerNoPlugins or true; 120 composerNoScripts = previousAttrs.composerNoScripts or true; 121 composerStrictValidation = previousAttrs.composerStrictValidation or true; 122 composerGlobal = true; 123 composerJson = composerJsonBuilder finalAttrs.pname finalAttrs.version; 124 125 nativeBuildInputs = [ 126 cacert 127 composer 128 phpDrv.composerHooks.composerWithPluginVendorHook 129 ]; 130 131 dontPatchShebangs = true; 132 doCheck = true; 133 doInstallCheck = true; 134 135 env = { 136 COMPOSER_CACHE_DIR = "/dev/null"; 137 COMPOSER_HTACCESS_PROTECT = "0"; 138 }; 139 140 outputHashMode = "recursive"; 141 outputHashAlgo = "sha256"; 142 outputHash = finalAttrs.vendorHash; 143 }; 144 145 # Projects providing a lockfile from upstream can be automatically updated. 146 passthru = previousAttrs.passthru or { } // { 147 updateScript = 148 previousAttrs.passthru.updateScript 149 or (if finalAttrs.vendor.composerLock == null then nix-update-script { } else null); 150 }; 151 152 meta = previousAttrs.meta or composer.meta; 153 }; 154in 155args: (stdenvNoCC.mkDerivation args).overrideAttrs buildComposerWithPluginOverride