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