ruby_memprofiler_pprof 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +7 -0
  2. data/ext/ruby_memprofiler_pprof/backtrace.c +429 -0
  3. data/ext/ruby_memprofiler_pprof/collector.c +1055 -0
  4. data/ext/ruby_memprofiler_pprof/compat.c +182 -0
  5. data/ext/ruby_memprofiler_pprof/extconf.rb +72 -0
  6. data/ext/ruby_memprofiler_pprof/pprof.upb.c +170 -0
  7. data/ext/ruby_memprofiler_pprof/pprof.upb.h +848 -0
  8. data/ext/ruby_memprofiler_pprof/pprof_out.c +285 -0
  9. data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.c +11 -0
  10. data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.h +301 -0
  11. data/ext/ruby_memprofiler_pprof/strtab.c +391 -0
  12. data/ext/ruby_memprofiler_pprof/vendor/upb/BUILD +719 -0
  13. data/ext/ruby_memprofiler_pprof/vendor/upb/CONTRIBUTING.md +37 -0
  14. data/ext/ruby_memprofiler_pprof/vendor/upb/DESIGN.md +201 -0
  15. data/ext/ruby_memprofiler_pprof/vendor/upb/LICENSE +26 -0
  16. data/ext/ruby_memprofiler_pprof/vendor/upb/README.md +78 -0
  17. data/ext/ruby_memprofiler_pprof/vendor/upb/WORKSPACE +58 -0
  18. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/BUILD +53 -0
  19. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/amalgamate.py +129 -0
  20. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/build_defs.bzl +160 -0
  21. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/lua.BUILD +127 -0
  22. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/protobuf.patch +54 -0
  23. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/py_proto_library.bzl +137 -0
  24. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/python_downloads.bzl +84 -0
  25. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/system_python.bzl +101 -0
  26. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/upb_proto_library.bzl +388 -0
  27. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/workspace_deps.bzl +89 -0
  28. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/BUILD +252 -0
  29. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/BUILD.googleapis +54 -0
  30. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/benchmark.cc +333 -0
  31. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/build_defs.bzl +88 -0
  32. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/compare.py +118 -0
  33. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/descriptor.proto +888 -0
  34. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/descriptor_sv.proto +890 -0
  35. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/empty.proto +6 -0
  36. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/gen_protobuf_binary_cc.py +64 -0
  37. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/gen_synthetic_protos.py +118 -0
  38. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/gen_upb_binary_c.py +65 -0
  39. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/BUILD.bazel +102 -0
  40. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/README.md +23 -0
  41. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/build_defs.bzl +73 -0
  42. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/make_cmakelists.py +340 -0
  43. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/staleness_test.py +57 -0
  44. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/staleness_test_lib.py +186 -0
  45. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/render.py +43 -0
  46. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/style-guide.md +65 -0
  47. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/vs-cpp-protos.md +255 -0
  48. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/wrapping-upb.md +444 -0
  49. data/ext/ruby_memprofiler_pprof/vendor/upb/python/BUILD +216 -0
  50. data/ext/ruby_memprofiler_pprof/vendor/upb/python/convert.c +394 -0
  51. data/ext/ruby_memprofiler_pprof/vendor/upb/python/convert.h +63 -0
  52. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor.c +1694 -0
  53. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor.h +80 -0
  54. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_containers.c +704 -0
  55. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_containers.h +114 -0
  56. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_pool.c +650 -0
  57. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_pool.h +48 -0
  58. data/ext/ruby_memprofiler_pprof/vendor/upb/python/dist/BUILD.bazel +193 -0
  59. data/ext/ruby_memprofiler_pprof/vendor/upb/python/dist/dist.bzl +190 -0
  60. data/ext/ruby_memprofiler_pprof/vendor/upb/python/extension_dict.c +247 -0
  61. data/ext/ruby_memprofiler_pprof/vendor/upb/python/extension_dict.h +39 -0
  62. data/ext/ruby_memprofiler_pprof/vendor/upb/python/map.c +522 -0
  63. data/ext/ruby_memprofiler_pprof/vendor/upb/python/map.h +66 -0
  64. data/ext/ruby_memprofiler_pprof/vendor/upb/python/message.c +1909 -0
  65. data/ext/ruby_memprofiler_pprof/vendor/upb/python/message.h +101 -0
  66. data/ext/ruby_memprofiler_pprof/vendor/upb/python/minimal_test.py +183 -0
  67. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/BUILD +70 -0
  68. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/README.md +11 -0
  69. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/descriptor_database_test_wrapper.py +30 -0
  70. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/descriptor_pool_test_wrapper.py +45 -0
  71. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/descriptor_test_wrapper.py +46 -0
  72. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/generator_test_wrapper.py +30 -0
  73. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/json_format_test_wrapper.py +30 -0
  74. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/keywords_test_wrapper.py +30 -0
  75. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/message_factory_test_wrapper.py +37 -0
  76. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/message_test_wrapper.py +52 -0
  77. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/proto_builder_test_wrapper.py +32 -0
  78. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/pyproto_test_wrapper.bzl +36 -0
  79. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/reflection_test_wrapper.py +45 -0
  80. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/service_reflection_test_wrapper.py +30 -0
  81. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/symbol_database_test_wrapper.py +30 -0
  82. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/text_encoding_test_wrapper.py +30 -0
  83. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/text_format_test_wrapper.py +30 -0
  84. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/unknown_fields_test_wrapper.py +30 -0
  85. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/well_known_types_test_wrapper.py +36 -0
  86. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/wire_format_test_wrapper.py +30 -0
  87. data/ext/ruby_memprofiler_pprof/vendor/upb/python/protobuf.c +350 -0
  88. data/ext/ruby_memprofiler_pprof/vendor/upb/python/protobuf.h +230 -0
  89. data/ext/ruby_memprofiler_pprof/vendor/upb/python/py_extension.bzl +55 -0
  90. data/ext/ruby_memprofiler_pprof/vendor/upb/python/python_api.h +61 -0
  91. data/ext/ruby_memprofiler_pprof/vendor/upb/python/repeated.c +828 -0
  92. data/ext/ruby_memprofiler_pprof/vendor/upb/python/repeated.h +69 -0
  93. data/ext/ruby_memprofiler_pprof/vendor/upb/python/unknown_fields.c +404 -0
  94. data/ext/ruby_memprofiler_pprof/vendor/upb/python/unknown_fields.h +39 -0
  95. data/ext/ruby_memprofiler_pprof/vendor/upb/python/version_script.lds +6 -0
  96. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/LICENSE +32 -0
  97. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/README.google +9 -0
  98. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/console.lua +156 -0
  99. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/lunit.lua +725 -0
  100. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/BUILD +19 -0
  101. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/LICENSE +21 -0
  102. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/naive.c +92 -0
  103. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/range2-neon.c +157 -0
  104. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/range2-sse.c +170 -0
  105. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/utf8_range.h +9 -0
  106. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/BUILD.bazel +129 -0
  107. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/README.md +8 -0
  108. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/def.c +939 -0
  109. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/lua_proto_library.bzl +138 -0
  110. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/main.c +83 -0
  111. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/msg.c +1118 -0
  112. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/test.proto +69 -0
  113. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/test_upb.lua +846 -0
  114. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upb.c +258 -0
  115. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upb.h +132 -0
  116. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upb.lua +58 -0
  117. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upbc.cc +134 -0
  118. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/collections.c +192 -0
  119. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/collections.h +174 -0
  120. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/conformance_upb.c +346 -0
  121. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/conformance_upb_failures.txt +1 -0
  122. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode.c +1221 -0
  123. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode.h +94 -0
  124. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode_fast.c +1055 -0
  125. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode_fast.h +153 -0
  126. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode_internal.h +211 -0
  127. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/def.c +3262 -0
  128. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/def.h +414 -0
  129. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/def.hpp +438 -0
  130. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/empty.proto +1 -0
  131. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/encode.c +604 -0
  132. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/encode.h +71 -0
  133. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/fuzz/BUILD +13 -0
  134. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/fuzz/file_descriptor_parsenew_fuzzer.cc +43 -0
  135. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_decode.c +1509 -0
  136. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_decode.h +47 -0
  137. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_encode.c +776 -0
  138. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_encode.h +62 -0
  139. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table.c +1147 -0
  140. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table.h +189 -0
  141. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table.hpp +112 -0
  142. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors.c +363 -0
  143. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors.h +263 -0
  144. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors_internal.h +59 -0
  145. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors_test.cc +425 -0
  146. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_test.cc +230 -0
  147. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg.c +428 -0
  148. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg.h +114 -0
  149. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg_internal.h +836 -0
  150. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg_test.cc +491 -0
  151. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg_test.proto +195 -0
  152. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/port_def.inc +261 -0
  153. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/port_undef.inc +62 -0
  154. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/reflection.c +323 -0
  155. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/reflection.h +109 -0
  156. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/reflection.hpp +37 -0
  157. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/table.c +926 -0
  158. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/table_internal.h +385 -0
  159. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test.proto +74 -0
  160. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_cpp.cc +186 -0
  161. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_cpp.proto +12 -0
  162. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_generated_code.cc +977 -0
  163. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_table.cc +580 -0
  164. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/text_encode.c +472 -0
  165. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/text_encode.h +64 -0
  166. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb.c +362 -0
  167. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb.h +378 -0
  168. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb.hpp +115 -0
  169. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb_internal.h +68 -0
  170. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/BUILD +121 -0
  171. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/README.md +7 -0
  172. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/compare.c +300 -0
  173. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/compare.h +66 -0
  174. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/compare_test.cc +236 -0
  175. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto.c +572 -0
  176. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto.h +62 -0
  177. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_public_import_test.proto +32 -0
  178. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_regular_import_test.proto +36 -0
  179. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_test.cc +143 -0
  180. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_test.proto +119 -0
  181. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_weak_import_test.proto +28 -0
  182. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_wweak_import_test.proto +28 -0
  183. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields.c +311 -0
  184. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields.h +94 -0
  185. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields_test.cc +202 -0
  186. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields_test.proto +48 -0
  187. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/BUILD +78 -0
  188. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/common.cc +77 -0
  189. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/common.h +112 -0
  190. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/protoc-gen-upb.cc +1997 -0
  191. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/protoc-gen-upbdefs.cc +193 -0
  192. data/lib/ruby_memprofiler_pprof/atfork.rb +77 -0
  193. data/lib/ruby_memprofiler_pprof/block_flusher.rb +61 -0
  194. data/lib/ruby_memprofiler_pprof/file_flusher.rb +45 -0
  195. data/lib/ruby_memprofiler_pprof/profile_app.rb +30 -0
  196. data/lib/ruby_memprofiler_pprof/profile_data.rb +18 -0
  197. data/lib/ruby_memprofiler_pprof/version.rb +5 -0
  198. data/lib/ruby_memprofiler_pprof.rb +8 -0
  199. data/libexec/ruby_memprofiler_pprof_profile +16 -0
  200. metadata +257 -0
@@ -0,0 +1,160 @@
1
+ # Copyright (c) 2009-2021, Google LLC
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of Google LLC nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
19
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ """Internal rules for building upb."""
27
+
28
+ load(":upb_proto_library.bzl", "GeneratedSrcsInfo")
29
+
30
+ _DEFAULT_CPPOPTS = []
31
+ _DEFAULT_COPTS = []
32
+
33
+ # begin:github_only
34
+ _DEFAULT_CPPOPTS.extend([
35
+ "-Wextra",
36
+ # "-Wshorten-64-to-32", # not in GCC (and my Kokoro images doesn't have Clang)
37
+ "-Werror",
38
+ "-Wno-long-long",
39
+ ])
40
+ _DEFAULT_COPTS.extend([
41
+ "-std=c99",
42
+ "-pedantic",
43
+ "-Werror=pedantic",
44
+ "-Wall",
45
+ "-Wstrict-prototypes",
46
+ # GCC (at least) emits spurious warnings for this that cannot be fixed
47
+ # without introducing redundant initialization (with runtime cost):
48
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635
49
+ #"-Wno-maybe-uninitialized",
50
+ ])
51
+ # end:github_only
52
+
53
+ UPB_DEFAULT_CPPOPTS = select({
54
+ "//:windows": [],
55
+ "//conditions:default": _DEFAULT_CPPOPTS,
56
+ })
57
+
58
+ UPB_DEFAULT_COPTS = select({
59
+ "//:windows": [],
60
+ "//:fasttable_enabled_setting": ["-std=gnu99", "-DUPB_ENABLE_FASTTABLE"],
61
+ "//conditions:default": _DEFAULT_COPTS,
62
+ })
63
+
64
+ runfiles_init = """\
65
+ # --- begin runfiles.bash initialization v2 ---
66
+ # Copy-pasted from the Bazel Bash runfiles library v2.
67
+ set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash
68
+ source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \
69
+ source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \
70
+ source "$0.runfiles/$f" 2>/dev/null || \
71
+ source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
72
+ source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
73
+ { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
74
+ # --- end runfiles.bash initialization v2 ---
75
+ """
76
+
77
+ def _get_real_short_path(file):
78
+ # For some reason, files from other archives have short paths that look like:
79
+ # ../com_google_protobuf/google/protobuf/descriptor.proto
80
+ short_path = file.short_path
81
+ if short_path.startswith("../"):
82
+ second_slash = short_path.index("/", 3)
83
+ short_path = short_path[second_slash + 1:]
84
+ return short_path
85
+
86
+ def _get_real_root(file):
87
+ real_short_path = _get_real_short_path(file)
88
+ return file.path[:-len(real_short_path) - 1]
89
+
90
+ def _get_real_roots(files):
91
+ roots = {}
92
+ for file in files:
93
+ real_root = _get_real_root(file)
94
+ if real_root:
95
+ roots[real_root] = True
96
+ return roots.keys()
97
+
98
+ def make_shell_script(name, contents, out):
99
+ contents = contents.replace("$", "$$")
100
+ native.genrule(
101
+ name = "gen_" + name,
102
+ outs = [out],
103
+ cmd = "(cat <<'HEREDOC'\n%s\nHEREDOC\n) > $@" % contents,
104
+ )
105
+
106
+ # upb_amalgamation() rule, with file_list aspect.
107
+
108
+ SrcList = provider(
109
+ fields = {
110
+ "srcs": "list of srcs",
111
+ },
112
+ )
113
+
114
+ def _file_list_aspect_impl(target, ctx):
115
+ if GeneratedSrcsInfo in target:
116
+ srcs = target[GeneratedSrcsInfo]
117
+ return [SrcList(srcs = srcs.srcs + srcs.hdrs)]
118
+
119
+ srcs = []
120
+ for src in ctx.rule.attr.srcs:
121
+ srcs += src.files.to_list()
122
+ for hdr in ctx.rule.attr.hdrs:
123
+ srcs += hdr.files.to_list()
124
+ for hdr in ctx.rule.attr.textual_hdrs:
125
+ srcs += hdr.files.to_list()
126
+ return [SrcList(srcs = srcs)]
127
+
128
+ _file_list_aspect = aspect(
129
+ implementation = _file_list_aspect_impl,
130
+ )
131
+
132
+ def _upb_amalgamation(ctx):
133
+ inputs = []
134
+ for lib in ctx.attr.libs:
135
+ inputs += lib[SrcList].srcs
136
+ srcs = [src for src in inputs if src.path.endswith("c")]
137
+ ctx.actions.run(
138
+ inputs = inputs,
139
+ outputs = ctx.outputs.outs,
140
+ arguments = [ctx.bin_dir.path + "/", ctx.attr.prefix] + [f.path for f in srcs] + ["-I" + root for root in _get_real_roots(inputs)],
141
+ progress_message = "Making amalgamation",
142
+ executable = ctx.executable._amalgamator,
143
+ )
144
+ return []
145
+
146
+ upb_amalgamation = rule(
147
+ attrs = {
148
+ "_amalgamator": attr.label(
149
+ executable = True,
150
+ cfg = "exec",
151
+ default = "//bazel:amalgamate",
152
+ ),
153
+ "prefix": attr.string(
154
+ default = "",
155
+ ),
156
+ "libs": attr.label_list(aspects = [_file_list_aspect]),
157
+ "outs": attr.output_list(),
158
+ },
159
+ implementation = _upb_amalgamation,
160
+ )
@@ -0,0 +1,127 @@
1
+ # Copyright (c) 2009-2021, Google LLC
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of Google LLC nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
19
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ package(
27
+ default_visibility = ["//visibility:public"],
28
+ )
29
+
30
+ cc_library(
31
+ name = "liblua_headers",
32
+ hdrs = [
33
+ "src/lauxlib.h",
34
+ "src/lua.h",
35
+ "src/lua.hpp",
36
+ "src/luaconf.h",
37
+ "src/lualib.h",
38
+ ],
39
+ defines = ["LUA_USE_LINUX"],
40
+ includes = ["src"],
41
+ )
42
+
43
+ cc_library(
44
+ name = "liblua",
45
+ srcs = [
46
+ "src/lapi.c",
47
+ "src/lapi.h",
48
+ "src/lauxlib.c",
49
+ "src/lauxlib.h",
50
+ "src/lbaselib.c",
51
+ "src/lbitlib.c",
52
+ "src/lcode.c",
53
+ "src/lcode.h",
54
+ "src/lcorolib.c",
55
+ "src/lctype.c",
56
+ "src/lctype.h",
57
+ "src/ldblib.c",
58
+ "src/ldebug.c",
59
+ "src/ldebug.h",
60
+ "src/ldo.c",
61
+ "src/ldo.h",
62
+ "src/ldump.c",
63
+ "src/lfunc.c",
64
+ "src/lfunc.h",
65
+ "src/lgc.c",
66
+ "src/lgc.h",
67
+ "src/linit.c",
68
+ "src/liolib.c",
69
+ "src/llex.c",
70
+ "src/llex.h",
71
+ "src/llimits.h",
72
+ "src/lmathlib.c",
73
+ "src/lmem.c",
74
+ "src/lmem.h",
75
+ "src/loadlib.c",
76
+ "src/lobject.c",
77
+ "src/lobject.h",
78
+ "src/lopcodes.c",
79
+ "src/lopcodes.h",
80
+ "src/loslib.c",
81
+ "src/lparser.c",
82
+ "src/lparser.h",
83
+ "src/lstate.c",
84
+ "src/lstate.h",
85
+ "src/lstring.c",
86
+ "src/lstring.h",
87
+ "src/lstrlib.c",
88
+ "src/ltable.c",
89
+ "src/ltable.h",
90
+ "src/ltablib.c",
91
+ "src/ltm.c",
92
+ "src/ltm.h",
93
+ "src/lundump.c",
94
+ "src/lundump.h",
95
+ "src/lvm.c",
96
+ "src/lvm.h",
97
+ "src/lzio.c",
98
+ "src/lzio.h",
99
+ ],
100
+ hdrs = [
101
+ "src/lauxlib.h",
102
+ "src/lua.h",
103
+ "src/lua.hpp",
104
+ "src/luaconf.h",
105
+ "src/lualib.h",
106
+ ],
107
+ defines = ["LUA_USE_LINUX"],
108
+ includes = ["src"],
109
+ linkopts = [
110
+ "-lm",
111
+ "-ldl",
112
+ ],
113
+ )
114
+
115
+ cc_binary(
116
+ name = "lua",
117
+ srcs = [
118
+ "src/lua.c",
119
+ ],
120
+ linkopts = [
121
+ "-lreadline",
122
+ "-rdynamic",
123
+ ],
124
+ deps = [
125
+ ":liblua",
126
+ ],
127
+ )
@@ -0,0 +1,54 @@
1
+ --- BUILD.bazel
2
+ +++ BUILD.bazel
3
+ @@ -896,6 +896,10 @@ py_library(
4
+ [
5
+ "python/google/protobuf/**/*.py",
6
+ ],
7
+ + exclude = [
8
+ + "python/google/protobuf/internal/*_test.py",
9
+ + "python/google/protobuf/internal/test_util.py",
10
+ + ]
11
+ ),
12
+ imports = ["python"],
13
+ srcs_version = "PY2AND3",
14
+
15
+ --- python/google/protobuf/internal/test_util.py
16
+ +++ python/google/protobuf/internal/test_util.py
17
+ @@ -39,6 +39,7 @@ __author__ = 'robinson@google.com (Will Robinson)'
18
+ import numbers
19
+ import operator
20
+ import os.path
21
+ +import pathlib
22
+
23
+ from google.protobuf import unittest_import_pb2
24
+ from google.protobuf import unittest_pb2
25
+ @@ -617,17 +618,22 @@ def ExpectAllFieldsSet(test_case, message):
26
+ message.default_import_enum)
27
+
28
+
29
+ +def _SearchUp(path, filename):
30
+ + path = pathlib.Path(path).resolve()
31
+ + for parent in [path] + list(path.parents):
32
+ + file_path = parent / ('src/google/protobuf/testdata/' + filename)
33
+ + if file_path.exists():
34
+ + # Found it. Load the golden file from the testdata directory.
35
+ + return file_path.open('rb')
36
+ + return None
37
+ +
38
+ def GoldenFile(filename):
39
+ """Finds the given golden file and returns a file object representing it."""
40
+
41
+ # Search up the directory tree looking for the C++ protobuf source code.
42
+ - path = '.'
43
+ - while os.path.exists(path):
44
+ - if os.path.exists(os.path.join(path, 'src/google/protobuf')):
45
+ - # Found it. Load the golden file from the testdata directory.
46
+ - full_path = os.path.join(path, 'src/google/protobuf/testdata', filename)
47
+ - return open(full_path, 'rb')
48
+ - path = os.path.join(path, '..')
49
+ + f = _SearchUp('.', filename) or _SearchUp(__file__, filename)
50
+ + if f:
51
+ + return f
52
+
53
+ # Search internally.
54
+ path = '.'
@@ -0,0 +1,137 @@
1
+ # Copyright (c) 2009-2021, Google LLC
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of Google LLC nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
19
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ """An implementation of py_proto_library().
27
+
28
+ We have to implement this ourselves because there is currently no reasonable
29
+ py_proto_library() rule available for Bazel.
30
+
31
+ Our py_proto_library() is similar to how a real py_proto_library() should work.
32
+ But it hasn't been deeply tested or reviewed, and upb should not be in the
33
+ business of vending py_proto_library(), so we keep it private to upb.
34
+ """
35
+
36
+ load("@bazel_skylib//lib:paths.bzl", "paths")
37
+
38
+ # begin:github_only
39
+ load("@rules_proto//proto:defs.bzl", "ProtoInfo")
40
+ # end:github_only
41
+
42
+ # Generic support code #########################################################
43
+
44
+ def _get_real_short_path(file):
45
+ # For some reason, files from other archives have short paths that look like:
46
+ # ../com_google_protobuf/google/protobuf/descriptor.proto
47
+ short_path = file.short_path
48
+ if short_path.startswith("../"):
49
+ second_slash = short_path.index("/", 3)
50
+ short_path = short_path[second_slash + 1:]
51
+
52
+ # Sometimes it has another few prefixes like:
53
+ # _virtual_imports/any_proto/google/protobuf/any.proto
54
+ # benchmarks/_virtual_imports/100_msgs_proto/benchmarks/100_msgs.proto
55
+ # We want just google/protobuf/any.proto.
56
+ virtual_imports = "_virtual_imports/"
57
+ if virtual_imports in short_path:
58
+ short_path = short_path.split(virtual_imports)[1].split("/", 1)[1]
59
+ return short_path
60
+
61
+ def _get_real_root(file):
62
+ real_short_path = _get_real_short_path(file)
63
+ return file.path[:-len(real_short_path) - 1]
64
+
65
+ def _generate_output_file(ctx, src, extension):
66
+ real_short_path = _get_real_short_path(src)
67
+ real_short_path = paths.relativize(real_short_path, ctx.label.package)
68
+ output_filename = paths.replace_extension(real_short_path, extension)
69
+ ret = ctx.actions.declare_file(output_filename)
70
+ return ret
71
+
72
+ # py_proto_library() ###########################################################
73
+
74
+ def _py_proto_library_rule_impl(ctx):
75
+ # A real py_proto_library() should enforce this constraint.
76
+ # We don't bother for now, since it saves us some effort not to.
77
+ #
78
+ # if len(ctx.attr.deps) != 1:
79
+ # fail("only one deps dependency allowed.")
80
+
81
+ files = []
82
+ for dep in ctx.attr.deps:
83
+ files += dep[PyInfo].transitive_sources.to_list()
84
+ return [
85
+ DefaultInfo(files = depset(direct = files)),
86
+ ]
87
+
88
+ def _py_proto_library_aspect_impl(target, ctx):
89
+ proto_info = target[ProtoInfo]
90
+ proto_sources = proto_info.direct_sources
91
+ srcs = [_generate_output_file(ctx, name, "_pb2.py") for name in proto_sources]
92
+ transitive_sets = proto_info.transitive_descriptor_sets.to_list()
93
+ ctx.actions.run(
94
+ inputs = depset(
95
+ direct = [proto_info.direct_descriptor_set],
96
+ transitive = [proto_info.transitive_descriptor_sets],
97
+ ),
98
+ outputs = srcs,
99
+ executable = ctx.executable._protoc,
100
+ arguments = [
101
+ "--python_out=" + _get_real_root(srcs[0]),
102
+ "--descriptor_set_in=" + ctx.configuration.host_path_separator.join([f.path for f in transitive_sets]),
103
+ ] +
104
+ [_get_real_short_path(file) for file in proto_sources],
105
+ progress_message = "Generating Python protos for :" + ctx.label.name,
106
+ )
107
+ outs_depset = depset(srcs)
108
+ return [
109
+ PyInfo(transitive_sources = outs_depset),
110
+ ]
111
+
112
+ _py_proto_library_aspect = aspect(
113
+ attrs = {
114
+ "_protoc": attr.label(
115
+ executable = True,
116
+ cfg = "exec",
117
+ default = "@com_google_protobuf//:protoc",
118
+ ),
119
+ },
120
+ implementation = _py_proto_library_aspect_impl,
121
+ provides = [
122
+ PyInfo,
123
+ ],
124
+ attr_aspects = ["deps"],
125
+ )
126
+
127
+ py_proto_library = rule(
128
+ output_to_genfiles = True,
129
+ implementation = _py_proto_library_rule_impl,
130
+ attrs = {
131
+ "deps": attr.label_list(
132
+ aspects = [_py_proto_library_aspect],
133
+ allow_rules = ["proto_library"],
134
+ providers = [ProtoInfo],
135
+ ),
136
+ },
137
+ )
@@ -0,0 +1,84 @@
1
+ """Helper methods to download different python versions"""
2
+
3
+ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
4
+
5
+ limited_api_build_file = """
6
+ cc_library(
7
+ name = "python_headers",
8
+ hdrs = glob(["**/Include/**/*.h"]),
9
+ strip_include_prefix = "Python-{}/Include",
10
+ visibility = ["//visibility:public"],
11
+ )
12
+ """
13
+
14
+ def python_source_archive(name, sha256):
15
+ """Helper method to create a python_headers target that will work for linux and macos.
16
+
17
+ Args:
18
+ name: The name of the target, should be in the form python_{VERSION}
19
+ sha256: The sha256 of the python package for the specified version
20
+ """
21
+ version = name.split("-")[1]
22
+ http_archive(
23
+ name = name,
24
+ urls = [
25
+ "https://www.python.org/ftp/python/{0}/Python-{0}.tgz"
26
+ .format(version),
27
+ ],
28
+ sha256 = sha256,
29
+ build_file_content = limited_api_build_file.format(version),
30
+ patch_cmds = [
31
+ "echo '#define SIZEOF_WCHAR_T 4' > Python-{}/Include/pyconfig.h"
32
+ .format(version),
33
+ ],
34
+ )
35
+
36
+ nuget_build_file = """
37
+ cc_import(
38
+ name = "python_full_api",
39
+ hdrs = glob(["**/*.h"]),
40
+ shared_library = "python{0}.dll",
41
+ interface_library = "libs/python{0}.lib",
42
+ visibility = ["@upb//python:__pkg__"],
43
+ )
44
+
45
+ cc_import(
46
+ name = "python_limited_api",
47
+ hdrs = glob(["**/*.h"]),
48
+ shared_library = "python{1}.dll",
49
+ interface_library = "libs/python{1}.lib",
50
+ visibility = ["@upb//python:__pkg__"],
51
+ )
52
+ """
53
+
54
+ def python_nuget_package(name, sha256):
55
+ """Helper method to create full and limited api dependencies for windows using nuget
56
+
57
+ Args:
58
+ name: The name of the target, should be in the form nuget_python_{CPU}_{VERSION}
59
+ sha256: The sha256 of the nuget package for that version
60
+ """
61
+ cpu = name.split("_")[2]
62
+ version = name.split("_")[3]
63
+
64
+ full_api_lib_number = version.split(".")[0] + version.split(".")[1]
65
+ limited_api_lib_number = version.split(".")[0]
66
+
67
+ folder_name_dict = {
68
+ "i686": "pythonx86",
69
+ "x86-64": "python",
70
+ }
71
+
72
+ http_archive(
73
+ name = name,
74
+ urls = [
75
+ "https://www.nuget.org/api/v2/package/{}/{}"
76
+ .format(folder_name_dict[cpu], version),
77
+ ],
78
+ sha256 = sha256,
79
+ strip_prefix = "tools",
80
+ build_file_content =
81
+ nuget_build_file.format(full_api_lib_number, limited_api_lib_number),
82
+ type = "zip",
83
+ patch_cmds = ["cp -r include/* ."],
84
+ )
@@ -0,0 +1,101 @@
1
+ # Copyright (c) 2009-2021, Google LLC
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of Google LLC nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
19
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+
26
+ """Repository rule for using Python 3.x headers from the system."""
27
+
28
+ _build_file = """
29
+ load("@bazel_tools//tools/python:toolchain.bzl", "py_runtime_pair")
30
+
31
+ cc_library(
32
+ name = "python_headers",
33
+ hdrs = glob(["python/**/*.h"]),
34
+ includes = ["python"],
35
+ visibility = ["//visibility:public"],
36
+ )
37
+
38
+ py_runtime(
39
+ name = "py3_runtime",
40
+ interpreter_path = "{}",
41
+ python_version = "PY3",
42
+ )
43
+
44
+ py_runtime_pair(
45
+ name = "runtime_pair",
46
+ py3_runtime = ":py3_runtime",
47
+ )
48
+
49
+ toolchain(
50
+ name = "python_toolchain",
51
+ toolchain = ":runtime_pair",
52
+ toolchain_type = "@rules_python//python:toolchain_type",
53
+ )
54
+ """
55
+
56
+ def _get_python_version(repository_ctx):
57
+ py_program = "import sys; print(str(sys.version_info.major) + str(sys.version_info.minor))"
58
+ result = repository_ctx.execute(["python3", "-c", py_program])
59
+ return (result.stdout).strip()
60
+
61
+ def _get_config_var(repository_ctx, name):
62
+ py_program = "import sysconfig; print(sysconfig.get_config_var('%s'), end='')"
63
+ result = repository_ctx.execute(["python3", "-c", py_program % (name)])
64
+ if result.return_code != 0:
65
+ return None
66
+ return result.stdout
67
+
68
+ def _python_headers_impl(repository_ctx):
69
+ path = _get_config_var(repository_ctx, "INCLUDEPY")
70
+ if not path:
71
+ # buildifier: disable=print
72
+ print("WARNING: no system python available, builds against system python will fail")
73
+ repository_ctx.file("BUILD.bazel", "")
74
+ repository_ctx.file("version.bzl", "SYSTEM_PYTHON_VERSION = None")
75
+ return
76
+ repository_ctx.symlink(path, "python")
77
+ python3 = repository_ctx.which("python3")
78
+ python_version = _get_python_version(repository_ctx)
79
+ repository_ctx.file("BUILD.bazel", _build_file.format(python3))
80
+ repository_ctx.file("version.bzl", "SYSTEM_PYTHON_VERSION = '{}'".format(python_version))
81
+
82
+ # The system_python() repository rule exposes Python headers from the system.
83
+ #
84
+ # In WORKSPACE:
85
+ # system_python(
86
+ # name = "system_python_repo",
87
+ # )
88
+ #
89
+ # This repository exposes a single rule that you can depend on from BUILD:
90
+ # cc_library(
91
+ # name = "foobar",
92
+ # srcs = ["foobar.cc"],
93
+ # deps = ["@system_python_repo//:python_headers"],
94
+ # )
95
+ #
96
+ # The headers should correspond to the version of python obtained by running
97
+ # the `python3` command on the system.
98
+ system_python = repository_rule(
99
+ implementation = _python_headers_impl,
100
+ local = True,
101
+ )