Skip to content

bpo-45548: Make Modules/Setup easier to read #29143

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 22, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
311 changes: 115 additions & 196 deletions Modules/Setup
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@
# *noconfig* has the same effect as *shared*.)
#
# NOTE: As a standard policy, as many modules as can be supported by a
# platform should be present. The distribution comes with all modules
# enabled that are supported by most platforms and don't require you
# to ftp sources from elsewhere.
# platform should be listed below. The distribution comes with all
# modules enabled that are supported by most platforms and don't
# require you to download sources from elsewhere.


# Some special rules to define PYTHONPATH.
Expand Down Expand Up @@ -94,126 +94,132 @@ COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(TESTPATH)
PYTHONPATH=$(COREPYTHONPATH)


# The modules listed here can't be built as shared libraries for
# various reasons; therefore they are listed here instead of in the
# normal order.

# This only contains the minimal set of modules required to run the
# setup.py script in the root of the Python source tree.

posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix (UNIX) system calls
errno errnomodule.c # posix (UNIX) errno values
pwd pwdmodule.c # this is needed to find out the user's home dir
# if $HOME is not set
_sre -DPy_BUILD_CORE_BUILTIN _sre.c # Fredrik Lundh's new regular expressions
_codecs _codecsmodule.c # access to the builtin codecs and codec registry
_weakref _weakref.c # weak references
_functools -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _functoolsmodule.c # Tools for working with functions and callable objects
_operator -DPy_BUILD_CORE_BUILTIN _operator.c # operator.add() and similar goodies
_collections _collectionsmodule.c # Container types
_abc -DPy_BUILD_CORE_BUILTIN _abc.c # Abstract base classes
itertools itertoolsmodule.c # Functions creating iterators for efficient looping
atexit atexitmodule.c # Register functions to be run at interpreter-shutdown
_signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c
_stat _stat.c # stat.h interface
time -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal timemodule.c # -lm # time operations and variables
_thread -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _threadmodule.c # low-level threading interface

# access to ISO C locale support
_locale -DPy_BUILD_CORE_BUILTIN _localemodule.c # -lintl
# ---
# Built-in modules required to get a functioning interpreter;
# cannot be built as shared!

# Standard I/O baseline
_collections _collectionsmodule.c
_abc -DPy_BUILD_CORE_BUILTIN _abc.c
_codecs _codecsmodule.c
_functools -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _functoolsmodule.c
_io -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c

# faulthandler module
_locale -DPy_BUILD_CORE_BUILTIN _localemodule.c # -lintl
_operator -DPy_BUILD_CORE_BUILTIN _operator.c
_signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c
_sre -DPy_BUILD_CORE_BUILTIN _sre.c
_stat _stat.c
_symtable symtablemodule.c # setup.py can't track the .h file that _symtable depends on.
_thread -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _threadmodule.c
_tracemalloc _tracemalloc.c # See bpo-35053 as to why this is built in.
_weakref _weakref.c
atexit atexitmodule.c
errno errnomodule.c
faulthandler faulthandler.c
itertools itertoolsmodule.c
posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c
pwd pwdmodule.c
time -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal timemodule.c

# debug tool to trace memory blocks allocated by Python
#
# bpo-35053: The module must be builtin since _Py_NewReference()
# can call _PyTraceMalloc_NewReference().
_tracemalloc _tracemalloc.c

# ---
# The rest of the modules listed in this file are all commented out by
# default. Usually they can be detected and built as dynamically
# loaded modules by the new setup.py script added in Python 2.1. If
# you're on a platform that doesn't support dynamic loading, want to
# compile modules statically into the Python binary, or need to
# specify some odd set of compiler switches, you can uncomment the
# appropriate lines below.

# ======================================================================

# The Python symtable module depends on .h files that setup.py doesn't track
_symtable symtablemodule.c
# loaded modules by setup.py. If you're on a platform that doesn't
# support dynamic loading, want to compile modules statically into the
# Python binary, or need to specify some odd set of compiler switches,
# you can uncomment the appropriate lines below.

# Uncommenting the following line tells makesetup that all following
# modules are to be built as shared libraries (see above for more
# detail; also note that *static* or *disabled* cancels this effect):

#*shared*

# GNU readline. Unlike previous Python incarnations, GNU readline is
# now incorporated in an optional module, configured in the Setup file
# instead of by a configure script switch. You may have to insert a
# -L option pointing to the directory where libreadline.* lives,
# and you may have to change -ltermcap to -ltermlib or perhaps remove
# it, depending on your system -- see the GNU readline instructions.
# It's okay for this to be a shared library, too.

#readline readline.c -lreadline -ltermcap


# Modules that should always be present (non UNIX dependent):

#array -DPy_BUILD_CORE_MODULE arraymodule.c # array objects
#cmath cmathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # complex math library functions
#math mathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # math library functions, e.g. sin()
#_contextvars _contextvarsmodule.c # Context Variables
#_struct -DPy_BUILD_CORE_MODULE _struct.c # binary structure packing/unpacking
#_testcapi _testcapimodule.c # Python C API test module; CANNOT be statically compiled!
#_testinternalcapi _testinternalcapi.c -I$(srcdir)/Include/internal -DPy_BUILD_CORE_MODULE # Python internal C API test module
#_random _randommodule.c -DPy_BUILD_CORE_MODULE # Random number generator
#_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator
#_pickle -DPy_BUILD_CORE_MODULE _pickle.c # pickle accelerator
#_datetime _datetimemodule.c # datetime accelerator
#_zoneinfo _zoneinfo.c -DPy_BUILD_CORE_MODULE # zoneinfo accelerator
#_bisect _bisectmodule.c # Bisection algorithms
#_heapq _heapqmodule.c -DPy_BUILD_CORE_MODULE # Heap queue algorithm
#_asyncio _asynciomodule.c # Fast asyncio Future
#_json -I$(srcdir)/Include/internal -DPy_BUILD_CORE_BUILTIN _json.c # _json speedups
#_statistics _statisticsmodule.c # statistics accelerator
#_typing _typingmodule.c # typing accelerator
#_lsprof _lsprof.c rotatingtree.c # cProfile accelerators
#_asyncio _asynciomodule.c
#_bisect _bisectmodule.c
#_blake2 -DPy_BUILD_CORE_BUILTIN _blake2/blake2module.c _blake2/blake2b_impl.c _blake2/blake2s_impl.c
#_codecs_cn cjkcodecs/_codecs_cn.c
#_codecs_hk cjkcodecs/_codecs_hk.c
#_codecs_iso2022 cjkcodecs/_codecs_iso2022.c
#_codecs_jp cjkcodecs/_codecs_jp.c
#_codecs_kr cjkcodecs/_codecs_kr.c
#_codecs_tw cjkcodecs/_codecs_tw.c
#_contextvars _contextvarsmodule.c
#_csv _csv.c
#_datetime _datetimemodule.c
#_elementtree -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -I$(srcdir)/Modules/expat _elementtree.c
#_heapq -DPy_BUILD_CORE_MODULE _heapqmodule.c
#_json -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _json.c
#_lsprof _lsprof.c rotatingtree.c
#_md5 -DPy_BUILD_CORE_BUILTIN md5module.c
#_multibytecodec cjkcodecs/multibytecodec.c
#_opcode _opcode.c
#_queue _queuemodule.c -DPy_BUILD_CORE_MODULE

#unicodedata unicodedata.c -DPy_BUILD_CORE_BUILTIN # static Unicode character database

#_pickle -DPy_BUILD_CORE_MODULE _pickle.c
#_posixsubprocess -DPy_BUILD_CORE_BUILTIN _posixsubprocess.c
#_queue -DPy_BUILD_CORE_MODULE _queuemodule.c
#_random -DPy_BUILD_CORE_MODULE _randommodule.c
#_sha1 -DPy_BUILD_CORE_BUILTIN sha1module.c
#_sha256 -DPy_BUILD_CORE_BUILTIN sha256module.c
#_sha512 -DPy_BUILD_CORE_BUILTIN sha512module.c
#_sha3 -DPy_BUILD_CORE_BUILTIN _sha3/sha3module.c
#_statistics _statisticsmodule.c
#_struct -DPy_BUILD_CORE_MODULE _struct.c
#_typing _typingmodule.c
#_zoneinfo -DPy_BUILD_CORE_MODULE _zoneinfo.c
#array -DPy_BUILD_CORE_MODULE arraymodule.c
#audioop audioop.c
#binascii -DPy_BUILD_CORE_MODULE binascii.c
#cmath -DPy_BUILD_CORE_MODULE cmathmodule.c _math.c # -lm
#math -DPy_BUILD_CORE_MODULE mathmodule.c _math.c # -lm
#pyexpat -DHAVE_EXPAT_CONFIG_H -DXML_POOR_ENTROPY -DUSE_PYEXPAT_CAPI -I$(srcdir)/Modules/expat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c
#unicodedata -DPy_BUILD_CORE_BUILTIN unicodedata.c

# Modules with some UNIX dependencies -- on by default:
# (If you have a really backward UNIX, select and socket may not be
# supported...)

#fcntl fcntlmodule.c # fcntl(2) and ioctl(2)
#spwd spwdmodule.c # spwd(3)
#grp grpmodule.c # grp(3)
#select selectmodule.c # select(2); not on ancient System V
#_socket socketmodule.c # socket(2)
#fcntl fcntlmodule.c # fcntl(2) and ioctl(2)
#grp grpmodule.c # grp(3)
#mmap mmapmodule.c # Also works on win32.
#ossaudiodev ossaudiodev.c
#select selectmodule.c # select(2); not on ancient System V
#spwd spwdmodule.c # spwd(3)
#syslog syslogmodule.c

# Memory-mapped files (also works on Win32).
#mmap mmapmodule.c
# Some more UNIX dependent modules -- off by default, since these
# are not supported by all UNIX systems:

# CSV file helper
#_csv _csv.c
#_crypt _cryptmodule.c # -lcrypt # crypt(3); breaks many builds.
#nis nismodule.c -lnsl # Sun yellow pages -- not everywhere
#termios termios.c # Steen Lumholt's termios module
#resource resource.c # Jeremy Hylton's rlimit interface

# Modules that require external libraries.

#_bz2 _bz2module.c -lbz2
#_dbm _dbmmodule.c # -lndbm # dbm(3)
#_gdbm -I/usr/local/include -L/usr/local/lib -lgdbm _gdbmmodule.c
#_lzma _lzmamodule.c -llzma
#zlib -I$(prefix)/include -L$(exec_prefix)/lib -lz zlibmodule.c

# GNU readline. Unlike previous Python incarnations, GNU readline is
# now incorporated in an optional module, configured in the Setup file
# instead of by a configure script switch. You may have to insert a
# -L option pointing to the directory where libreadline.* lives,
# and you may have to change -ltermcap to -ltermlib or perhaps remove
# it, depending on your system -- see the GNU readline instructions.
# It's okay for this to be a shared library, too.

#readline readline.c -lreadline -ltermcap

# Socket module helper for socket(2)
#_socket socketmodule.c
# Set OpenSSL when not using the system copy found by ./configure.
#OPENSSL=/path/to/openssl/directory

# Socket module helper for SSL support; you must comment out the other
# socket line above, and edit the OPENSSL variable:
# OPENSSL=/path/to/openssl/directory
# _ssl _ssl.c \
# To dynamically link OpenSSL:
#_ssl _ssl.c \
# -I$(OPENSSL)/include -L$(OPENSSL)/lib \
# -lssl -lcrypto \
# -DPy_BUILD_CORE_BUILTIN
Expand All @@ -223,7 +229,7 @@ _symtable symtablemodule.c
# -DPy_BUILD_CORE_BUILTIN

# To statically link OpenSSL:
# _ssl _ssl.c \
#_ssl _ssl.c \
# -I$(OPENSSL)/include -L$(OPENSSL)/lib \
# -l:libssl.a -Wl,--exclude-libs,libssl.a \
# -l:libcrypto.a -Wl,--exclude-libs,libcrypto.a \
Expand All @@ -233,52 +239,6 @@ _symtable symtablemodule.c
# -l:libcrypto.a -Wl,--exclude-libs,libcrypto.a \
# -DPy_BUILD_CORE_BUILTIN

# The crypt module is now disabled by default because it breaks builds
# on many systems (where -lcrypt is needed), e.g. Linux (I believe).

#_crypt _cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems


# Some more UNIX dependent modules -- off by default, since these
# are not supported by all UNIX systems:

#nis nismodule.c -lnsl # Sun yellow pages -- not everywhere
#termios termios.c # Steen Lumholt's termios module
#resource resource.c # Jeremy Hylton's rlimit interface

#_posixsubprocess -DPy_BUILD_CORE_BUILTIN _posixsubprocess.c # POSIX subprocess module helper

# Multimedia modules -- off by default.
# These don't work for 64-bit platforms!!!
# #993173 says audioop works on 64-bit platforms, though.
# These represent audio samples or images as strings:

#audioop audioop.c # Operations on audio samples


# Note that the _md5 and _sha modules are normally only built if the
# system does not have the OpenSSL libs containing an optimized version.

# The _md5 module implements the RSA Data Security, Inc. MD5
# Message-Digest Algorithm, described in RFC 1321.

#_md5 md5module.c -DPy_BUILD_CORE_BUILTIN


# The _sha module implements the SHA checksum algorithms.
# (NIST's Secure Hash Algorithms.)
#_sha1 sha1module.c -DPy_BUILD_CORE_BUILTIN
#_sha256 sha256module.c -DPy_BUILD_CORE_BUILTIN
#_sha512 sha512module.c -DPy_BUILD_CORE_BUILTIN
#_sha3 _sha3/sha3module.c -DPy_BUILD_CORE_BUILTIN

# _blake module
#_blake2 _blake2/blake2module.c _blake2/blake2b_impl.c _blake2/blake2s_impl.c -DPy_BUILD_CORE_BUILTIN

# Compression
#_bz2 _bz2module.c -lbz2
#_lzma _lzmamodule.c -llzma

# The _tkinter module.
#
# The command for _tkinter is long and site specific. Please
Expand Down Expand Up @@ -322,75 +282,34 @@ _symtable symtablemodule.c
# *** Always uncomment this; X11 libraries to link with:
# -lX11

# Lance Ellinghaus's syslog module
#syslog syslogmodule.c # syslog daemon interface


# Curses support, requiring the System V version of curses, often
# provided by the ncurses library. e.g. on Linux, link with -lncurses
# instead of -lcurses).

#_curses _cursesmodule.c -lcurses -ltermcap -DPy_BUILD_CORE_MODULE
# Wrapper for the panel library that's part of ncurses and SYSV curses.
#_curses_panel _curses_panel.c -lpanel -lncurses


# Modules that provide persistent dictionary-like semantics. You will
# probably want to arrange for at least one of them to be available on
# your machine, though none are defined by default because of library
# dependencies. The Python module dbm/__init__.py provides an
# implementation independent wrapper for these; dbm/dumb.py provides
# similar functionality (but slower of course) implemented in Python.

#_dbm _dbmmodule.c # dbm(3) may require -lndbm or similar

# Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm:

#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm


# Helper module for various ascii-encoders
#binascii binascii.c -DPy_BUILD_CORE_MODULE

# Andrew Kuchling's zlib module.
# This require zlib 1.1.3 (or later).
# See http://www.gzip.org/zlib/
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

# Interface to the Expat XML parser
# More information on Expat can be found at www.libexpat.org.
#
#pyexpat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DXML_POOR_ENTROPY -DUSE_PYEXPAT_CAPI

# Hye-Shik Chang's CJKCodecs
#_curses -DPy_BUILD_CORE_MODULE -lcurses -ltermcap _cursesmodule.c

# multibytecodec is required for all the other CJK codec modules
#_multibytecodec cjkcodecs/multibytecodec.c

#_codecs_cn cjkcodecs/_codecs_cn.c
#_codecs_hk cjkcodecs/_codecs_hk.c
#_codecs_iso2022 cjkcodecs/_codecs_iso2022.c
#_codecs_jp cjkcodecs/_codecs_jp.c
#_codecs_kr cjkcodecs/_codecs_kr.c
#_codecs_tw cjkcodecs/_codecs_tw.c

# Example -- included for reference only:
# xx xxmodule.c
# Wrapper for the panel library that's part of ncurses and SYSV curses.
#_curses_panel -lpanel -lncurses _curses_panel.c

# Another example -- the 'xxsubtype' module shows C-level subtyping in action
xxsubtype xxsubtype.c
# Examples

# Limited API examples
#xx xxmodule.c
#xxlimited xxlimited.c
#xxlimited_35 xxlimited_35.c
xxsubtype xxsubtype.c # Required for the test suite to pass!

# Testing

# For testing
#_xxsubinterpreters _xxsubinterpretersmodule.c
#_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c
#_testbuffer _testbuffer.c
#_testcapi _testcapimodule.c # CANNOT be statically compiled!
#_testimportmultiple _testimportmultiple.c
#_testinternalcapi -DPy_BUILD_CORE_MODULE -I$(srcdir)/Include/internal _testinternalcapi.c
#_testmultiphase _testmultiphase.c


# ---
# Uncommenting the following line tells makesetup that all following modules
# are not built (see above for more detail).
#
Expand Down