.. versionadded:: 3.10
+.. option:: --enable-static-libpython-for-interpreter
+
+ Do not link the Python interpreter binary (``python3``) against the
+ shared Python library; instead, statically link the interpreter
+ against ``libpython`` as if ``--enable-shared`` had not been used,
+ but continue to build the shared ``libpython`` (for use by other
+ programs).
+
+ This option does nothing if ``--enable-shared`` is not used.
+
+ The default (when ``-enable-shared`` is used) is to link the Python
+ interpreter against the built shared library.
+
+ .. versionadded:: next
+
Libraries options
-----------------
--- /dev/null
+Add a new ``./configure`` option
+:option:`--enable-static-libpython-for-interpreter` which, when used
+with :option:`--enable-shared`, continues to build the shared library
+but does not use it for the interpreter. Instead, libpython is
+statically linked into the interpreter, as if :option:`--enable-shared`
+had not been used. This allows you to do a single build and get a Python
+interpreter binary that does not use a shared library but also get a
+shared library for use by other programs.
with_suffix
enable_shared
with_static_libpython
+enable_static_libpython_for_interpreter
enable_profiling
enable_gil
with_pydebug
no)
--enable-shared enable building a shared Python library (default is
no)
+ --enable-static-libpython-for-interpreter
+ even with --enable-shared, statically link libpython
+ into the interpreter (default is to use the shared
+ library)
--enable-profiling enable C-level code profiling with gprof (default is
no)
--disable-gil enable support for running without the GIL (default
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-static-libpython-for-interpreter" >&5
+printf %s "checking for --enable-static-libpython-for-interpreter... " >&6; }
+# Check whether --enable-static-libpython-for-interpreter was given.
+if test ${enable_static_libpython_for_interpreter+y}
+then :
+ enableval=$enable_static_libpython_for_interpreter;
+fi
+
+
+if test -z "$enable_static_libpython_for_interpreter"
+then
+ enable_static_libpython_for_interpreter="no"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static_libpython_for_interpreter" >&5
+printf "%s\n" "$enable_static_libpython_for_interpreter" >&6; }
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --enable-profiling" >&5
printf %s "checking for --enable-profiling... " >&6; }
# Check whether --enable-profiling was given.
LIBRARY_DEPS="\$(LIBRARY) $LIBRARY_DEPS"
fi
# Link Python program to the shared library
- LINK_PYTHON_OBJS='$(BLDLIBRARY)'
+ if test "$enable_static_libpython_for_interpreter" = "yes"; then
+ LINK_PYTHON_OBJS='$(LIBRARY_OBJS)'
+ else
+ LINK_PYTHON_OBJS='$(BLDLIBRARY)'
+ fi
else
if test "$STATIC_LIBPYTHON" = 0; then
# Build Python needs object files but don't need to build
if test "x$enable_shared" = xyes
then :
- BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)"
+ if test "x$enable_static_libpython_for_interpreter" = xno
+then :
+
+ BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)"
+
+fi
fi
[AC_MSG_RESULT([yes])])
AC_SUBST([STATIC_LIBPYTHON])
+AC_MSG_CHECKING([for --enable-static-libpython-for-interpreter])
+AC_ARG_ENABLE([static-libpython-for-interpreter],
+ AS_HELP_STRING([--enable-static-libpython-for-interpreter],
+ [even with --enable-shared, statically link libpython into the interpreter (default is to use the shared library)]))
+
+if test -z "$enable_static_libpython_for_interpreter"
+then
+ enable_static_libpython_for_interpreter="no"
+fi
+AC_MSG_RESULT([$enable_static_libpython_for_interpreter])
+
AC_MSG_CHECKING([for --enable-profiling])
AC_ARG_ENABLE([profiling],
AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)]))
LIBRARY_DEPS="\$(LIBRARY) $LIBRARY_DEPS"
fi
# Link Python program to the shared library
- LINK_PYTHON_OBJS='$(BLDLIBRARY)'
+ if test "$enable_static_libpython_for_interpreter" = "yes"; then
+ LINK_PYTHON_OBJS='$(LIBRARY_OBJS)'
+ else
+ LINK_PYTHON_OBJS='$(BLDLIBRARY)'
+ fi
else
if test "$STATIC_LIBPYTHON" = 0; then
# Build Python needs object files but don't need to build
fi
fi
-dnl Enable BOLT of libpython if built.
+dnl Enable BOLT of libpython if built and used by the python3 binary.
+dnl (If it is built but not used, we cannot profile it.)
AC_SUBST([BOLT_BINARIES])
BOLT_BINARIES='$(BUILDPYTHON)'
AS_VAR_IF([enable_shared], [yes], [
- BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)"
+ AS_VAR_IF([enable_static_libpython_for_interpreter], [no], [
+ BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)"
+ ])
])
AC_ARG_VAR(