$(MAKESETUP) \
$(srcdir)/Modules/Setup \
Modules/Setup.local \
+ $(srcdir)/Modules/Setup.bootstrap \
Modules/Setup.stdlib
$(SHELL) $(MAKESETUP) -c $(srcdir)/Modules/config.c.in \
-s Modules \
Modules/Setup.local \
+ $(srcdir)/Modules/Setup.bootstrap \
$(srcdir)/Modules/Setup
@mv config.c Modules
@echo "The Makefile was updated, you may need to re-run make."
$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
$(INSTALL_DATA) Makefile $(DESTDIR)$(LIBPL)/Makefile
$(INSTALL_DATA) $(srcdir)/Modules/Setup $(DESTDIR)$(LIBPL)/Setup
+ $(INSTALL_DATA) $(srcdir)/Modules/Setup.bootstrap $(DESTDIR)$(LIBPL)/Setup.bootstrap
$(INSTALL_DATA) Modules/Setup.stdlib $(DESTDIR)$(LIBPL)/Setup.stdlib
$(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local
$(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc
--- /dev/null
+Mandatory core modules, that are required to bootstrap Python, are now in
+``Modules/Setup.bootstrap``.
# ---
-# Built-in modules required to get a functioning interpreter;
-# cannot be built as shared!
-
-_collections _collectionsmodule.c
-_abc _abc.c
-_codecs _codecsmodule.c
-_functools _functoolsmodule.c
-_io -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
-_locale _localemodule.c
-_operator _operator.c
-_signal signalmodule.c
-_sre _sre.c
-_stat _stat.c
-_symtable symtablemodule.c
-_thread _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 posixmodule.c
-pwd pwdmodule.c
-time timemodule.c
-
+# Built-in modules required to get a functioning interpreter are listed in
+# Modules/Setup.bootstrap.
# ---
# The rest of the modules listed in this file are all commented out by
--- /dev/null
+# -*- makefile -*-
+
+# ---
+# Built-in modules required to get a functioning interpreter;
+# cannot be built as shared!
+
+# module C APIs are used in core
+atexit atexitmodule.c
+faulthandler faulthandler.c
+posix posixmodule.c
+_signal signalmodule.c
+_tracemalloc _tracemalloc.c
+
+# modules used by importlib, deepfreeze, freeze, runpy, and sysconfig
+_codecs _codecsmodule.c
+_collections _collectionsmodule.c
+errno errnomodule.c
+_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c
+itertools itertoolsmodule.c
+_sre _sre.c
+_thread _threadmodule.c
+time timemodule.c
+_weakref _weakref.c
+
+# commonly used core modules
+_abc _abc.c
+_functools _functoolsmodule.c
+_locale _localemodule.c
+_operator _operator.c
+_stat _stat.c
+_symtable symtablemodule.c
+
+# for systems without $HOME env, used by site._getuserbase()
+pwd pwdmodule.c
############################################################################
# Modules that should always be present (POSIX and Windows):
+# needs libm and on some platforms librt
+@MODULE__DATETIME_TRUE@_datetime _datetimemodule.c
+
# _decimal uses libmpdec
# either static libmpdec.a from Modules/_decimal/libmpdec or libmpdec.so
# with ./configure --with-system-libmpdec
MODULE_PYEXPAT_TRUE
MODULE_OSSAUDIODEV_FALSE
MODULE_OSSAUDIODEV_TRUE
+MODULE__DATETIME_FALSE
+MODULE__DATETIME_TRUE
+MODULE_TIME_FALSE
+MODULE_TIME_TRUE
+MODULE__IO_FALSE
+MODULE__IO_TRUE
TEST_MODULES
LIBRARY_DEPS
STATIC_LIBPYTHON
+
+
+ if true; then
+ MODULE__IO_TRUE=
+ MODULE__IO_FALSE='#'
+else
+ MODULE__IO_TRUE='#'
+ MODULE__IO_FALSE=
+fi
+
+
+ as_fn_append MODULE_BLOCK "MODULE__IO_CFLAGS=-I\$(srcdir)/Modules/_io$as_nl"
+
+
+
+
+ if true; then
+ MODULE_TIME_TRUE=
+ MODULE_TIME_FALSE='#'
+else
+ MODULE_TIME_TRUE='#'
+ MODULE_TIME_FALSE=
+fi
+
+
+
+ as_fn_append MODULE_BLOCK "MODULE_TIME_LDFLAGS=$TIMEMODULE_LIB$as_nl"
+
+
+
+
+ if true; then
+ MODULE__DATETIME_TRUE=
+ MODULE__DATETIME_FALSE='#'
+else
+ MODULE__DATETIME_TRUE='#'
+ MODULE__DATETIME_FALSE=
+fi
+
+
+
+ as_fn_append MODULE_BLOCK "MODULE__DATETIME_LDFLAGS=$TIMEMODULE_LIB $LIBM$as_nl"
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module ossaudiodev" >&5
$as_echo_n "checking for stdlib extension module ossaudiodev... " >&6; }
case $py_stdlib_not_available in #(
+if test -z "${MODULE__IO_TRUE}" && test -z "${MODULE__IO_FALSE}"; then
+ as_fn_error $? "conditional \"MODULE__IO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MODULE_TIME_TRUE}" && test -z "${MODULE_TIME_FALSE}"; then
+ as_fn_error $? "conditional \"MODULE_TIME\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MODULE__DATETIME_TRUE}" && test -z "${MODULE__DATETIME_FALSE}"; then
+ as_fn_error $? "conditional \"MODULE__DATETIME\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${MODULE_OSSAUDIODEV_TRUE}" && test -z "${MODULE_OSSAUDIODEV_FALSE}"; then
as_fn_error $? "conditional \"MODULE_OSSAUDIODEV\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
echo "creating Makefile" >&6
$SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \
-s Modules \
- Modules/Setup.local $srcdir/Modules/Setup
+ Modules/Setup.local $srcdir/Modules/Setup.bootstrap $srcdir/Modules/Setup
mv config.c Modules
if test -z "$PKG_CONFIG"; then
m4_popdef([modstate])dnl
])
+dnl Define simple, always enabled stdlib extension module
+dnl PY_STDLIB_MOD_SIMPLE([NAME], [CFLAGS], [LDFLAGS])
+dnl cflags and ldflags are optional
+AC_DEFUN([PY_STDLIB_MOD_SIMPLE], [
+ m4_pushdef([modcond], [MODULE_]m4_toupper([$1]))dnl
+ AM_CONDITIONAL(modcond, [true])
+ m4_ifval([$2], [
+ _MODULE_BLOCK_ADD([MODULE_]m4_toupper([$1])[_CFLAGS], [$2])
+ ])
+ m4_ifval([$3], [
+ _MODULE_BLOCK_ADD([MODULE_]m4_toupper([$1])[_LDFLAGS], [$3])
+ ])
+ m4_popdef([modcond])dnl
+])
+
+dnl static modules in Modules/Setup.bootstrap
+PY_STDLIB_MOD_SIMPLE([_io], [-I\$(srcdir)/Modules/_io], [])
+PY_STDLIB_MOD_SIMPLE([time], [], [$TIMEMODULE_LIB])
+
+dnl always enabled extension modules
+PY_STDLIB_MOD_SIMPLE([_datetime], [], [$TIMEMODULE_LIB $LIBM])
+
dnl platform specific extensions
PY_STDLIB_MOD([ossaudiodev],
[], [test "$ac_cv_header_linux_soundcard_h" = yes -o "$ac_cv_header_sys_soundcard_h" = yes])
echo "creating Makefile" >&AS_MESSAGE_FD
$SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \
-s Modules \
- Modules/Setup.local $srcdir/Modules/Setup
+ Modules/Setup.local $srcdir/Modules/Setup.bootstrap $srcdir/Modules/Setup
mv config.c Modules
if test -z "$PKG_CONFIG"; then
if lib:
time_libs.append(lib)
- # time operations and variables
- self.add(Extension('time', ['timemodule.c'],
- libraries=time_libs))
# libm is needed by delta_new() that uses round() and by accum() that
# uses modf().
- self.add(Extension('_datetime', ['_datetimemodule.c'],
- libraries=['m']))
+ self.addext(Extension('_datetime', ['_datetimemodule.c']))
# zoneinfo module
self.add(Extension('_zoneinfo', ['_zoneinfo.c']))
# random number generator implemented in C
self.add(Extension('_opcode', ['_opcode.c']))
# asyncio speedups
self.add(Extension("_asyncio", ["_asynciomodule.c"]))
- # _abc speedups
- self.add(Extension("_abc", ["_abc.c"]))
# _queue module
self.add(Extension("_queue", ["_queuemodule.c"]))
# _statistics module
libs = ['bsd']
self.add(Extension('fcntl', ['fcntlmodule.c'],
libraries=libs))
- # pwd(3)
- self.add(Extension('pwd', ['pwdmodule.c']))
# grp(3)
if not VXWORKS:
self.add(Extension('grp', ['grpmodule.c']))
self.configure_compiler()
self.init_inc_lib_dirs()
+ # Some C extensions are built by entries in Modules/Setup.bootstrap.
+ # These are extensions are required to bootstrap the interpreter or
+ # build process.
self.detect_simple_extensions()
if TEST_EXTENSIONS:
self.detect_test_extensions()