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());
 }