diff --git a/.gitignore b/.gitignore
index 0c1c9086cf7..efdbfa8f616 100644
--- a/.gitignore
+++ b/.gitignore
@@ -176,14 +176,32 @@ build/bin/sage-build-env-config
 /pkgs/*/.tox
 
 /pkgs/sagemath-objects/setup.cfg
+/pkgs/sagemath-bliss/setup.cfg
+/pkgs/sagemath-coxeter3/setup.cfg
+/pkgs/sagemath-mcqd/setup.cfg
+/pkgs/sagemath-meataxe/setup.cfg
+/pkgs/sagemath-sirocco/setup.cfg
+/pkgs/sagemath-tdlib/setup.cfg
 /pkgs/sagemath-categories/setup.cfg
 /pkgs/sagemath-environment/setup.cfg
 /pkgs/sagemath-repl/setup.cfg
 /pkgs/sagemath-objects/pyproject.toml
+/pkgs/sagemath-bliss/pyproject.toml
+/pkgs/sagemath-coxeter3/pyproject.toml
+/pkgs/sagemath-mcqd/pyproject.toml
+/pkgs/sagemath-meataxe/pyproject.toml
+/pkgs/sagemath-sirocco/pyproject.toml
+/pkgs/sagemath-tdlib/pyproject.toml
 /pkgs/sagemath-categories/pyproject.toml
 /pkgs/sagemath-environment/pyproject.toml
 /pkgs/sagemath-repl/pyproject.toml
 /pkgs/sagemath-objects/requirements.txt
+/pkgs/sagemath-bliss/requirements.txt
+/pkgs/sagemath-coxeter3/requirements.txt
+/pkgs/sagemath-mcqd/requirements.txt
+/pkgs/sagemath-meataxe/requirements.txt
+/pkgs/sagemath-sirocco/requirements.txt
+/pkgs/sagemath-tdlib/requirements.txt
 /pkgs/sagemath-categories/requirements.txt
 /pkgs/sagemath-environment/requirements.txt
 /pkgs/sagemath-repl/requirements.txt
diff --git a/README.md b/README.md
index f086349a015..9982460cd78 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
 >   "Creating a Viable Open Source Alternative to
 >   Magma, Maple, Mathematica, and MATLAB"
 
->   Copyright (C) 2005-2022 The Sage Development Team
+>   Copyright (C) 2005-2023 The Sage Development Team
 
 https://www.sagemath.org
 
diff --git a/build/make/Makefile.in b/build/make/Makefile.in
index 370d436bb2c..b6858173362 100644
--- a/build/make/Makefile.in
+++ b/build/make/Makefile.in
@@ -135,7 +135,13 @@ PYPI_WHEEL_PACKAGES =				\
 	sagemath_environment			\
 	sagemath_objects			\
 	sagemath_repl				\
-	sagemath_categories
+	sagemath_categories			\
+	sagemath_bliss 				\
+	sagemath_mcqd 				\
+	sagemath_tdlib				\
+	sagemath_coxeter3 			\
+	sagemath_sirocco			\
+	sagemath_meataxe
 
 # sage_docbuild is here, not in PYPI_WHEEL_PACKAGES, because it depends on sagelib
 WHEEL_PACKAGES = $(PYPI_WHEEL_PACKAGES)		\
diff --git a/build/pkgs/bliss/distros/gentoo.txt b/build/pkgs/bliss/distros/gentoo.txt
new file mode 100644
index 00000000000..73add6de49d
--- /dev/null
+++ b/build/pkgs/bliss/distros/gentoo.txt
@@ -0,0 +1 @@
+sci-libs/bliss
diff --git a/build/pkgs/sagelib/install-requires.txt b/build/pkgs/sagelib/install-requires.txt
index 6e35e566194..df32c402b9d 100644
--- a/build/pkgs/sagelib/install-requires.txt
+++ b/build/pkgs/sagelib/install-requires.txt
@@ -1,2 +1,2 @@
 # This file is updated on every release by the sage-update-version script
-sagelib ~= 10.1b7
+sagemath-standard ~= 10.1b7
diff --git a/build/pkgs/sagelib/spkg-install b/build/pkgs/sagelib/spkg-install
index ed6bb969f31..730829b3101 100755
--- a/build/pkgs/sagelib/spkg-install
+++ b/build/pkgs/sagelib/spkg-install
@@ -55,6 +55,8 @@ unset SAGE_PKG_CONFIG_PATH
 
 SITEPACKAGESDIR=$(python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')
 
+export SAGE_OPTIONAL_PACKAGES_WITH_EXTENSIONS=""
+
 if [ "$SAGE_EDITABLE" = yes ]; then
     # In an incremental build, we may need to uninstall old versions installed by distutils
     # under the old distribution name "sage" (before #30912, which switched to setuptools
@@ -79,6 +81,7 @@ else
         # Compiling sage/interfaces/sagespawn.pyx because it depends on /private/var/folders/38/wnh4gf1552g_crsjnv2vmmww0000gp/T/pip-build-env-609n5985/overlay/lib/python3.10/site-packages/Cython/Includes/posix/unistd.pxd
         time sdh_pip_install --no-build-isolation .
     else
+        SAGE_OPTIONAL_PACKAGES_WITH_EXTENSIONS+="mcqd,tdlib,coxeter3,sirocco,meataxe,bliss"
         time python3 -u setup.py --no-user-cfg build install || exit 1
     fi
 fi
diff --git a/build/pkgs/sagemath_bliss/SPKG.rst b/build/pkgs/sagemath_bliss/SPKG.rst
new file mode 120000
index 00000000000..b4545b4bda6
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/SPKG.rst
@@ -0,0 +1 @@
+src/README.rst
\ No newline at end of file
diff --git a/build/pkgs/sagemath_bliss/bootstrap b/build/pkgs/sagemath_bliss/bootstrap
new file mode 120000
index 00000000000..40542346a4e
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/bootstrap
@@ -0,0 +1 @@
+../sagelib/bootstrap
\ No newline at end of file
diff --git a/build/pkgs/sagemath_bliss/dependencies b/build/pkgs/sagemath_bliss/dependencies
new file mode 100644
index 00000000000..279e79ace91
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/dependencies
@@ -0,0 +1 @@
+$(PYTHON) bliss cysignals | $(PYTHON_TOOLCHAIN) sage_setup sage_conf sagemath_environment cython pkgconfig
diff --git a/build/pkgs/sagemath_bliss/distros/conda.txt b/build/pkgs/sagemath_bliss/distros/conda.txt
new file mode 100644
index 00000000000..d6139d966ec
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/distros/conda.txt
@@ -0,0 +1 @@
+sagemath-bliss
diff --git a/build/pkgs/sagemath_bliss/install-requires.txt b/build/pkgs/sagemath_bliss/install-requires.txt
new file mode 100644
index 00000000000..63b4f674b7a
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/install-requires.txt
@@ -0,0 +1,2 @@
+# This file is updated on every release by the sage-update-version script
+sagemath-bliss ~= 10.0
diff --git a/build/pkgs/sagemath_bliss/package-version.txt b/build/pkgs/sagemath_bliss/package-version.txt
new file mode 120000
index 00000000000..c4540217bba
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/package-version.txt
@@ -0,0 +1 @@
+src/VERSION.txt
\ No newline at end of file
diff --git a/build/pkgs/sagemath_bliss/spkg-install b/build/pkgs/sagemath_bliss/spkg-install
new file mode 100755
index 00000000000..7ce202f09ae
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/spkg-install
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# From sage-spkg.
+# For type=script packages, the build rule in build/make/Makefile sources
+# sage-env but not sage-dist-helpers.
+lib="$SAGE_ROOT/build/bin/sage-dist-helpers"
+source "$lib"
+if [ $? -ne 0 ]; then
+    echo >&2 "Error: failed to source $lib"
+    echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
+    exit 1
+fi
+cd src
+
+export PIP_NO_INDEX=true
+export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"
+
+if [ "$SAGE_EDITABLE" = yes ]; then
+    # SAGE_ROOT/src/setup.py installs everything, nothing to do...
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # ... except we build the wheel if requested
+        sdh_setup_bdist_wheel && sdh_store_wheel .
+    fi
+else
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # Modularized install via wheels
+        sdh_pip_install .
+    # else nothing to do in legacy direct installation.
+    fi
+fi
diff --git a/build/pkgs/sagemath_bliss/spkg-src b/build/pkgs/sagemath_bliss/spkg-src
new file mode 100755
index 00000000000..483b2f349e3
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/spkg-src
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Script to prepare an sdist tarball for sagemath-bliss
+# This script is not used during build.
+#
+# HOW TO MAKE THE TARBALL:
+# ./sage --sh build/pkgs/sagemath_bliss/spkg-src
+
+if [ -z "$SAGE_ROOT" ] ; then
+    echo >&2 "Error - SAGE_ROOT undefined ... exiting"
+    echo >&2 "Maybe run 'sage -sh'?"
+    exit 1
+fi
+
+# Exit on failure
+set -e
+
+cd build/pkgs/sagemath_bliss
+
+cd src
+# Get rid of old *.egg-info/SOURCES.txt
+rm -Rf *.egg-info
+
+python3 -m build --sdist --no-isolation --skip-dependency-check --outdir "$SAGE_DISTFILES"
diff --git a/build/pkgs/sagemath_bliss/src b/build/pkgs/sagemath_bliss/src
new file mode 120000
index 00000000000..51c70b82b95
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/src
@@ -0,0 +1 @@
+../../../pkgs/sagemath-bliss
\ No newline at end of file
diff --git a/build/pkgs/sagemath_bliss/type b/build/pkgs/sagemath_bliss/type
new file mode 100644
index 00000000000..134d9bc32d5
--- /dev/null
+++ b/build/pkgs/sagemath_bliss/type
@@ -0,0 +1 @@
+optional
diff --git a/build/pkgs/sagemath_coxeter3/SPKG.rst b/build/pkgs/sagemath_coxeter3/SPKG.rst
new file mode 120000
index 00000000000..b4545b4bda6
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/SPKG.rst
@@ -0,0 +1 @@
+src/README.rst
\ No newline at end of file
diff --git a/build/pkgs/sagemath_coxeter3/bootstrap b/build/pkgs/sagemath_coxeter3/bootstrap
new file mode 120000
index 00000000000..40542346a4e
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/bootstrap
@@ -0,0 +1 @@
+../sagelib/bootstrap
\ No newline at end of file
diff --git a/build/pkgs/sagemath_coxeter3/dependencies b/build/pkgs/sagemath_coxeter3/dependencies
new file mode 100644
index 00000000000..615392ca427
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/dependencies
@@ -0,0 +1 @@
+$(PYTHON) coxeter3 | $(PYTHON_TOOLCHAIN) sage_setup sagemath_environment cython pkgconfig
diff --git a/build/pkgs/sagemath_coxeter3/distros/conda.txt b/build/pkgs/sagemath_coxeter3/distros/conda.txt
new file mode 100644
index 00000000000..3ffe2eb8bfc
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/distros/conda.txt
@@ -0,0 +1 @@
+sagemath-coxeter3
diff --git a/build/pkgs/sagemath_coxeter3/install-requires.txt b/build/pkgs/sagemath_coxeter3/install-requires.txt
new file mode 100644
index 00000000000..5b13d4be973
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/install-requires.txt
@@ -0,0 +1,2 @@
+# This file is updated on every release by the sage-update-version script
+sagemath-coxeter3 ~= 10.0
diff --git a/build/pkgs/sagemath_coxeter3/package-version.txt b/build/pkgs/sagemath_coxeter3/package-version.txt
new file mode 120000
index 00000000000..c4540217bba
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/package-version.txt
@@ -0,0 +1 @@
+src/VERSION.txt
\ No newline at end of file
diff --git a/build/pkgs/sagemath_coxeter3/spkg-install b/build/pkgs/sagemath_coxeter3/spkg-install
new file mode 100755
index 00000000000..7ce202f09ae
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/spkg-install
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# From sage-spkg.
+# For type=script packages, the build rule in build/make/Makefile sources
+# sage-env but not sage-dist-helpers.
+lib="$SAGE_ROOT/build/bin/sage-dist-helpers"
+source "$lib"
+if [ $? -ne 0 ]; then
+    echo >&2 "Error: failed to source $lib"
+    echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
+    exit 1
+fi
+cd src
+
+export PIP_NO_INDEX=true
+export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"
+
+if [ "$SAGE_EDITABLE" = yes ]; then
+    # SAGE_ROOT/src/setup.py installs everything, nothing to do...
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # ... except we build the wheel if requested
+        sdh_setup_bdist_wheel && sdh_store_wheel .
+    fi
+else
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # Modularized install via wheels
+        sdh_pip_install .
+    # else nothing to do in legacy direct installation.
+    fi
+fi
diff --git a/build/pkgs/sagemath_coxeter3/spkg-src b/build/pkgs/sagemath_coxeter3/spkg-src
new file mode 100755
index 00000000000..df635f450cf
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/spkg-src
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Script to prepare an sdist tarball for sagemath-coxeter3
+# This script is not used during build.
+#
+# HOW TO MAKE THE TARBALL:
+# ./sage --sh build/pkgs/sagemath_coxeter3/spkg-src
+
+if [ -z "$SAGE_ROOT" ] ; then
+    echo >&2 "Error - SAGE_ROOT undefined ... exiting"
+    echo >&2 "Maybe run 'sage -sh'?"
+    exit 1
+fi
+
+# Exit on failure
+set -e
+
+cd build/pkgs/sagemath_coxeter3
+
+cd src
+# Get rid of old *.egg-info/SOURCES.txt
+rm -Rf *.egg-info
+
+python3 -m build --sdist --no-isolation --skip-dependency-check --outdir "$SAGE_DISTFILES"
diff --git a/build/pkgs/sagemath_coxeter3/src b/build/pkgs/sagemath_coxeter3/src
new file mode 120000
index 00000000000..a9a1c8ae443
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/src
@@ -0,0 +1 @@
+../../../pkgs/sagemath-coxeter3
\ No newline at end of file
diff --git a/build/pkgs/sagemath_coxeter3/type b/build/pkgs/sagemath_coxeter3/type
new file mode 100644
index 00000000000..134d9bc32d5
--- /dev/null
+++ b/build/pkgs/sagemath_coxeter3/type
@@ -0,0 +1 @@
+optional
diff --git a/build/pkgs/sagemath_mcqd/SPKG.rst b/build/pkgs/sagemath_mcqd/SPKG.rst
new file mode 120000
index 00000000000..b4545b4bda6
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/SPKG.rst
@@ -0,0 +1 @@
+src/README.rst
\ No newline at end of file
diff --git a/build/pkgs/sagemath_mcqd/bootstrap b/build/pkgs/sagemath_mcqd/bootstrap
new file mode 120000
index 00000000000..40542346a4e
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/bootstrap
@@ -0,0 +1 @@
+../sagelib/bootstrap
\ No newline at end of file
diff --git a/build/pkgs/sagemath_mcqd/dependencies b/build/pkgs/sagemath_mcqd/dependencies
new file mode 100644
index 00000000000..e383df7dafa
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/dependencies
@@ -0,0 +1 @@
+$(PYTHON) mcqd memory_allocator cysignals | $(PYTHON_TOOLCHAIN) sage_setup cython pkgconfig
diff --git a/build/pkgs/sagemath_mcqd/distros/conda.txt b/build/pkgs/sagemath_mcqd/distros/conda.txt
new file mode 100644
index 00000000000..9504f7f4c76
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/distros/conda.txt
@@ -0,0 +1 @@
+sagemath-mcqd
diff --git a/build/pkgs/sagemath_mcqd/install-requires.txt b/build/pkgs/sagemath_mcqd/install-requires.txt
new file mode 100644
index 00000000000..fed6656d3ef
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/install-requires.txt
@@ -0,0 +1,2 @@
+# This file is updated on every release by the sage-update-version script
+sagemath-mcqd ~= 10.0
diff --git a/build/pkgs/sagemath_mcqd/package-version.txt b/build/pkgs/sagemath_mcqd/package-version.txt
new file mode 120000
index 00000000000..c4540217bba
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/package-version.txt
@@ -0,0 +1 @@
+src/VERSION.txt
\ No newline at end of file
diff --git a/build/pkgs/sagemath_mcqd/spkg-install b/build/pkgs/sagemath_mcqd/spkg-install
new file mode 100755
index 00000000000..7ce202f09ae
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/spkg-install
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# From sage-spkg.
+# For type=script packages, the build rule in build/make/Makefile sources
+# sage-env but not sage-dist-helpers.
+lib="$SAGE_ROOT/build/bin/sage-dist-helpers"
+source "$lib"
+if [ $? -ne 0 ]; then
+    echo >&2 "Error: failed to source $lib"
+    echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
+    exit 1
+fi
+cd src
+
+export PIP_NO_INDEX=true
+export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"
+
+if [ "$SAGE_EDITABLE" = yes ]; then
+    # SAGE_ROOT/src/setup.py installs everything, nothing to do...
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # ... except we build the wheel if requested
+        sdh_setup_bdist_wheel && sdh_store_wheel .
+    fi
+else
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # Modularized install via wheels
+        sdh_pip_install .
+    # else nothing to do in legacy direct installation.
+    fi
+fi
diff --git a/build/pkgs/sagemath_mcqd/spkg-src b/build/pkgs/sagemath_mcqd/spkg-src
new file mode 100755
index 00000000000..c1602f0953e
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/spkg-src
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Script to prepare an sdist tarball for sagemath-mcqd
+# This script is not used during build.
+#
+# HOW TO MAKE THE TARBALL:
+# ./sage --sh build/pkgs/sagemath_mcqd/spkg-src
+
+if [ -z "$SAGE_ROOT" ] ; then
+    echo >&2 "Error - SAGE_ROOT undefined ... exiting"
+    echo >&2 "Maybe run 'sage -sh'?"
+    exit 1
+fi
+
+# Exit on failure
+set -e
+
+cd build/pkgs/sagemath_mcqd
+
+cd src
+# Get rid of old *.egg-info/SOURCES.txt
+rm -Rf *.egg-info
+
+python3 -m build --sdist --no-isolation --skip-dependency-check --outdir "$SAGE_DISTFILES"
diff --git a/build/pkgs/sagemath_mcqd/src b/build/pkgs/sagemath_mcqd/src
new file mode 120000
index 00000000000..03d68b8cbe3
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/src
@@ -0,0 +1 @@
+../../../pkgs/sagemath-mcqd
\ No newline at end of file
diff --git a/build/pkgs/sagemath_mcqd/type b/build/pkgs/sagemath_mcqd/type
new file mode 100644
index 00000000000..134d9bc32d5
--- /dev/null
+++ b/build/pkgs/sagemath_mcqd/type
@@ -0,0 +1 @@
+optional
diff --git a/build/pkgs/sagemath_meataxe/SPKG.rst b/build/pkgs/sagemath_meataxe/SPKG.rst
new file mode 120000
index 00000000000..b4545b4bda6
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/SPKG.rst
@@ -0,0 +1 @@
+src/README.rst
\ No newline at end of file
diff --git a/build/pkgs/sagemath_meataxe/bootstrap b/build/pkgs/sagemath_meataxe/bootstrap
new file mode 120000
index 00000000000..40542346a4e
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/bootstrap
@@ -0,0 +1 @@
+../sagelib/bootstrap
\ No newline at end of file
diff --git a/build/pkgs/sagemath_meataxe/dependencies b/build/pkgs/sagemath_meataxe/dependencies
new file mode 100644
index 00000000000..f100932802a
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/dependencies
@@ -0,0 +1 @@
+$(PYTHON) meataxe | $(PYTHON_TOOLCHAIN) sage_setup sagemath_environment cython pkgconfig
diff --git a/build/pkgs/sagemath_meataxe/distros/conda.txt b/build/pkgs/sagemath_meataxe/distros/conda.txt
new file mode 100644
index 00000000000..b3abc7692fe
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/distros/conda.txt
@@ -0,0 +1 @@
+sagemath-meataxe
diff --git a/build/pkgs/sagemath_meataxe/install-requires.txt b/build/pkgs/sagemath_meataxe/install-requires.txt
new file mode 100644
index 00000000000..9c920e5c5c3
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/install-requires.txt
@@ -0,0 +1,2 @@
+# This file is updated on every release by the sage-update-version script
+sagemath-meataxe ~= 10.0
diff --git a/build/pkgs/sagemath_meataxe/package-version.txt b/build/pkgs/sagemath_meataxe/package-version.txt
new file mode 120000
index 00000000000..c4540217bba
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/package-version.txt
@@ -0,0 +1 @@
+src/VERSION.txt
\ No newline at end of file
diff --git a/build/pkgs/sagemath_meataxe/spkg-install b/build/pkgs/sagemath_meataxe/spkg-install
new file mode 100755
index 00000000000..7ce202f09ae
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/spkg-install
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# From sage-spkg.
+# For type=script packages, the build rule in build/make/Makefile sources
+# sage-env but not sage-dist-helpers.
+lib="$SAGE_ROOT/build/bin/sage-dist-helpers"
+source "$lib"
+if [ $? -ne 0 ]; then
+    echo >&2 "Error: failed to source $lib"
+    echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
+    exit 1
+fi
+cd src
+
+export PIP_NO_INDEX=true
+export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"
+
+if [ "$SAGE_EDITABLE" = yes ]; then
+    # SAGE_ROOT/src/setup.py installs everything, nothing to do...
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # ... except we build the wheel if requested
+        sdh_setup_bdist_wheel && sdh_store_wheel .
+    fi
+else
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # Modularized install via wheels
+        sdh_pip_install .
+    # else nothing to do in legacy direct installation.
+    fi
+fi
diff --git a/build/pkgs/sagemath_meataxe/spkg-src b/build/pkgs/sagemath_meataxe/spkg-src
new file mode 100755
index 00000000000..a0e05c1fc98
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/spkg-src
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Script to prepare an sdist tarball for sagemath-meataxe
+# This script is not used during build.
+#
+# HOW TO MAKE THE TARBALL:
+# ./sage --sh build/pkgs/sagemath_meataxe/spkg-src
+
+if [ -z "$SAGE_ROOT" ] ; then
+    echo >&2 "Error - SAGE_ROOT undefined ... exiting"
+    echo >&2 "Maybe run 'sage -sh'?"
+    exit 1
+fi
+
+# Exit on failure
+set -e
+
+cd build/pkgs/sagemath_meataxe
+
+cd src
+# Get rid of old *.egg-info/SOURCES.txt
+rm -Rf *.egg-info
+
+python3 -m build --sdist --no-isolation --skip-dependency-check --outdir "$SAGE_DISTFILES"
diff --git a/build/pkgs/sagemath_meataxe/src b/build/pkgs/sagemath_meataxe/src
new file mode 120000
index 00000000000..1164dd787fd
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/src
@@ -0,0 +1 @@
+../../../pkgs/sagemath-meataxe
\ No newline at end of file
diff --git a/build/pkgs/sagemath_meataxe/type b/build/pkgs/sagemath_meataxe/type
new file mode 100644
index 00000000000..134d9bc32d5
--- /dev/null
+++ b/build/pkgs/sagemath_meataxe/type
@@ -0,0 +1 @@
+optional
diff --git a/build/pkgs/sagemath_sirocco/SPKG.rst b/build/pkgs/sagemath_sirocco/SPKG.rst
new file mode 120000
index 00000000000..b4545b4bda6
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/SPKG.rst
@@ -0,0 +1 @@
+src/README.rst
\ No newline at end of file
diff --git a/build/pkgs/sagemath_sirocco/bootstrap b/build/pkgs/sagemath_sirocco/bootstrap
new file mode 120000
index 00000000000..40542346a4e
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/bootstrap
@@ -0,0 +1 @@
+../sagelib/bootstrap
\ No newline at end of file
diff --git a/build/pkgs/sagemath_sirocco/dependencies b/build/pkgs/sagemath_sirocco/dependencies
new file mode 100644
index 00000000000..b923f34d7eb
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/dependencies
@@ -0,0 +1 @@
+$(PYTHON) sirocco cypari cysignals mpfr | $(PYTHON_TOOLCHAIN) sage_setup sagemath_environment cython pkgconfig
diff --git a/build/pkgs/sagemath_sirocco/distros/conda.txt b/build/pkgs/sagemath_sirocco/distros/conda.txt
new file mode 100644
index 00000000000..fc9cfb79706
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/distros/conda.txt
@@ -0,0 +1 @@
+sagemath-sirocco
diff --git a/build/pkgs/sagemath_sirocco/install-requires.txt b/build/pkgs/sagemath_sirocco/install-requires.txt
new file mode 100644
index 00000000000..df1048f36be
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/install-requires.txt
@@ -0,0 +1,2 @@
+# This file is updated on every release by the sage-update-version script
+sagemath-sirocco ~= 10.0
diff --git a/build/pkgs/sagemath_sirocco/package-version.txt b/build/pkgs/sagemath_sirocco/package-version.txt
new file mode 120000
index 00000000000..c4540217bba
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/package-version.txt
@@ -0,0 +1 @@
+src/VERSION.txt
\ No newline at end of file
diff --git a/build/pkgs/sagemath_sirocco/spkg-install b/build/pkgs/sagemath_sirocco/spkg-install
new file mode 100755
index 00000000000..7ce202f09ae
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/spkg-install
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# From sage-spkg.
+# For type=script packages, the build rule in build/make/Makefile sources
+# sage-env but not sage-dist-helpers.
+lib="$SAGE_ROOT/build/bin/sage-dist-helpers"
+source "$lib"
+if [ $? -ne 0 ]; then
+    echo >&2 "Error: failed to source $lib"
+    echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
+    exit 1
+fi
+cd src
+
+export PIP_NO_INDEX=true
+export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"
+
+if [ "$SAGE_EDITABLE" = yes ]; then
+    # SAGE_ROOT/src/setup.py installs everything, nothing to do...
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # ... except we build the wheel if requested
+        sdh_setup_bdist_wheel && sdh_store_wheel .
+    fi
+else
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # Modularized install via wheels
+        sdh_pip_install .
+    # else nothing to do in legacy direct installation.
+    fi
+fi
diff --git a/build/pkgs/sagemath_sirocco/spkg-src b/build/pkgs/sagemath_sirocco/spkg-src
new file mode 100755
index 00000000000..4082abf43b2
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/spkg-src
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Script to prepare an sdist tarball for sagemath-sirocco
+# This script is not used during build.
+#
+# HOW TO MAKE THE TARBALL:
+# ./sage --sh build/pkgs/sagemath_sirocco/spkg-src
+
+if [ -z "$SAGE_ROOT" ] ; then
+    echo >&2 "Error - SAGE_ROOT undefined ... exiting"
+    echo >&2 "Maybe run 'sage -sh'?"
+    exit 1
+fi
+
+# Exit on failure
+set -e
+
+cd build/pkgs/sagemath_sirocco
+
+cd src
+# Get rid of old *.egg-info/SOURCES.txt
+rm -Rf *.egg-info
+
+python3 -m build --sdist --no-isolation --skip-dependency-check --outdir "$SAGE_DISTFILES"
diff --git a/build/pkgs/sagemath_sirocco/src b/build/pkgs/sagemath_sirocco/src
new file mode 120000
index 00000000000..03d0d674991
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/src
@@ -0,0 +1 @@
+../../../pkgs/sagemath-sirocco
\ No newline at end of file
diff --git a/build/pkgs/sagemath_sirocco/type b/build/pkgs/sagemath_sirocco/type
new file mode 100644
index 00000000000..134d9bc32d5
--- /dev/null
+++ b/build/pkgs/sagemath_sirocco/type
@@ -0,0 +1 @@
+optional
diff --git a/build/pkgs/sagemath_tdlib/SPKG.rst b/build/pkgs/sagemath_tdlib/SPKG.rst
new file mode 120000
index 00000000000..b4545b4bda6
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/SPKG.rst
@@ -0,0 +1 @@
+src/README.rst
\ No newline at end of file
diff --git a/build/pkgs/sagemath_tdlib/bootstrap b/build/pkgs/sagemath_tdlib/bootstrap
new file mode 120000
index 00000000000..40542346a4e
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/bootstrap
@@ -0,0 +1 @@
+../sagelib/bootstrap
\ No newline at end of file
diff --git a/build/pkgs/sagemath_tdlib/dependencies b/build/pkgs/sagemath_tdlib/dependencies
new file mode 100644
index 00000000000..5c7ecd31f2f
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/dependencies
@@ -0,0 +1 @@
+$(PYTHON) tdlib cysignals | $(PYTHON_TOOLCHAIN) sage_setup sagemath_environment cython pkgconfig
diff --git a/build/pkgs/sagemath_tdlib/distros/conda.txt b/build/pkgs/sagemath_tdlib/distros/conda.txt
new file mode 100644
index 00000000000..f890d1c9084
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/distros/conda.txt
@@ -0,0 +1 @@
+sagemath-tdlib
diff --git a/build/pkgs/sagemath_tdlib/install-requires.txt b/build/pkgs/sagemath_tdlib/install-requires.txt
new file mode 100644
index 00000000000..8e813aef43a
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/install-requires.txt
@@ -0,0 +1,2 @@
+# This file is updated on every release by the sage-update-version script
+sagemath-tdlib ~= 10.0
diff --git a/build/pkgs/sagemath_tdlib/package-version.txt b/build/pkgs/sagemath_tdlib/package-version.txt
new file mode 120000
index 00000000000..c4540217bba
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/package-version.txt
@@ -0,0 +1 @@
+src/VERSION.txt
\ No newline at end of file
diff --git a/build/pkgs/sagemath_tdlib/spkg-install b/build/pkgs/sagemath_tdlib/spkg-install
new file mode 100755
index 00000000000..7ce202f09ae
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/spkg-install
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+# From sage-spkg.
+# For type=script packages, the build rule in build/make/Makefile sources
+# sage-env but not sage-dist-helpers.
+lib="$SAGE_ROOT/build/bin/sage-dist-helpers"
+source "$lib"
+if [ $? -ne 0 ]; then
+    echo >&2 "Error: failed to source $lib"
+    echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
+    exit 1
+fi
+cd src
+
+export PIP_NO_INDEX=true
+export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"
+
+if [ "$SAGE_EDITABLE" = yes ]; then
+    # SAGE_ROOT/src/setup.py installs everything, nothing to do...
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # ... except we build the wheel if requested
+        sdh_setup_bdist_wheel && sdh_store_wheel .
+    fi
+else
+    if [ "$SAGE_WHEELS" = yes ]; then
+        # Modularized install via wheels
+        sdh_pip_install .
+    # else nothing to do in legacy direct installation.
+    fi
+fi
diff --git a/build/pkgs/sagemath_tdlib/spkg-src b/build/pkgs/sagemath_tdlib/spkg-src
new file mode 100755
index 00000000000..88e67414c05
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/spkg-src
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Script to prepare an sdist tarball for sagemath-tdlib
+# This script is not used during build.
+#
+# HOW TO MAKE THE TARBALL:
+# ./sage --sh build/pkgs/sagemath_tdlib/spkg-src
+
+if [ -z "$SAGE_ROOT" ] ; then
+    echo >&2 "Error - SAGE_ROOT undefined ... exiting"
+    echo >&2 "Maybe run 'sage -sh'?"
+    exit 1
+fi
+
+# Exit on failure
+set -e
+
+cd build/pkgs/sagemath_tdlib
+
+cd src
+# Get rid of old *.egg-info/SOURCES.txt
+rm -Rf *.egg-info
+
+python3 -m build --sdist --no-isolation --skip-dependency-check --outdir "$SAGE_DISTFILES"
diff --git a/build/pkgs/sagemath_tdlib/src b/build/pkgs/sagemath_tdlib/src
new file mode 120000
index 00000000000..0d238df793e
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/src
@@ -0,0 +1 @@
+../../../pkgs/sagemath-tdlib
\ No newline at end of file
diff --git a/build/pkgs/sagemath_tdlib/type b/build/pkgs/sagemath_tdlib/type
new file mode 100644
index 00000000000..134d9bc32d5
--- /dev/null
+++ b/build/pkgs/sagemath_tdlib/type
@@ -0,0 +1 @@
+optional
diff --git a/pkgs/sagemath-bliss/MANIFEST.in b/pkgs/sagemath-bliss/MANIFEST.in
new file mode 100644
index 00000000000..689b87560e0
--- /dev/null
+++ b/pkgs/sagemath-bliss/MANIFEST.in
@@ -0,0 +1,17 @@
+global-include all__sagemath_bliss.py
+
+include VERSION.txt
+
+graft sage/graphs/bliss_cpp
+
+global-exclude *.c
+global-exclude *.cpp
+
+global-exclude __pycache__
+global-exclude *.py[co]
+global-exclude *.bak
+global-exclude *.so
+global-exclude *~
+prune .tox
+prune build
+prune dist
diff --git a/pkgs/sagemath-bliss/README.rst b/pkgs/sagemath-bliss/README.rst
new file mode 100644
index 00000000000..9e1cb2e826f
--- /dev/null
+++ b/pkgs/sagemath-bliss/README.rst
@@ -0,0 +1,32 @@
+==============================================================================
+ Sage: Open Source Mathematics Software: Graph (iso/auto)morphisms with bliss
+==============================================================================
+
+About SageMath
+--------------
+
+   "Creating a Viable Open Source Alternative to
+    Magma, Maple, Mathematica, and MATLAB"
+
+   Copyright (C) 2005-2023 The Sage Development Team
+
+   https://www.sagemath.org
+
+SageMath fully supports all major Linux distributions, recent versions of
+macOS, and Windows (using Cygwin or Windows Subsystem for Linux).
+
+The traditional and recommended way to install SageMath is from source via
+Sage-the-distribution (https://www.sagemath.org/download-source.html).
+Sage-the-distribution first builds a large number of open source packages from
+source (unless it finds suitable versions installed in the system) and then
+installs the Sage Library (sagelib, implemented in Python and Cython).
+
+
+About this pip-installable source distribution
+----------------------------------------------
+
+This pip-installable source distribution ``sagemath-bliss`` is a small
+optional distribution for use with ``sagemath-standard``.
+
+It provides a Cython interface to the ``bliss`` library for the purpose
+of computing graph (iso/auto)morphisms.
diff --git a/pkgs/sagemath-bliss/VERSION.txt b/pkgs/sagemath-bliss/VERSION.txt
new file mode 100644
index 00000000000..2f52450b31d
--- /dev/null
+++ b/pkgs/sagemath-bliss/VERSION.txt
@@ -0,0 +1 @@
+10.0
diff --git a/pkgs/sagemath-bliss/pyproject.toml.m4 b/pkgs/sagemath-bliss/pyproject.toml.m4
new file mode 100644
index 00000000000..439482ad26b
--- /dev/null
+++ b/pkgs/sagemath-bliss/pyproject.toml.m4
@@ -0,0 +1,12 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
+[build-system]
+# Minimum requirements for the build system to execute.
+requires = [
+    SPKG_INSTALL_REQUIRES_setuptools
+    SPKG_INSTALL_REQUIRES_sage_conf
+    SPKG_INSTALL_REQUIRES_sage_setup
+    SPKG_INSTALL_REQUIRES_sagemath_environment
+    SPKG_INSTALL_REQUIRES_cython
+    SPKG_INSTALL_REQUIRES_cysignals
+]
+build-backend = "setuptools.build_meta"
diff --git a/pkgs/sagemath-bliss/requirements.txt.m4 b/pkgs/sagemath-bliss/requirements.txt.m4
new file mode 100644
index 00000000000..8b6ca03b0b9
--- /dev/null
+++ b/pkgs/sagemath-bliss/requirements.txt.m4
@@ -0,0 +1,2 @@
+Cython==esyscmd(`printf $(sed "s/[.]p.*//;" ../cython/package-version.txt)')
+sagemath-standard==esyscmd(`printf $(sed "s/[.]p.*//;" ../sagelib/package-version.txt)')
diff --git a/pkgs/sagemath-bliss/sage b/pkgs/sagemath-bliss/sage
new file mode 120000
index 00000000000..e0da5daa6f2
--- /dev/null
+++ b/pkgs/sagemath-bliss/sage
@@ -0,0 +1 @@
+../../src/sage
\ No newline at end of file
diff --git a/pkgs/sagemath-bliss/setup.cfg.m4 b/pkgs/sagemath-bliss/setup.cfg.m4
new file mode 100644
index 00000000000..d1faa96a563
--- /dev/null
+++ b/pkgs/sagemath-bliss/setup.cfg.m4
@@ -0,0 +1,17 @@
+include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
+[metadata]
+name = sagemath-bliss
+version = file: VERSION.txt
+description = Sage: Open Source Mathematics Software: Graph (iso/auto)morphisms with bliss
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+include(`setup_cfg_metadata.m4')dnl'
+
+[options]
+python_requires = >=3.8, <3.12
+install_requires =
+    SPKG_INSTALL_REQUIRES_cysignals
+
+[options.extras_require]
+test        =
+    SPKG_INSTALL_REQUIRES_sagemath_repl
diff --git a/pkgs/sagemath-bliss/setup.py b/pkgs/sagemath-bliss/setup.py
new file mode 100644
index 00000000000..a78c51347d6
--- /dev/null
+++ b/pkgs/sagemath-bliss/setup.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+from distutils import log
+from setuptools import setup
+
+# Work around a Cython problem in Python 3.8.x on macOS
+# https://github.com/cython/cython/issues/3262
+import os
+if os.uname().sysname == 'Darwin':
+    import multiprocessing
+    multiprocessing.set_start_method('fork', force=True)
+
+# If build isolation is not in use and setuptools_scm is installed,
+# then its file_finders entry point is invoked, which we don't need.
+# Workaround from https://github.com/pypa/setuptools_scm/issues/190#issuecomment-351181286
+try:
+    import setuptools_scm.integration
+    setuptools_scm.integration.find_files = lambda _: []
+except ImportError:
+    pass
+
+# PEP 517 builds do not have . in sys.path
+import sys
+sys.path.insert(0, os.path.dirname(__file__))
+
+if len(sys.argv) > 1 and (sys.argv[1] == "sdist" or sys.argv[1] == "egg_info"):
+    sdist = True
+else:
+    sdist = False
+
+if sdist:
+    cmdclass = {}
+else:
+    from sage_setup.excepthook import excepthook
+    sys.excepthook = excepthook
+
+    from sage_setup.setenv import setenv
+    setenv()
+
+    import sage.env
+    sage.env.default_required_modules = sage.env.default_optional_modules = ()
+
+    from sage_setup.command.sage_build_cython import sage_build_cython
+    from sage_setup.command.sage_build_ext import sage_build_ext
+    sage_build_cython.built_distributions = ['sagemath-bliss']
+
+    cmdclass = dict(build_cython=sage_build_cython,
+                    build_ext=sage_build_ext)
+
+from sage_setup.find import find_python_sources
+python_packages, python_modules, cython_modules = find_python_sources(
+    '.', ['sage'], distributions=['sagemath-bliss'])
+
+log.warn('python_packages = {0}'.format(python_packages))
+log.warn('python_modules = {0}'.format(python_modules))
+log.warn('cython_modules = {0}'.format(cython_modules))
+
+setup(
+    cmdclass = cmdclass,
+    packages = python_packages,
+    py_modules  = python_modules,
+    ext_modules = cython_modules,
+)
diff --git a/pkgs/sagemath-categories/README.rst b/pkgs/sagemath-categories/README.rst
index d1f90fea966..55cddc3c95c 100644
--- a/pkgs/sagemath-categories/README.rst
+++ b/pkgs/sagemath-categories/README.rst
@@ -8,7 +8,7 @@ About SageMath
    "Creating a Viable Open Source Alternative to
     Magma, Maple, Mathematica, and MATLAB"
 
-   Copyright (C) 2005-2022 The Sage Development Team
+   Copyright (C) 2005-2023 The Sage Development Team
 
    https://www.sagemath.org
 
diff --git a/pkgs/sagemath-coxeter3/MANIFEST.in b/pkgs/sagemath-coxeter3/MANIFEST.in
new file mode 100644
index 00000000000..003ab8d5180
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/MANIFEST.in
@@ -0,0 +1,19 @@
+prune sage
+
+global-include all__sagemath_coxeter3.py
+
+include VERSION.txt
+
+graft sage/libs/coxeter3
+
+global-exclude *.c
+global-exclude *.cpp
+
+global-exclude __pycache__
+global-exclude *.py[co]
+global-exclude *.bak
+global-exclude *.so
+global-exclude *~
+prune .tox
+prune build
+prune dist
diff --git a/pkgs/sagemath-coxeter3/README.rst b/pkgs/sagemath-coxeter3/README.rst
new file mode 100644
index 00000000000..8b605bda499
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/README.rst
@@ -0,0 +1,31 @@
+====================================================================================================================
+ Sage: Open Source Mathematics Software: Coxeter groups, Bruhat ordering, Kazhdan-Lusztig polynomials with coxeter3
+====================================================================================================================
+
+About SageMath
+--------------
+
+   "Creating a Viable Open Source Alternative to
+    Magma, Maple, Mathematica, and MATLAB"
+
+   Copyright (C) 2005-2023 The Sage Development Team
+
+   https://www.sagemath.org
+
+SageMath fully supports all major Linux distributions, recent versions of
+macOS, and Windows (using Cygwin or Windows Subsystem for Linux).
+
+The traditional and recommended way to install SageMath is from source via
+Sage-the-distribution (https://www.sagemath.org/download-source.html).
+Sage-the-distribution first builds a large number of open source packages from
+source (unless it finds suitable versions installed in the system) and then
+installs the Sage Library (sagelib, implemented in Python and Cython).
+
+
+About this pip-installable source distribution
+----------------------------------------------
+
+This pip-installable source distribution ``sagemath-coxeter3`` is a small
+optional distribution for use with ``sagemath-standard``.
+
+It provides a Cython interface to the ``coxeter3`` library.
diff --git a/pkgs/sagemath-coxeter3/VERSION.txt b/pkgs/sagemath-coxeter3/VERSION.txt
new file mode 100644
index 00000000000..2f52450b31d
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/VERSION.txt
@@ -0,0 +1 @@
+10.0
diff --git a/pkgs/sagemath-coxeter3/pyproject.toml.m4 b/pkgs/sagemath-coxeter3/pyproject.toml.m4
new file mode 100644
index 00000000000..e5b939e414d
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/pyproject.toml.m4
@@ -0,0 +1,11 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
+[build-system]
+# Minimum requirements for the build system to execute.
+requires = [
+    SPKG_INSTALL_REQUIRES_setuptools
+    SPKG_INSTALL_REQUIRES_sage_setup
+    SPKG_INSTALL_REQUIRES_sagemath_environment
+    SPKG_INSTALL_REQUIRES_cython
+    SPKG_INSTALL_REQUIRES_cysignals
+]
+build-backend = "setuptools.build_meta"
diff --git a/pkgs/sagemath-coxeter3/requirements.txt.m4 b/pkgs/sagemath-coxeter3/requirements.txt.m4
new file mode 100644
index 00000000000..8b6ca03b0b9
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/requirements.txt.m4
@@ -0,0 +1,2 @@
+Cython==esyscmd(`printf $(sed "s/[.]p.*//;" ../cython/package-version.txt)')
+sagemath-standard==esyscmd(`printf $(sed "s/[.]p.*//;" ../sagelib/package-version.txt)')
diff --git a/pkgs/sagemath-coxeter3/sage b/pkgs/sagemath-coxeter3/sage
new file mode 120000
index 00000000000..e0da5daa6f2
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/sage
@@ -0,0 +1 @@
+../../src/sage
\ No newline at end of file
diff --git a/pkgs/sagemath-coxeter3/setup.cfg.m4 b/pkgs/sagemath-coxeter3/setup.cfg.m4
new file mode 100644
index 00000000000..ab3288d89ab
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/setup.cfg.m4
@@ -0,0 +1,20 @@
+include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
+[metadata]
+name = sagemath-coxeter3
+version = file: VERSION.txt
+description = Sage: Open Source Mathematics Software: Coxeter groups, Bruhat ordering, Kazhdan-Lusztig polynomials with coxeter3
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+include(`setup_cfg_metadata.m4')dnl'
+
+[options]
+python_requires = >=3.8, <3.12
+install_requires =
+
+packages =
+    sage.libs.coxeter3
+
+[options.package_data]
+sage.libs.coxeter3 =
+    coxeter.pxd
+    decl.pxd
diff --git a/pkgs/sagemath-coxeter3/setup.py b/pkgs/sagemath-coxeter3/setup.py
new file mode 100644
index 00000000000..50d81893558
--- /dev/null
+++ b/pkgs/sagemath-coxeter3/setup.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+from distutils import log
+from setuptools import setup
+
+# Work around a Cython problem in Python 3.8.x on macOS
+# https://github.com/cython/cython/issues/3262
+import os
+if os.uname().sysname == 'Darwin':
+    import multiprocessing
+    multiprocessing.set_start_method('fork', force=True)
+
+# If build isolation is not in use and setuptools_scm is installed,
+# then its file_finders entry point is invoked, which we don't need.
+# Workaround from https://github.com/pypa/setuptools_scm/issues/190#issuecomment-351181286
+try:
+    import setuptools_scm.integration
+    setuptools_scm.integration.find_files = lambda _: []
+except ImportError:
+    pass
+
+# PEP 517 builds do not have . in sys.path
+import sys
+sys.path.insert(0, os.path.dirname(__file__))
+
+if len(sys.argv) > 1 and (sys.argv[1] == "sdist" or sys.argv[1] == "egg_info"):
+    sdist = True
+else:
+    sdist = False
+
+if sdist:
+    cmdclass = {}
+else:
+    from sage_setup.excepthook import excepthook
+    sys.excepthook = excepthook
+
+    from sage_setup.setenv import setenv
+    setenv()
+
+    import sage.env
+    sage.env.default_required_modules = sage.env.default_optional_modules = ()
+
+    from sage_setup.command.sage_build_cython import sage_build_cython
+    from sage_setup.command.sage_build_ext import sage_build_ext
+    sage_build_cython.built_distributions = ['sagemath-coxeter3']
+
+    cmdclass = dict(build_cython=sage_build_cython,
+                    build_ext=sage_build_ext)
+
+from sage_setup.find import find_python_sources
+python_packages, python_modules, cython_modules = find_python_sources(
+    '.', ['sage'], distributions=['sagemath-coxeter3'])
+
+log.warn('python_packages = {0}'.format(python_packages))
+log.warn('python_modules = {0}'.format(python_modules))
+log.warn('cython_modules = {0}'.format(cython_modules))
+
+setup(
+    cmdclass = cmdclass,
+    packages = python_packages,
+    py_modules  = python_modules,
+    ext_modules = cython_modules,
+)
diff --git a/pkgs/sagemath-environment/README.rst b/pkgs/sagemath-environment/README.rst
index ba5905777c0..eaeb4078fed 100644
--- a/pkgs/sagemath-environment/README.rst
+++ b/pkgs/sagemath-environment/README.rst
@@ -8,7 +8,7 @@ About SageMath
    "Creating a Viable Open Source Alternative to
     Magma, Maple, Mathematica, and MATLAB"
 
-   Copyright (C) 2005-2022 The Sage Development Team
+   Copyright (C) 2005-2023 The Sage Development Team
 
    https://www.sagemath.org
 
diff --git a/pkgs/sagemath-environment/setup.cfg.m4 b/pkgs/sagemath-environment/setup.cfg.m4
index deb74565b3b..1ede94ee283 100644
--- a/pkgs/sagemath-environment/setup.cfg.m4
+++ b/pkgs/sagemath-environment/setup.cfg.m4
@@ -17,6 +17,7 @@ py_modules =
     sage.version
     sage.misc.all__sagemath_environment
     sage.misc.package
+    sage.misc.package_dir
     sage.misc.temporary_file
     sage.misc.viewer
 
diff --git a/pkgs/sagemath-mcqd/MANIFEST.in b/pkgs/sagemath-mcqd/MANIFEST.in
new file mode 100644
index 00000000000..392d97b78e0
--- /dev/null
+++ b/pkgs/sagemath-mcqd/MANIFEST.in
@@ -0,0 +1,19 @@
+prune sage
+
+global-include all__sagemath_mcqd.py
+
+include VERSION.txt
+
+include sage/graphs/mcqd.p*
+
+global-exclude *.c
+global-exclude *.cpp
+
+global-exclude __pycache__
+global-exclude *.py[co]
+global-exclude *.bak
+global-exclude *.so
+global-exclude *~
+prune .tox
+prune build
+prune dist
diff --git a/pkgs/sagemath-mcqd/README.rst b/pkgs/sagemath-mcqd/README.rst
new file mode 100644
index 00000000000..00ef5f8ea3e
--- /dev/null
+++ b/pkgs/sagemath-mcqd/README.rst
@@ -0,0 +1,33 @@
+===========================================================================
+ Sage: Open Source Mathematics Software: Finding maximum cliques with mcqd
+===========================================================================
+
+About SageMath
+--------------
+
+   "Creating a Viable Open Source Alternative to
+    Magma, Maple, Mathematica, and MATLAB"
+
+   Copyright (C) 2005-2023 The Sage Development Team
+
+   https://www.sagemath.org
+
+SageMath fully supports all major Linux distributions, recent versions of
+macOS, and Windows (using Cygwin or Windows Subsystem for Linux).
+
+The traditional and recommended way to install SageMath is from source via
+Sage-the-distribution (https://www.sagemath.org/download-source.html).
+Sage-the-distribution first builds a large number of open source packages from
+source (unless it finds suitable versions installed in the system) and then
+installs the Sage Library (sagelib, implemented in Python and Cython).
+
+
+About this pip-installable source distribution
+----------------------------------------------
+
+This pip-installable source distribution ``sagemath-mcqd`` is a small
+optional distribution for use with ``sagemath-standard``.
+
+It provides a Cython interface to the ``mcqd`` library,
+providing a fast exact algorithm for finding a maximum clique in
+an undirected graph.
diff --git a/pkgs/sagemath-mcqd/VERSION.txt b/pkgs/sagemath-mcqd/VERSION.txt
new file mode 100644
index 00000000000..2f52450b31d
--- /dev/null
+++ b/pkgs/sagemath-mcqd/VERSION.txt
@@ -0,0 +1 @@
+10.0
diff --git a/pkgs/sagemath-mcqd/pyproject.toml.m4 b/pkgs/sagemath-mcqd/pyproject.toml.m4
new file mode 100644
index 00000000000..d28ff179a00
--- /dev/null
+++ b/pkgs/sagemath-mcqd/pyproject.toml.m4
@@ -0,0 +1,12 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
+[build-system]
+# Minimum requirements for the build system to execute.
+requires = [
+    SPKG_INSTALL_REQUIRES_setuptools
+    SPKG_INSTALL_REQUIRES_sage_setup
+    SPKG_INSTALL_REQUIRES_sagemath_environment
+    SPKG_INSTALL_REQUIRES_cython
+    SPKG_INSTALL_REQUIRES_memory_allocator
+    SPKG_INSTALL_REQUIRES_cysignals
+]
+build-backend = "setuptools.build_meta"
diff --git a/pkgs/sagemath-mcqd/requirements.txt.m4 b/pkgs/sagemath-mcqd/requirements.txt.m4
new file mode 100644
index 00000000000..8b6ca03b0b9
--- /dev/null
+++ b/pkgs/sagemath-mcqd/requirements.txt.m4
@@ -0,0 +1,2 @@
+Cython==esyscmd(`printf $(sed "s/[.]p.*//;" ../cython/package-version.txt)')
+sagemath-standard==esyscmd(`printf $(sed "s/[.]p.*//;" ../sagelib/package-version.txt)')
diff --git a/pkgs/sagemath-mcqd/sage b/pkgs/sagemath-mcqd/sage
new file mode 120000
index 00000000000..e0da5daa6f2
--- /dev/null
+++ b/pkgs/sagemath-mcqd/sage
@@ -0,0 +1 @@
+../../src/sage
\ No newline at end of file
diff --git a/pkgs/sagemath-mcqd/setup.cfg.m4 b/pkgs/sagemath-mcqd/setup.cfg.m4
new file mode 100644
index 00000000000..fff8f2805ef
--- /dev/null
+++ b/pkgs/sagemath-mcqd/setup.cfg.m4
@@ -0,0 +1,21 @@
+include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
+[metadata]
+name = sagemath-mcqd
+version = file: VERSION.txt
+description = Sage: Open Source Mathematics Software: Finding maximum cliques with mcqd
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+include(`setup_cfg_metadata.m4')dnl'
+
+[options]
+python_requires = >=3.8, <3.12
+install_requires =
+    SPKG_INSTALL_REQUIRES_memory_allocator
+    SPKG_INSTALL_REQUIRES_cysignals
+
+packages =
+    sage.graphs
+
+[options.package_data]
+sage.graphs =
+    mcqd.pxd
diff --git a/pkgs/sagemath-mcqd/setup.py b/pkgs/sagemath-mcqd/setup.py
new file mode 100644
index 00000000000..c7d90663bfc
--- /dev/null
+++ b/pkgs/sagemath-mcqd/setup.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+from distutils import log
+from setuptools import setup
+
+# Work around a Cython problem in Python 3.8.x on macOS
+# https://github.com/cython/cython/issues/3262
+import os
+if os.uname().sysname == 'Darwin':
+    import multiprocessing
+    multiprocessing.set_start_method('fork', force=True)
+
+# If build isolation is not in use and setuptools_scm is installed,
+# then its file_finders entry point is invoked, which we don't need.
+# Workaround from https://github.com/pypa/setuptools_scm/issues/190#issuecomment-351181286
+try:
+    import setuptools_scm.integration
+    setuptools_scm.integration.find_files = lambda _: []
+except ImportError:
+    pass
+
+# PEP 517 builds do not have . in sys.path
+import sys
+sys.path.insert(0, os.path.dirname(__file__))
+
+if len(sys.argv) > 1 and (sys.argv[1] == "sdist" or sys.argv[1] == "egg_info"):
+    sdist = True
+else:
+    sdist = False
+
+if sdist:
+    cmdclass = {}
+else:
+    from sage_setup.excepthook import excepthook
+    sys.excepthook = excepthook
+
+    from sage_setup.setenv import setenv
+    setenv()
+
+    import sage.env
+    sage.env.default_required_modules = sage.env.default_optional_modules = ()
+
+    from sage_setup.command.sage_build_cython import sage_build_cython
+    from sage_setup.command.sage_build_ext import sage_build_ext
+    sage_build_cython.built_distributions = ['sagemath-mcqd']
+
+    cmdclass = dict(build_cython=sage_build_cython,
+                    build_ext=sage_build_ext)
+
+from sage_setup.find import find_python_sources
+python_packages, python_modules, cython_modules = find_python_sources(
+    '.', ['sage'], distributions=['sagemath-mcqd'])
+
+log.warn('python_packages = {0}'.format(python_packages))
+log.warn('python_modules = {0}'.format(python_modules))
+log.warn('cython_modules = {0}'.format(cython_modules))
+
+setup(
+    cmdclass = cmdclass,
+    packages = python_packages,
+    py_modules  = python_modules,
+    ext_modules = cython_modules,
+)
diff --git a/pkgs/sagemath-meataxe/MANIFEST.in b/pkgs/sagemath-meataxe/MANIFEST.in
new file mode 100644
index 00000000000..4cf78dd5d02
--- /dev/null
+++ b/pkgs/sagemath-meataxe/MANIFEST.in
@@ -0,0 +1,20 @@
+prune sage
+
+global-include all__sagemath_meataxe.py
+
+include VERSION.txt
+
+include sage/libs/meataxe.p*
+include sage/matrix/matrix_gfpn_dense.p*
+
+global-exclude *.c
+global-exclude *.cpp
+
+global-exclude __pycache__
+global-exclude *.py[co]
+global-exclude *.bak
+global-exclude *.so
+global-exclude *~
+prune .tox
+prune build
+prune dist
diff --git a/pkgs/sagemath-meataxe/README.rst b/pkgs/sagemath-meataxe/README.rst
new file mode 100644
index 00000000000..088ce86478b
--- /dev/null
+++ b/pkgs/sagemath-meataxe/README.rst
@@ -0,0 +1,36 @@
+========================================================================================
+ Sage: Open Source Mathematics Software: Matrices over small finite fields with meataxe
+========================================================================================
+
+About SageMath
+--------------
+
+   "Creating a Viable Open Source Alternative to
+    Magma, Maple, Mathematica, and MATLAB"
+
+   Copyright (C) 2005-2023 The Sage Development Team
+
+   https://www.sagemath.org
+
+SageMath fully supports all major Linux distributions, recent versions of
+macOS, and Windows (using Cygwin or Windows Subsystem for Linux).
+
+The traditional and recommended way to install SageMath is from source via
+Sage-the-distribution (https://www.sagemath.org/download-source.html).
+Sage-the-distribution first builds a large number of open source packages from
+source (unless it finds suitable versions installed in the system) and then
+installs the Sage Library (sagelib, implemented in Python and Cython).
+
+
+About this pip-installable source distribution
+----------------------------------------------
+
+This pip-installable source distribution ``sagemath-meataxe`` is a small
+optional distribution for use with ``sagemath-standard``.
+
+This distribution provides the SageMath modules :mod:`sage.libs.meataxe`
+and :mod:`sage.matrix.matrix_gfpn_dense`.
+
+It provides a specialized implementation of matrices over the finite field F_q, where
+q <= 255, using the `SharedMeatAxe `
+library.
diff --git a/pkgs/sagemath-meataxe/VERSION.txt b/pkgs/sagemath-meataxe/VERSION.txt
new file mode 100644
index 00000000000..2f52450b31d
--- /dev/null
+++ b/pkgs/sagemath-meataxe/VERSION.txt
@@ -0,0 +1 @@
+10.0
diff --git a/pkgs/sagemath-meataxe/pyproject.toml.m4 b/pkgs/sagemath-meataxe/pyproject.toml.m4
new file mode 100644
index 00000000000..e5b939e414d
--- /dev/null
+++ b/pkgs/sagemath-meataxe/pyproject.toml.m4
@@ -0,0 +1,11 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
+[build-system]
+# Minimum requirements for the build system to execute.
+requires = [
+    SPKG_INSTALL_REQUIRES_setuptools
+    SPKG_INSTALL_REQUIRES_sage_setup
+    SPKG_INSTALL_REQUIRES_sagemath_environment
+    SPKG_INSTALL_REQUIRES_cython
+    SPKG_INSTALL_REQUIRES_cysignals
+]
+build-backend = "setuptools.build_meta"
diff --git a/pkgs/sagemath-meataxe/requirements.txt.m4 b/pkgs/sagemath-meataxe/requirements.txt.m4
new file mode 100644
index 00000000000..8b6ca03b0b9
--- /dev/null
+++ b/pkgs/sagemath-meataxe/requirements.txt.m4
@@ -0,0 +1,2 @@
+Cython==esyscmd(`printf $(sed "s/[.]p.*//;" ../cython/package-version.txt)')
+sagemath-standard==esyscmd(`printf $(sed "s/[.]p.*//;" ../sagelib/package-version.txt)')
diff --git a/pkgs/sagemath-meataxe/sage b/pkgs/sagemath-meataxe/sage
new file mode 120000
index 00000000000..e0da5daa6f2
--- /dev/null
+++ b/pkgs/sagemath-meataxe/sage
@@ -0,0 +1 @@
+../../src/sage
\ No newline at end of file
diff --git a/pkgs/sagemath-meataxe/setup.cfg.m4 b/pkgs/sagemath-meataxe/setup.cfg.m4
new file mode 100644
index 00000000000..a558825e120
--- /dev/null
+++ b/pkgs/sagemath-meataxe/setup.cfg.m4
@@ -0,0 +1,22 @@
+include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
+[metadata]
+name = sagemath-meataxe
+version = file: VERSION.txt
+description = Sage: Open Source Mathematics Software: Matrices over small finite fields with meataxe
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+include(`setup_cfg_metadata.m4')dnl'
+
+[options]
+python_requires = >=3.8, <3.12
+
+packages =
+    sage.libs
+    sage.matrix
+
+[options.package_data]
+sage.libs =
+    meataxe.pxd
+
+sage.matrix =
+    matrix_gfpn_dense.pxd
diff --git a/pkgs/sagemath-meataxe/setup.py b/pkgs/sagemath-meataxe/setup.py
new file mode 100644
index 00000000000..638c921a0d3
--- /dev/null
+++ b/pkgs/sagemath-meataxe/setup.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+from distutils import log
+from setuptools import setup
+
+# Work around a Cython problem in Python 3.8.x on macOS
+# https://github.com/cython/cython/issues/3262
+import os
+if os.uname().sysname == 'Darwin':
+    import multiprocessing
+    multiprocessing.set_start_method('fork', force=True)
+
+# If build isolation is not in use and setuptools_scm is installed,
+# then its file_finders entry point is invoked, which we don't need.
+# Workaround from https://github.com/pypa/setuptools_scm/issues/190#issuecomment-351181286
+try:
+    import setuptools_scm.integration
+    setuptools_scm.integration.find_files = lambda _: []
+except ImportError:
+    pass
+
+# PEP 517 builds do not have . in sys.path
+import sys
+sys.path.insert(0, os.path.dirname(__file__))
+
+if len(sys.argv) > 1 and (sys.argv[1] == "sdist" or sys.argv[1] == "egg_info"):
+    sdist = True
+else:
+    sdist = False
+
+if sdist:
+    cmdclass = {}
+else:
+    from sage_setup.excepthook import excepthook
+    sys.excepthook = excepthook
+
+    from sage_setup.setenv import setenv
+    setenv()
+
+    import sage.env
+    sage.env.default_required_modules = sage.env.default_optional_modules = ()
+
+    from sage_setup.command.sage_build_cython import sage_build_cython
+    from sage_setup.command.sage_build_ext import sage_build_ext
+    sage_build_cython.built_distributions = ['sagemath-meataxe']
+
+    cmdclass = dict(build_cython=sage_build_cython,
+                    build_ext=sage_build_ext)
+
+from sage_setup.find import find_python_sources
+python_packages, python_modules, cython_modules = find_python_sources(
+    '.', ['sage'], distributions=['sagemath-meataxe'])
+
+log.warn('python_packages = {0}'.format(python_packages))
+log.warn('python_modules = {0}'.format(python_modules))
+log.warn('cython_modules = {0}'.format(cython_modules))
+
+setup(
+    cmdclass = cmdclass,
+    packages = python_packages,
+    py_modules  = python_modules,
+    ext_modules = cython_modules,
+)
diff --git a/pkgs/sagemath-objects/README.rst b/pkgs/sagemath-objects/README.rst
index 9dc9cfd888f..4426d8683a3 100644
--- a/pkgs/sagemath-objects/README.rst
+++ b/pkgs/sagemath-objects/README.rst
@@ -8,7 +8,7 @@ About SageMath
    "Creating a Viable Open Source Alternative to
     Magma, Maple, Mathematica, and MATLAB"
 
-   Copyright (C) 2005-2022 The Sage Development Team
+   Copyright (C) 2005-2023 The Sage Development Team
 
    https://www.sagemath.org
 
diff --git a/pkgs/sagemath-repl/README.rst b/pkgs/sagemath-repl/README.rst
index 3dde4aae5e5..90b73be3cf5 100644
--- a/pkgs/sagemath-repl/README.rst
+++ b/pkgs/sagemath-repl/README.rst
@@ -8,7 +8,7 @@ About SageMath
    "Creating a Viable Open Source Alternative to
     Magma, Maple, Mathematica, and MATLAB"
 
-   Copyright (C) 2005-2022 The Sage Development Team
+   Copyright (C) 2005-2023 The Sage Development Team
 
    https://www.sagemath.org
 
diff --git a/pkgs/sagemath-sirocco/MANIFEST.in b/pkgs/sagemath-sirocco/MANIFEST.in
new file mode 100644
index 00000000000..7fab4dffc5d
--- /dev/null
+++ b/pkgs/sagemath-sirocco/MANIFEST.in
@@ -0,0 +1,15 @@
+global-include all__sagemath_sirocco.py
+
+include VERSION.txt
+
+global-exclude *.c
+global-exclude *.cpp
+
+global-exclude __pycache__
+global-exclude *.py[co]
+global-exclude *.bak
+global-exclude *.so
+global-exclude *~
+prune .tox
+prune build
+prune dist
diff --git a/pkgs/sagemath-sirocco/README.rst b/pkgs/sagemath-sirocco/README.rst
new file mode 100644
index 00000000000..0207d63b9a5
--- /dev/null
+++ b/pkgs/sagemath-sirocco/README.rst
@@ -0,0 +1,32 @@
+==================================================================================
+ Sage: Open Source Mathematics Software: Certified root continuation with sirocco
+==================================================================================
+
+About SageMath
+--------------
+
+   "Creating a Viable Open Source Alternative to
+    Magma, Maple, Mathematica, and MATLAB"
+
+   Copyright (C) 2005-2023 The Sage Development Team
+
+   https://www.sagemath.org
+
+SageMath fully supports all major Linux distributions, recent versions of
+macOS, and Windows (using Cygwin or Windows Subsystem for Linux).
+
+The traditional and recommended way to install SageMath is from source via
+Sage-the-distribution (https://www.sagemath.org/download-source.html).
+Sage-the-distribution first builds a large number of open source packages from
+source (unless it finds suitable versions installed in the system) and then
+installs the Sage Library (sagelib, implemented in Python and Cython).
+
+
+About this pip-installable source distribution
+----------------------------------------------
+
+This pip-installable source distribution ``sagemath-sirocco`` is a small
+optional distribution for use with ``sagemath-standard``.
+
+It provides a Cython interface to the ``sirocco`` library for the purpose
+of compute topologically certified root continuation of bivariate polynomials.
diff --git a/pkgs/sagemath-sirocco/VERSION.txt b/pkgs/sagemath-sirocco/VERSION.txt
new file mode 100644
index 00000000000..2f52450b31d
--- /dev/null
+++ b/pkgs/sagemath-sirocco/VERSION.txt
@@ -0,0 +1 @@
+10.0
diff --git a/pkgs/sagemath-sirocco/pyproject.toml.m4 b/pkgs/sagemath-sirocco/pyproject.toml.m4
new file mode 100644
index 00000000000..1b000bd5c3b
--- /dev/null
+++ b/pkgs/sagemath-sirocco/pyproject.toml.m4
@@ -0,0 +1,12 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
+[build-system]
+# Minimum requirements for the build system to execute.
+requires = [
+    SPKG_INSTALL_REQUIRES_setuptools
+    SPKG_INSTALL_REQUIRES_sage_setup
+    SPKG_INSTALL_REQUIRES_sagemath_environment
+    SPKG_INSTALL_REQUIRES_cython
+    SPKG_INSTALL_REQUIRES_cypari
+    SPKG_INSTALL_REQUIRES_cysignals
+]
+build-backend = "setuptools.build_meta"
diff --git a/pkgs/sagemath-sirocco/requirements.txt.m4 b/pkgs/sagemath-sirocco/requirements.txt.m4
new file mode 100644
index 00000000000..8b6ca03b0b9
--- /dev/null
+++ b/pkgs/sagemath-sirocco/requirements.txt.m4
@@ -0,0 +1,2 @@
+Cython==esyscmd(`printf $(sed "s/[.]p.*//;" ../cython/package-version.txt)')
+sagemath-standard==esyscmd(`printf $(sed "s/[.]p.*//;" ../sagelib/package-version.txt)')
diff --git a/pkgs/sagemath-sirocco/sage b/pkgs/sagemath-sirocco/sage
new file mode 120000
index 00000000000..e0da5daa6f2
--- /dev/null
+++ b/pkgs/sagemath-sirocco/sage
@@ -0,0 +1 @@
+../../src/sage
\ No newline at end of file
diff --git a/pkgs/sagemath-sirocco/setup.cfg.m4 b/pkgs/sagemath-sirocco/setup.cfg.m4
new file mode 100644
index 00000000000..4f1e0f03d95
--- /dev/null
+++ b/pkgs/sagemath-sirocco/setup.cfg.m4
@@ -0,0 +1,14 @@
+include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
+[metadata]
+name = sagemath-sirocco
+version = file: VERSION.txt
+description = Sage: Open Source Mathematics Software: Certified root continuation with sirocco
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+include(`setup_cfg_metadata.m4')dnl'
+
+[options]
+python_requires = >=3.8, <3.12
+install_requires =
+    SPKG_INSTALL_REQUIRES_cypari
+    SPKG_INSTALL_REQUIRES_cysignals
diff --git a/pkgs/sagemath-sirocco/setup.py b/pkgs/sagemath-sirocco/setup.py
new file mode 100644
index 00000000000..bffe9189bb5
--- /dev/null
+++ b/pkgs/sagemath-sirocco/setup.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+from distutils import log
+from setuptools import setup
+
+# Work around a Cython problem in Python 3.8.x on macOS
+# https://github.com/cython/cython/issues/3262
+import os
+if os.uname().sysname == 'Darwin':
+    import multiprocessing
+    multiprocessing.set_start_method('fork', force=True)
+
+# If build isolation is not in use and setuptools_scm is installed,
+# then its file_finders entry point is invoked, which we don't need.
+# Workaround from https://github.com/pypa/setuptools_scm/issues/190#issuecomment-351181286
+try:
+    import setuptools_scm.integration
+    setuptools_scm.integration.find_files = lambda _: []
+except ImportError:
+    pass
+
+# PEP 517 builds do not have . in sys.path
+import sys
+sys.path.insert(0, os.path.dirname(__file__))
+
+if len(sys.argv) > 1 and (sys.argv[1] == "sdist" or sys.argv[1] == "egg_info"):
+    sdist = True
+else:
+    sdist = False
+
+if sdist:
+    cmdclass = {}
+else:
+    from sage_setup.excepthook import excepthook
+    sys.excepthook = excepthook
+
+    from sage_setup.setenv import setenv
+    setenv()
+
+    import sage.env
+    sage.env.default_required_modules = sage.env.default_optional_modules = ()
+
+    from sage_setup.command.sage_build_cython import sage_build_cython
+    from sage_setup.command.sage_build_ext import sage_build_ext
+    sage_build_cython.built_distributions = ['sagemath-sirocco']
+
+    cmdclass = dict(build_cython=sage_build_cython,
+                    build_ext=sage_build_ext)
+
+from sage_setup.find import find_python_sources
+python_packages, python_modules, cython_modules = find_python_sources(
+    '.', ['sage'], distributions=['sagemath-sirocco'])
+
+log.warn('python_packages = {0}'.format(python_packages))
+log.warn('python_modules = {0}'.format(python_modules))
+log.warn('cython_modules = {0}'.format(cython_modules))
+
+setup(
+    cmdclass = cmdclass,
+    packages = python_packages,
+    py_modules  = python_modules,
+    ext_modules = cython_modules,
+)
diff --git a/pkgs/sagemath-standard/setup.py b/pkgs/sagemath-standard/setup.py
index 975f89b5905..7f6318a0fa0 100755
--- a/pkgs/sagemath-standard/setup.py
+++ b/pkgs/sagemath-standard/setup.py
@@ -76,15 +76,14 @@
 # TODO: This should be quiet by default
 print("Discovering Python/Cython source code....")
 t = time.time()
-distributions = ['']
 from sage.misc.package import is_package_installed_and_updated
-optional_packages_with_extensions = ['mcqd', 'bliss', 'tdlib',
-                                     'coxeter3', 'sirocco', 'meataxe']
+distributions = ['']
+optional_packages_with_extensions = os.environ.get('SAGE_OPTIONAL_PACKAGES_WITH_EXTENSIONS', '').split(',')
 distributions += ['sagemath-{}'.format(pkg)
                   for pkg in optional_packages_with_extensions
                   if is_package_installed_and_updated(pkg)]
 log.warn('distributions = {0}'.format(distributions))
-from sage_setup.find import find_python_sources, find_extra_files
+from sage_setup.find import find_python_sources
 python_packages, python_modules, cython_modules = find_python_sources(
     SAGE_SRC, ['sage'], distributions=distributions)
 
diff --git a/pkgs/sagemath-tdlib/MANIFEST.in b/pkgs/sagemath-tdlib/MANIFEST.in
new file mode 100644
index 00000000000..f3fbc97a588
--- /dev/null
+++ b/pkgs/sagemath-tdlib/MANIFEST.in
@@ -0,0 +1,17 @@
+global-include all__sagemath_tdlib.py
+
+include VERSION.txt
+
+global-exclude *.c
+global-exclude *.cpp
+
+include sage/graphs/graph_decompositions/sage_tdlib.cpp
+
+global-exclude __pycache__
+global-exclude *.py[co]
+global-exclude *.bak
+global-exclude *.so
+global-exclude *~
+prune .tox
+prune build
+prune dist
diff --git a/pkgs/sagemath-tdlib/README.rst b/pkgs/sagemath-tdlib/README.rst
new file mode 100644
index 00000000000..0c91ddcf1c6
--- /dev/null
+++ b/pkgs/sagemath-tdlib/README.rst
@@ -0,0 +1,32 @@
+========================================================================
+ Sage: Open Source Mathematics Software: Tree decompositions with tdlib
+========================================================================
+
+About SageMath
+--------------
+
+   "Creating a Viable Open Source Alternative to
+    Magma, Maple, Mathematica, and MATLAB"
+
+   Copyright (C) 2005-2023 The Sage Development Team
+
+   https://www.sagemath.org
+
+SageMath fully supports all major Linux distributions, recent versions of
+macOS, and Windows (using Cygwin or Windows Subsystem for Linux).
+
+The traditional and recommended way to install SageMath is from source via
+Sage-the-distribution (https://www.sagemath.org/download-source.html).
+Sage-the-distribution first builds a large number of open source packages from
+source (unless it finds suitable versions installed in the system) and then
+installs the Sage Library (sagelib, implemented in Python and Cython).
+
+
+About this pip-installable source distribution
+----------------------------------------------
+
+This pip-installable source distribution ``sagemath-tdlib`` is a small
+optional distribution for use with ``sagemath-standard``.
+
+It provides a Cython interface to the ``tdlib`` library, providing
+algorithms concerning tree decompositions.
diff --git a/pkgs/sagemath-tdlib/VERSION.txt b/pkgs/sagemath-tdlib/VERSION.txt
new file mode 100644
index 00000000000..2f52450b31d
--- /dev/null
+++ b/pkgs/sagemath-tdlib/VERSION.txt
@@ -0,0 +1 @@
+10.0
diff --git a/pkgs/sagemath-tdlib/pyproject.toml.m4 b/pkgs/sagemath-tdlib/pyproject.toml.m4
new file mode 100644
index 00000000000..e5b939e414d
--- /dev/null
+++ b/pkgs/sagemath-tdlib/pyproject.toml.m4
@@ -0,0 +1,11 @@
+include(`sage_spkg_versions_toml.m4')dnl' -*- conf-toml -*-
+[build-system]
+# Minimum requirements for the build system to execute.
+requires = [
+    SPKG_INSTALL_REQUIRES_setuptools
+    SPKG_INSTALL_REQUIRES_sage_setup
+    SPKG_INSTALL_REQUIRES_sagemath_environment
+    SPKG_INSTALL_REQUIRES_cython
+    SPKG_INSTALL_REQUIRES_cysignals
+]
+build-backend = "setuptools.build_meta"
diff --git a/pkgs/sagemath-tdlib/requirements.txt.m4 b/pkgs/sagemath-tdlib/requirements.txt.m4
new file mode 100644
index 00000000000..8b6ca03b0b9
--- /dev/null
+++ b/pkgs/sagemath-tdlib/requirements.txt.m4
@@ -0,0 +1,2 @@
+Cython==esyscmd(`printf $(sed "s/[.]p.*//;" ../cython/package-version.txt)')
+sagemath-standard==esyscmd(`printf $(sed "s/[.]p.*//;" ../sagelib/package-version.txt)')
diff --git a/pkgs/sagemath-tdlib/sage b/pkgs/sagemath-tdlib/sage
new file mode 120000
index 00000000000..e0da5daa6f2
--- /dev/null
+++ b/pkgs/sagemath-tdlib/sage
@@ -0,0 +1 @@
+../../src/sage
\ No newline at end of file
diff --git a/pkgs/sagemath-tdlib/setup.cfg.m4 b/pkgs/sagemath-tdlib/setup.cfg.m4
new file mode 100644
index 00000000000..62833bbe6f6
--- /dev/null
+++ b/pkgs/sagemath-tdlib/setup.cfg.m4
@@ -0,0 +1,12 @@
+include(`sage_spkg_versions.m4')dnl' -*- conf-unix -*-
+[metadata]
+name = sagemath-tdlib
+version = file: VERSION.txt
+description = Sage: Open Source Mathematics Software: Tree decompositions with tdlib
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+include(`setup_cfg_metadata.m4')dnl'
+
+[options]
+python_requires = >=3.8, <3.12
+install_requires = SPKG_INSTALL_REQUIRES_cysignals
diff --git a/pkgs/sagemath-tdlib/setup.py b/pkgs/sagemath-tdlib/setup.py
new file mode 100644
index 00000000000..12547533309
--- /dev/null
+++ b/pkgs/sagemath-tdlib/setup.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+from distutils import log
+from setuptools import setup
+
+# Work around a Cython problem in Python 3.8.x on macOS
+# https://github.com/cython/cython/issues/3262
+import os
+if os.uname().sysname == 'Darwin':
+    import multiprocessing
+    multiprocessing.set_start_method('fork', force=True)
+
+# If build isolation is not in use and setuptools_scm is installed,
+# then its file_finders entry point is invoked, which we don't need.
+# Workaround from https://github.com/pypa/setuptools_scm/issues/190#issuecomment-351181286
+try:
+    import setuptools_scm.integration
+    setuptools_scm.integration.find_files = lambda _: []
+except ImportError:
+    pass
+
+# PEP 517 builds do not have . in sys.path
+import sys
+sys.path.insert(0, os.path.dirname(__file__))
+
+if len(sys.argv) > 1 and (sys.argv[1] == "sdist" or sys.argv[1] == "egg_info"):
+    sdist = True
+else:
+    sdist = False
+
+if sdist:
+    cmdclass = {}
+else:
+    from sage_setup.excepthook import excepthook
+    sys.excepthook = excepthook
+
+    from sage_setup.setenv import setenv
+    setenv()
+
+    import sage.env
+    sage.env.default_required_modules = sage.env.default_optional_modules = ()
+
+    from sage_setup.command.sage_build_cython import sage_build_cython
+    from sage_setup.command.sage_build_ext import sage_build_ext
+    sage_build_cython.built_distributions = ['sagemath-tdlib']
+
+    cmdclass = dict(build_cython=sage_build_cython,
+                    build_ext=sage_build_ext)
+
+from sage_setup.find import find_python_sources
+python_packages, python_modules, cython_modules = find_python_sources(
+    '.', ['sage'], distributions=['sagemath-tdlib'])
+
+log.warn('python_packages = {0}'.format(python_packages))
+log.warn('python_modules = {0}'.format(python_modules))
+log.warn('cython_modules = {0}'.format(cython_modules))
+
+setup(
+    cmdclass = cmdclass,
+    packages = python_packages,
+    py_modules  = python_modules,
+    ext_modules = cython_modules,
+)
diff --git a/src/MANIFEST.in b/src/MANIFEST.in
index 1e7df6e529b..0f6e2a37890 100644
--- a/src/MANIFEST.in
+++ b/src/MANIFEST.in
@@ -44,6 +44,9 @@ include sage/geometry/triangulation/triangulations.cc
 include sage/geometry/triangulation/data.cc
 include sage/geometry/triangulation/functions.cc
 
+# Exclude extension modules shipped by optional packages
+exclude sage/graphs/bliss.pyx
+
 global-exclude __pycache__
 global-exclude *.py[co]
 global-exclude *.bak
diff --git a/src/bin/sage-update-version b/src/bin/sage-update-version
index fd6d2a8dcf3..29d8c794375 100755
--- a/src/bin/sage-update-version
+++ b/src/bin/sage-update-version
@@ -48,7 +48,11 @@ done
       if [ -f "$spkg"/install-requires.txt -a -d "$spkg"/src ]; then
           ( echo "# This file is updated on every release by the sage-update-version script"
             # Normalize the package name to PyPI convention (dashes, not underscores)
-            pkg=${spkg//_/-}
+            if [ "$spkg" = sagelib ]; then
+                pkg=sagemath-standard
+            else
+                pkg=${spkg//_/-}
+            fi
             # Normalize the version (updated above as VERSION.txt) according to PEP440.
             version=$(cat "$spkg"/package-version.txt)
             version=${version//.beta/b}
diff --git a/src/sage/all__sagemath_bliss.py b/src/sage/all__sagemath_bliss.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/all__sagemath_coxeter3.py b/src/sage/all__sagemath_coxeter3.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/all__sagemath_mcqd.py b/src/sage/all__sagemath_mcqd.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/all__sagemath_meataxe.py b/src/sage/all__sagemath_meataxe.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/all__sagemath_sirocco.py b/src/sage/all__sagemath_sirocco.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/all__sagemath_tdlib.py b/src/sage/all__sagemath_tdlib.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/graphs/all__sagemath_bliss.py b/src/sage/graphs/all__sagemath_bliss.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/graphs/all__sagemath_mcqd.py b/src/sage/graphs/all__sagemath_mcqd.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/graphs/all__sagemath_tdlib.py b/src/sage/graphs/all__sagemath_tdlib.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/graphs/bliss_cpp/bliss_find_automorphisms.h b/src/sage/graphs/bliss_cpp/bliss_find_automorphisms.h
index a2c084a163e..b87a14e7a8c 100644
--- a/src/sage/graphs/bliss_cpp/bliss_find_automorphisms.h
+++ b/src/sage/graphs/bliss_cpp/bliss_find_automorphisms.h
@@ -1,3 +1,5 @@
+/* sage_setup: distribution = sagemath-bliss */
+
 #include 
 #include 
 
diff --git a/src/sage/graphs/graph_decompositions/all__sagemath_tdlib.py b/src/sage/graphs/graph_decompositions/all__sagemath_tdlib.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/graphs/mcqd.pxd b/src/sage/graphs/mcqd.pxd
index d8d8b01bc72..d7a2faa6d58 100644
--- a/src/sage/graphs/mcqd.pxd
+++ b/src/sage/graphs/mcqd.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-mcqd
+
 from libcpp cimport bool
 
 cdef extern from "mcqd.h":
@@ -5,4 +7,3 @@ cdef extern from "mcqd.h":
         Maxclique()
         Maxclique(bool **, int n)
         void mcqdyn(int * maxclique, int& size)
-
diff --git a/src/sage/libs/all__sagemath_coxeter3.py b/src/sage/libs/all__sagemath_coxeter3.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_meataxe.py b/src/sage/libs/all__sagemath_meataxe.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/all__sagemath_sirocco.py b/src/sage/libs/all__sagemath_sirocco.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/coxeter3/all__sagemath_coxeter3.py b/src/sage/libs/coxeter3/all__sagemath_coxeter3.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/libs/coxeter3/coxeter.pxd b/src/sage/libs/coxeter3/coxeter.pxd
index cffa2505e39..9d5cb2a3f5d 100644
--- a/src/sage/libs/coxeter3/coxeter.pxd
+++ b/src/sage/libs/coxeter3/coxeter.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-coxeter3
+
 #*****************************************************************************
 #       Copyright (C) 2009-2013 Mike Hansen 
 #
diff --git a/src/sage/libs/coxeter3/coxeter.pyx b/src/sage/libs/coxeter3/coxeter.pyx
index 61fa617ede1..b6444ea177d 100644
--- a/src/sage/libs/coxeter3/coxeter.pyx
+++ b/src/sage/libs/coxeter3/coxeter.pyx
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # distutils: language = c++
 # distutils: libraries = coxeter3
 # sage_setup: distribution = sagemath-coxeter3
diff --git a/src/sage/libs/coxeter3/coxeter_group.py b/src/sage/libs/coxeter3/coxeter_group.py
index ab8dfb2ae0c..527cfc61c6f 100644
--- a/src/sage/libs/coxeter3/coxeter_group.py
+++ b/src/sage/libs/coxeter3/coxeter_group.py
@@ -1,4 +1,5 @@
-# -*- coding: utf-8 -*-
+# sage_setup: distribution = sagemath-coxeter3
+
 """
 Coxeter Groups implemented with Coxeter3
 """
diff --git a/src/sage/libs/coxeter3/decl.pxd b/src/sage/libs/coxeter3/decl.pxd
index 56002154226..4f9c7b0c186 100644
--- a/src/sage/libs/coxeter3/decl.pxd
+++ b/src/sage/libs/coxeter3/decl.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-coxeter3
+
 #*****************************************************************************
 #       Copyright (C) 2009-2013 Mike Hansen 
 #
diff --git a/src/sage/libs/meataxe.pxd b/src/sage/libs/meataxe.pxd
index 68c8b3467b0..0a928e19c37 100644
--- a/src/sage/libs/meataxe.pxd
+++ b/src/sage/libs/meataxe.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-meataxe
+
 #*****************************************************************************
 #       Copyright (C) 2015 Simon King 
 #
diff --git a/src/sage/matrix/all__sagemath_meataxe.py b/src/sage/matrix/all__sagemath_meataxe.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/sage/matrix/matrix_gfpn_dense.pxd b/src/sage/matrix/matrix_gfpn_dense.pxd
index 92b0a78d6d2..7a457876b9a 100644
--- a/src/sage/matrix/matrix_gfpn_dense.pxd
+++ b/src/sage/matrix/matrix_gfpn_dense.pxd
@@ -1,3 +1,5 @@
+# sage_setup: distribution = sagemath-meataxe
+
 #*****************************************************************************
 #       Copyright (C) 2015 Simon King 
 #