public static function main(array $argv) { $args = \Docopt::handle(self::DOC, array('argv' => \array_slice($argv, 1))); $self = new self($args['<outfile>']); $self->generatedBy = \join(' ', \array_map('escapeshellarg', $argv)); $self->followSymlinks = $args['--follow-symlinks']; $self->requireMethod = $args['--require-method']; $self->prependAutoload = $args['--prepend']; $self->caseInsensitive = $args['--case-insensitive']; $self->useHack = $args['--hack']; $self->noCache = $args['--no-cache']; if (isset($args['--cache-path'])) { $self->cachePath = $args['--cache-path']; } $files = $self->flattenInputPaths($args['<files>'] ?: array($self->baseDir)); // Remove excluded files $files = \array_diff($files, $self->flattenInputPaths($args['--exclude'])); // Ignore the output file $files = \array_diff($files, array(\realpath($self->outFile))); $scanner = new RealFileScanner(); if (!$self->noCache) { $scanner = CachingFileScanner::create($self->cachePath, $scanner); } foreach ($files as $file) { $parsed = $scanner->scanFile($file); if ($parsed->getConstants() || $parsed->getFunctions()) { $self->eagerFiles[] = $file; } foreach ($parsed->getClasses() as $class) { $self->classMap[$class] = $file; } } $scanner->finish(); print "Writing autoloader to {$self->outFile}\n"; \file_put_contents($self->outFile, $self->generate()); }