diff --git a/BUILD.bazel b/BUILD.bazel index 6db748d5dd..dbf1f10679 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -584,4 +584,4 @@ filegroup( name = "version_json", srcs = ["version.json"], visibility=["//visibility:public"], -) \ No newline at end of file +) diff --git a/php/ext/google/protobuf/BUILD.bazel b/php/ext/google/protobuf/BUILD.bazel index b6b3fe712a..5c638cb243 100644 --- a/php/ext/google/protobuf/BUILD.bazel +++ b/php/ext/google/protobuf/BUILD.bazel @@ -1,76 +1,54 @@ # Protobuf PHP extension (PECL) +load("@rules_pkg//:mappings.bzl", "pkg_files", "pkg_filegroup", "strip_prefix") filegroup( name = "template_package_xml", srcs = ["template_package.xml"], ) -filegroup( - name = "src_files", - srcs = glob( - [ - "**/*.m4", - "**/*.c", - "**/*.h", - "**/*.inc" - ], - exclude = [ - "tests/**", - ] - ), +pkg_files( + name = "utf8_range_files", + srcs = [ + "@utf8_range//:utf8_range_srcs", + "@utf8_range//:LICENSE", + ], ) -filegroup( - name = "doc_files", +pkg_files( + name = "protobuf_files", srcs = glob([ - "**/LICENSE", - ]) + "*.h", + "*.c", + ]) + [ + "//:LICENSE", + "config.m4", + "wkt.inc", + ], +) + +pkg_filegroup( + name = "release_files", + srcs = [ + ":protobuf_files", + ":utf8_range_files", + ], ) genrule( name = "pecl_dist", srcs = [ - ":src_files", - ":doc_files", + ":release_files", ":template_package_xml", "//:version_json", ], outs = ["package.xml"], - cmd = """ - DATE=$$(date +%Y-%m-%d) - TIME=$$(date +%H:%M:%S) - - php_version_json=$$(cat $(location //:version_json) | python -c "import json, sys; versions=json.load(sys.stdin); print(versions.popitem()[1]['languages']['php'])") - php_version_array=($${php_version_json//-rc/ }) - api_version=$${php_version_array[0]} - if [ $${#php_version_array[@]} -eq 2 ]; then - rc=$${php_version_array[1]} - release_version=$${api_version}RC$${rc} - stability='beta' - else - release_version=$${api_version} - stability='stable' - fi - - FILE='\\n' - files="\\n" - for file in $$(find -L $(locations :src_files) -type f); do - name=$$(echo $$file | sed -e 's|php/ext/google/protobuf/||') - files+=' '$$(echo $$FILE | sed -e "s;NAME;$${name};" | sed -e "s;ROLE;src;") - done - for file in $$(find -L $(locations :doc_files) -type f); do - name=$$(echo $$file | sed -e 's|php/ext/google/protobuf/||') - files+=' '$$(echo $$FILE | sed -e "s;NAME;$${name};" | sed -e "s;ROLE;doc;") - done - - cat $(location :template_package_xml) | - sed -e "s;TEMPLATE_DATE;$${DATE};" | - sed -e "s;TEMPLATE_TIME;$${TIME};" | - sed -e "s;TEMPLATE_PHP_RELEASE;$${release_version};" | - sed -e "s;TEMPLATE_PHP_API;$${api_version};" | - sed -e "s;TEMPLATE_PHP_STABILITY;$${stability};" | - sed -e "s;TEMPLATE_FILES;$${files};" - > "$@" - """ -) \ No newline at end of file + cmd = " ".join([ + "$(location :generate_package_xml.sh)", + "$(location :template_package_xml)", + "$(location //:version_json)", + "$$(echo $(locations :release_files) | sed -e 's; ;,;g')", + "$(location package.xml)" + ]), + tools = ["generate_package_xml.sh"], +) diff --git a/php/ext/google/protobuf/generate_package_xml.sh b/php/ext/google/protobuf/generate_package_xml.sh new file mode 100755 index 0000000000..886e1cc76a --- /dev/null +++ b/php/ext/google/protobuf/generate_package_xml.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +template_package_xml=$1 +version_json=$2 +release_files=$3 +out=$4 + +date=$(date +%Y-%m-%d) +time=$(date +%H:%M:%S) + +php_version_json=$( + cat $version_json | + python -c "import json, sys; v=json.load(sys.stdin); print(v.popitem()[1]['languages']['php'])") +php_version_array=(${php_version_json//-rc/ }) +api_version=${php_version_array[0]} +if [ ${#php_version_array[@]} -eq 2 ]; then + rc=${php_version_array[1]} + release_version=${api_version}RC${rc} + stability='beta' +else + release_version=${api_version} + stability='stable' +fi + +files="\\n" +for file in ${release_files//,/ }; do + name=$(echo $file | sed -e 's;php/ext/google/protobuf/;;') + if [[ $name =~ LICENSE$ ]]; then + role='doc' + else + role='src' + fi + files+=" \\n" +done + +cat $template_package_xml | +sed -e "s;TEMPLATE_DATE;${date};" | +sed -e "s;TEMPLATE_TIME;${time};" | +sed -e "s;TEMPLATE_PHP_RELEASE;${release_version};" | +sed -e "s;TEMPLATE_PHP_API;${api_version};" | +sed -e "s;TEMPLATE_PHP_STABILITY;${stability};g" | +sed -e "s;TEMPLATE_FILES;${files};" > $out