# Temporary disabling of Stable extension builds in preparation for Slicer 5.8 Release & Visual Studio update

**URL:** <https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207>\
**Category:** Development\
**Created:** [January 22, 2025, 3:55am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207 "2025-01-22T03:55:30Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![jcfr](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jcfr/32/17825_2.png) [@jcfr](https://discourse.slicer.org/u/jcfr)\
**Post date:** [January 22, 2025, 3:55am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/1 "2025-01-22T03:55:30Z")

</div>

As discussed in the [2025-01-25 Weekly Meeting](https://discourse.slicer.org/t/2025-01-25-weekly-meeting/41174/3), the builds of Slicer **Stable** extensions will be temporarily disabled this evening.

This step is necessary to facilitate updating the version of Visual Studio installed on the Windows factory (`bluestreak`). Once the Slicer 5.8 release is completed, this update will ensure that both **Stable** and **Preview** extensions are built using the same compiler, improving consistency across builds.

### **Next Steps:**

1. Pause the build of Stable extensions (happening this evening).
2. Update Visual Studio on the Windows factory.
3. Wait for the January 21st preview build to complete.
4. Begin the release process for Slicer 5.8 on January 22nd.

We appreciate your patience and support during this process 🙏

---

<div class="post-metadata">

**Author:** ![RafaelPalomar](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/rafaelpalomar/32/1436_2.png) [@RafaelPalomar](https://discourse.slicer.org/u/RafaelPalomar)\
**Post date:** [January 22, 2025, 5:54am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/2 "2025-01-22T05:54:44Z")

</div>

@jcfr, thanks for informing. This is an important update.

Have there been any changes in the Linux build factory lately? I observe that the extension catalog is empty for the Linux preview since `r33182` ([https://extensions.slicer.org/catalog/All/33182/](https://extensions.slicer.org/catalog/All/33182/))

---

<div class="post-metadata">

**Author:** ![muratmaga](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/muratmaga/32/3622_2.png) [@muratmaga](https://discourse.slicer.org/u/muratmaga)\
**Post date:** [January 22, 2025, 6:27am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/3 "2025-01-22T06:27:25Z")

</div>

I think there was about a week where there was no Linux build (and extension). It should be working now:

[https://extensions.slicer.org/catalog/All/33198/linux](https://extensions.slicer.org/catalog/All/33198/linux)

---

<div class="post-metadata">

**Author:** ![RafaelPalomar](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/rafaelpalomar/32/1436_2.png) [@RafaelPalomar](https://discourse.slicer.org/u/RafaelPalomar)\
**Post date:** [January 22, 2025, 8:15am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/4 "2025-01-22T08:15:40Z")

</div>

Thanks @muratmaga. You are right, this was only for a short window of time. Now it is working.

---

<div class="post-metadata">

**Author:** ![jcfr](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jcfr/32/17825_2.png) [@jcfr](https://discourse.slicer.org/u/jcfr)\
**Post date:** [January 22, 2025, 9:18am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/5 "2025-01-22T09:18:52Z")

</div>

### Visual Studio updated from `17.9.6` to `17.12.4`

 ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/a/0/a0c9b287748e71c240a2bb259913f4cc0d30301a.png)

### MSVC Compiler Version

Before:

```auto
[...]
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.39.33523.0
-- The CXX compiler identification is MSVC 19.39.33523.0
[...]

```

After:

```auto
[...]
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.42.34436.0
-- The CXX compiler identification is MSVC 19.42.34436.0
[...]

```

### Preview build manually triggered

To check that latest version of `main` build as expected ([Slicer@87d3a309e](https://github.com/Slicer/Slicer/commit/87d3a309e7e9c48e32dba94894adcc58b377f1f3)), the build was manually triggered on the three platform based on [these instructions](https://github.com/Slicer/DashboardScripts/blob/main/maintenance/guides/re-trigger-nightly-build.md).

| ![image](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/d/0/d064cd2ef14ef589bd7d8ea34a2237e72eae1222.png) |
| --- |
| See [https://slicer.cdash.org/index.php?project=SlicerPreview&date=2025-01-22](https://slicer.cdash.org/index.php?project=SlicerPreview&date=2025-01-22) |

---

<div class="post-metadata">

**Author:** ![jcfr](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jcfr/32/17825_2.png) [@jcfr](https://discourse.slicer.org/u/jcfr)\
**Post date:** [January 23, 2025, 11:06am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/6 "2025-01-23T11:06:37Z")

</div>

Updates:

- The update of MSVC compiler worked as expected. See details in issue [#7737](https://github.com/Slicer/Slicer/issues/7737#issuecomment-2606702891)
- Fixes related to `SampleData` have been integrated to fix tests. See [PR#8162](https://github.com/Slicer/Slicer/pull/8162), [PR#8163](https://github.com/Slicer/Slicer/pull/8163) and [PR#8164](https://github.com/Slicer/Slicer/pull/8164)

---

<div class="post-metadata">

**Author:** ![jcfr](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jcfr/32/17825_2.png) [@jcfr](https://discourse.slicer.org/u/jcfr)\
**Post date:** [January 23, 2025, 11:26am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/7 "2025-01-23T11:26:15Z")

</div>

**Update** :

We’ve identified the root cause of the crash occurring after installing binary Python wheels (e.g., ITK wheels). The issue stems from recent wheels being built with the newer `std::string` ABI, while the official Slicer and Python binaries target the _older_ ABI. This mismatch leads to compatibility issues.

To learn more about the Dual ABI, refer to [GCC’s Dual ABI Documentation](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html).

### Proposed Solution

To resolve this, we plan to introduce an option that packages a `_manylinux.py` module specific to the build environment. This module will restrict the latest compatible version of GLIBC, ensuring compatibility with the host system.

For example, adding the following `_manylinux.py` module to the environment ensures compatibility with `manylinux_2_17` or older wheels, avoiding the installation of newer, incompatible wheels like `manylinux_2_28`:

```py
from typing import NamedTuple

class _GLibCVersion(NamedTuple):
    major: int
    minor: int

def manylinux_compatible(tag_major, tag_minor, tag_arch, **_): # PEP 600
    if _GLibCVersion(tag_major, tag_minor) > _GLibCVersion(2, 17):
        return False
    return True

```

This ensures compatible wheels are installed on Ubuntu systems.

### References

- **Dual ABI Documentation** : [https://gcc.gnu.org/onlinedocs/libstdc++/manual/using\_dual\_abi.html](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html)
- **PEP 600: Package Installers** : [https://peps.python.org/pep-0600/#package-installers](https://peps.python.org/pep-0600/#package-installers)
- **Discussion on PEP 600** : [https://discuss.python.org/t/pep-600-text-and-example-code-for-package-installers-section-disagree/55329](https://discuss.python.org/t/pep-600-text-and-example-code-for-package-installers-section-disagree/55329)

**Next Steps**

Later today, we’ll validate this solution by running the full `SlicerMorph` and `SlicerANTs` workflows. Once confirmed, we’ll integrate the fix into Slicer and proceed with the release process.

⚠ For now, Preview and Stable builds **remain** disabled. ⚠

Thank you for understanding. 🙏

cc: @muratmaga

---

<div class="post-metadata">

**Author:** ![jcfr](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/jcfr/32/17825_2.png) [@jcfr](https://discourse.slicer.org/u/jcfr)\
**Post date:** [January 24, 2025, 1:50am UTC](https://discourse.slicer.org/t/temporary-disabling-of-stable-extension-builds-in-preparation-for-slicer-5-8-release-visual-studio-update/41207/8 "2025-01-24T01:50:34Z")

</div>

**Updates:**

> To resolve this, we plan to introduce an option that packages a `_manylinux.py` module

The corresponding fix has been reviewed and integrated. For reference, see pull request [Slicer#8168](https://github.com/Slicer/Slicer/pull/8168).

## Add support for configuring `_manylinux` module

_For convenience and future reference, the associated [pull request description](https://github.com/Slicer/Slicer/pull/8168) is also copied below:_

* * *

> This commit introduces the ability to configure a `_manylinux` module in the Slicer build system to enhance compatibility when installing binary Python wheels.
> 
> This update resolves potential issues with installing Python wheels built for newer GLIBC versions or ABIs, which could cause crashes in environments with older configurations.
> 
> Specifically, installing `manylinux_2_28_x86_64` ITK wheels compiled with `_GLIBCXX_USE_CXX11_ABI=1` was causing segmentation faults in the _Stable_ Slicer version, which is compiled with `_GLIBCXX_USE_CXX11_ABI=0`. The `_manylinux` module ensures that `manylinux_2_17_x86_64` ITK wheels are always installed, even when Slicer and its associated Python interpreter are executed on newer operating systems.
> 
> The `_manylinux.py` module is dynamically generated during the build process and ensures that Python packages installed via `pip` are compatible with the GLIBC version used in the Slicer build environment.
> 
> ### Summary of Changes
> 
> **`External_python.cmake`** :
> 
> - Added logic to configure `_manylinux.py` for Linux-based build environments.
> - By default, `_manylinux.py` is generated. If disabled using the CMake option `PYTHON_CONFIGURE_MANYLINUX_MODULE`, any existing `_manylinux.py` module is removed to prevent inadvertent impacts on Python package installations.
> - Introduced a CMake option `PYTHON_REMOVE_MANYLINUX_MODULE_IF_EXISTS` to allow users to disable the removal of an existing `_manylinux.py` module.
> 
> **`python_configure_manylinux_module.cmake`** :
> 
> - New CMake script to detect the system’s GLIBC version using `ldd`.
> - Dynamically generates the `_manylinux.py` module, which includes:
> - A `manylinux_compatible` function to override the default behavior of `pip` for checking compatibility of manylinux tags.
> - Embedded documentation and compatibility checks to prevent crashes caused by mismatched ABI or GLIBC versions.
> 
> By restricting installed packages to compatible manylinux tags, this update ensures stability and reliability for Python packages in the Slicer ecosystem.
> 
> ### References
> 
> - [PEP 600: Manylinux Platform Tag](https://peps.python.org/pep-0600/)
> - [GCC Dual ABI Documentation](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html)

* * *
