)]}'
{
  "commit": "e076c4513dc2c89c1e9b7cb716fb8e4588e8e067",
  "tree": "304dde4076c588f9c1c76dff97c4a48a3669585f",
  "parents": [
    "3cc7e4258c15a6a19ba5e0b62a220b1a6196d4eb"
  ],
  "author": {
    "name": "Wenzel Jakob",
    "email": "wenzel.jakob@epfl.ch",
    "time": "Mon Oct 31 22:11:16 2022 +0100"
  },
  "committer": {
    "name": "Wenzel Jakob",
    "email": "wenzel.jakob@epfl.ch",
    "time": "Mon Feb 27 13:32:16 2023 +0100"
  },
  "message": "macOS: disable fixup chains when linking extension modules\n\nOn macOS, extension library builds usually rely on the flag ``-undefined\ndynamic_lookup`` to get the linker to temporarily accept missing CPython\nAPI symbols. As the name implies, those symbols are then dynamically\nresolved when Python imports such an extension library. Binaries\nproduced in this way are more portable since they don\u0027t contain a\nhardcoded path to the CPython library. This is critical when\ndistributing binary wheels on PyPI, etc..\n\nWhen targeting macOS\u003e\u003d12, XCode recently started to generate a somewhat\nominous warning:\n\n``-undefined dynamic_lookup may not work with chained fixups``\n\nFor further detail on what chained fixups are, see the following\ninformative WWDC\nhttps://developer.apple.com/videos/play/wwdc2022/110362/ (the relevant\npart starts about 20mins into the video)\n\nThe message that the dynamic resolution functionality became broken.\nI reported this to Apple via feedback request FB11767124.\n\nApple investigated the request and updated the behavior of ``ld``\nstarting with XCode 14.3b1+: it now disables the fixup chain linker\noptimization whenever ``-undefined dynamic_lookup`` is specified. The\nfeedback from Apple also stated that the parameter\n``-Wl,-no_fixup_chains`` should be specified on pre-14.3 XCode versions\nto ensure correct behavior.\n\nThis commit realizes those changes by passing a flag to *always* disable\nfixup chains. Related discussion is available in the CPython repository\n(https://github.com/python/cpython/issues/97524).\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2b543be0be45f38b08d69978dd0f9788eb32791e",
      "old_mode": 33188,
      "old_path": "docs/compiling.rst",
      "new_id": "4294fb933463468f3dfc58875b4cf591130bb7ea",
      "new_mode": 33188,
      "new_path": "docs/compiling.rst"
    },
    {
      "type": "modify",
      "old_id": "0c985bc8e515af48b02fa1780a4a5b28bfa31ca2",
      "old_mode": 33188,
      "old_path": "tools/pybind11Common.cmake",
      "new_id": "f83485881d63ec02819da7506cf845d023d3d347",
      "new_mode": 33188,
      "new_path": "tools/pybind11Common.cmake"
    }
  ]
}
