summary refs log blame commit diff
path: root/pkgs/development/interpreters/php_configurable/default.nix
blob: 07ac6f90a1b348ec9795dc27920f889780516aef (plain) (tree)
1
2
3
4
5
6
7
8
9
                          
 
                
 
                                                                        
 
                                   
 
                                       
 
                                             
 
           
 
                         
 





                                                                  
 
                  
 

                                                                            
                                     
        
      



                                                      
 




                                                          




                                                         








                                                        
 



                                                                     
 




                                                      
 







                                                       
 



                                                  
 



                                           


                                              
 


                                                            
        
 


                                               
 
        


                                                                                                  
         








                                                             

                                                                          

          

      
         













                                                            
                                                     

                                                        
    
 
            




                                                                                                                
                                                                                  







                                                              
                                 

























                                                                          
                                             

                                    
 



                                                    
    
 


                          
let version = "5.2.11"; in

args: with args;

let inherit (args.composableDerivation) composableDerivation edf wwf; in

composableDerivation {} ( fixed : {

  name = "php_configurable-${version}";

  buildInputs = ["flex" "bison" "pkgconfig"];

  flags = {

# much left to do here...

    # SAPI modules:
    
      apxs2 = {
        configureFlags = ["--with-apxs2=${apacheHttpd}/bin/apxs"];
        buildInputs = [apacheHttpd];
      };

      # Extensions

      curl = {
        configureFlags = ["--with-curl=${args.curl}" "--with-curlwrappers"];
        buildInputs = [curl openssl];
      };
      
      zlib = {
        configureFlags = ["--with-zlib=${args.zlib}"];
        buildInputs = [zlib];
      };

      libxml2 = {
        configureFlags = ["--with-libxml-dir=${libxml2}"];
        buildInputs = [ libxml2 ];
      };
    
      sqlite = {
        configureFlags = ["--with-pdo-sqlite=${sqlite}"];
        buildInputs = [ sqlite ];
      };
    
      postgresql = {
        configureFlags = ["--with-pgsql=${postgresql}"];
        buildInputs = [ postgresql ];
      };
    
      mysql = {
        configureFlags = ["--with-mysql=${mysql}"];
        buildInputs = [ mysql ];
      };

      mysqli = {
        configureFlags = ["--with-mysqli=${mysql}/bin/mysql_config"];
        buildInputs = [ mysql];
      };

      mysqli_embedded = {
        configureFlags = ["--enable-embedded-mysqli"];
        depends = "mysqli";
        assertion = fixed.mysqliSupport;
      };

      pdo_mysql = {
        configureFlags = ["--with-pdo-mysql=${mysql}"];
        buildInputs = [ mysql ];
      };
    
      bcmath = {
        configureFlags = ["--enable-bcmath"];
      };

      gd = {
        configureFlags = ["--with-gd=${args.gd}"];
        buildInputs = [gd];
      };

      soap = {
        configureFlags = ["--enable-soap"];
      };

      sockets = {
        configureFlags = ["--enable-sockets"];
      };

      openssl = {
        configureFlags = ["--with-openssl=${args.openssl}"];
        buildInputs = ["openssl"];
      };

      mbstring = {
        configureFlags = ["--enable-mbstring"];
      };

      /*
         php is build within this derivation in order to add the xdebug lines to the php.ini.
         So both Apache and command line php both use xdebug without having to configure anything.
         Xdebug could be put in its own derivation.
      * /
        meta = {
                description = "debugging support for PHP";
                homepage = http://xdebug.org;
                license = "based on the PHP license - as is";
                };
      */
      xdebug = {
        buildInputs = [ automake autoconf ];
        xdebug_src = args.fetchurl {
          url = "http://xdebug.org/files/xdebug-2.0.5.tgz";
          sha256 = "1cmq7c36gj8n41mfq1wba5rij8j77yqhydpcsbcysk1zchg68f26";
        };
      };
    };

  cfg = {
    mysqlSupport = getConfig ["php" "mysql"] true;
    mysqliSupport = getConfig ["php" "mysqli"] true;
    pdo_mysqlSupport = getConfig ["php" "pdo_mysql"] true;
    libxml2Support = getConfig ["php" "libxml2"] true;
    apxs2Support = getConfig ["php" "apxs2"] true;
    bcmathSupport = getConfig ["php" "bcmath"] true;
    socketsSupport = getConfig ["php" "sockets"] true;
    curlSupport = getConfig ["php" "curl"] true;
    gettextSupport = getConfig ["php" "gettext"] true;
    postgresqlSupport = getConfig ["php" "postgresql"] true;
    sqliteSupport = getConfig ["php" "sqlite"] true;
    soapSupport = getConfig ["php" "soap"] true;
    zlibSupport = getConfig ["php" "zlib"] true;
    opensslSupport = getConfig ["php" "openssl"] true;
    xdebugSupport = getConfig ["php" "xdebug"] false;
    mbstringSupport = getConfig ["php" "mbstring"] true;
    gdSupport = getConfig ["php" "gd"] true;
  };

  # only -O1
  configurePhase = ''
    iniFile=$out/etc/$name.ini
    [[ -z "$libxml2" ]] || export PATH=$PATH:$libxml2/bin
    ./configure --with-config-file-scan-dir=/etc --with-config-file-path=$out/etc --prefix=$out  $configureFlags
    echo configurePhase end
    sed -e 's/-O2/-O1/g' -i Makefile # http://bugs.php.net/bug.php?id=47730&edit=3
  '';

  installPhase = ''
    unset installPhase; installPhase;
    cp php.ini-recommended $iniFile

    # Now Let's build xdebug if flag has been given
    # TODO I think there are better paths than the given below
    if [ -n "$xdebug_src" ]; then
      PATH=$PATH:$out/bin
      tar xfz $xdebug_src;
      cd xdebug*
      phpize
      ./configure --prefix=$out
      make
      ensureDir $out/lib; cp modules/xdebug.so $out/lib
      cat >> $out/etc/php.ini << EOF
        zend_extension="$out/lib/xdebug.so"
        zend_extension_ts="$out/lib/xdebug.so"
        zend_extension_debug="$out/lib/xdebug.so"
        xdebug.remote_enable=true
        xdebug.remote_host=127.0.0.1
        xdebug.remote_port=9000
        xdebug.remote_handler=dbgp
        xdebug.profiler_enable=0
        xdebug.profiler_output_dir="/tmp/xdebug"
        xdebug.remote_mode=req
        max_execution_time = 300
        date.timezone = UTC
  EOF
    fi
  '';

  src = args.fetchurl {
    url = "http://nl.php.net/get/php-${version}.tar.bz2/from/this/mirror";
    md5 = "286bf34630f5643c25ebcedfec5e0a09";
    name = "php-${version}.tar.bz2";
  };

  meta = {
    description = "The PHP language runtime engine";
    homepage = http://www.php.net/;
    license = "PHP-3";
  };

  patches = [./fix.patch];

})