<?php

// script to upgrade PCRE. just drop the pcre-x.x.tar.xx here and run the script

$pattern 'pcre-*.tar.*';
$newpcre glob($pattern);

if (
count($newpcre) > 1) {
    echo 
"more than one '$pattern' file. aborting\n";
    
print_r($newpcre);
    exit;
}

if (
count($newpcre) == 0) {
    die(
"need one '$pattern' file. aborting.\n");
}


$newpcre $newpcre[0];

if (
strpos($newpcre'gz')) {
    
system("tar xfz $newpcre");
} elseif (
strpos($newpcre'bz2')) {
    
system("tar xfj $newpcre");
} else {
    die(
"file type not recognized: $newpcre\n");
}

$newpcre substr($newpcre0strpos($newpcre'.tar'));
$dirlen strlen('pcrelib');

function 
recurse($path)
{
    global 
$newpcre$dirlen;

    foreach (
scandir($path) as $file) {

        if (
$file[0] === '.' ||
        
$file === 'CVS' ||
        @
substr_compare($file'.lo', -33) === ||
        @
substr_compare($file'.loT', -44) === ||
        @
substr_compare($file'.o', -22) === 0) continue;

        
$file "$path/$file";

        if (
is_dir($file)) {
            
recurse($file);
            continue;
        }

        echo 
"processing $file... ";

        
$newfile $newpcre substr($file$dirlen);

        if (
is_file($tmp $newfile '.generic') || is_file($tmp $newfile '.dist')) {
            
$newfile $tmp;
        }


        if (!
is_file($newfile)) {
            die(
"$newfile is not available any more\n");
        }

        
// maintain file mtimes so that cvs doesnt get crazy
        
if (file_get_contents($newfile) !== file_get_contents($file)) {
            
copy($newfile$file);
        }

        
// always include the config.h file
        
$content    file_get_contents($newfile);
        
$newcontent preg_replace('/#\s*ifdef HAVE_CONFIG_H\s*(.+)\s*#\s*endif/''$1'$content);

        if (
$content !== $newcontent) {
            
file_put_contents($file$newcontent);
        }

        echo 
"OK\n";
    }

}


recurse('pcrelib');

$dirorig scandir('pcrelib/testdata');
$k array_search('CVS'$dirorig);
if (
$k !== false)
    unset(
$dirorig[$k]);

$k array_search('.svn'$dirorig);
if (
$k !== false)
    unset(
$dirorig[$k]);

$dirnew scandir("$newpcre/testdata");
$diff   array_diff($dirorig$dirnew);

foreach (
$diff as $file) {
    
$file2 'pcrelib'.substr($filestrlen($newpcre));
    
copy($file$file2);
}


// the config.h needs special care
$prepend_config_h '
#include <php_compat.h>

#ifndef PHP_WIN32
# include <php_config.h>
#endif

#undef PACKAGE_NAME
#undef PACKAGE_VERSION
#undef PACKAGE_TARNAME
#undef PACKAGE_STRING

#define SUPPORT_UCP
#define SUPPORT_UTF8

#if defined(__GNUC__) && __GNUC__ >= 4
# ifdef __cplusplus
#  define PCRE_EXP_DECL        extern "C" __attribute__ ((visibility("default")))
# else
#  define PCRE_EXP_DECL        extern __attribute__ ((visibility("default")))
# endif
# define PCRE_EXP_DEFN        __attribute__ ((visibility("default")))
# define PCRE_EXP_DATA_DEFN    __attribute__ ((visibility("default")))
#endif


'
;

file_put_contents('pcrelib/config.h'$prepend_config_h file_get_contents('pcrelib/config.h'));


echo 
"\nThe End :-)\n\n"

?>