)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b90a6c66641b2e5700ec78089d8b15d4d3cb02a","unresolved":true,"context_lines":[{"line_number":12,"context_line":"   $ docker run --rm --volume $PWD:/output \u003cbuilt image hash\u003e"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"It should create wheels for CPython 3.6, 3.7, 3.8, 3.9, and 3.10"},{"line_number":15,"context_line":"as well as pypy 3.7."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Depends-On: Ie7b36584de5054c14a9b77d87a5c5fa5cc7a3719"},{"line_number":18,"context_line":"Change-Id: Id0eb192da37dcc83646bffa9137c96b7749b179f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"11b0e849_d29ed7fa","line":15,"updated":"2021-11-12 16:52:29.000000000","message":"Oh yeah, the commit message ought to call out how the wheels include ISA-L support.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"772d1f7356a5fb1445b16562bca3e017877ea9b7","unresolved":true,"context_lines":[{"line_number":12,"context_line":"   $ docker run --rm --volume $PWD:/output \u003cbuilt image hash\u003e"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"It should create wheels for CPython 3.6, 3.7, 3.8, 3.9, and 3.10"},{"line_number":15,"context_line":"as well as pypy 3.7."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Depends-On: Ie7b36584de5054c14a9b77d87a5c5fa5cc7a3719"},{"line_number":18,"context_line":"Change-Id: Id0eb192da37dcc83646bffa9137c96b7749b179f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3289bef5_162c32d2","line":15,"in_reply_to":"11b0e849_d29ed7fa","updated":"2021-11-24 05:55:03.000000000","message":"Note to self: Look into how to build something like cp35-abi3 wheels. See also: https://docs.python.org/3/c-api/stable.html#c.Py_LIMITED_API, https://nonzen.in/2020/12/02/area-man-makes-wheels.html","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":12,"context_line":"   $ docker run --rm --volume $PWD:/output \u003cbuilt image hash\u003e"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"It should create wheels for CPython 3.6, 3.7, 3.8, 3.9, and 3.10"},{"line_number":15,"context_line":"as well as pypy 3.7."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Depends-On: Ie7b36584de5054c14a9b77d87a5c5fa5cc7a3719"},{"line_number":18,"context_line":"Change-Id: Id0eb192da37dcc83646bffa9137c96b7749b179f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dac222d0_e30e9b7c","line":15,"in_reply_to":"3289bef5_162c32d2","updated":"2021-11-28 06:18:43.000000000","message":"Done","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4580c1862cdde0579e25d3923e91cae840c1d526","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To build,"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"   $ docker build ."},{"line_number":12,"context_line":"   $ for v in cp27-cp27m cp27-cp27mu cp35-cp35m ; do"},{"line_number":13,"context_line":"   \u003e docker run --rm --env PYTHON_VERSION\u003d$v --volume $PWD:/output \u003cbuilt image hash\u003e"},{"line_number":14,"context_line":"   \u003e done"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"d6771419_c3d40491","line":11,"updated":"2022-04-06 19:02:58.000000000","message":"Until we have the new liberasurecode release, you\u0027ll want\n\n $ docker build --build-arg LIBERASURECODE_TAG\u003dmaster .","commit_id":"efc27e394e7740a73cd211dc87897e4f223089c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To build,"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"   $ docker build ."},{"line_number":12,"context_line":"   $ for v in cp27-cp27m cp27-cp27mu cp35-cp35m ; do"},{"line_number":13,"context_line":"   \u003e docker run --rm --env PYTHON_VERSION\u003d$v --volume $PWD:/output \u003cbuilt image hash\u003e"},{"line_number":14,"context_line":"   \u003e done"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"377f5f75_59ec794d","line":11,"in_reply_to":"d6771419_c3d40491","updated":"2022-06-23 22:12:58.000000000","message":"Done","commit_id":"efc27e394e7740a73cd211dc87897e4f223089c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dede141fe2a9962412c4e6be19d1ead6f8a7f0a0","unresolved":true,"context_lines":[{"line_number":11,"context_line":"   $ docker build ."},{"line_number":12,"context_line":"   $ for v in cp27-cp27m cp27-cp27mu cp35-cp35m ; do"},{"line_number":13,"context_line":"   \u003e docker run --rm --env PYTHON_VERSION\u003d$v --volume $PWD:/output:Z \u003cbuilt image hash\u003e"},{"line_number":14,"context_line":"   \u003e done"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"It should create x86_64 wheels suitable for CPython 2.7 and 3.5+ that"},{"line_number":17,"context_line":"include both liberasurecode and ISA-L libraries."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"67cb7729_bbf3c82a","line":14,"updated":"2024-05-01 18:43:48.000000000","message":"https://review.opendev.org/c/openstack/pyeclib/+/917857 will do this in CI!","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"45baa7b9fe0edff672cce47b8c2584cd665c21ae","unresolved":false,"context_lines":[{"line_number":11,"context_line":"   $ docker build ."},{"line_number":12,"context_line":"   $ for v in cp27-cp27m cp27-cp27mu cp35-cp35m ; do"},{"line_number":13,"context_line":"   \u003e docker run --rm --env PYTHON_VERSION\u003d$v --volume $PWD:/output:Z \u003cbuilt image hash\u003e"},{"line_number":14,"context_line":"   \u003e done"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"It should create x86_64 wheels suitable for CPython 2.7 and 3.5+ that"},{"line_number":17,"context_line":"include both liberasurecode and ISA-L libraries."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dbbb6d0f_cb895d67","line":14,"in_reply_to":"67cb7729_bbf3c82a","updated":"2024-08-30 03:48:49.000000000","message":"Acknowledged","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e35d2a3a16d65ce00c9b308716a8bde406d1bcda","unresolved":true,"context_lines":[{"line_number":16,"context_line":"It should create x86_64 wheels suitable for CPython 2.7 and 3.5+ that"},{"line_number":17,"context_line":"include both liberasurecode and ISA-L libraries."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that the pack_wheel.py script is useful even without the manylinux"},{"line_number":20,"context_line":"Docker container. It can even build self-contained wheels on OS X,"},{"line_number":21,"context_line":"though I\u0027ve only tests on an old x86_64 mac, not the new arm64 hotness."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"936624d8_87ce89fa","line":19,"updated":"2024-05-02 21:52:04.000000000","message":"Well... sort of. I could swear that I\u0027d used it to good effect previously, but with my most recent attempt to use it I needed to\n\n- drop the `--py-limited-api\u003dcp35` when building the initial wheel and\n- include a `--plat` arg to target something other than `manylinux_2_5`\n\nwhich I don\u0027t recall needing to hack up like that previously... Maybe something changed in `auditwheel`? I was using 6.0.0 most recently. But it\u0027s been so long, maybe I just forgot...\n\nAt any rate, we might want to make those two bits configurable.","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1c2963c86116f7740d6d87c80f4618f4a02a59b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"It should create x86_64 wheels suitable for CPython 2.7 and 3.5+ that"},{"line_number":17,"context_line":"include both liberasurecode and ISA-L libraries."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that the pack_wheel.py script is useful even without the manylinux"},{"line_number":20,"context_line":"Docker container. It can even build self-contained wheels on OS X,"},{"line_number":21,"context_line":"though I\u0027ve only tests on an old x86_64 mac, not the new arm64 hotness."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"f9f0315c_b4547a89","line":19,"in_reply_to":"936624d8_87ce89fa","updated":"2024-09-23 16:35:18.000000000","message":"Better idea: just make the repairing opt-in.","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1c2963c86116f7740d6d87c80f4618f4a02a59b","unresolved":true,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"   $ docker build ."},{"line_number":12,"context_line":"   $ for v in cp27-cp27m cp27-cp27mu cp35-cp35m ; do"},{"line_number":13,"context_line":"   \u003e docker run --rm --env PYTHON_VERSION\u003d$v --volume $PWD:/output:Z \u003cbuilt image hash\u003e"},{"line_number":14,"context_line":"   \u003e done"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"It should create x86_64 wheels suitable for CPython 2.7 and 3.5+ that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"a9edebb8_82cb34c1","line":13,"range":{"start_line":13,"start_character":21,"end_line":13,"end_character":44},"updated":"2024-09-23 16:35:18.000000000","message":"I should maybe also add `--env UID\u003d$UID` here -- the default works great for most boxes that one would provision oneself, but my work computer (for example) says\n```\n$ echo $UID\n1064774529\n```","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9627c8a9eb1f306b4415756c2ad7072e650ff09b","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"It should create x86_64 wheels suitable for CPython 2.7 and 3.5+ that"},{"line_number":17,"context_line":"include both liberasurecode and ISA-L libraries."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that the pack_wheel.py script is useful even without the manylinux"},{"line_number":20,"context_line":"Docker container. It can even build self-contained wheels on OS X,"},{"line_number":21,"context_line":"though I\u0027ve only tested on an old x86_64 mac, not the new arm64 hotness."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"21bdf0da_24b8a940","line":18,"updated":"2024-10-08 06:02:42.000000000","message":"I wonder if we also need to mention you might need to run this with selinux in permissive mode.. but that\u0027s probably out of scope.","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4580c1862cdde0579e25d3923e91cae840c1d526","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6dbb8bce_25eb16f5","updated":"2022-04-06 19:02:58.000000000","message":"Broke out the stable abi changes to https://review.opendev.org/c/openstack/pyeclib/+/836881/, which we might still want ahead of a 1.6.1 release.","commit_id":"efc27e394e7740a73cd211dc87897e4f223089c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f465e75e7bc40331c64330b19f535c5e01d5942a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8798f3fd_42d6f177","updated":"2024-02-29 19:34:51.000000000","message":"recheck\n\nFlakey test; see https://review.opendev.org/c/openstack/pyeclib/+/910658 for the fix.","commit_id":"39e86d0f18bba8cd572de409d11c710d334bea52"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"27dc7ef93493125587c1c933d1b80aec3ccaa7a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"7e8c6709_9ea93b0e","updated":"2024-09-23 08:22:20.000000000","message":"Currently having issues following the commit message instructions.. I am using podman though. The image build via podman worked fine, but calling it isn\u0027t working.. so need to dig into that.\n\nI wonder if it needs to be done in prividged more or if I could get away with a rootless container.\n```\n$ for v in cp27-cp27m cp27-cp27mu cp35-cp35m ; do\n\u003e docker run --rm --env PYTHON_VERSION\u003d$v --volume $PWD:/output:Z d4b5a036c8de9d877e240536cd7c25ec424e035d439b688d9077abb78e9fd09e\n\u003e done\nEmulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.\nError: lsetxattr /home/matt/dev_env/saios/1/pyeclib/build: operation not permitted\nEmulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.\nError: lsetxattr /home/matt/dev_env/saios/1/pyeclib/build: operation not permitted\nEmulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.\nError: lsetxattr /home/matt/dev_env/saios/1/pyeclib/build: operation not permitted\n```\n\nAnyway, it\u0027s getting late, so that\u0027s a rabbit hole for tomorrow.. no doubt its an operator error, not a Tim issue 😊","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"225a0237a8d252c7b83b43cc2301619cadccde13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6e1b6150_8a54c417","updated":"2024-09-25 07:19:47.000000000","message":"Just a simple install to a fresh venv is pretty cool:\n\n```\n$ tree test_venv/lib64/python3.9/site-packages/\ntest_venv/lib64/python3.9/site-packages/\n├── pyeclib\n│   ├── core.py\n│   ├── ec_iface.py\n│   ├── enum.py\n│   ├── __init__.py\n│   ├── __pycache__\n│   │   ├── core.cpython-39.pyc\n│   │   ├── ec_iface.cpython-39.pyc\n│   │   ├── enum.cpython-39.pyc\n│   │   ├── __init__.cpython-39.pyc\n│   │   └── utils.cpython-39.pyc\n│   └── utils.py\n├── pyeclib-1.6.1.dist-info\n│   ├── AUTHORS\n│   ├── direct_url.json\n│   ├── INSTALLER\n│   ├── LICENSE\n│   ├── METADATA\n│   ├── RECORD\n│   ├── REQUESTED\n│   ├── top_level.txt\n│   └── WHEEL\n├── pyeclib_c.abi3.so\n└── pyeclib.libs\n    ├── liberasurecode-pyeclib.so.1\n    ├── liberasurecode_rs_vand-pyeclib.so.1\n    ├── libisal-pyeclib.so.2\n    ├── libnullcode-pyeclib.so.1\n    └── libXorcode-pyeclib.so.1\n```","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0fe2a2ffe22e1197595078eb602c0c12d3b5d3e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f55c66ac_16293dff","updated":"2024-09-25 07:13:43.000000000","message":"OK so this chain is now looking really good. I\u0027ll just test some of the wheels. But once that\u0027s done I think we should just get them in.. the vendored libs in the wheels are better then what we current got.","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c111455191b1a618ae8c282efd37e042f0564d14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"1bbd0d8b_38f767d9","updated":"2024-09-26 06:03:00.000000000","message":"Something isn\u0027t working for me. When I create a container (so I can have a clean env). I picked rocky 9. Created an venv and installed the wheel. When I try and encode and decode using pyeclib I get:\n\n```\n(test_venv) bash-5.1# strace -o /tmp/dodytest.strace python dodgytest.py \nTraceback (most recent call last):\n  File \"/root/dodgytest.py\", line 1, in \u003cmodule\u003e\n    from pyeclib.ec_iface import ECDriver\n  File \"/root/pyeclib/ec_iface.py\", line 29, in \u003cmodule\u003e\n    from pyeclib_c import get_liberasurecode_version\nImportError: liberasurecode.so.1: cannot open shared object file: No such file or directory\n(test_venv) bash-5.1# find test_venv/ -name \nfind: missing argument to `-name\u0027\n(test_venv) bash-5.1# \n(test_venv) bash-5.1# find test_venv/ -name \"liberasurecode.so.1\"\n(test_venv) bash-5.1# ls test\ntest/                  test-requirements.txt  test_venv/             \n(test_venv) bash-5.1# ls test\ntest/                  test-requirements.txt  test_venv/             \n(test_venv) bash-5.1# ls test_venv/\n.gitignore  bin/        include/    lib/        lib64/      pyvenv.cfg  \n(test_venv) bash-5.1# ls test_venv/\n.gitignore  bin/        include/    lib/        lib64/      pyvenv.cfg  \n(test_venv) bash-5.1# ls test_venv/\n.gitignore  bin/        include/    lib/        lib64/      pyvenv.cfg  \n(test_venv) bash-5.1# ls test_venv/lib64/python3.9/site-packages/\n_distutils_hack/             pip-21.2.3.dist-info/        pyeclib-1.6.1.dist-info/     setuptools/                  \ndistutils-precedence.pth     pkg_resources/               pyeclib.libs/                setuptools-53.0.0.dist-info/ \npip/                         pyeclib/                     pyeclib_c.abi3.so            \n(test_venv) bash-5.1# ls test_venv/lib64/python3.9/site-packages/pyeclib\npyeclib/                 pyeclib-1.6.1.dist-info/ pyeclib.libs/            pyeclib_c.abi3.so        \n(test_venv) bash-5.1# ls test_venv/lib64/python3.9/site-packages/pyeclib.libs/lib\nlibXorcode-pyeclib.so.1              liberasurecode_rs_vand-pyeclib.so.1  libnullcode-pyeclib.so.1             \nliberasurecode-pyeclib.so.1          libisal-pyeclib.so.2                 \n(test_venv) bash-5.1# ls test_venv/lib64/python3.9/site-packages/pyeclib.libs/lib\nlibXorcode-pyeclib.so.1              liberasurecode_rs_vand-pyeclib.so.1  libnullcode-pyeclib.so.1             \nliberasurecode-pyeclib.so.1          libisal-pyeclib.so.2\n``` \n\nSo the searching or the renaming in the elf file doesn\u0027t seem to be working for me. I guess it\u0027s time I learnt more about wheels, elf format etc.","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9b1c2c963164428de703a0c34a4957131e932750","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"65a8d18c_40daeae2","updated":"2024-09-25 07:21:35.000000000","message":"nice!\n\n```\n$ pip install swift\nCollecting swift\n  Downloading swift-2.34.0-py2.py3-none-any.whl.metadata (8.7 kB)\nCollecting PasteDeploy\u003e\u003d2.0.0 (from swift)\n  Using cached PasteDeploy-3.1.0-py3-none-any.whl.metadata (2.7 kB)\nRequirement already satisfied: PyECLib\u003e\u003d1.3.1 in ./test_venv/lib64/python3.9/site-packages (from swift) (1.6.1)\n```","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"fee54a6f8d353b51b73d1f0b5b08a31a62e5b453","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"98a70857_860721b9","updated":"2024-09-23 08:13:00.000000000","message":"recheck\n\ntimeout so let\u0027s try again","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8f2ed7451c95ff3a7e62188ffafa9406a8efdbe3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"2b8b4084_6f8c0552","in_reply_to":"1bbd0d8b_38f767d9","updated":"2024-09-26 18:24:52.000000000","message":"Check the linkage on `pyeclib_c.abi3.so` -- that `liberasurecode.so.1: cannot open shared object file` seems funny to me; I\u0027m pretty sure it should have been looking for `liberasurecode-pyeclib.so.1`\n```\n$ ldd ~/py3/lib/python3.12/site-packages/pyeclib_c.abi3.so \n\tlinux-vdso.so.1 (0x00007ffd5c3a8000)\n\tliberasurecode-pyeclib.so.1 \u003d\u003e /home/tburke/py3/lib/python3.12/site-packages/pyeclib.libs/liberasurecode-pyeclib.so.1 (0x00007ab345600000)\n\tlibpthread.so.0 \u003d\u003e /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ab345ff8000)\n\tlibc.so.6 \u003d\u003e /lib/x86_64-linux-gnu/libc.so.6 (0x00007ab345200000)\n\tlibnullcode-pyeclib.so.1 \u003d\u003e /home/tburke/py3/lib/python3.12/site-packages/pyeclib.libs/libnullcode-pyeclib.so.1 (0x00007ab344c00000)\n\tlibXorcode-pyeclib.so.1 \u003d\u003e /home/tburke/py3/lib/python3.12/site-packages/pyeclib.libs/libXorcode-pyeclib.so.1 (0x00007ab344600000)\n\tliberasurecode_rs_vand-pyeclib.so.1 \u003d\u003e /home/tburke/py3/lib/python3.12/site-packages/pyeclib.libs/liberasurecode_rs_vand-pyeclib.so.1 (0x00007ab344000000)\n\tlibm.so.6 \u003d\u003e /lib/x86_64-linux-gnu/libm.so.6 (0x00007ab345f0d000)\n\tlibz.so.1 \u003d\u003e /lib/x86_64-linux-gnu/libz.so.1 (0x00007ab345ef1000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00007ab346017000)\n```\n(Side note: it\u0027s weird to me that we link against the various backends...)\n\nMaybe `pyeclib_c.abi3.so` was already built locally, then got copied in during the image build, and `bdist_wheel` didn\u0027t bother to rebuild it? Probably ought to add `*.so` to `.dockerignore`...","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ada1f16c519048da90cde16e224f60595e181a42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"db475eae_981763c6","in_reply_to":"2b8b4084_6f8c0552","updated":"2024-09-26 19:14:14.000000000","message":"No, that doesn\u0027t make sense either -- even if some stray .so made it into the docker image and it got built into the `bdist_wheel`-built wheel, we turn around, unpack it, and fix the linkages...\n\nStill probably ought to add that line to `.dockerignore` though.","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"174bcd3dc24350250ac043444b5cd2d164f80b13","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"bab5d3c7_b6cc2f4c","in_reply_to":"3b36a795_46d0f70e","updated":"2024-09-25 07:06:27.000000000","message":"Well its on an EXT4 filesystem on top of LVM.. so that\u0027s weird. Sure enough though if I add a `--privileged` and remove the :Z then it seems to work\n\n[UPDATE]: Ok I don\u0027t need the `--privileged` if I turn selinux to permissive mode. Otherwise I get permission errors copying to the output volume mount.\n\nBUT at least I got them to build now.","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1c2963c86116f7740d6d87c80f4618f4a02a59b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3b36a795_46d0f70e","in_reply_to":"7e8c6709_9ea93b0e","updated":"2024-09-23 16:35:18.000000000","message":"Is `/home/matt` (or some other part of that path) maybe a NFS share? I saw something about that potentially leading to troubles... Maybe you could use `$TMP` then copy from there?\n\nAlternatively, maybe I should find some other way to pull result wheels out of the container -- something with `docker cp`? IDK what I\u0027m doing, you\u0027d probably have better ideas 😄","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7048dff1b8c6749bfd169db18b64898b8156da92","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"e749608a_119cc208","in_reply_to":"db475eae_981763c6","updated":"2024-09-27 03:33:02.000000000","message":"Worst case, maybe try testing with the CI-built wheels later in the chain -- I know I\u0027ve been having good luck with them: https://zuul.opendev.org/t/openstack/build/f562ada783b94d93a4510e897ee272a6/artifacts\n\nIt can be a little finicky, though -- depending on which cloud is hosting the logs, the wheel may be gzipped, which would prevent being able to just run `pip install $WHL_URL`; gotta do something more like `curl --compressed -O $WHL_URL \u0026\u0026 pip install $WHL`","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9627c8a9eb1f306b4415756c2ad7072e650ff09b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f404c581_3ff0b259","in_reply_to":"e749608a_119cc208","updated":"2024-10-08 06:02:42.000000000","message":"OK I\u0027ve done a `git clean -fx` and then started again. And this time it worked well.\n\n```\n# python dodgytest.py\n# ldd venv/lib64/python3.6/site-packages/pyeclib_c.abi3.so \nldd: warning: you do not have execution permission for `venv/lib64/python3.6/site-packages/pyeclib_c.abi3.so\u0027\n\tlinux-vdso.so.1 (0x00007f74d5627000)\n\tliberasurecode-pyeclib.so.1 \u003d\u003e /root/venv/lib64/python3.6/site-packages/pyeclib.libs/liberasurecode-pyeclib.so.1 (0x00007f74d4a00000)\n\tlibpthread.so.0 \u003d\u003e /lib64/libpthread.so.0 (0x00007f74d4600000)\n\tlibc.so.6 \u003d\u003e /lib64/libc.so.6 (0x00007f74d4200000)\n\tlibnullcode-pyeclib.so.1 \u003d\u003e /root/venv/lib64/python3.6/site-packages/pyeclib.libs/libnullcode-pyeclib.so.1 (0x00007f74d3e00000)\n\tlibXorcode-pyeclib.so.1 \u003d\u003e /root/venv/lib64/python3.6/site-packages/pyeclib.libs/libXorcode-pyeclib.so.1 (0x00007f74d3a00000)\n\tliberasurecode_rs_vand-pyeclib.so.1 \u003d\u003e /root/venv/lib64/python3.6/site-packages/pyeclib.libs/liberasurecode_rs_vand-pyeclib.so.1 (0x00007f74d3600000)\n\tlibm.so.6 \u003d\u003e /lib64/libm.so.6 (0x00007f74d3200000)\n\tlibz.so.1 \u003d\u003e /lib64/libz.so.1 (0x00007f74d2e00000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00007f74d5200000)\n```\n\nWhere dodgytest.py is:\n\n```\nimport random\nfrom pyeclib.ec_iface import ECDriver\n\npyeclib_driver \u003d ECDriver(k\u003d8, m\u003d4, ec_type\u003d\u0027liberasurecode_rs_vand\u0027)\ndata \u003d b\"abcdefghijklmnopqrstuvwxyz\" * 100\nencoded \u003d pyeclib_driver.encode(data)\n\nnums \u003d [r for r in range(len(encoded))]\nrandom.shuffle(nums)\ndecoded \u003d pyeclib_driver.decode([encoded[i] for i in nums[:8]])\n\nassert data \u003d\u003d decoded\n```\n\nSo I guess it was finding the old so file... so a gotacha when building it the wheels maybe.","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9627c8a9eb1f306b4415756c2ad7072e650ff09b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"24fc73e6_94262512","updated":"2024-10-08 06:02:42.000000000","message":"It\u0027s pretty cool that we can just install the wheel and it works.\n\nI\u0027ve done some testing on a fresh container to simulate a fresh install. \n\nAn install of the wheel on my box that does have liberaurecode still links (as expected) to the wheels in the venv:\n\n```\n$ ldd venv/lib64/python3.9/site-packages/pyeclib_c.abi3.so \nldd: warning: you do not have execution permission for `venv/lib64/python3.9/site-packages/pyeclib_c.abi3.so\u0027\n\tlinux-vdso.so.1 (0x00007fb771e34000)\n\tliberasurecode-pyeclib.so.1 \u003d\u003e /home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/liberasurecode-pyeclib.so.1 (0x00007fb771400000)\n\tlibpthread.so.0 \u003d\u003e /usr/lib64/libpthread.so.0 (0x00007fb771e19000)\n\tlibc.so.6 \u003d\u003e /usr/lib64/libc.so.6 (0x00007fb771c37000)\n\tlibnullcode-pyeclib.so.1 \u003d\u003e /home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/libnullcode-pyeclib.so.1 (0x00007fb770e00000)\n\tlibXorcode-pyeclib.so.1 \u003d\u003e /home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/libXorcode-pyeclib.so.1 (0x00007fb770800000)\n\tliberasurecode_rs_vand-pyeclib.so.1 \u003d\u003e /home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/liberasurecode_rs_vand-pyeclib.so.1 (0x00007fb770200000)\n\tlibm.so.6 \u003d\u003e /usr/lib64/libm.so.6 (0x00007fb77191f000)\n\tlibz.so.1 \u003d\u003e /usr/lib64/libz.so.1 (0x00007fb771c1b000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00007fb771e36000)\n```\n\nNice, when stracing it on my system using the venv we can see it look for the lib names elsewhere but eventually finds them in the venv:\n\n```\n$ grep \"pyeclib.so.2\" dodgytest.strace\nopenat(AT_FDCWD, \"/home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/lib64/glibc-hwcaps/x86-64-v3/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/lib64/glibc-hwcaps/x86-64-v2/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/lib64/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/usr/lib64/glibc-hwcaps/x86-64-v3/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/usr/lib64/glibc-hwcaps/x86-64-v2/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/usr/lib64/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/lib64/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/usr/lib64/libJerasure-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\nopenat(AT_FDCWD, \"/home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/libisal-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d 3\nopenat(AT_FDCWD, \"/home/matt/dev_env/saios/1/pyeclib/venv/lib64/python3.9/site-packages/pyeclib.libs/libisal-pyeclib.so.2\", O_RDONLY|O_CLOEXEC) \u003d 3\n```\n\nSo the rename to have the `-pyeclib` is a good move","commit_id":"cfa07823c173f154c68769f51b691256ba7865d8"}],"Dockerfile":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"772d1f7356a5fb1445b16562bca3e017877ea9b7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"FROM quay.io/pypa/manylinux2010_x86_64:latest"},{"line_number":2,"context_line":"MAINTAINER OpenStack Swift"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#ARG LIBERASURECODE_TAG\u003d1.6.3"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"248fcdda_6853b83f","line":1,"updated":"2021-11-24 05:55:03.000000000","message":"Might be worth calling out in the commit message how this is only useful for x86_64 -- there\u0027s an aarch64 image we could start from, but I can\u0027t actually test that; I think the only ARM stuff I *could* try would be armv7l","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":1,"context_line":"FROM quay.io/pypa/manylinux2010_x86_64:latest"},{"line_number":2,"context_line":"MAINTAINER OpenStack Swift"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#ARG LIBERASURECODE_TAG\u003d1.6.3"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"8fcf7df7_4f979550","line":1,"in_reply_to":"248fcdda_6853b83f","updated":"2021-11-28 06:18:43.000000000","message":"Done","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bcd8954a8e2e8f91641b14dce278f434fbe85f17","unresolved":true,"context_lines":[{"line_number":8,"context_line":"RUN mkdir /opt/src /output"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"#ADD https://opendev.org/openstack/liberasurecode/archive/${LIBERASURECODE_TAG}.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":11,"context_line":"ADD https://github.com/tipabu/liberasurecode/archive/refs/heads/lib-suffix.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":12,"context_line":"RUN tar -C /opt/src -x -f /opt/src/liberasurecode.tar.gz -z"},{"line_number":13,"context_line":"RUN cd /opt/src/liberasurecode*/ \u0026\u0026 \\"},{"line_number":14,"context_line":"    ./autogen.sh \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"a4bfcae2_3917e6a4","line":11,"updated":"2021-11-11 00:50:38.000000000","message":"Not great, but it\u0027s the best way I could figure to pull in the dependent change.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":8,"context_line":"RUN mkdir /opt/src /output"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"#ADD https://opendev.org/openstack/liberasurecode/archive/${LIBERASURECODE_TAG}.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":11,"context_line":"ADD https://github.com/tipabu/liberasurecode/archive/refs/heads/lib-suffix.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":12,"context_line":"RUN tar -C /opt/src -x -f /opt/src/liberasurecode.tar.gz -z"},{"line_number":13,"context_line":"RUN cd /opt/src/liberasurecode*/ \u0026\u0026 \\"},{"line_number":14,"context_line":"    ./autogen.sh \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"9baf2658_c51451c1","line":11,"in_reply_to":"11fef7c5_39597ca5","updated":"2022-06-23 22:12:58.000000000","message":"Done","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"269e51e766fc6447376b7ab32ae5f6b25e6e3165","unresolved":true,"context_lines":[{"line_number":8,"context_line":"RUN mkdir /opt/src /output"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"#ADD https://opendev.org/openstack/liberasurecode/archive/${LIBERASURECODE_TAG}.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":11,"context_line":"ADD https://github.com/tipabu/liberasurecode/archive/refs/heads/lib-suffix.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":12,"context_line":"RUN tar -C /opt/src -x -f /opt/src/liberasurecode.tar.gz -z"},{"line_number":13,"context_line":"RUN cd /opt/src/liberasurecode*/ \u0026\u0026 \\"},{"line_number":14,"context_line":"    ./autogen.sh \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"fc47d77b_dbf60588","line":11,"in_reply_to":"a4bfcae2_3917e6a4","updated":"2022-04-04 23:26:56.000000000","message":"Why not make a liberasurecode release with the change?","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"09fbb21438b58596a78d8a09ff67e12962dd29d1","unresolved":true,"context_lines":[{"line_number":8,"context_line":"RUN mkdir /opt/src /output"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"#ADD https://opendev.org/openstack/liberasurecode/archive/${LIBERASURECODE_TAG}.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":11,"context_line":"ADD https://github.com/tipabu/liberasurecode/archive/refs/heads/lib-suffix.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":12,"context_line":"RUN tar -C /opt/src -x -f /opt/src/liberasurecode.tar.gz -z"},{"line_number":13,"context_line":"RUN cd /opt/src/liberasurecode*/ \u0026\u0026 \\"},{"line_number":14,"context_line":"    ./autogen.sh \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"fdae4996_d7f81d43","line":11,"in_reply_to":"fc47d77b_dbf60588","updated":"2022-04-06 14:02:35.000000000","message":"Yes! 100%","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d13d421a17a5e1643cac371a3c8d7e0501bf32e","unresolved":true,"context_lines":[{"line_number":8,"context_line":"RUN mkdir /opt/src /output"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"#ADD https://opendev.org/openstack/liberasurecode/archive/${LIBERASURECODE_TAG}.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":11,"context_line":"ADD https://github.com/tipabu/liberasurecode/archive/refs/heads/lib-suffix.tar.gz /opt/src/liberasurecode.tar.gz"},{"line_number":12,"context_line":"RUN tar -C /opt/src -x -f /opt/src/liberasurecode.tar.gz -z"},{"line_number":13,"context_line":"RUN cd /opt/src/liberasurecode*/ \u0026\u0026 \\"},{"line_number":14,"context_line":"    ./autogen.sh \u0026\u0026 \\"}],"source_content_type":"text/x-dockerfile","patch_set":1,"id":"11fef7c5_39597ca5","line":11,"in_reply_to":"fdae4996_d7f81d43","updated":"2022-04-06 16:25:14.000000000","message":"Proposed https://review.opendev.org/c/openstack/liberasurecode/+/836856 for a 1.6.3 release.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f465e75e7bc40331c64330b19f535c5e01d5942a","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RUN mkdir /opt/src /output"},{"line_number":18,"context_line":"RUN yum install -y zlib-devel"},{"line_number":19,"context_line":"# Update auditwheel so it can improve our tag to manylinux1 automatically"},{"line_number":20,"context_line":"# Not *too far*, though, since we\u0027ve got the old base image"},{"line_number":21,"context_line":"RUN /opt/_internal/tools/bin/pip install -U \u0027auditwheel\u003c5.2\u0027"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-dockerfile","patch_set":10,"id":"d45daf91_a3131e98","line":19,"range":{"start_line":19,"start_character":49,"end_line":19,"end_character":59},"updated":"2024-02-29 19:34:51.000000000","message":"Note that `manylinux1` targets down to CentOS *5* which is pretty darn old. The main reason to want such an old target is to support older versions of pip; it [looks like](https://packaging.python.org/en/latest/specifications/platform-compatibility-tags/#manylinux)\n\n* `manylinux1` is supported by `pip\u003e\u003d8.1.0` while\n* `manylinux2010` would require `pip\u003e\u003d19.0`\n\nNote that Ubuntu bionic (now only receiving security updates) had pip 9.0.1 as a system package (for both py2 \u0026 py3), while focal brought it up to 20.0.2. But CentOS 7 and even CentOS 8 Stream provide 9.0.3; it\u0027s not until CentOS 9 Stream that they start providing 21.2.3.\n\nFWIW, it looks like they\u0027re [actively trying to move away from the tag](https://github.com/pypa/manylinux/issues/994), but I don\u0027t think we want to in the near future (even now, a few years after the initial version of this patch).","commit_id":"39e86d0f18bba8cd572de409d11c710d334bea52"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dede141fe2a9962412c4e6be19d1ead6f8a7f0a0","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# manylinux2010 has oldest build chain that can still build modern ISA-L"},{"line_number":2,"context_line":"# 2021-02-06-3d322a5 is newest tag that still had 2.7 support"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"FROM quay.io/pypa/manylinux2010_x86_64:2021-02-06-3d322a5"},{"line_number":5,"context_line":"MAINTAINER OpenStack Swift"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# can also take branch names, e.g. \"master\""}],"source_content_type":"text/x-dockerfile","patch_set":11,"id":"5ea8c472_d8c5f8ab","line":4,"updated":"2024-05-01 18:43:48.000000000","message":"Might be able to do something like\n```\nARG TARGET\u003d\"x86_64\"\n\nFROM quay.io/pypa/manylinux2010_x86_64:2021-02-06-3d322a5 as x86_64\nFROM quay.io/pypa/manylinux2010_aarch64:\u003csome tag\u003e as aarch64\nFROM ${TARGET}\n\u003crest of the Dockerfile\u003e\n```\nto enable building *either* x86_64 or arm64 wheels, using a build-time arg. Future work, though.","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"90f596a3924770a818ae6d9734574f5a8b41aabf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# manylinux2010 has oldest build chain that can still build modern ISA-L"},{"line_number":2,"context_line":"# 2021-02-06-3d322a5 is newest tag that still had 2.7 support"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"FROM quay.io/pypa/manylinux2010_x86_64:2021-02-06-3d322a5"},{"line_number":5,"context_line":"MAINTAINER OpenStack Swift"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# can also take branch names, e.g. \"master\""}],"source_content_type":"text/x-dockerfile","patch_set":11,"id":"308f336a_99ed2cd3","line":4,"in_reply_to":"5ea8c472_d8c5f8ab","updated":"2024-09-03 16:21:15.000000000","message":"Done in https://review.opendev.org/c/openstack/pyeclib/+/927564","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"}],"build_wheels.sh":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bcd8954a8e2e8f91641b14dce278f434fbe85f17","unresolved":true,"context_lines":[{"line_number":9,"context_line":"# Only available for manylinux1"},{"line_number":10,"context_line":"build_wheel cp27-cp27m"},{"line_number":11,"context_line":"build_wheel cp27-cp27mu"},{"line_number":12,"context_line":"build_wheel cp35-cp35m"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# Available for both manylinux1 and manylinux2010"},{"line_number":15,"context_line":"build_wheel cp36-cp36m"}],"source_content_type":"text/x-sh","patch_set":1,"id":"909de78d_c3f3277b","line":12,"updated":"2021-11-11 00:50:38.000000000","message":"Maybe we should just drop these three? Apparently we can\u0027t build ISA-L in the manylinux1 container...","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":9,"context_line":"# Only available for manylinux1"},{"line_number":10,"context_line":"build_wheel cp27-cp27m"},{"line_number":11,"context_line":"build_wheel cp27-cp27mu"},{"line_number":12,"context_line":"build_wheel cp35-cp35m"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# Available for both manylinux1 and manylinux2010"},{"line_number":15,"context_line":"build_wheel cp36-cp36m"}],"source_content_type":"text/x-sh","patch_set":1,"id":"027e9726_ce6463c2","line":12,"in_reply_to":"909de78d_c3f3277b","updated":"2021-11-28 06:18:43.000000000","message":"Ack","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bcd8954a8e2e8f91641b14dce278f434fbe85f17","unresolved":true,"context_lines":[{"line_number":14,"context_line":"# Available for both manylinux1 and manylinux2010"},{"line_number":15,"context_line":"build_wheel cp36-cp36m"},{"line_number":16,"context_line":"build_wheel cp37-cp37m"},{"line_number":17,"context_line":"build_wheel pp37-pypy37_pp73"},{"line_number":18,"context_line":"build_wheel cp38-cp38"},{"line_number":19,"context_line":"build_wheel cp39-cp39"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-sh","patch_set":1,"id":"2a191fe7_807f3138","line":17,"updated":"2021-11-11 00:50:38.000000000","message":"This one should probably move down -- it\u0027s only available on manylinux2010, too.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# Available for both manylinux1 and manylinux2010"},{"line_number":15,"context_line":"build_wheel cp36-cp36m"},{"line_number":16,"context_line":"build_wheel cp37-cp37m"},{"line_number":17,"context_line":"build_wheel pp37-pypy37_pp73"},{"line_number":18,"context_line":"build_wheel cp38-cp38"},{"line_number":19,"context_line":"build_wheel cp39-cp39"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-sh","patch_set":1,"id":"d70fe14b_b39827ef","line":17,"in_reply_to":"2a191fe7_807f3138","updated":"2021-11-28 06:18:43.000000000","message":"Ack","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"21b2d21449934f4ef72f0eafe89e0233aac0d568","unresolved":true,"context_lines":[{"line_number":15,"context_line":"build_wheel cp36-cp36m"},{"line_number":16,"context_line":"build_wheel cp37-cp37m"},{"line_number":17,"context_line":"build_wheel cp38-cp38"},{"line_number":18,"context_line":"build_wheel cp39-cp39"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Only available for manylinux2010"},{"line_number":21,"context_line":"build_wheel pp37-pypy37_pp73"}],"source_content_type":"text/x-sh","patch_set":2,"id":"0f358a39_81a99420","line":18,"updated":"2021-11-24 06:06:46.000000000","message":"Don\u0027t think all these are still necessary, now that we\u0027re building abi3 wheels -- but I\u0027m not sure which cpython version should be getting used...","commit_id":"067cddda9a2d68ae6512c516d80d837a500295b5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":15,"context_line":"build_wheel cp36-cp36m"},{"line_number":16,"context_line":"build_wheel cp37-cp37m"},{"line_number":17,"context_line":"build_wheel cp38-cp38"},{"line_number":18,"context_line":"build_wheel cp39-cp39"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Only available for manylinux2010"},{"line_number":21,"context_line":"build_wheel pp37-pypy37_pp73"}],"source_content_type":"text/x-sh","patch_set":2,"id":"c2a0f39e_4ffaea00","line":18,"in_reply_to":"0f358a39_81a99420","updated":"2021-11-28 06:18:43.000000000","message":"Still not clear on which version of python I should use for the py3 wheel, but older seems likely better? At any rate, this whole file got dropped.","commit_id":"067cddda9a2d68ae6512c516d80d837a500295b5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"21b2d21449934f4ef72f0eafe89e0233aac0d568","unresolved":true,"context_lines":[{"line_number":18,"context_line":"build_wheel cp39-cp39"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Only available for manylinux2010"},{"line_number":21,"context_line":"build_wheel pp37-pypy37_pp73"},{"line_number":22,"context_line":"build_wheel cp310-cp310"}],"source_content_type":"text/x-sh","patch_set":2,"id":"c114ec90_adfead83","line":21,"updated":"2021-11-24 06:06:46.000000000","message":"Does this even work with the --py-limited-api\u003dcp35 flag?\n\nSeparately, how much do we *really* care about pypy? Apparently, not enough to test it...","commit_id":"067cddda9a2d68ae6512c516d80d837a500295b5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":18,"context_line":"build_wheel cp39-cp39"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Only available for manylinux2010"},{"line_number":21,"context_line":"build_wheel pp37-pypy37_pp73"},{"line_number":22,"context_line":"build_wheel cp310-cp310"}],"source_content_type":"text/x-sh","patch_set":2,"id":"a598ab4e_b5dd93cf","line":21,"in_reply_to":"c114ec90_adfead83","updated":"2021-11-28 06:18:43.000000000","message":"Last version of the manylinux2010 container to support py27 had no support for pypy, so... screw it.","commit_id":"067cddda9a2d68ae6512c516d80d837a500295b5"}],"pack_wheel.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"772d1f7356a5fb1445b16562bca3e017877ea9b7","unresolved":true,"context_lines":[{"line_number":11,"context_line":"import zipfile"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"os.environ[\u0027LD_LIBRARY_PATH\u0027] +\u003d \u0027:/usr/lib\u0027"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def locate_library(name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e11acc6_4daa92e9","line":14,"updated":"2021-11-24 05:55:03.000000000","message":"Possible KeyError when running this *not* in the docker container; do\n\n if \u0027LD_LIBRARY_PATH\u0027 in os.environ:\n     os.environ[\u0027LD_LIBRARY_PATH\u0027] +\u003d \u0027:/usr/lib\u0027\n else:\n     os.environ[\u0027LD_LIBRARY_PATH\u0027] \u003d \u0027/usr/lib\u0027","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":11,"context_line":"import zipfile"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"os.environ[\u0027LD_LIBRARY_PATH\u0027] +\u003d \u0027:/usr/lib\u0027"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def locate_library(name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"17ed8af2_dae9794a","line":14,"in_reply_to":"3e11acc6_4daa92e9","updated":"2021-11-28 06:18:43.000000000","message":"Done","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"772d1f7356a5fb1445b16562bca3e017877ea9b7","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def build_wheel(src_dir):"},{"line_number":40,"context_line":"    pip \u003d os.path.join(os.path.dirname(sys.executable), \u0027pip\u0027)"},{"line_number":41,"context_line":"    cmd \u003d [pip, \u0027wheel\u0027, src_dir, \u0027--use-feature\u003din-tree-build\u0027]"},{"line_number":42,"context_line":"    p \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":43,"context_line":"                         stderr\u003dsubprocess.PIPE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"796025d6_ecbd8ab5","line":40,"updated":"2021-11-24 05:55:03.000000000","message":"Probably better to do something like\n\n sys.executable, \u0027-m\u0027, \u0027pip\u0027, \u0027wheel\u0027, ...\n\nThis can do unexpected things when using system packages and both py2 and py3 are installed.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def build_wheel(src_dir):"},{"line_number":40,"context_line":"    pip \u003d os.path.join(os.path.dirname(sys.executable), \u0027pip\u0027)"},{"line_number":41,"context_line":"    cmd \u003d [pip, \u0027wheel\u0027, src_dir, \u0027--use-feature\u003din-tree-build\u0027]"},{"line_number":42,"context_line":"    p \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":43,"context_line":"                         stderr\u003dsubprocess.PIPE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b77a15a8_9fbf0ed4","line":40,"in_reply_to":"796025d6_ecbd8ab5","updated":"2021-11-28 06:18:43.000000000","message":"No longer using pip to build the initial wheel.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"772d1f7356a5fb1445b16562bca3e017877ea9b7","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def build_wheel(src_dir):"},{"line_number":40,"context_line":"    pip \u003d os.path.join(os.path.dirname(sys.executable), \u0027pip\u0027)"},{"line_number":41,"context_line":"    cmd \u003d [pip, \u0027wheel\u0027, src_dir, \u0027--use-feature\u003din-tree-build\u0027]"},{"line_number":42,"context_line":"    p \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":43,"context_line":"                         stderr\u003dsubprocess.PIPE,"},{"line_number":44,"context_line":"                         universal_newlines\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d416fb4_4182b24a","line":41,"range":{"start_line":41,"start_character":34,"end_line":41,"end_character":63},"updated":"2021-11-24 05:55:03.000000000","message":"Drop this; let it warn -- the alternative is to have old versions of pip barf and say things like\n\n no such option: --use-feature","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def build_wheel(src_dir):"},{"line_number":40,"context_line":"    pip \u003d os.path.join(os.path.dirname(sys.executable), \u0027pip\u0027)"},{"line_number":41,"context_line":"    cmd \u003d [pip, \u0027wheel\u0027, src_dir, \u0027--use-feature\u003din-tree-build\u0027]"},{"line_number":42,"context_line":"    p \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":43,"context_line":"                         stderr\u003dsubprocess.PIPE,"},{"line_number":44,"context_line":"                         universal_newlines\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a47f71f_6439b5a9","line":41,"range":{"start_line":41,"start_character":34,"end_line":41,"end_character":63},"in_reply_to":"8d416fb4_4182b24a","updated":"2021-11-28 06:18:43.000000000","message":"No longer using pip to build the initial wheel.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"772d1f7356a5fb1445b16562bca3e017877ea9b7","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        out \u003d os.fsdecode(out)"},{"line_number":48,"context_line":"    lines \u003d [line.strip() for line in out.split(\u0027\\n\u0027)]"},{"line_number":49,"context_line":"    created_lines \u003d [line for line in lines"},{"line_number":50,"context_line":"                     if line.startswith(\u0027Created wheel\u0027)]"},{"line_number":51,"context_line":"    assert len(created_lines) \u003d\u003d 1, (out, err)"},{"line_number":52,"context_line":"    # expected keys: filename, size, sha256"},{"line_number":53,"context_line":"    return dict(part.partition(\u0027\u003d\u0027)[::2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"18e8b15b_76d0ea56","line":50,"updated":"2021-11-24 05:55:03.000000000","message":"This may be too brittle; old versions of pip say something like\n\n    Running setup.py bdist_wheel for pyeclib: started\n    Running setup.py bdist_wheel for pyeclib: finished with status \u0027done\u0027\n    Stored in directory: /home/pi/code/pyeclib\n  Successfully built pyeclib\n\n...which isn\u0027t terribly useful :-/ Might need to get a tempdir, run something like\n\n pip wheel src_dir -w temp_dir\n\nthen sanity check that we only have the one wheel in there. Fortunately, we only *really* care about the filename anyway; no need to discover/calculate size or sha256.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        out \u003d os.fsdecode(out)"},{"line_number":48,"context_line":"    lines \u003d [line.strip() for line in out.split(\u0027\\n\u0027)]"},{"line_number":49,"context_line":"    created_lines \u003d [line for line in lines"},{"line_number":50,"context_line":"                     if line.startswith(\u0027Created wheel\u0027)]"},{"line_number":51,"context_line":"    assert len(created_lines) \u003d\u003d 1, (out, err)"},{"line_number":52,"context_line":"    # expected keys: filename, size, sha256"},{"line_number":53,"context_line":"    return dict(part.partition(\u0027\u003d\u0027)[::2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"6f8d4f45_6c9e16da","line":50,"in_reply_to":"18e8b15b_76d0ea56","updated":"2021-11-28 06:18:43.000000000","message":"No longer using pip to build the initial wheel.","commit_id":"601f184996414852b679bf562f2b249a54c958e9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    try:"},{"line_number":46,"context_line":"        subprocess.check_call(["},{"line_number":47,"context_line":"            sys.executable, \u0027setup.py\u0027,"},{"line_number":48,"context_line":"            \u0027bdist_wheel\u0027, \u0027-d\u0027, tmp, \u0027--py-limited-api\u003dcp35\u0027,"},{"line_number":49,"context_line":"        ], cwd\u003dsrc_dir)"},{"line_number":50,"context_line":"        files \u003d os.listdir(tmp)"},{"line_number":51,"context_line":"        assert len(files) \u003d\u003d 1, files"}],"source_content_type":"text/x-python","patch_set":4,"id":"c334ac61_1e9d32c4","line":48,"range":{"start_line":48,"start_character":56,"end_line":48,"end_character":60},"updated":"2021-11-28 06:18:43.000000000","message":"This feels suspicious (shouldn\u0027t it be contingent upon us running this on py35+?) but apparently it works out in practice.","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1c2963c86116f7740d6d87c80f4618f4a02a59b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    try:"},{"line_number":46,"context_line":"        subprocess.check_call(["},{"line_number":47,"context_line":"            sys.executable, \u0027setup.py\u0027,"},{"line_number":48,"context_line":"            \u0027bdist_wheel\u0027, \u0027-d\u0027, tmp, \u0027--py-limited-api\u003dcp35\u0027,"},{"line_number":49,"context_line":"        ], cwd\u003dsrc_dir)"},{"line_number":50,"context_line":"        files \u003d os.listdir(tmp)"},{"line_number":51,"context_line":"        assert len(files) \u003d\u003d 1, files"}],"source_content_type":"text/x-python","patch_set":4,"id":"aa64c45a_97a9cd66","line":48,"range":{"start_line":48,"start_character":56,"end_line":48,"end_character":60},"in_reply_to":"c334ac61_1e9d32c4","updated":"2024-09-23 16:35:18.000000000","message":"Acknowledged","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":true,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":198,"context_line":"    main()"}],"source_content_type":"text/x-python","patch_set":4,"id":"69a2d916_3cfe1ebd","line":198,"updated":"2021-11-28 06:18:43.000000000","message":"FWIW, this script should still be useful even without all the docker business. After installing patchelf and auditwheel on my raspberry pi, I can run\n\n python pack_wheel.py .\n python3 pack_wheel.py .\n\nand get myself some manylinux2014 wheels for armv7l, for example. I expect we could get to something similar for OS X and Windows, but that\u0027s out of scope for now -- at the very least we\u0027d want to change up the shared-object file extension.","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":198,"context_line":"    main()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7e54ea9f_d32d2348","line":198,"in_reply_to":"69a2d916_3cfe1ebd","updated":"2022-06-23 22:12:58.000000000","message":"Went ahead and made OS X support in-scope for this change. I don\u0027t know that anyone\u0027s ever managed to build liberasurecode (much less pyeclib) for Windows -- I tried (somewhat half-heartedly) and didn\u0027t get far, anyway.","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def relocate_libs(tmp, so_suffix):"},{"line_number":94,"context_line":"    all_libs \u003d [os.path.join(tmp, lib)"},{"line_number":95,"context_line":"                for lib in os.listdir(tmp) if \u0027.so\u0027 in lib]"},{"line_number":96,"context_line":"    for lib in all_libs:  # NB: pypy builds may create multiple .so\u0027s"},{"line_number":97,"context_line":"        if sys.platform \u003d\u003d \u0027darwin\u0027:"},{"line_number":98,"context_line":"            subprocess.check_call(["}],"source_content_type":"text/x-python","patch_set":7,"id":"8d246fb7_b9c8f0a1","line":95,"updated":"2022-06-23 22:12:58.000000000","message":"Might be indicative of a bug, but building pyeclib on OS X still makes a pyeclib_c.abi3.so, not a pyeclib_c.abi3.dylib as I\u0027d originally expected.","commit_id":"f6981638a734a681be7e9f64b2a1b21f5804ad74"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    if sys.platform \u003d\u003d \u0027darwin\u0027:"},{"line_number":135,"context_line":"        old_lib \u003d src_lib"},{"line_number":136,"context_line":"        name \u003d os.path.basename(old_lib).split(\u0027.\u0027, 1)[0]"},{"line_number":137,"context_line":"        new_lib \u003d name + so_suffix + \u0027.dylib\u0027"},{"line_number":138,"context_line":"    else:"},{"line_number":139,"context_line":"        name, _, version \u003d os.path.basename(src_lib).partition(\u0027.so\u0027)"},{"line_number":140,"context_line":"        major \u003d \u0027.\u0027.join(version.split(\u0027.\u0027, 2)[:2])"}],"source_content_type":"text/x-python","patch_set":7,"id":"f29a9f0d_1621aa9d","line":137,"updated":"2022-06-23 22:12:58.000000000","message":"libec and isal will be dylibs though!","commit_id":"f6981638a734a681be7e9f64b2a1b21f5804ad74"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"421179d317f296fd4ee20f1897218bab7397ccdf","unresolved":true,"context_lines":[{"line_number":10,"context_line":"# implied."},{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import argparse"},{"line_number":15,"context_line":"import base64"},{"line_number":16,"context_line":"import errno"}],"source_content_type":"text/x-python","patch_set":11,"id":"292f48e6_6660e722","line":13,"updated":"2024-05-02 21:18:57.000000000","message":"Could really use a good docstring.","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"45baa7b9fe0edff672cce47b8c2584cd665c21ae","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# implied."},{"line_number":11,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import argparse"},{"line_number":15,"context_line":"import base64"},{"line_number":16,"context_line":"import errno"}],"source_content_type":"text/x-python","patch_set":11,"id":"6c7caf22_aa050e6e","line":13,"in_reply_to":"292f48e6_6660e722","updated":"2024-08-30 03:48:49.000000000","message":"Hopefully it\u0027s \"good\" ;-)","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"45baa7b9fe0edff672cce47b8c2584cd665c21ae","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        res \u003d re.search(expr, out)"},{"line_number":55,"context_line":"        if res:"},{"line_number":56,"context_line":"            return os.path.realpath(res.group(0))"},{"line_number":57,"context_line":"    except Exception:"},{"line_number":58,"context_line":"        pass"},{"line_number":59,"context_line":"    raise RuntimeError(\u0027Failed to locate %s (checked %s)\u0027 % (name, libpath))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"c5d71e50_0fb36822","line":58,"range":{"start_line":57,"start_character":4,"end_line":58,"end_character":12},"updated":"2024-08-30 03:48:49.000000000","message":"Oh jeeze -- what was *that* about?\n\nSurely that can be scoped down to `subprocess.CalledProcessError`... right?","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"90f596a3924770a818ae6d9734574f5a8b41aabf","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        res \u003d re.search(expr, out)"},{"line_number":55,"context_line":"        if res:"},{"line_number":56,"context_line":"            return os.path.realpath(res.group(0))"},{"line_number":57,"context_line":"    except Exception:"},{"line_number":58,"context_line":"        pass"},{"line_number":59,"context_line":"    raise RuntimeError(\u0027Failed to locate %s (checked %s)\u0027 % (name, libpath))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9228aec0_7d687434","line":58,"range":{"start_line":57,"start_character":4,"end_line":58,"end_character":12},"in_reply_to":"c5d71e50_0fb36822","updated":"2024-09-03 16:21:15.000000000","message":"Done","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e35d2a3a16d65ce00c9b308716a8bde406d1bcda","unresolved":true,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    # Be sure to move liberasurecode first,"},{"line_number":112,"context_line":"    # so we can fix its links to the others"},{"line_number":113,"context_line":"    relocated_libec \u003d inject(tmp, locate_library(\u0027erasurecode\u0027))"},{"line_number":114,"context_line":"    if sys.platform \u003d\u003d \u0027darwin\u0027:"},{"line_number":115,"context_line":"        subprocess.check_call(["},{"line_number":116,"context_line":"            \u0027install_name_tool\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"255d8520_8d7e4424","line":113,"range":{"start_line":113,"start_character":22,"end_line":113,"end_character":32},"updated":"2024-05-02 21:52:04.000000000","message":"May as well roll `tmp` into the partial.","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"45baa7b9fe0edff672cce47b8c2584cd665c21ae","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    # Be sure to move liberasurecode first,"},{"line_number":112,"context_line":"    # so we can fix its links to the others"},{"line_number":113,"context_line":"    relocated_libec \u003d inject(tmp, locate_library(\u0027erasurecode\u0027))"},{"line_number":114,"context_line":"    if sys.platform \u003d\u003d \u0027darwin\u0027:"},{"line_number":115,"context_line":"        subprocess.check_call(["},{"line_number":116,"context_line":"            \u0027install_name_tool\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"d2a5e70a_cfd27214","line":113,"range":{"start_line":113,"start_character":22,"end_line":113,"end_character":32},"in_reply_to":"255d8520_8d7e4424","updated":"2024-08-30 03:48:49.000000000","message":"Done","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"421179d317f296fd4ee20f1897218bab7397ccdf","unresolved":true,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    # Nobody actually links against this, but we want it anyway"},{"line_number":129,"context_line":"    isal \u003d locate_library(\u0027isal\u0027)"},{"line_number":130,"context_line":"    if isal:"},{"line_number":131,"context_line":"        inject(tmp, isal)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9e74bc85_b280fa22","line":130,"updated":"2024-05-02 21:18:57.000000000","message":"This isn\u0027t how `locate_library` works (now?)\n\nEither that needs some `missing_ok` kwarg and we need to use it here, or this needs to catch \u0026 ignore the `RuntimeError`.","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"45baa7b9fe0edff672cce47b8c2584cd665c21ae","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    # Nobody actually links against this, but we want it anyway"},{"line_number":129,"context_line":"    isal \u003d locate_library(\u0027isal\u0027)"},{"line_number":130,"context_line":"    if isal:"},{"line_number":131,"context_line":"        inject(tmp, isal)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"c675174e_17f2ce93","line":130,"in_reply_to":"9e74bc85_b280fa22","updated":"2024-08-30 03:48:49.000000000","message":"Done","commit_id":"fb85099cfeda4a8352cef50f234b96fd9f0ff620"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1c2963c86116f7740d6d87c80f4618f4a02a59b","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    Run ``auditwheel repair`` to ensure appropriate platform tags."},{"line_number":296,"context_line":"    \"\"\""},{"line_number":297,"context_line":"    if sys.platform \u003d\u003d \u0027darwin\u0027:"},{"line_number":298,"context_line":"        return whl  # auditwheel only works on linux"},{"line_number":299,"context_line":"    whl_dir \u003d os.path.dirname(whl)"},{"line_number":300,"context_line":"    subprocess.check_call([\u0027auditwheel\u0027, \u0027repair\u0027, whl, \u0027-w\u0027, whl_dir])"},{"line_number":301,"context_line":"    wheels \u003d [f for f in os.listdir(whl_dir) if f !\u003d os.path.basename(whl)]"}],"source_content_type":"text/x-python","patch_set":18,"id":"29fe59c4_f7aea58f","line":298,"updated":"2024-09-23 16:35:18.000000000","message":"Now that there\u0027s an explicit `--repair` flag, maybe we should just go ahead and call `auditwheel` (which IIRC will error).","commit_id":"a1fc3aa3af050b96a377f3d777a427e460b0a6ea"}],"setup.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":true,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"module \u003d Extension(\u0027pyeclib_c\u0027,"},{"line_number":212,"context_line":"                   py_limited_api\u003dTrue,"},{"line_number":213,"context_line":"                   define_macros\u003d[(\u0027MAJOR VERSION\u0027, \u00271\u0027),"},{"line_number":214,"context_line":"                                  (\u0027MINOR VERSION\u0027, \u00276\u0027)],"},{"line_number":215,"context_line":"                   include_dirs\u003d[default_python_incdir,"}],"source_content_type":"text/x-python","patch_set":4,"id":"eaab6981_d45e9780","line":212,"updated":"2021-11-28 06:18:43.000000000","message":"I\u0027m unclear about the difference between declaring Py_LIMITED_API in C code and adding this kwarg -- it seemed like I couldn\u0027t build a proper pyeclib_c.abi3.so without this, though.","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"module \u003d Extension(\u0027pyeclib_c\u0027,"},{"line_number":212,"context_line":"                   py_limited_api\u003dTrue,"},{"line_number":213,"context_line":"                   define_macros\u003d[(\u0027MAJOR VERSION\u0027, \u00271\u0027),"},{"line_number":214,"context_line":"                                  (\u0027MINOR VERSION\u0027, \u00276\u0027)],"},{"line_number":215,"context_line":"                   include_dirs\u003d[default_python_incdir,"}],"source_content_type":"text/x-python","patch_set":4,"id":"29722116_0d77667c","line":212,"in_reply_to":"eaab6981_d45e9780","updated":"2022-06-23 22:12:58.000000000","message":"Ack","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"}],"src/c/pyeclib_c/pyeclib_c.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"91b75e5b7d192b1f0f501e7c1cf5f14ef7e77d59","unresolved":true,"context_lines":[{"line_number":525,"context_line":"  "},{"line_number":526,"context_line":"  /* Add data fragments to the python list to return */"},{"line_number":527,"context_line":"  for (i \u003d 0; i \u003c pyeclib_handle-\u003eec_args.k; i++) {"},{"line_number":528,"context_line":"    PyList_SetItem(list_of_strips, i,"},{"line_number":529,"context_line":"                    PY_BUILDVALUE_OBJ_LEN(encoded_data[i], fragment_len));"},{"line_number":530,"context_line":"  }"},{"line_number":531,"context_line":"  "}],"source_content_type":"text/x-csrc","patch_set":4,"id":"96d23d61_3d1f8749","line":528,"updated":"2021-11-28 06:18:43.000000000","message":"PyList_SET_ITEM is a macro outside of the stable ABI, and IIRC led to (runtime!?) errors about a missing symbol. PyList_SetItem is part of the stable ABI, though, even if it has a slight performance penalty.","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5fc2d0711317cb24c989525c5ed76fc5840b826a","unresolved":false,"context_lines":[{"line_number":525,"context_line":"  "},{"line_number":526,"context_line":"  /* Add data fragments to the python list to return */"},{"line_number":527,"context_line":"  for (i \u003d 0; i \u003c pyeclib_handle-\u003eec_args.k; i++) {"},{"line_number":528,"context_line":"    PyList_SetItem(list_of_strips, i,"},{"line_number":529,"context_line":"                    PY_BUILDVALUE_OBJ_LEN(encoded_data[i], fragment_len));"},{"line_number":530,"context_line":"  }"},{"line_number":531,"context_line":"  "}],"source_content_type":"text/x-csrc","patch_set":4,"id":"469dc6e4_2dda3528","line":528,"in_reply_to":"96d23d61_3d1f8749","updated":"2022-06-23 22:12:58.000000000","message":"Ack","commit_id":"7efc052a56d3185b54532df2ac3e05b17a34a9fe"}]}
