new file mode 100644
@@ -0,0 +1,46 @@
+From 4b7c29c3e98aa55ea7567a3d496595e539f30cdb Mon Sep 17 00:00:00 2001
+From: Nicolas Graves <ngraves@ngraves.fr>
+Date: Sun, 22 Oct 2023 16:31:40 +0200
+Subject: [PATCH] Deprecation.php: Do not check for composer in getVendors.
+
+---
+ DeprecationErrorHandler/Deprecation.php | 23 ++---------------------
+ 1 file changed, 2 insertions(+), 21 deletions(-)
+
+diff --git a/DeprecationErrorHandler/Deprecation.php b/DeprecationErrorHandler/Deprecation.php
+index 79cfa0c..b7074f7 100644
+--- a/DeprecationErrorHandler/Deprecation.php
++++ b/DeprecationErrorHandler/Deprecation.php
+@@ -365,27 +365,8 @@ class Deprecation
+ if (class_exists(DebugClassLoader::class, false)) {
+ self::$vendors[] = \dirname((new \ReflectionClass(DebugClassLoader::class))->getFileName());
+ }
+- foreach (get_declared_classes() as $class) {
+- if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) {
+- $r = new \ReflectionClass($class);
+- $v = \dirname($r->getFileName(), 2);
+- if (file_exists($v.'/composer/installed.json')) {
+- self::$vendors[] = $v;
+- $loader = require $v.'/autoload.php';
+- $paths = self::addSourcePathsFromPrefixes(
+- array_merge($loader->getPrefixes(), $loader->getPrefixesPsr4()),
+- $paths
+- );
+- }
+- }
+- }
+- foreach ($paths as $path) {
+- foreach (self::$vendors as $vendor) {
+- if (0 !== strpos($path, $vendor)) {
+- self::$internalPaths[] = $path;
+- }
+- }
+- }
++ self::$vendors[] = $v;
++ self::$internalPaths[] = $paths;
+ }
+
+ return self::$vendors;
+--
+2.41.0
+
@@ -1946,3 +1946,80 @@ (define-public php-symfony-mime
(home-page "https://symfony.com")
(license license:expat)))
+(define-public php-symfony-phpunit-bridge
+ (package
+ (name "php-symfony-phpunit-bridge")
+ (version "6.3.6")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/symfony/phpunit-bridge")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1v5zdjb0d7282wq0ghwzn9x005wqlzjmx2msi9vhp1c4l513fxgf"))
+ (patches
+ (search-patches "php-symfony-phpunit-bridge-getVendors-fix.patch"))))
+ (build-system composer-build-system)
+ (arguments
+ (list
+ #:test-flags ; Some tests are useless but get reported as risky.
+ ''("--bootstrap" "vendor/autoload.php" "--dont-report-useless-tests")
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'deactivate-bootstrap.php
+ (lambda _
+ (substitute* "composer.json"
+ ((".*\"files\".*")
+ ""))))
+ (add-before 'check 'pre-check
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Adapt some PHP test code to Guix context.
+ (mkdir-p
+ (string-append (getcwd) "/vendor/myfakevendor/myfakepackage1"))
+ (substitute* "Tests/DeprecationErrorHandler/DeprecationTest.php"
+ (("(.*)self::\\$vendorDir = \\$vendorDir;" all blank)
+ (string-append
+ blank "$vendorDir = '" (getcwd) "/vendor/';\n"
+ all)))
+ (substitute* "DeprecationErrorHandler/Deprecation.php"
+ (("(self::\\$vendors\\[\\] = )\\$v;" all eq)
+ (string-append eq "'" (getcwd) "/vendor';"))
+ (("(self::\\$internalPaths)\\[\\] = \\$paths;" all def)
+ (string-append
+ def " = ["
+ "'" (getcwd) "/Tests/DeprecationErrorHandler/Deprecation.php',"
+ "'" (getcwd) "/Tests/DeprecationErrorHandler/DeprecationTest.php',"
+ "'" (getcwd) "/Tests/DeprecationErrorHandler.php',"
+ "];")))
+ ;; Remove failing tests. All but two are probably failing
+ ;; because of some version mismatch of php-symfony-error-handler.
+ (for-each
+ (lambda (f)
+ (delete-file
+ (string-append "Tests/DeprecationErrorHandler/" f)))
+ '("partially_quiet.phpt"
+ "partially_quiet2.phpt"
+ "trigger_deprecation_types.phpt"
+ "trigger_error_types.phpt"
+ "weak_vendors_on_vendor.phpt"))
+ (delete-file "Tests/CoverageListenerTest.php")
+ ;; For most simple cases, handle php-symfony-error-handler
+ ;; discrepancies.
+ (substitute* (find-files "Tests" "\\.phpt")
+ (("Remaining indirect deprecation notices")
+ "Other deprecation notices")
+ (("Remaining direct deprecation notices")
+ "Other deprecation notices")))))))
+ (native-inputs
+ (list php-phpunit-phpunit
+ php-symfony-deprecation-contracts
+ php-symfony-error-handler))
+ (synopsis "Utilities for PHPUnit")
+ (description
+ "This package provides utilities for PHPUnit, especially user deprecation
+notices management.")
+ (home-page "https://symfony.com")
+ (license license:expat)))
+