Source for file Compiler.php

Documentation is available at Compiler.php

  1. <?php
  2. /*
  3.  *  $Id: Compiler.php 1768 2007-06-19 22:55:34Z zYne $
  4.  *
  5.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16.  *
  17.  * This software consists of voluntary contributions made by many individuals
  18.  * and is licensed under the LGPL. For more information, see
  19.  * <http://www.phpdoctrine.com>.
  20.  */
  21. /**
  22.  * Doctrine_Compiler
  23.  * This class can be used for compiling the entire Doctrine framework into a single file
  24.  *
  25.  * @package     Doctrine
  26.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  27.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  28.  * @category    Object Relational Mapping
  29.  * @link        www.phpdoctrine.com
  30.  * @since       1.0
  31.  * @version     $Revision: 1768 $
  32.  */
  33. {
  34.     /**
  35.      * method for making a single file of most used doctrine runtime components
  36.      * including the compiled file instead of multiple files (in worst
  37.      * cases dozens of files) can improve performance by an order of magnitude
  38.      *
  39.      * @throws Doctrine_Compiler_Exception      if something went wrong during the compile operation
  40.      * @return void 
  41.      */
  42.     public static function compile($target null)
  43.     {
  44.         $path Doctrine::getPath();
  45.         $it new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)RecursiveIteratorIterator::LEAVES_ONLY);
  46.  
  47.         foreach ($it as $file{
  48.             $e explode('.'$file->getFileName());
  49.             
  50.             // we don't want to require versioning files
  51.             if (end($e=== 'php' && strpos($file->getFileName()'.inc'=== false{
  52.                 require_once $file->getPathName();
  53.             }
  54.         }
  55.  
  56.         $classes array_merge(get_declared_classes()get_declared_interfaces());
  57.  
  58.         $ret     array();
  59.  
  60.         foreach ($classes as $class{
  61.             $e explode('_'$class);
  62.  
  63.             if ($e[0!== 'Doctrine'{
  64.                 continue;
  65.             }
  66.             $refl  new ReflectionClass($class);
  67.             $file  $refl->getFileName();
  68.             
  69.             print 'Adding ' $file PHP_EOL;
  70.  
  71.             $lines file($file);
  72.  
  73.             $start $refl->getStartLine(1;
  74.             $end   $refl->getEndLine();
  75.  
  76.             $ret array_merge($retarray_slice($lines$start($end $start)));
  77.         }
  78.  
  79.         if ($target == null{
  80.             $target $path DIRECTORY_SEPARATOR 'Doctrine.compiled.php';
  81.         }
  82.  
  83.         // first write the 'compiled' data to a text file, so
  84.         // that we can use php_strip_whitespace (which only works on files)
  85.         $fp @fopen($target'w');
  86.  
  87.         if ($fp === false{
  88.             throw new Doctrine_Compiler_Exception("Couldn't write compiled dataFailed to open $target");
  89.         }
  90.         fwrite($fp"<?php "implode(''$ret));
  91.         fclose($fp);
  92.  
  93.         $stripped php_strip_whitespace($target);
  94.         $fp @fopen($target'w');
  95.         if ($fp === false{
  96.             throw new Doctrine_Compiler_Exception("Couldn't write compiled dataFailed to open $file");
  97.         }
  98.         fwrite($fp$stripped);
  99.         fclose($fp);
  100.     }
  101. }