Title: Python 3.11 is unbuildable with GCC on macOS (error: 'HAVE_MKFIFOAT_RUNTIME' undeclared, error: 'HAVE_MKNODAT_RUNTIME' undeclared) · Issue #104106 · python/cpython · GitHub
Open Graph Title: Python 3.11 is unbuildable with GCC on macOS (error: 'HAVE_MKFIFOAT_RUNTIME' undeclared, error: 'HAVE_MKNODAT_RUNTIME' undeclared) · Issue #104106 · python/cpython
X Title: Python 3.11 is unbuildable with GCC on macOS (error: 'HAVE_MKFIFOAT_RUNTIME' undeclared, error: 'HAVE_MKNODAT_RUNTIME' undeclared) · Issue #104106 · python/cpython
Description: Bug report Due to missing fallback macro definitions in Modules/posixmodule.c (source) for HAVE_MKFIFOAT_RUNTIME and HAVE_MKNODAT_RUNTIME, Python 3.11 cannot be built with GCC on macOS, due to the following failures: ./Modules/posixmodul...
Open Graph Description: Bug report Due to missing fallback macro definitions in Modules/posixmodule.c (source) for HAVE_MKFIFOAT_RUNTIME and HAVE_MKNODAT_RUNTIME, Python 3.11 cannot be built with GCC on macOS, due to the ...
X Description: Bug report Due to missing fallback macro definitions in Modules/posixmodule.c (source) for HAVE_MKFIFOAT_RUNTIME and HAVE_MKNODAT_RUNTIME, Python 3.11 cannot be built with GCC on macOS, due to the ...
Opengraph URL: https://github.com/python/cpython/issues/104106
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Python 3.11 is unbuildable with GCC on macOS (error: 'HAVE_MKFIFOAT_RUNTIME' undeclared, error: 'HAVE_MKNODAT_RUNTIME' undeclared)","articleBody":"\u003c!--\r\n If you're new to Python and you're not sure whether what you're experiencing is a bug, the CPython issue tracker is not\r\n the right place to seek help. Consider the following options instead:\r\n\r\n - reading the Python tutorial: https://docs.python.org/3/tutorial/\r\n - posting in the \"Users\" category on discuss.python.org: https://discuss.python.org/c/users/7\r\n - emailing the Python-list mailing list: https://mail.python.org/mailman/listinfo/python-list\r\n - searching our issue tracker (https://github.com/python/cpython/issues) to see if\r\n your problem has already been reported\r\n--\u003e\r\n\r\n# Bug report\r\n\r\nDue to missing fallback macro definitions in `Modules/posixmodule.c` ([source](\r\nhttps://github.com/python/cpython/blob/main/Modules/posixmodule.c#LL87C1-L108C31)) for `HAVE_MKFIFOAT_RUNTIME` and `HAVE_MKNODAT_RUNTIME`, Python 3.11 cannot be built with GCC on macOS, due to the following failures:\r\n\r\n```\r\n./Modules/posixmodule.c: In function 'parse_posix_spawn_flags':\r\n./Modules/posixmodule.c:186:64: warning: comparison between pointer and integer\r\n 186 | (posix_spawn != NULL \u0026\u0026 setsid != NULL)\r\n | ^~\r\n./Modules/posixmodule.c:6026:13: note: in expansion of macro 'HAVE_POSIX_SPAWN_SETSID_RUNTIME'\r\n 6026 | if (HAVE_POSIX_SPAWN_SETSID_RUNTIME) {\r\n | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n./Modules/posixmodule.c: In function 'os_mkfifo_impl':\r\n./Modules/posixmodule.c:10690:17: error: 'HAVE_MKFIFOAT_RUNTIME' undeclared (first use in this function); did you mean 'HAVE_MKDIRAT_RUNTIME'?\r\n10690 | if (HAVE_MKFIFOAT_RUNTIME) {\r\n | ^~~~~~~~~~~~~~~~~~~~~\r\n | HAVE_MKDIRAT_RUNTIME\r\n./Modules/posixmodule.c:10690:17: note: each undeclared identifier is reported only once for each function it appears in\r\n./Modules/posixmodule.c: In function 'os_mknod_impl':\r\n./Modules/posixmodule.c:10759:17: error: 'HAVE_MKNODAT_RUNTIME' undeclared (first use in this function); did you mean 'HAVE_MKDIRAT_RUNTIME'?\r\n10759 | if (HAVE_MKNODAT_RUNTIME) {\r\n | ^~~~~~~~~~~~~~~~~~~~\r\n | HAVE_MKDIRAT_RUNTIME\r\n./Modules/posixmodule.c: In function 'probe_mkfifoat':\r\narm64-apple-darwin22-gcc -Wsign-compare -DNDEBUG -O2 -pipe -fwrapv -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -I. -I./Include -I/Users/gentoo/gentoo/tmp/usr/include/ncursesw -DPy_BUILD_CORE_BUILTIN -c ./Modules/_codecsmodule.c -o Modules/_codecsmodule.o\r\n./Modules/posixmodule.c:15647:23: error: 'HAVE_MKFIFOAT_RUNTIME' undeclared (first use in this function); did you mean 'HAVE_MKDIRAT_RUNTIME'?\r\n15647 | PROBE(probe_mkfifoat, HAVE_MKFIFOAT_RUNTIME)\r\n | ^~~~~~~~~~~~~~~~~~~~~\r\n./Modules/posixmodule.c:15611:11: note: in definition of macro 'PROBE'\r\n15611 | if (test) { \\\r\n | ^~~~\r\n./Modules/posixmodule.c: In function 'probe_mknodat':\r\n./Modules/posixmodule.c:15651:22: error: 'HAVE_MKNODAT_RUNTIME' undeclared (first use in this function); did you mean 'HAVE_MKDIRAT_RUNTIME'?\r\n15651 | PROBE(probe_mknodat, HAVE_MKNODAT_RUNTIME)\r\n | ^~~~~~~~~~~~~~~~~~~~\r\n./Modules/posixmodule.c:15611:11: note: in definition of macro 'PROBE'\r\n15611 | if (test) { \\\r\n | ^~~~\r\nmake: *** [Makefile:2695: Modules/posixmodule.o] Error 1\r\nmake: *** Waiting for unfinished jobs....\r\n```\r\n\r\nIn `Modules/posixmodule.c`, Python conditionally defines a series of macros that indicate whether a system call is supported based on `#ifdef` checks. By default, the clang specific `__builtin_available()` compiler built-in function is used to check them. But if `__builtin_available()` is unavailable, a fallback is also provided.\r\n\r\nFor example, for `HAVE_FSTATAT_RUNTIME`, we have:\r\n\r\n```\r\n#ifdef HAVE_BUILTIN_AVAILABLE\r\n# define HAVE_FSTATAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)\r\n// [...]\r\n\r\n#else /* Xcode 8 or earlier */\r\n\r\n /* __builtin_available is not present in these compilers, but\r\n * some of the symbols might be weak linked (10.10 SDK or later\r\n * deploying on 10.9.\r\n *\r\n * Fall back to the older style of availability checking for\r\n * symbols introduced in macOS 10.10.\r\n */\r\n\r\n# ifdef HAVE_FSTATAT\r\n# define HAVE_FSTATAT_RUNTIME (fstatat != NULL)\r\n# endif\r\n\r\n#endif\r\n\r\n```\r\n\r\nThe fallback is important because it's not only used to support older Xcode or macOS, but it also provides fallback when GCC is used. The function `__builtin_available()` is clang-only and does not exist in GCC. In the past, this was handled by the `else` portion of the `ifdef`, so it worked on GCC as well. Unfortunately, when `HAVE_MKFIFOAT_RUNTIME` and `HAVE_MKDIRAT_RUNTIME` have been added to the code, a fallback was never provided, thus, compiling Python 3.11 with GCC now fails due to undeclared macros.\r\n\r\n# Your environment\r\n\r\n\u003c!-- Include as many relevant details as possible about the environment you experienced the bug in --\u003e\r\n\r\n- CPython versions tested on: Python 3.11.3\r\n- Operating system and architecture: macOS 13.2.1\r\n- GCC 12.2.0\r\n\r\n\u003c!--\r\nYou can freely edit this text. Remove any lines you believe are unnecessary.\r\n--\u003e\r\n\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-104129\n* gh-104187\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/biergaizi","@type":"Person","name":"biergaizi"},"datePublished":"2023-05-02T21:38:50.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/104106/cpython/issues/104106"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:b2a7ff2d-b0f5-1869-db87-8fbaf85e93f8 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AE04:3F06C5:320130:43A09A:6969DA3D |
| html-safe-nonce | 5bb3281cda2dd9324ea48c65cc8db5377d4be6e26ee2c24c0d07c932a7e110ef |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBRTA0OjNGMDZDNTozMjAxMzA6NDNBMDlBOjY5NjlEQTNEIiwidmlzaXRvcl9pZCI6IjE2NTIyNzYyNTU3Mzg5ODgxMyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | bde449b8b883a508ce904b47ea98431c53772a1241beb199d45e5ada49395b73 |
| hovercard-subject-tag | issue:1693134879 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/104106/issue_layout |
| twitter:image | https://opengraph.githubassets.com/aef435b3c36032bdba23aab489bd7591c6523306b1149bf84cd935ebd31ca393/python/cpython/issues/104106 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/aef435b3c36032bdba23aab489bd7591c6523306b1149bf84cd935ebd31ca393/python/cpython/issues/104106 |
| og:image:alt | Bug report Due to missing fallback macro definitions in Modules/posixmodule.c (source) for HAVE_MKFIFOAT_RUNTIME and HAVE_MKNODAT_RUNTIME, Python 3.11 cannot be built with GCC on macOS, due to the ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | biergaizi |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7b32f1c7c4549428ee399213e8345494fc55b5637195d3fc5f493657579235e8 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | bdde15ad1b403e23b08bbd89b53fbe6bdf688cad |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width