| <?php |
| |
| $cwd = dirname($argv[0]) . "/../../../src"; |
| chdir($cwd); |
| |
| $cmd = "grep -r -l 'Generated by the protocol buffer' * | grep 'php$' | grep -v Internal"; |
| $handle = popen($cmd, 'r'); |
| $filenames = explode("\n", stream_get_contents($handle)); |
| array_pop($filenames); // empty string after last '\n' |
| $filenames[] = "Google/Protobuf/DescriptorPool.php"; |
| $output = "../ext/google/protobuf2/bundled_php.c"; |
| |
| function stripSuffix($str, $suffix) { |
| return substr($str, 0, strlen($str) - strlen($suffix)); |
| } |
| |
| function toClassName($filename) { |
| # Google/Protobuf/BoolValue.php -> Google\\Protobuf\\BoolValue |
| $ret = stripSuffix($filename, ".php"); |
| return str_replace("/", "\\\\", $ret); |
| } |
| |
| function toCSymbolName($filename) { |
| # Google/Protobuf/BoolValue.php -> Google__Protobuf__BoolValue |
| $ret = stripSuffix($filename, ".php"); |
| return str_replace("/", "__", $ret); |
| } |
| |
| $f = fopen($output, "w"); |
| |
| fwrite($f, "#include \"bundled_php.h\"\n"); |
| fwrite($f, "#include \"stdlib.h\"\n"); |
| |
| foreach ($filenames as $filename) { |
| print("Reading $filename...\n"); |
| $contents = file_get_contents($filename); |
| $contents = substr($contents, 5); // Strip <?php |
| $c_symbol_name = toCSymbolName($filename); |
| fwrite($f, "static const char {$c_symbol_name}[] = {"); |
| for ($i = 0; $i < strlen($contents); $i++) { |
| if ($i % 10 == 0) { |
| fwrite($f, "\n"); |
| } |
| fprintf($f, " 0x%02x,", ord($contents[$i])); |
| } |
| fwrite($f, "0};\n"); |
| } |
| |
| fwrite($f, "static BundledPhp_File php[] = {\n"); |
| foreach ($filenames as $filename) { |
| $class_name = toClassName($filename); |
| $c_symbol_name = toCSymbolName($filename); |
| fwrite($f, " {\"$class_name\", $c_symbol_name},\n"); |
| } |
| |
| fwrite($f, " {NULL, NULL}\n"); |
| fwrite($f, "};\n"); |
| fwrite($f, "BundledPhp_File *bundled_files = &php[0];\n"); |
| fclose($f); |
| |
| print("Wrote $output\n"); |
| ?> |