On 10/14/22 05:32 PM, Steven A. Falco wrote:
> I've received a bug:
https://bugzilla.redhat.com/show_bug.cgi?id=2134832
>
> The basic issue is that Fedora uses both /usr/lib/python3.10 and /usr/lib64/python3.10; i.e. they separate the 32-bit and 64-bit files. The KiCad build scripts currently put _pcbnew.so into /usr/lib/python3.10, but because that file is a 64-bit shared library, it should go into /usr/lib64/python3.10 on Fedora.
>
> I tried manually running the command that CMakeLists.txt uses to find the path:
>
> python3 -c "import distutils.sysconfig;print(\"%s\"%distutils.sysconfig.get_python_lib(plat_specific=0, standard_lib=0, prefix=''))"
>
> and that indeed returns:
>
> lib/python3.10/site-packages
Playing with it a bit more, if I change from "plat_specific=0" to "plat_specific=1", then I get the path Fedora wants:
$ python3 -c "import distutils.sysconfig;print(\"%s\"%distutils.sysconfig.get_python_lib(plat_specific=1, standard_lib=0, prefix=''))"
<string>:1: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
<string>:1: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
lib64/python3.10/site-packages
But that of course does nothing to fix the deprecation warning.
> I could try overriding this by explicitly setting the PYTHON_SITE_PACKAGE_PATH variable, but I doubt that is the correct approach. The above command returns a deprecation warning, suggesting using sysconfig instead of distutils.sysconfig.
>
> Here is everything that python3 has for the sysconfig.get_paths() method:
>
> python3 -c "from sysconfig import get_paths; print(get_paths())"
> {'stdlib': '/usr/lib64/python3.10', 'platstdlib': '/usr/local/lib64/python3.10', 'purelib': '/usr/local/lib/python3.10/site-packages', 'platlib': '/usr/local/lib64/python3.10/site-packages', 'include': '/usr/include/python3.10', 'platinclude': '/usr/include/python3.10', 'scripts': '/usr/local/bin', 'data': '/usr/local'}
>
> So stdlib looks like the correct base path, although we'd have to tack on the site-packages suffix. Note that I don't think we should use platlib, because the bulk of KiCad is installed into /usr rather than /usr/local.
One issue with using sysconfig is that it produces an absolute path, which causes other problems.
$ python3 -c "from sysconfig import get_path; print(get_path(\"stdlib\"))"
/usr/lib64/python3.10
But it may be that I'm not using it correctly; perhaps there is a way to get it to provide a relative path, or perhaps other changes are needed on top of switching to sysconfig.