libc++ tests won't run due to a breaking change in Python 3.8 libraries

The libc++ tests rely on the `platform.linux_distribution()` API [1], which is deprecated since Python 3.5 and removed [2] in Python 3.8, which is already released. This API is used to XFAIL certain tests based on the linux distro.

So, I can’t run libc++ tests when the only Python I have is 3.8.

Yes, I know, I could use Python 2, but I really don’t want to, since it will die in less than a month [3].

The proposed solution is to use the distro package [3], but AFAIK the LLVM community doesn’t want to depend on third-party packages.

Any ideas how this can be dealt with?

[1] https://github.com/llvm/llvm-project/blob/c8f0d3e130d336f49c204b9ee317bf99be192a82/libcxx/utils/libcxx/test/target_info.py#L194-L216

[2] platform — Access to underlying platform’s identifying data — Python 3.7.13 documentation

[3] https://pythonclock.org

[4] distro · PyPI

Moved to libcxx-dev.

How about this?

def platform_ver(self):

  • _, ver, _ = platform.linux_distribution()
  • ver = ver.lower().strip().replace(’ ', ‘-’)
  • return ver # Permitted to be None.
  • if ‘linux_distribution’ in dir(platform):
  • _, ver, _ = platform.linux_distribution()
  • ver = ver.lower().strip().replace(’ ', ‘-’)
  • return ver # Permitted to be None.
  • else:
  • return None

It seems like the only actually used feature generated by this function is "suse-linux-enterprise-server-11".

If that’s true, we could implement an ad-hoc solution for that case. SLES 11 is a very old distribution and I’d expect nobody to run Python 3.8 on it. Therefore we could maybe not add any distribution feature if `platform.linux_distribution()` is missing.