| # Protobuf PHP runtime | 
 | # | 
 | # See also code generation logic under /src/google/protobuf/compiler/php. | 
 |  | 
 | load("@rules_pkg//:mappings.bzl", "pkg_files", "pkg_filegroup", "strip_prefix") | 
 | load("@rules_pkg//:pkg.bzl", "pkg_tar") | 
 | load("@upb//cmake:build_defs.bzl", "staleness_test") | 
 | load("//build_defs:internal_shell.bzl", "inline_sh_binary") | 
 | load("//conformance:defs.bzl", "conformance_test") | 
 | load("//:protobuf_version.bzl", "PROTOBUF_PHP_VERSION", "PROTOC_VERSION") | 
 |  | 
 | filegroup( | 
 |     name = "source_files", | 
 |     visibility = [ | 
 |         "//conformance:__pkg__", | 
 |         "//php:__pkg__", | 
 |     ], | 
 |     srcs = glob([ | 
 |         "src/GPBMetadata/Google/Protobuf/**/*.php", | 
 |         "src/Google/Protobuf/**/*.php", | 
 |     ]) + [ | 
 |         "composer.json", | 
 |         ":php_ext_source_files", | 
 |     ], | 
 | ) | 
 |  | 
 | ################################################################################ | 
 | # PHP Extension | 
 | ################################################################################ | 
 |  | 
 | inline_sh_binary( | 
 |     name = "build_extension", | 
 |     cmd = """ | 
 |         mkdir -p php/ext/google/protobuf/third_party/utf8_range | 
 |         cp external/utf8_range/* php/ext/google/protobuf/third_party/utf8_range | 
 |  | 
 |         pushd  php/ext/google/protobuf | 
 |         phpize | 
 |         ./configure --with-php-config=$$(which php-config) | 
 |         make | 
 |         popd | 
 |     """, | 
 | ) | 
 |  | 
 | genrule( | 
 |     name = "extension", | 
 |     srcs = [ | 
 |         ":source_files", | 
 |         "@utf8_range//:utf8_range_srcs", | 
 |     ], | 
 |     tools = [":build_extension"], | 
 |     outs = ["protobuf.so"], | 
 |     cmd = """ | 
 |         ./$(execpath :build_extension) $@ | 
 |         cp php/ext/google/protobuf/modules/protobuf.so $(OUTS) | 
 |     """, | 
 |     visibility = ["//visibility:public"], | 
 | ) | 
 |  | 
 | ################################################################################ | 
 | # Tests | 
 | ################################################################################ | 
 |  | 
 | conformance_test( | 
 |     name = "conformance_test", | 
 |     failure_list = "//conformance:failure_list_php.txt", | 
 |     testee = "//conformance:conformance_php", | 
 |     text_format_failure_list = "//conformance:text_format_failure_list_php.txt", | 
 |     target_compatible_with = select({ | 
 |         "@platforms//os:osx": ["@platforms//:incompatible"], | 
 |         "//conditions:default": [], | 
 |     }), | 
 | ) | 
 |  | 
 | conformance_test( | 
 |     name = "conformance_test_c", | 
 |     failure_list = "//conformance:failure_list_php_c.txt", | 
 |     testee = "//conformance:conformance_php_c", | 
 |     text_format_failure_list = "//conformance:text_format_failure_list_php.txt", | 
 |     target_compatible_with = select({ | 
 |         "@platforms//os:osx": [], | 
 |         "//conditions:default": ["@platforms//:incompatible"], | 
 |     }), | 
 | ) | 
 |  | 
 | genrule( | 
 |     name = "copy_php_amalgamation_h", | 
 |     srcs = ["@upb//:php-upb.h"], | 
 |     outs = ["generated-in/ext/google/protobuf/php-upb.h"], | 
 |     cmd = "cp $< $@", | 
 | ) | 
 |  | 
 | genrule( | 
 |     name = "copy_php_amalgamation_c", | 
 |     srcs = ["@upb//:php-upb.c"], | 
 |     outs = ["generated-in/ext/google/protobuf/php-upb.c"], | 
 |     cmd = "cp $< $@", | 
 | ) | 
 |  | 
 | staleness_test( | 
 |     name = "test_amalgamation_staleness", | 
 |     outs = [ | 
 |         "ext/google/protobuf/php-upb.h", | 
 |         "ext/google/protobuf/php-upb.c", | 
 |     ], | 
 |     generated_pattern = "generated-in/%s", | 
 | ) | 
 |  | 
 | ################################################################################ | 
 | # Distribution files | 
 | ################################################################################ | 
 |  | 
 | pkg_files( | 
 |     name = "dist_files", | 
 |     srcs = glob([ | 
 |         "ext/google/protobuf/**/*", | 
 |         "tests/*.php", | 
 |         "tests/*.sh", | 
 |         "tests/generated_previous/**/*.php", | 
 |         "tests/proto/**/*.proto", | 
 |         "tests/proto_previous/*.proto", | 
 |     ]) + [ | 
 |         ":source_files", | 
 |         "BUILD.bazel", | 
 |         "README.md", | 
 |         "REFCOUNTING.md", | 
 |         "composer.json", | 
 |         "generate_descriptor_protos.sh", | 
 |         "generate_test_protos.sh", | 
 |         "release.sh", | 
 |         "src/phpdoc.dist.xml", | 
 |         "tests/valgrind.supp", | 
 |     ], | 
 |     prefix = "php", | 
 |     strip_prefix = strip_prefix.from_pkg(""), | 
 |     visibility = ["//pkg:__pkg__"], | 
 | ) | 
 |  | 
 | ################################################################################ | 
 | # PECL .tgz Release | 
 | ################################################################################ | 
 |  | 
 | pkg_files( | 
 |   name = "php_ext_source_files", | 
 |   srcs = glob([ | 
 |     "ext/google/protobuf/*.h", | 
 |     "ext/google/protobuf/*.c", | 
 |   ]) + [ | 
 |     "//:LICENSE", | 
 |     "ext/google/protobuf/config.m4", | 
 |     "ext/google/protobuf/wkt.inc", | 
 |   ], | 
 | ) | 
 |  | 
 | pkg_files( | 
 |   name = "utf8_range_files", | 
 |   srcs = [ | 
 |     "@utf8_range//:utf8_range_srcs", | 
 |     "@utf8_range//:LICENSE", | 
 |   ], | 
 |   prefix = "third_party/utf8_range", | 
 | ) | 
 |  | 
 | pkg_filegroup( | 
 |   name = "pecl_release_files", | 
 |   srcs = [ | 
 |     ":php_ext_source_files", | 
 |     ":utf8_range_files", | 
 |   ], | 
 |   prefix = "protobuf-%s" % PROTOBUF_PHP_VERSION, | 
 | ) | 
 |  | 
 | # PECL .tgz without package.xml | 
 | pkg_tar( | 
 |   name = "release_without_package", | 
 |   extension = "tgz", | 
 |   srcs = [ | 
 |     ":pecl_release_files", | 
 |   ], | 
 |   out = "release_without_package.tgz", | 
 | ) | 
 |  | 
 | # Generate PECL package.xml | 
 | genrule( | 
 |     name = "generate_package_xml", | 
 |     srcs = [ | 
 |       ":release_without_package", | 
 |       "ext/google/protobuf/template_package.xml", | 
 |     ], | 
 |     outs = ["package.xml"], | 
 |     cmd = " ".join([ | 
 |       "$(location ext/google/protobuf/generate_package_xml.sh)", | 
 |       "$(location ext/google/protobuf/template_package.xml)", | 
 |       PROTOBUF_PHP_VERSION, | 
 |       PROTOC_VERSION, | 
 |       "$$(tar -tf $(location :release_without_package) | sed -z -e 's;\\n;,;g')", | 
 |       "$(location package.xml)" | 
 |     ]), | 
 |     tools = ["ext/google/protobuf/generate_package_xml.sh"], | 
 | ) | 
 |  | 
 | pkg_tar( | 
 |   name = "release", | 
 |   extension = "tgz", | 
 |   srcs = [ | 
 |     ":pecl_release_files", | 
 |     ":generate_package_xml", | 
 |   ], | 
 |   out = "protobuf-%s.tgz" % PROTOBUF_PHP_VERSION, | 
 | ) |