diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index 5991083f7..bac2c9852 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -30,6 +30,7 @@ class AutoloadGenerator $filesystem = new Filesystem(); $filesystem->ensureDirectoryExists($config->get('vendor-dir')); $vendorPath = strtr(realpath($config->get('vendor-dir')), '\\', '/'); + $useGlobalIncludePath = (bool) $config->get('use-include-path'); $targetDir = $vendorPath.'/'.$targetDir; $filesystem->ensureDirectoryExists($targetDir); @@ -171,7 +172,7 @@ EOF; file_put_contents($targetDir.'/include_paths.php', $includePathFile); } file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix)); - file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, true, (bool) $includePathFile, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix)); + file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, true, (bool) $includePathFile, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath)); copy(__DIR__.'/ClassLoader.php', $targetDir.'/ClassLoader.php'); } @@ -326,7 +327,7 @@ return ComposerAutoloaderInit$suffix::getLoader(); AUTOLOAD; } - protected function getAutoloadRealFile($usePSR0, $useClassMap, $useIncludePath, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix) + protected function getAutoloadRealFile($usePSR0, $useClassMap, $useIncludePath, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath) { // TODO the class ComposerAutoloaderInit should be revert to a closure // when APC has been fixed: @@ -403,6 +404,13 @@ PSR0; CLASSMAP; } + if ($useGlobalIncludePath) { + $file .= <<<'INCLUDEPATH' + $loader->setUseIncludePath(true); + +INCLUDEPATH; + } + if ($targetDirLoader) { $file .= << array( + function ($val) { return true; }, + function ($val) { return $val !== 'false' && (bool) $val; } + ), ); $multiConfigValues = array( 'github-protocols' => array( diff --git a/src/Composer/Config.php b/src/Composer/Config.php index f4207fa5a..43aaec078 100644 --- a/src/Composer/Config.php +++ b/src/Composer/Config.php @@ -31,6 +31,7 @@ class Config 'cache-files-dir' => '{$cache-dir}/files', 'cache-repo-dir' => '{$cache-dir}/repo', 'cache-vcs-dir' => '{$cache-dir}/vcs', + 'use-include-path' => false, ); public static $defaultRepositories = array( diff --git a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php index 9693d8826..e763d2742 100644 --- a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php +++ b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php @@ -40,13 +40,26 @@ class AutoloadGeneratorTest extends TestCase $this->ensureDirectoryExistsAndClear($this->vendorDir); $this->config = $this->getMock('Composer\Config'); - $this->config->expects($this->any()) + + $this->config->expects($this->at(0)) ->method('get') ->with($this->equalTo('vendor-dir')) ->will($this->returnCallback(function () use ($that) { return $that->vendorDir; })); + $this->config->expects($this->at(1)) + ->method('get') + ->with($this->equalTo('vendor-dir')) + ->will($this->returnCallback(function () use ($that) { + return $that->vendorDir; + })); + + $this->config->expects($this->at(2)) + ->method('get') + ->with($this->equalTo('use-include-path')) + ->will($this->returnValue(false)); + $this->dir = getcwd(); chdir($this->workingDir);