This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: ifdef uses of EPOLLxxx macros so we can compile on systems that don't have them
Type: compile error Stage: resolved
Components: Build Versions: Python 3.6, Python 3.4, Python 3.5, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: WanderingLogic, neologix, python-dev, zach.ware
Priority: normal Keywords: patch

Created on 2015-03-12 20:41 by WanderingLogic, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
epoll-macros-patch.diff WanderingLogic, 2015-03-12 20:41 Patch to wrap uses of unusual EPOLLxxx macros in ifdefs review
Messages (4)
msg237984 - (view) Author: Matt Frank (WanderingLogic) * Date: 2015-03-12 20:41
With the LSB (Linux Standard Base) headers for libc Modules/selectmodule.c fails to compile because we have code that uses EPOLLRDNORM, EPOLLRDBAND, EPOLLWRNORM and EPOLLMSG without first checking that they are defined.

The patch wraps the five uses of PyModule_AddIntMacro in #ifdefs, following exactly the same pattern that is used for the POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLMSG macros 30 lines earlier in selectmodule.c.

The only documentation I can find for these five macros from Linux is (a) in the Python documentation for the select module!  (https://docs.python.org/3.4/library/select.html#edge-and-level-trigger-polling-epoll-objects) and (b) on this StackOverflow answer: http://stackoverflow.com/a/27143672/2209313.

They are not described on http://man7.org/linux/man-pages/man2/epoll_ctl.2.html (where the rest of the EPOLL macros are defined), nor at http://linux.die.net/man/4/epoll.  As explained by the StackOverflow answer they actually are described (indirectly) by http://man7.org/linux/man-pages/man2/poll.2.html.

Nor are these macros in the Linux Foundation's LSB database: http://www.linuxbase.org/navigator/browse/headgroup.php?cmd=list-byheadgroup&HGid=1398.

Obviously almost all modern Linuxes have these macros, so we should keep them, but we should also compile with the LSB headers (since compiling and linking against the LSB SDK (http://www.linuxfoundation.org/collaborate/workgroups/lsb/group) is one of the easiest ways to produce a Python binary that will actually run on most important supported Linux distros (e.g., RHEL 5).

http://man7.org/linux/man-pages/man7/epoll.7.html,
msg247733 - (view) Author: Zachary Ware (zach.ware) * (Python committer) Date: 2015-07-31 03:51
Looks good to me.
msg247850 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-08-02 02:39
New changeset e38470b49d3c by Zachary Ware in branch '2.7':
Issue #23652: Make the select module compile against LSB headers.
https://hg.python.org/cpython/rev/e38470b49d3c

New changeset c18a18b65a49 by Zachary Ware in branch '3.4':
Issue #23652: Make the select module compile against LSB headers.
https://hg.python.org/cpython/rev/c18a18b65a49

New changeset a99f17c752d8 by Zachary Ware in branch '3.5':
Issue #23652: Merge with 3.4
https://hg.python.org/cpython/rev/a99f17c752d8

New changeset c7273b46980c by Zachary Ware in branch 'default':
Closes #23652: Merge with 3.5
https://hg.python.org/cpython/rev/c7273b46980c
msg247851 - (view) Author: Zachary Ware (zach.ware) * (Python committer) Date: 2015-08-02 02:40
Thanks for the patch!
History
Date User Action Args
2022-04-11 14:58:13adminsetgithub: 67840
2015-08-02 02:40:31zach.waresetmessages: + msg247851
2015-08-02 02:39:58python-devsetstatus: open -> closed

nosy: + python-dev
messages: + msg247850

resolution: fixed
stage: commit review -> resolved
2015-07-31 03:51:38zach.waresetversions: + Python 3.4
nosy: + zach.ware

messages: + msg247733

stage: commit review
2015-03-12 20:59:43ned.deilysetnosy: + neologix
2015-03-12 20:47:20WanderingLogicsettype: compile error
2015-03-12 20:41:46WanderingLogiccreate