bazel-contrib / bazel-contrib/rules_python
Fixing search path of boostrapped Python toolchain dylib is not hermetic
- 主要言語
- Starlark
- スター
- 688
- フォーク
- 721
- 平均マージ
- 15時間 7分
- マージ済み PR(30日)
- 76
説明
Change #2089 breaks multi-platform builds. The contents of `libpython.dylib` differ depending on which host machine runs the build, since `if "darwin" in platform and "osx" == repo_utils.get_platforms_os_name(rctx)` checks the host machine not the execution platform. This change, if it has to happen conditionally, needs to happen in a build target instead.
```
$ diffoscope /tmp/local.libpython3.11.dylib /tmp/remote.libpython3.11.dylib
--- /tmp/local.libpython3.11.dylib
+++ /tmp/remote.libpython3.11.dylib
├── arm64
│ ├── otool -arch arm64 -h {}
│ │ @@ -1,3 +1,3 @@
│ │ Mach header
│ │ magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
│ │ - 0xfeedfacf 16777228 0 0x00 6 32 4544 0x00100085
│ │ + 0xfeedfacf 16777228 0 0x00 6 32 4552 0x00100085
│ ├── otool -arch arm64 -L {}
│ │ @@ -1,8 +1,8 @@
│ │ - @rpath/libpython3.11.dylib (compatibility version 3.11.0, current version 3.11.0)
│ │ + /install/lib/libpython3.11.dylib (compatibility version 3.11.0, current version 3.11.0)
│ │ /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.61.1)
│ │ /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
│ │ /usr/lib/libpanel.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
│ │ /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 2202.0.0)
│ │ /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
│ │ /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 1296.60.3)
```
_Originally posted by @brentleyjones in https://github.com/bazel-contrib/rules_python/issues/2089#issuecomment-3234021683_
コントリビューションガイド
調査の方向性
まず変更 #2089 と、libpython.dylib のプラットフォームチェックを含むコードを確認し、ホストプラットフォームと実行プラットフォームのどちらを読み取っているかに注目します。次に、ローカルとリモートの diffoscope 比較を再現し、その後、ホストマシンに関係なくマルチプラットフォームビルドで同一の dylib 内容が生成されることを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- build-system
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100