infrastructure/nix-patches/248184.patch
2023-09-18 20:55:49 +02:00

1235 lines
45 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 27e3b694e7153ba8e5780fba6cf8f7ef447c1062 Mon Sep 17 00:00:00 2001
From: Pol Dellaiera <pol.dellaiera@protonmail.com>
Date: Mon, 12 Jun 2023 08:43:49 +0200
Subject: [PATCH 1/9] composer-local-repo-plugin: init at 1.0.0
---
.../php/composer-local-repo-plugin.nix | 110 ++++++++++++++++++
pkgs/top-level/all-packages.nix | 5 +
2 files changed, 115 insertions(+)
create mode 100644 pkgs/build-support/php/composer-local-repo-plugin.nix
diff --git a/pkgs/build-support/php/composer-local-repo-plugin.nix b/pkgs/build-support/php/composer-local-repo-plugin.nix
new file mode 100644
index 00000000000000..81672762618dca
--- /dev/null
+++ b/pkgs/build-support/php/composer-local-repo-plugin.nix
@@ -0,0 +1,110 @@
+{ stdenvNoCC, lib, fetchFromGitHub, composer, makeBinaryWrapper }:
+
+let
+ composerKeys = stdenvNoCC.mkDerivation (finalComposerKeysAttrs: {
+ pname = "composer-keys";
+ version = "fa5a62092f33e094073fbda23bbfc7188df3cbc5";
+
+ src = fetchFromGitHub {
+ owner = "composer";
+ repo = "composer.github.io";
+ rev = "${finalComposerKeysAttrs.version}";
+ hash = "sha256-3Sfn71LDG1jHwuEIU8iEnV3k6D6QTX7KVIKVaNSuCVE=";
+ };
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out
+ install releases.pub $out/keys.tags.pub
+ install snapshots.pub $out/keys.dev.pub
+
+ runHook postInstall
+ '';
+ });
+in
+stdenvNoCC.mkDerivation (finalAttrs: {
+ pname = "composer-local-repo-plugin";
+ version = "1.0.0";
+
+ src = fetchFromGitHub {
+ owner = "nix-community";
+ repo = "composer-local-repo-plugin";
+ rev = finalAttrs.version;
+ hash = "sha256-sjWV4JXK8YJ5XLASMPipKlk9u57352wIDV2PPFIP+sk=";
+ };
+
+ COMPOSER_CACHE_DIR = "/dev/null";
+ COMPOSER_MIRROR_PATH_REPOS = "1";
+ COMPOSER_HTACCESS_PROTECT = "0";
+ COMPOSER_DISABLE_NETWORK = "1";
+
+ nativeBuildInputs = [
+ makeBinaryWrapper
+ ];
+
+ buildInputs = [
+ composer
+ ];
+
+ configurePhase = ''
+ runHook preConfigure
+
+ export COMPOSER_HOME=${placeholder "out"}
+
+ runHook postConfigure
+ '';
+
+ buildPhase = ''
+ runHook preBuild
+
+ # Configure composer globally
+ composer global init --quiet --no-interaction --no-ansi \
+ --name="nixos/composer" \
+ --homepage "https://nixos.org/" \
+ --description "Composer with nix-community/composer-local-repo-plugin" \
+ --license "MIT"
+
+ composer global config --quiet minimum-stability dev
+ composer global config --quiet prefer-stable true
+ composer global config --quiet autoloader-suffix "nixPredictableAutoloaderSuffix"
+ composer global config --quiet apcu-autoloader false
+ composer global config --quiet allow-plugins.nix-community/composer-local-repo-plugin true
+ composer global config --quiet repo.packagist false
+ composer global config --quiet repo.plugin path $src
+
+ # Install the local repository plugin
+ composer global require --quiet --no-ansi --no-interaction nix-community/composer-local-repo-plugin
+
+ runHook postBuild
+ '';
+
+ checkPhase = ''
+ runHook preCheck
+
+ composer global validate --no-ansi
+ composer global show --no-ansi nix-community/composer-local-repo-plugin
+
+ runHook postCheck
+ '';
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out
+ cp -ar ${composerKeys}/* $out/
+
+ makeWrapper ${composer}/bin/composer $out/bin/composer-local-repo-plugin \
+ --prefix COMPOSER_HOME : $out
+
+ runHook postInstall
+ '';
+
+ meta = {
+ description = "Composer local repo plugin for Composer";
+ homepage = "https://github.com/nix-community/composer-local-repo-plugin";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ drupol ];
+ platforms = lib.platforms.all;
+ };
+})
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 256885a8ce9516..580a09e341726e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -17991,6 +17991,11 @@ with pkgs;
# PHP interpreters, packages and extensions.
+
+ composer = callPackage ../development/tools/misc/composer { };
+
+ composer-local-repo-plugin = callPackage ../build-support/php/composer-local-repo-plugin.nix {};
+
#
# Set default PHP interpreter, extensions and packages
php = php82;
From b36ad2f51797d82ddd4479835c0edd71b3386865 Mon Sep 17 00:00:00 2001
From: Pol Dellaiera <pol.dellaiera@protonmail.com>
Date: Sun, 9 Apr 2023 11:53:42 +0200
Subject: [PATCH 2/9] php: add new builder `buildComposerProject`
---
.../php/build-composer-project.nix | 61 ++++++++++
.../php/build-composer-repository.nix | 79 +++++++++++++
pkgs/build-support/{ => php}/build-pecl.nix | 0
.../php/hooks/composer-install-hook.sh | 109 ++++++++++++++++++
.../php/hooks/composer-repository-hook.sh | 66 +++++++++++
pkgs/build-support/php/hooks/default.nix | 21 ++++
pkgs/development/interpreters/php/generic.nix | 2 +-
pkgs/top-level/php-packages.nix | 11 +-
9 files changed, 347 insertions(+), 5 deletions(-)
create mode 100644 pkgs/build-support/php/build-composer-project.nix
create mode 100644 pkgs/build-support/php/build-composer-repository.nix
rename pkgs/build-support/{ => php}/build-pecl.nix (100%)
create mode 100644 pkgs/build-support/php/hooks/composer-install-hook.sh
create mode 100644 pkgs/build-support/php/hooks/composer-repository-hook.sh
create mode 100644 pkgs/build-support/php/hooks/default.nix
diff --git a/pkgs/build-support/php/build-composer-project.nix b/pkgs/build-support/php/build-composer-project.nix
new file mode 100644
index 00000000000000..f9589ace1309c1
--- /dev/null
+++ b/pkgs/build-support/php/build-composer-project.nix
@@ -0,0 +1,61 @@
+{ stdenvNoCC, lib, writeTextDir, php, makeBinaryWrapper, fetchFromGitHub, fetchurl, composer-local-repo-plugin }:
+
+let
+ buildComposerProjectOverride = finalAttrs: previousAttrs:
+
+ let
+ phpDrv = finalAttrs.php or php;
+ composer = finalAttrs.composer or phpDrv.packages.composer;
+ composerLock = finalAttrs.composerLock or null;
+ in
+ {
+ nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [
+ composer
+ composer-local-repo-plugin
+ phpDrv.composerHooks.composerInstallHook
+ ];
+
+ buildInputs = (previousAttrs.buildInputs or [ ]) ++ [
+ phpDrv
+ ];
+
+ patches = previousAttrs.patches or [ ];
+ strictDeps = previousAttrs.strictDeps or true;
+
+ # Should we keep these empty phases?
+ configurePhase = previousAttrs.configurePhase or ''
+ runHook preConfigure
+
+ runHook postConfigure
+ '';
+
+ buildPhase = previousAttrs.buildPhase or ''
+ runHook preBuild
+
+ runHook postBuild
+ '';
+
+ doCheck = previousAttrs.doCheck or true;
+ checkPhase = previousAttrs.checkPhase or ''
+ runHook preCheck
+
+ runHook postCheck
+ '';
+
+ installPhase = previousAttrs.installPhase or ''
+ runHook preInstall
+
+ runHook postInstall
+ '';
+
+ composerRepository = phpDrv.mkComposerRepository {
+ inherit composer composer-local-repo-plugin composerLock;
+ inherit (finalAttrs) patches pname src vendorHash version;
+ };
+
+ meta = previousAttrs.meta or { } // {
+ platforms = lib.platforms.all;
+ };
+ };
+in
+args: (stdenvNoCC.mkDerivation args).overrideAttrs buildComposerProjectOverride
diff --git a/pkgs/build-support/php/build-composer-repository.nix b/pkgs/build-support/php/build-composer-repository.nix
new file mode 100644
index 00000000000000..7a7ba6f146c0a8
--- /dev/null
+++ b/pkgs/build-support/php/build-composer-repository.nix
@@ -0,0 +1,79 @@
+{ stdenvNoCC, lib, writeTextDir, fetchFromGitHub, php, composer-local-repo-plugin }:
+
+let
+ mkComposerRepositoryOverride =
+ /*
+ We cannot destruct finalAttrs since the attrset below is used to construct it
+ and Nix currently does not support lazy attribute names.
+ {
+ php ? null,
+ composer ? null,
+ composerLock ? "composer.lock",
+ src,
+ vendorHash,
+ ...
+ }@finalAttrs:
+ */
+ finalAttrs: previousAttrs:
+
+ let
+ phpDrv = finalAttrs.php or php;
+ composer = finalAttrs.composer or phpDrv.packages.composer;
+ in
+ assert (lib.assertMsg (previousAttrs ? src) "mkComposerRepository expects src argument.");
+ assert (lib.assertMsg (previousAttrs ? vendorHash) "mkComposerRepository expects vendorHash argument.");
+ assert (lib.assertMsg (previousAttrs ? version) "mkComposerRepository expects version argument.");
+ assert (lib.assertMsg (previousAttrs ? pname) "mkComposerRepository expects pname argument.");
+ {
+ name = "${previousAttrs.pname}-${previousAttrs.version}-composer-repository";
+
+ # See https://github.com/NixOS/nix/issues/6660
+ dontPatchShebangs = previousAttrs.dontPatchShebangs or true;
+
+ nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [
+ composer
+ composer-local-repo-plugin
+ phpDrv.composerHooks.composerRepositoryHook
+ ];
+
+ buildInputs = previousAttrs.buildInputs or [ ];
+
+ strictDeps = previousAttrs.strictDeps or true;
+
+ # Should we keep these empty phases?
+ configurePhase = previousAttrs.configurePhase or ''
+ runHook preConfigure
+
+ runHook postConfigure
+ '';
+
+ buildPhase = previousAttrs.buildPhase or ''
+ runHook preBuild
+
+ runHook postBuild
+ '';
+
+ doCheck = previousAttrs.doCheck or true;
+ checkPhase = previousAttrs.checkPhase or ''
+ runHook preCheck
+
+ runHook postCheck
+ '';
+
+ installPhase = previousAttrs.installPhase or ''
+ runHook preInstall
+
+ runHook postInstall
+ '';
+
+ COMPOSER_CACHE_DIR = "/dev/null";
+ COMPOSER_MIRROR_PATH_REPOS = "1";
+ COMPOSER_HTACCESS_PROTECT = "0";
+ COMPOSER_DISABLE_NETWORK = "0";
+
+ outputHashMode = "recursive";
+ outputHashAlgo = if (finalAttrs ? vendorHash && finalAttrs.vendorHash != "") then null else "sha256";
+ outputHash = finalAttrs.vendorHash or "";
+ };
+in
+args: (stdenvNoCC.mkDerivation args).overrideAttrs mkComposerRepositoryOverride
diff --git a/pkgs/build-support/build-pecl.nix b/pkgs/build-support/php/build-pecl.nix
similarity index 100%
rename from pkgs/build-support/build-pecl.nix
rename to pkgs/build-support/php/build-pecl.nix
diff --git a/pkgs/build-support/php/hooks/composer-install-hook.sh b/pkgs/build-support/php/hooks/composer-install-hook.sh
new file mode 100644
index 00000000000000..139f6357c5d79a
--- /dev/null
+++ b/pkgs/build-support/php/hooks/composer-install-hook.sh
@@ -0,0 +1,109 @@
+declare composerHomeDir
+declare composerRepository
+declare version
+
+preConfigureHooks+=(composerInstallConfigureHook)
+preBuildHooks+=(composerInstallBuildHook)
+preCheckHooks+=(composerInstallCheckHook)
+preInstallHooks+=(composerInstallInstallHook)
+
+composerInstallConfigureHook() {
+ echo "Executing composerInstallConfigureHook"
+
+ if [[ ! -e "${composerRepository}" ]]; then
+ echo "No local composer repository found."
+ exit 1
+ fi
+
+ if [[ -e "$composerLock" ]]; then
+ cp $composerLock composer.lock
+ fi
+
+ if [[ ! -f "composer.lock" ]]; then
+ echo "No composer.lock file found, consider adding one to your repository to ensure reproducible builds."
+
+ if [[ -f "${composerRepository}/composer.lock" ]]; then
+ cp ${composerRepository}/composer.lock composer.lock
+ fi
+
+ echo "Using an autogenerated composer.lock file."
+ fi
+
+ chmod +w composer.json composer.lock
+
+ echo "Finished composerInstallConfigureHook"
+}
+
+composerInstallBuildHook() {
+ echo "Executing composerInstallBuildHook"
+
+ # Since this file cannot be generated in the composer-repository-hook.sh
+ # because the file contains hardcoded nix store paths, we generate it here.
+ composer-local-repo-plugin --no-ansi build-local-repo -p ${composerRepository} > packages.json
+
+ # Remove all the repositories of type "composer"
+ # from the composer.json file.
+ jq -r -c 'del(try .repositories[] | select(.type == "composer"))' composer.json | sponge composer.json
+
+ # Configure composer to disable packagist and avoid using the network.
+ composer config repo.packagist false
+ # Configure composer to use the local repository.
+ composer config repo.composer composer file://$PWD/packages.json
+
+ # Since the composer.json file has been modified in the previous step, the
+ # composer.lock file needs to be updated.
+ COMPOSER_DISABLE_NETWORK=1 \
+ COMPOSER_ROOT_VERSION="${version}" \
+ composer \
+ --lock \
+ --no-ansi \
+ --no-install \
+ --no-interaction \
+ --no-plugins \
+ --no-scripts \
+ update
+
+ echo "Finished composerInstallBuildHook"
+}
+
+composerInstallCheckHook() {
+ echo "Executing composerInstallCheckHook"
+
+ composer validate --no-ansi --no-interaction
+
+ echo "Finished composerInstallCheckHook"
+}
+
+composerInstallInstallHook() {
+ echo "Executing composerInstallInstallHook"
+
+ # Finally, run `composer install` to install the dependencies and generate
+ # the autoloader.
+ # The COMPOSER_ROOT_VERSION environment variable is needed only for
+ # vimeo/psalm.
+ COMPOSER_CACHE_DIR=/dev/null \
+ COMPOSER_DISABLE_NETWORK=1 \
+ COMPOSER_ROOT_VERSION="${version}" \
+ COMPOSER_MIRROR_PATH_REPOS="1" \
+ composer \
+ --no-ansi \
+ --no-interaction \
+ --no-scripts \
+ --no-plugins \
+ install
+
+ # Remove packages.json, we don't need it in the store.
+ rm packages.json
+
+ # Copy the relevant files only in the store.
+ mkdir -p $out/share/php/${pname}
+ cp -r . $out/share/php/${pname}/
+
+ # Create symlinks for the binaries.
+ jq -r -c 'try .bin[]' composer.json | while read bin; do
+ mkdir -p $out/share/php/${pname} $out/bin
+ ln -s $out/share/php/${pname}/$bin $out/bin/$(basename $bin)
+ done
+
+ echo "Finished composerInstallInstallHook"
+}
diff --git a/pkgs/build-support/php/hooks/composer-repository-hook.sh b/pkgs/build-support/php/hooks/composer-repository-hook.sh
new file mode 100644
index 00000000000000..707c944522563e
--- /dev/null
+++ b/pkgs/build-support/php/hooks/composer-repository-hook.sh
@@ -0,0 +1,66 @@
+declare composerHomeDir
+declare composerLock
+declare version
+
+preConfigureHooks+=(composerRepositoryConfigureHook)
+preBuildHooks+=(composerRepositoryBuildHook)
+preCheckHooks+=(composerRepositoryCheckHook)
+preInstallHooks+=(composerRepositoryInstallHook)
+
+composerRepositoryConfigureHook() {
+ echo "Executing composerRepositoryConfigureHook"
+
+ if [[ -e "$composerLock" ]]; then
+ cp $composerLock composer.lock
+ fi
+
+ if [[ ! -f "composer.lock" ]]; then
+ echo "No composer.lock file found, consider adding one to your repository to ensure reproducible builds."
+ composer \
+ --no-ansi \
+ --no-install \
+ --no-interaction \
+ --no-plugins \
+ --no-scripts \
+ update
+ echo "Using an autogenerated composer.lock file."
+ fi
+
+ echo "Finished composerRepositoryConfigureHook"
+}
+
+composerRepositoryBuildHook() {
+ echo "Executing composerRepositoryBuildHook"
+
+ mkdir -p repository
+
+ # Build the local composer repository
+ # The command 'build-local-repo' is provided by the Composer plugin
+ # nix-community/composer-local-repo-plugin.
+ COMPOSER_CACHE_DIR=/dev/null \
+ composer-local-repo-plugin --no-ansi build-local-repo -r repository
+
+ echo "Finished composerRepositoryBuildHook"
+}
+
+composerRepositoryCheckHook() {
+ echo "Executing composerRepositoryCheckHook"
+
+ composer validate --no-ansi --no-interaction
+
+ echo "Finished composerRepositoryCheckHook"
+}
+
+composerRepositoryInstallHook() {
+ echo "Executing composerRepositoryInstallHook"
+
+ mkdir -p $out
+
+ cp -ar repository/. $out/
+
+ # Copy the composer.lock files to the output directory, in case it has been
+ # autogenerated.
+ cp composer.lock $out/
+
+ echo "Finished composerRepositoryInstallHook"
+}
diff --git a/pkgs/build-support/php/hooks/default.nix b/pkgs/build-support/php/hooks/default.nix
new file mode 100644
index 00000000000000..98198f0128795d
--- /dev/null
+++ b/pkgs/build-support/php/hooks/default.nix
@@ -0,0 +1,21 @@
+{ makeSetupHook
+, php
+, jq
+, moreutils
+}:
+
+{
+ composerRepositoryHook = makeSetupHook
+ {
+ name = "composer-repository-hook.sh";
+ propagatedBuildInputs = [ php jq moreutils ];
+ substitutions = { };
+ } ./composer-repository-hook.sh;
+
+ composerInstallHook = makeSetupHook
+ {
+ name = "composer-install-hook.sh";
+ propagatedBuildInputs = [ php jq moreutils ];
+ substitutions = { };
+ } ./composer-install-hook.sh;
+}
diff --git a/pkgs/development/interpreters/php/generic.nix b/pkgs/development/interpreters/php/generic.nix
index cee1e833f9a636..38ac50081423a0 100644
--- a/pkgs/development/interpreters/php/generic.nix
+++ b/pkgs/development/interpreters/php/generic.nix
@@ -159,7 +159,7 @@ let
nixos = lib.recurseIntoAttrs nixosTests."php${lib.strings.replaceStrings [ "." ] [ "" ] (lib.versions.majorMinor php.version)}";
package = tests.php;
};
- inherit (php-packages) extensions buildPecl mkExtension;
+ inherit (php-packages) extensions buildPecl mkComposerRepository buildComposerProject composerHooks mkExtension;
packages = php-packages.tools;
meta = php.meta // {
outputsToInstall = [ "out" ];
diff --git a/pkgs/top-level/php-packages.nix b/pkgs/top-level/php-packages.nix
index 7430c98586b7b8..aad260fc3c0041 100644
--- a/pkgs/top-level/php-packages.nix
+++ b/pkgs/top-level/php-packages.nix
@@ -1,4 +1,6 @@
{ stdenv
+, config
+, callPackages
, lib
, pkgs
, phpPackage
@@ -44,12 +46,15 @@
}:
lib.makeScope pkgs.newScope (self: with self; {
- buildPecl = import ../build-support/build-pecl.nix {
+ buildPecl = callPackage ../build-support/php/build-pecl.nix {
php = php.unwrapped;
- inherit lib;
- inherit (pkgs) stdenv autoreconfHook fetchurl re2c nix-update-script;
};
+ composerHooks = callPackages ../build-support/php/hooks { };
+
+ mkComposerRepository = callPackage ../build-support/php/build-composer-repository.nix { };
+ buildComposerProject = callPackage ../build-support/php/build-composer-project.nix { };
+
# Wrap mkDerivation to prepend pname with "php-" to make names consistent
# with how buildPecl does it and make the file easier to overview.
mkDerivation = origArgs:
From 248e8f3cba2982e33aae8572cf5243b5e8c94027 Mon Sep 17 00:00:00 2001
From: Pol Dellaiera <pol.dellaiera@protonmail.com>
Date: Fri, 14 Apr 2023 12:33:57 +0200
Subject: [PATCH 3/9] phpPackages.composer: use `buildComposerProject` builder
---
.../php-packages/composer/default.nix | 31 +++++++++----------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/pkgs/development/php-packages/composer/default.nix b/pkgs/development/php-packages/composer/default.nix
index 9cefb46d8e67ec..2d0e7c579d5f2e 100644
--- a/pkgs/development/php-packages/composer/default.nix
+++ b/pkgs/development/php-packages/composer/default.nix
@@ -1,33 +1,32 @@
-{ mkDerivation, fetchurl, makeBinaryWrapper, unzip, lib, php }:
+{ lib, callPackage, fetchFromGitHub, php, unzip, _7zz, xz, git, curl, cacert, makeBinaryWrapper }:
+
+php.buildComposerProject (finalAttrs: {
+ composer = callPackage ../../../build-support/php/pkgs/composer-phar.nix { };
-mkDerivation rec {
pname = "composer";
- version = "2.5.5";
+ version = "2.6.2";
- src = fetchurl {
- url = "https://github.com/composer/composer/releases/download/${version}/composer.phar";
- sha256 = "sha256-VmptHPS+HMOsiC0qKhOBf/rlTmD1qnyRN0NIEKWAn/w=";
+ src = fetchFromGitHub {
+ owner = "composer";
+ repo = "composer";
+ rev = finalAttrs.version;
+ hash = "sha256-tNc0hP41aRk7MmeWXCd73uHxK9pk1tCWyjiSO568qbE=";
};
- dontUnpack = true;
-
nativeBuildInputs = [ makeBinaryWrapper ];
- installPhase = ''
- runHook preInstall
- mkdir -p $out/bin
- install -D $src $out/libexec/composer/composer.phar
- makeWrapper ${php}/bin/php $out/bin/composer \
- --add-flags "$out/libexec/composer/composer.phar" \
- --prefix PATH : ${lib.makeBinPath [ unzip ]}
- runHook postInstall
+ postInstall = ''
+ wrapProgram $out/bin/composer \
+ --prefix PATH : ${lib.makeBinPath [ _7zz cacert curl git unzip xz ]}
'';
- meta = with lib; {
+ vendorHash = "sha256-V6C4LxEfXNWH/pCKATv1gf8f6/a0s/xu5j5bNJUNmnA=";
+
+ meta = {
+ changelog = "https://github.com/composer/composer/releases/tag/${finalAttrs.version}";
description = "Dependency Manager for PHP";
- license = licenses.mit;
homepage = "https://getcomposer.org/";
- changelog = "https://github.com/composer/composer/releases/tag/${version}";
- maintainers = with maintainers; [ offline ] ++ teams.php.members;
+ license = lib.licenses.mit;
+ maintainers = lib.teams.php.members;
};
-}
+})
From c0c01910ce63b0490246bef8df380ea42a29cb49 Mon Sep 17 00:00:00 2001
From: Pol Dellaiera <pol.dellaiera@protonmail.com>
Date: Fri, 21 Apr 2023 11:53:17 +0200
Subject: [PATCH 4/9] php: update documentation
---
doc/languages-frameworks/php.section.md | 140 +++++++++++++++++++++++-
1 file changed, 139 insertions(+), 1 deletion(-)
diff --git a/doc/languages-frameworks/php.section.md b/doc/languages-frameworks/php.section.md
index 6c4315f5c48768..2ca55aef1eff91 100644
--- a/doc/languages-frameworks/php.section.md
+++ b/doc/languages-frameworks/php.section.md
@@ -130,6 +130,7 @@ package: a project may depend on certain extensions and `composer`
won't work with that project unless those extensions are loaded.
Example of building `composer` with additional extensions:
+
```nix
(php.withExtensions ({ all, enabled }:
enabled ++ (with all; [ imagick redis ]))
@@ -138,7 +139,9 @@ Example of building `composer` with additional extensions:
### Overriding PHP packages {#ssec-php-user-guide-overriding-packages}
-`php-packages.nix` form a scope, allowing us to override the packages defined within. For example, to apply a patch to a `mysqlnd` extension, you can simply pass an overlay-style function to `php`s `packageOverrides` argument:
+`php-packages.nix` form a scope, allowing us to override the packages defined
+within. For example, to apply a patch to a `mysqlnd` extension, you can simply
+pass an overlay-style function to `php`s `packageOverrides` argument:
```nix
php.override {
@@ -153,3 +156,138 @@ php.override {
};
}
```
+
+### Building PHP projects {#ssec-building-php-projects}
+
+With [Composer](https://getcomposer.org/), you can effectively build PHP
+projects by streamlining dependency management. As the de-facto standard
+dependency manager for PHP, Composer enables you to declare and manage the
+libraries your project relies on, ensuring a more organized and efficient
+development process.
+
+Composer is not a package manager in the same sense as `Yum` or `Apt` are. Yes,
+it deals with "packages" or libraries, but it manages them on a per-project
+basis, installing them in a directory (e.g. `vendor`) inside your project. By
+default, it does not install anything globally. This idea is not new and
+Composer is strongly inspired by node's `npm` and ruby's `bundler`.
+
+Currently, there is no other PHP tool that offers the same functionality as
+Composer. Consequently, incorporating a helper in Nix to facilitate building
+such applications is a logical choice.
+
+In a Composer project, dependencies are defined in a `composer.json` file,
+while their specific versions are locked in a `composer.lock` file. Some
+Composer-based projects opt to include this `composer.lock` file in their source
+code, while others choose not to.
+
+In Nix, there are multiple approaches to building a Composer-based project.
+
+One such method is the `php.buildComposerProject` helper function, which serves
+as a wrapper around `mkDerivation`.
+
+Using this function, you can build a PHP project that includes both a
+`composer.json` and `composer.lock` file. If the project specifies binaries
+using the `bin` attribute in `composer.json`, these binaries will be
+automatically linked and made accessible in the derivation. In this context,
+"binaries" refer to PHP scripts that are intended to be executable.
+
+To use the helper effectively, simply add the `vendorHash` attribute, which
+enables the wrapper to handle the heavy lifting.
+
+Internally, the helper operates in three stages:
+
+1. It constructs a `composerRepository` attribute derivation by creating a
+ composer repository on the filesystem containing dependencies specified in
+ `composer.json`. This process uses the function
+ `php.mkComposerRepository` which in turn uses the
+ `php.composerHooks.composerRepositoryHook` hook. Internaly this function uses
+ a custom
+ [Composer plugin](https://github.com/nix-community/composer-local-repo-plugin) to
+ generate the repository.
+2. The resulting `composerRepository` derivation is then used by the
+ `php.composerHooks.composerInstallHook` hook, which is responsible for
+ creating the final `vendor` directory.
+3. Any "binary" specified in the `composer.json` are linked and made accessible
+ in the derivation.
+
+As the autoloader optimization can be activated directly within the
+`composer.json` file, we do not enable any autoloader optimization flags.
+
+To customize the PHP version, you can specify the `php` attribute. Similarly, if
+you wish to modify the Composer version, use the `composer` attribute. It is
+important to note that both attributes should be of the `derivation` type.
+
+Here's an example of working code example using `php.buildComposerProject`:
+
+```nix
+{ php, fetchFromGitHub }:
+
+php.buildComposerProject (finalAttrs: {
+ pname = "php-app";
+ version = "1.0.0";
+
+ src = fetchFromGitHub {
+ owner = "git-owner";
+ repo = "git-repo";
+ rev = finalAttrs.version;
+ hash = "sha256-VcQRSss2dssfkJ+iUb5qT+FJ10GHiFDzySigcmuVI+8=";
+ };
+
+ # PHP version containing the `ast` extension enabled
+ php = php.buildEnv {
+ extensions = ({ enabled, all }: enabled ++ (with all; [
+ ast
+ ]));
+ };
+
+ # The composer vendor hash
+ vendorHash = "sha256-86s/F+/5cBAwBqZ2yaGRM5rTGLmou5//aLRK5SA0WiQ=";
+
+ # If the composer.lock file is missing from the repository, add it:
+ # composerLock = ./path/to/composer.lock;
+})
+```
+
+In case the file `composer.lock` is missing from the repository, it is possible
+to specify it using the `composerLock` attribute.
+
+The other method is to use all these methods and hooks individually. This has
+the advantage of building a PHP library within another derivation very easily
+when necessary.
+
+Here's a working code example to build a PHP library using `mkDerivation` and
+separate functions and hooks:
+
+```nix
+{ stdenvNoCC, fetchFromGitHub, php }:
+
+stdenvNoCC.mkDerivation (finalAttrs:
+let
+ src = fetchFromGitHub {
+ owner = "git-owner";
+ repo = "git-repo";
+ rev = finalAttrs.version;
+ hash = "sha256-VcQRSss2dssfkJ+iUb5qT+FJ10GHiFDzySigcmuVI+8=";
+ };
+in {
+ inherit src;
+ pname = "php-app";
+ version = "1.0.0";
+
+ buildInputs = [ php ];
+
+ nativeBuildInputs = [
+ php.packages.composer
+ # This hook will use the attribute `composerRepository`
+ php.composerHooks.composerInstallHook
+ ];
+
+ composerRepository = php.mkComposerRepository {
+ inherit (finalAttrs) src;
+ # Specifying a custom composer.lock since it is not present in the sources.
+ composerLock = ./composer.lock;
+ # The composer vendor hash
+ vendorHash = "sha256-86s/F+/5cBAwBqZ2yaGRM5rTGLmou5//aLRK5SA0WiQ=";
+ };
+})
+```
From 9e701e63288a339b71d4d2e95222fc8be021f1ac Mon Sep 17 00:00:00 2001
From: Elis Hirwing <elis@hirwing.se>
Date: Wed, 9 Aug 2023 21:07:30 +0200
Subject: [PATCH 5/9] composer-local-repo-plugin: Stop exposing this internal
tool
---
pkgs/build-support/php/build-composer-project.nix | 3 ++-
pkgs/build-support/php/build-composer-repository.nix | 3 ++-
pkgs/top-level/all-packages.nix | 3 ---
3 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/pkgs/build-support/php/build-composer-project.nix b/pkgs/build-support/php/build-composer-project.nix
index f9589ace1309c1..a56720b801b865 100644
--- a/pkgs/build-support/php/build-composer-project.nix
+++ b/pkgs/build-support/php/build-composer-project.nix
@@ -1,4 +1,4 @@
-{ stdenvNoCC, lib, writeTextDir, php, makeBinaryWrapper, fetchFromGitHub, fetchurl, composer-local-repo-plugin }:
+{ callPackage, stdenvNoCC, lib, writeTextDir, php, makeBinaryWrapper, fetchFromGitHub, fetchurl }:
let
buildComposerProjectOverride = finalAttrs: previousAttrs:
@@ -6,6 +6,7 @@ let
let
phpDrv = finalAttrs.php or php;
composer = finalAttrs.composer or phpDrv.packages.composer;
+ composer-local-repo-plugin = callPackage ./composer-local-repo-plugin.nix { };
composerLock = finalAttrs.composerLock or null;
in
{
diff --git a/pkgs/build-support/php/build-composer-repository.nix b/pkgs/build-support/php/build-composer-repository.nix
index 7a7ba6f146c0a8..95681104e23474 100644
--- a/pkgs/build-support/php/build-composer-repository.nix
+++ b/pkgs/build-support/php/build-composer-repository.nix
@@ -1,4 +1,4 @@
-{ stdenvNoCC, lib, writeTextDir, fetchFromGitHub, php, composer-local-repo-plugin }:
+{ callPackage, stdenvNoCC, lib, writeTextDir, fetchFromGitHub, php }:
let
mkComposerRepositoryOverride =
@@ -19,6 +19,7 @@ let
let
phpDrv = finalAttrs.php or php;
composer = finalAttrs.composer or phpDrv.packages.composer;
+ composer-local-repo-plugin = callPackage ./composer-local-repo-plugin.nix { };
in
assert (lib.assertMsg (previousAttrs ? src) "mkComposerRepository expects src argument.");
assert (lib.assertMsg (previousAttrs ? vendorHash) "mkComposerRepository expects vendorHash argument.");
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 580a09e341726e..f128c756ccab70 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -17991,11 +17991,8 @@ with pkgs;
# PHP interpreters, packages and extensions.
-
composer = callPackage ../development/tools/misc/composer { };
- composer-local-repo-plugin = callPackage ../build-support/php/composer-local-repo-plugin.nix {};
-
#
# Set default PHP interpreter, extensions and packages
php = php82;
From 2160ed2bccc361c43e841e16b742cdda07f64461 Mon Sep 17 00:00:00 2001
From: Elis Hirwing <elis@hirwing.se>
Date: Wed, 9 Aug 2023 21:09:41 +0200
Subject: [PATCH 6/9] composer: Stop exposing composer built from a phar file
---
pkgs/build-support/php/composer-local-repo-plugin.nix | 4 +++-
pkgs/top-level/all-packages.nix | 2 --
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/pkgs/build-support/php/composer-local-repo-plugin.nix b/pkgs/build-support/php/composer-local-repo-plugin.nix
index 81672762618dca..3e918689088dba 100644
--- a/pkgs/build-support/php/composer-local-repo-plugin.nix
+++ b/pkgs/build-support/php/composer-local-repo-plugin.nix
@@ -1,6 +1,8 @@
-{ stdenvNoCC, lib, fetchFromGitHub, composer, makeBinaryWrapper }:
+{ callPackage, stdenvNoCC, lib, fetchFromGitHub, makeBinaryWrapper }:
let
+ composer = callPackage ../../development/tools/misc/composer { };
+
composerKeys = stdenvNoCC.mkDerivation (finalComposerKeysAttrs: {
pname = "composer-keys";
version = "fa5a62092f33e094073fbda23bbfc7188df3cbc5";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index f128c756ccab70..256885a8ce9516 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -17991,8 +17991,6 @@ with pkgs;
# PHP interpreters, packages and extensions.
- composer = callPackage ../development/tools/misc/composer { };
-
#
# Set default PHP interpreter, extensions and packages
php = php82;
From 1e238b8afef29aa559b3380b240eeeb2908862ea Mon Sep 17 00:00:00 2001
From: Elis Hirwing <elis@hirwing.se>
Date: Wed, 9 Aug 2023 21:25:01 +0200
Subject: [PATCH 7/9] php: Fix shellcheck string warnings in
composer-install-hook
---
.../php/hooks/composer-install-hook.sh | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/pkgs/build-support/php/hooks/composer-install-hook.sh b/pkgs/build-support/php/hooks/composer-install-hook.sh
index 139f6357c5d79a..2d5c90ea3b2fa6 100644
--- a/pkgs/build-support/php/hooks/composer-install-hook.sh
+++ b/pkgs/build-support/php/hooks/composer-install-hook.sh
@@ -16,7 +16,7 @@ composerInstallConfigureHook() {
fi
if [[ -e "$composerLock" ]]; then
- cp $composerLock composer.lock
+ cp "$composerLock" composer.lock
fi
if [[ ! -f "composer.lock" ]]; then
@@ -39,7 +39,7 @@ composerInstallBuildHook() {
# Since this file cannot be generated in the composer-repository-hook.sh
# because the file contains hardcoded nix store paths, we generate it here.
- composer-local-repo-plugin --no-ansi build-local-repo -p ${composerRepository} > packages.json
+ composer-local-repo-plugin --no-ansi build-local-repo -p "${composerRepository}" > packages.json
# Remove all the repositories of type "composer"
# from the composer.json file.
@@ -48,7 +48,7 @@ composerInstallBuildHook() {
# Configure composer to disable packagist and avoid using the network.
composer config repo.packagist false
# Configure composer to use the local repository.
- composer config repo.composer composer file://$PWD/packages.json
+ composer config repo.composer composer file://"$PWD"/packages.json
# Since the composer.json file has been modified in the previous step, the
# composer.lock file needs to be updated.
@@ -96,13 +96,13 @@ composerInstallInstallHook() {
rm packages.json
# Copy the relevant files only in the store.
- mkdir -p $out/share/php/${pname}
- cp -r . $out/share/php/${pname}/
+ mkdir -p "$out"/share/php/"${pname}"
+ cp -r . "$out"/share/php/"${pname}"/
# Create symlinks for the binaries.
- jq -r -c 'try .bin[]' composer.json | while read bin; do
- mkdir -p $out/share/php/${pname} $out/bin
- ln -s $out/share/php/${pname}/$bin $out/bin/$(basename $bin)
+ jq -r -c 'try .bin[]' composer.json | while read -r bin; do
+ mkdir -p "$out"/share/php/"${pname}" "$out"/bin
+ ln -s "$out"/share/php/"${pname}"/"$bin" "$out"/bin/"$(basename "$bin")"
done
echo "Finished composerInstallInstallHook"
From 1173a34d151b2797a4933a3eb2446e8dbdffcb1e Mon Sep 17 00:00:00 2001
From: Pol Dellaiera <pol.dellaiera@protonmail.com>
Date: Thu, 10 Aug 2023 09:10:00 +0200
Subject: [PATCH 8/9] build-support/php: move internal tools in
`php/build-support/php/pkgs`
---
.../php/build-composer-project.nix | 2 +-
.../php/build-composer-repository.nix | 2 +-
.../{ => pkgs}/composer-local-repo-plugin.nix | 2 +-
pkgs/build-support/php/pkgs/composer-phar.nix | 48 +++++++++++++++++++
5 files changed, 52 insertions(+), 4 deletions(-)
rename pkgs/build-support/php/{ => pkgs}/composer-local-repo-plugin.nix (97%)
create mode 100644 pkgs/build-support/php/pkgs/composer-phar.nix
diff --git a/pkgs/build-support/php/build-composer-project.nix b/pkgs/build-support/php/build-composer-project.nix
index a56720b801b865..b0be330205fa33 100644
--- a/pkgs/build-support/php/build-composer-project.nix
+++ b/pkgs/build-support/php/build-composer-project.nix
@@ -6,7 +6,7 @@ let
let
phpDrv = finalAttrs.php or php;
composer = finalAttrs.composer or phpDrv.packages.composer;
- composer-local-repo-plugin = callPackage ./composer-local-repo-plugin.nix { };
+ composer-local-repo-plugin = callPackage ./pkgs/composer-local-repo-plugin.nix { };
composerLock = finalAttrs.composerLock or null;
in
{
diff --git a/pkgs/build-support/php/build-composer-repository.nix b/pkgs/build-support/php/build-composer-repository.nix
index 95681104e23474..86362f151f0961 100644
--- a/pkgs/build-support/php/build-composer-repository.nix
+++ b/pkgs/build-support/php/build-composer-repository.nix
@@ -19,7 +19,7 @@ let
let
phpDrv = finalAttrs.php or php;
composer = finalAttrs.composer or phpDrv.packages.composer;
- composer-local-repo-plugin = callPackage ./composer-local-repo-plugin.nix { };
+ composer-local-repo-plugin = callPackage ./pkgs/composer-local-repo-plugin.nix { };
in
assert (lib.assertMsg (previousAttrs ? src) "mkComposerRepository expects src argument.");
assert (lib.assertMsg (previousAttrs ? vendorHash) "mkComposerRepository expects vendorHash argument.");
diff --git a/pkgs/build-support/php/composer-local-repo-plugin.nix b/pkgs/build-support/php/pkgs/composer-local-repo-plugin.nix
similarity index 97%
rename from pkgs/build-support/php/composer-local-repo-plugin.nix
rename to pkgs/build-support/php/pkgs/composer-local-repo-plugin.nix
index 3e918689088dba..67edbf1f44f9a5 100644
--- a/pkgs/build-support/php/composer-local-repo-plugin.nix
+++ b/pkgs/build-support/php/pkgs/composer-local-repo-plugin.nix
@@ -1,7 +1,7 @@
{ callPackage, stdenvNoCC, lib, fetchFromGitHub, makeBinaryWrapper }:
let
- composer = callPackage ../../development/tools/misc/composer { };
+ composer = callPackage ./composer-phar.nix { };
composerKeys = stdenvNoCC.mkDerivation (finalComposerKeysAttrs: {
pname = "composer-keys";
diff --git a/pkgs/build-support/php/pkgs/composer-phar.nix b/pkgs/build-support/php/pkgs/composer-phar.nix
new file mode 100644
index 00000000000000..41cba03f4f5d6b
--- /dev/null
+++ b/pkgs/build-support/php/pkgs/composer-phar.nix
@@ -0,0 +1,48 @@
+{
+ _7zz
+ , cacert
+ , curl
+ , fetchurl
+ , git
+ , lib
+ , makeBinaryWrapper
+ , php
+ , stdenvNoCC
+ , unzip
+ , xz
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+ pname = "composer-phar";
+ version = "2.6.2";
+
+ src = fetchurl {
+ url = "https://github.com/composer/composer/releases/download/${finalAttrs.version}/composer.phar";
+ hash = "sha256-iMhNSlP88cJ9Z2Lh1da3DVfG3J0uIxT9Cdv4a/YeGu8=";
+ };
+
+ dontUnpack = true;
+
+ nativeBuildInputs = [ makeBinaryWrapper ];
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out/bin
+ install -D $src $out/libexec/composer/composer.phar
+ makeWrapper ${php}/bin/php $out/bin/composer \
+ --add-flags "$out/libexec/composer/composer.phar" \
+ --prefix PATH : ${lib.makeBinPath [ _7zz cacert curl git unzip xz ]}
+
+ runHook postInstall
+ '';
+
+ meta = {
+ changelog = "https://github.com/composer/composer/releases/tag/${finalAttrs.version}";
+ description = "Dependency Manager for PHP, shipped from the PHAR file";
+ homepage = "https://getcomposer.org/";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ drupol ];
+ platforms = lib.platforms.all;
+ };
+})
From 3eb168da9243989a63dfd4e2c17c52f8c133247b Mon Sep 17 00:00:00 2001
From: Pol Dellaiera <pol.dellaiera@protonmail.com>
Date: Mon, 21 Aug 2023 12:19:17 +0200
Subject: [PATCH 9/9] build-support/php: add `composerNoDev`,
`composerNoPlugins` and `composerNoScripts` attributes
---
pkgs/build-support/php/build-composer-project.nix | 13 +++++++++++--
.../php/build-composer-repository.nix | 7 +++++++
.../php/hooks/composer-install-hook.sh | 14 +++++++++-----
.../php/hooks/composer-repository-hook.sh | 11 +++++++----
4 files changed, 34 insertions(+), 11 deletions(-)
diff --git a/pkgs/build-support/php/build-composer-project.nix b/pkgs/build-support/php/build-composer-project.nix
index b0be330205fa33..6aecf434577300 100644
--- a/pkgs/build-support/php/build-composer-project.nix
+++ b/pkgs/build-support/php/build-composer-project.nix
@@ -7,9 +7,13 @@ let
phpDrv = finalAttrs.php or php;
composer = finalAttrs.composer or phpDrv.packages.composer;
composer-local-repo-plugin = callPackage ./pkgs/composer-local-repo-plugin.nix { };
- composerLock = finalAttrs.composerLock or null;
in
{
+ composerLock = previousAttrs.composerLock or null;
+ composerNoDev = previousAttrs.composerNoDev or true;
+ composerNoPlugins = previousAttrs.composerNoPlugins or true;
+ composerNoScripts = previousAttrs.composerNoScripts or true;
+
nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [
composer
composer-local-repo-plugin
@@ -50,8 +54,13 @@ let
'';
composerRepository = phpDrv.mkComposerRepository {
- inherit composer composer-local-repo-plugin composerLock;
+ inherit composer composer-local-repo-plugin;
inherit (finalAttrs) patches pname src vendorHash version;
+
+ composerLock = previousAttrs.composerLock or null;
+ composerNoDev = previousAttrs.composerNoDev or true;
+ composerNoPlugins = previousAttrs.composerNoPlugins or true;
+ composerNoScripts = previousAttrs.composerNoScripts or true;
};
meta = previousAttrs.meta or { } // {
diff --git a/pkgs/build-support/php/build-composer-repository.nix b/pkgs/build-support/php/build-composer-repository.nix
index 86362f151f0961..30b0b48de7515c 100644
--- a/pkgs/build-support/php/build-composer-repository.nix
+++ b/pkgs/build-support/php/build-composer-repository.nix
@@ -25,7 +25,14 @@ let
assert (lib.assertMsg (previousAttrs ? vendorHash) "mkComposerRepository expects vendorHash argument.");
assert (lib.assertMsg (previousAttrs ? version) "mkComposerRepository expects version argument.");
assert (lib.assertMsg (previousAttrs ? pname) "mkComposerRepository expects pname argument.");
+ assert (lib.assertMsg (previousAttrs ? composerNoDev) "mkComposerRepository expects composerNoDev argument.");
+ assert (lib.assertMsg (previousAttrs ? composerNoPlugins) "mkComposerRepository expects composerNoPlugins argument.");
+ assert (lib.assertMsg (previousAttrs ? composerNoScripts) "mkComposerRepository expects composerNoScripts argument.");
{
+ composerNoDev = previousAttrs.composerNoDev or true;
+ composerNoPlugins = previousAttrs.composerNoPlugins or true;
+ composerNoScripts = previousAttrs.composerNoScripts or true;
+
name = "${previousAttrs.pname}-${previousAttrs.version}-composer-repository";
# See https://github.com/NixOS/nix/issues/6660
diff --git a/pkgs/build-support/php/hooks/composer-install-hook.sh b/pkgs/build-support/php/hooks/composer-install-hook.sh
index 2d5c90ea3b2fa6..9f23b90fa401d0 100644
--- a/pkgs/build-support/php/hooks/composer-install-hook.sh
+++ b/pkgs/build-support/php/hooks/composer-install-hook.sh
@@ -1,6 +1,8 @@
-declare composerHomeDir
declare composerRepository
declare version
+declare composerNoDev
+declare composerNoPlugins
+declare composerNoScripts
preConfigureHooks+=(composerInstallConfigureHook)
preBuildHooks+=(composerInstallBuildHook)
@@ -59,8 +61,9 @@ composerInstallBuildHook() {
--no-ansi \
--no-install \
--no-interaction \
- --no-plugins \
- --no-scripts \
+ ${composerNoDev:+--no-dev} \
+ ${composerNoPlugins:+--no-plugins} \
+ ${composerNoScripts:+--no-scripts} \
update
echo "Finished composerInstallBuildHook"
@@ -88,8 +91,9 @@ composerInstallInstallHook() {
composer \
--no-ansi \
--no-interaction \
- --no-scripts \
- --no-plugins \
+ ${composerNoDev:+--no-dev} \
+ ${composerNoPlugins:+--no-plugins} \
+ ${composerNoScripts:+--no-scripts} \
install
# Remove packages.json, we don't need it in the store.
diff --git a/pkgs/build-support/php/hooks/composer-repository-hook.sh b/pkgs/build-support/php/hooks/composer-repository-hook.sh
index 707c944522563e..057acf1fcc30ec 100644
--- a/pkgs/build-support/php/hooks/composer-repository-hook.sh
+++ b/pkgs/build-support/php/hooks/composer-repository-hook.sh
@@ -1,6 +1,8 @@
-declare composerHomeDir
declare composerLock
declare version
+declare composerNoDev
+declare composerNoPlugins
+declare composerNoScripts
preConfigureHooks+=(composerRepositoryConfigureHook)
preBuildHooks+=(composerRepositoryBuildHook)
@@ -20,8 +22,9 @@ composerRepositoryConfigureHook() {
--no-ansi \
--no-install \
--no-interaction \
- --no-plugins \
- --no-scripts \
+ ${composerNoDev:+--no-dev} \
+ ${composerNoPlugins:+--no-plugins} \
+ ${composerNoScripts:+--no-scripts} \
update
echo "Using an autogenerated composer.lock file."
fi
@@ -38,7 +41,7 @@ composerRepositoryBuildHook() {
# The command 'build-local-repo' is provided by the Composer plugin
# nix-community/composer-local-repo-plugin.
COMPOSER_CACHE_DIR=/dev/null \
- composer-local-repo-plugin --no-ansi build-local-repo -r repository
+ composer-local-repo-plugin --no-ansi build-local-repo ${composerNoDev:+--no-dev} -r repository
echo "Finished composerRepositoryBuildHook"
}