diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index ad70e5266..9b8e137ff 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -35,39 +35,56 @@ class AutoloadGenerator $this->installationManager = $installationManager; } - public function dump($targetFilename) + public function dump($targetDir) { - $autoloads = $this->parseAutoloads(); + $autoloadFile = file_get_contents(__DIR__.'/ClassLoader.php'); - $file = file_get_contents(__DIR__.'/ClassLoader.php'); + $autoloadFile .= <<<'EOF' - $file .= <<<'EOF' +// autoload.php generated by Composer -// autoload.php generated by composer +function init() { + $loader = new ClassLoader(); -$loader = new ClassLoader(); + $map = require __DIR__.'/autoload_namespaces.php'; + + foreach ($map as $namespace => $path) { + $loader->add($namespace, $path); + } + + $loader->register(); + + return $loader; +} + +return init(); +EOF; + + $namespacesFile = <<<'EOF' +parseAutoloads(); + if (isset($autoloads['psr-0'])) { foreach ($autoloads['psr-0'] as $def) { foreach ($def['mapping'] as $prefix => $path) { $exportedPrefix = var_export($prefix, true); $exportedPath = var_export(($def['path'] ? '/'.$def['path'] : '').'/'.$path, true); - $file .= <<add($exportedPrefix, dirname(dirname(__DIR__)).$exportedPath); - -EOF; + $namespacesFile .= " $exportedPrefix => dirname(dirname(__DIR__)).$exportedPath,\n"; } } } - $file .= <<<'EOF' -$loader->register(); + $namespacesFile .= ");\n"; -EOF; - - file_put_contents($targetFilename, $file); + file_put_contents($targetDir.'/autoload.php', $autoloadFile); + file_put_contents($targetDir.'/autoload_namespaces.php', $namespacesFile); } private function parseAutoloads() diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index 96d8f63f9..1f55bc671 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -115,9 +115,9 @@ EOT $localRepo->write(); - $output->writeln('> Generating autoload.php'); + $output->writeln('> Generating autoload files'); $generator = new AutoloadGenerator($localRepo, $composer->getPackage(), $installationManager); - $generator->dump('vendor/.composer/autoload.php'); + $generator->dump('vendor/.composer/'); $output->writeln('> Done'); }