Protocol Buffers - Google's data interchange format (grpc依赖) https://developers.google.com/protocol-buffers/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

62 lines
1.8 KiB

<?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");
?>