xref: /PHP-5.3/ext/pcre/upgrade-pcre.php (revision 27fc1b88)
1<?php
2
3// script to upgrade PCRE. just drop the pcre-x.x.tar.xx here and run the script
4
5$pattern = 'pcre-*.tar.*';
6$newpcre = glob($pattern);
7
8if (count($newpcre) > 1) {
9	echo "more than one '$pattern' file. aborting\n";
10	print_r($newpcre);
11	exit;
12}
13
14if (count($newpcre) == 0) {
15	die("need one '$pattern' file. aborting.\n");
16}
17
18
19$newpcre = $newpcre[0];
20
21if (strpos($newpcre, 'gz')) {
22	system("tar xfz $newpcre");
23} elseif (strpos($newpcre, 'bz2')) {
24	system("tar xfj $newpcre");
25} else {
26	die("file type not recognized: $newpcre\n");
27}
28
29$newpcre = substr($newpcre, 0, strpos($newpcre, '.tar'));
30$dirlen = strlen('pcrelib');
31
32function recurse($path)
33{
34	global $newpcre, $dirlen;
35
36	foreach (scandir($path) as $file) {
37
38		if ($file[0] === '.' ||
39		$file === 'CVS' ||
40		@substr_compare($file, '.lo', -3, 3) === 0 ||
41		@substr_compare($file, '.loT', -4, 4) === 0 ||
42		@substr_compare($file, '.o', -2, 2) === 0) continue;
43
44		$file = "$path/$file";
45
46		if (is_dir($file)) {
47			recurse($file);
48			continue;
49		}
50
51		echo "processing $file... ";
52
53		$newfile = $newpcre . substr($file, $dirlen);
54
55		if (is_file($tmp = $newfile . '.generic') || is_file($tmp = $newfile . '.dist')) {
56			$newfile = $tmp;
57		}
58
59
60		if (!is_file($newfile)) {
61			die("$newfile is not available any more\n");
62		}
63
64		// maintain file mtimes so that cvs doesnt get crazy
65		if (file_get_contents($newfile) !== file_get_contents($file)) {
66			copy($newfile, $file);
67		}
68
69		// always include the config.h file
70		$content    = file_get_contents($newfile);
71		$newcontent = preg_replace('/#\s*ifdef HAVE_CONFIG_H\s*(.+)\s*#\s*endif/', '$1', $content);
72
73		if ($content !== $newcontent) {
74			file_put_contents($file, $newcontent);
75		}
76
77		echo "OK\n";
78	}
79
80}
81
82
83recurse('pcrelib');
84
85$dirorig = scandir('pcrelib/testdata');
86$k = array_search('CVS', $dirorig);
87if ($k !== false)
88	unset($dirorig[$k]);
89
90$k = array_search('.svn', $dirorig);
91if ($k !== false)
92	unset($dirorig[$k]);
93
94$dirnew = scandir("$newpcre/testdata");
95$diff   = array_diff($dirorig, $dirnew);
96
97foreach ($diff as $file) {
98	$file2 = 'pcrelib'.substr($file, strlen($newpcre));
99	copy($file, $file2);
100}
101
102
103// the config.h needs special care
104$prepend_config_h = '
105#include <php_compat.h>
106
107#ifndef PHP_WIN32
108# include <php_config.h>
109#endif
110
111#undef PACKAGE_NAME
112#undef PACKAGE_VERSION
113#undef PACKAGE_TARNAME
114#undef PACKAGE_STRING
115
116#define SUPPORT_UCP
117#define SUPPORT_UTF8
118
119#if defined(__GNUC__) && __GNUC__ >= 4
120# ifdef __cplusplus
121#  define PCRE_EXP_DECL		extern "C" __attribute__ ((visibility("default")))
122# else
123#  define PCRE_EXP_DECL		extern __attribute__ ((visibility("default")))
124# endif
125# define PCRE_EXP_DEFN		__attribute__ ((visibility("default")))
126# define PCRE_EXP_DATA_DEFN	__attribute__ ((visibility("default")))
127#endif
128
129
130';
131
132file_put_contents('pcrelib/config.h', $prepend_config_h . file_get_contents('pcrelib/config.h'));
133
134
135echo "\nThe End :-)\n\n"
136
137?>
138