Created attachment 1569452 [details] Full build log from COPR python-wxpython4-4.0.4-3.fc31 fails to build from source in Fedora rawhide with Python 3.8. The error message is: Checking for program 'python' : /usr/bin/python3 Checking for python version >= 2.7.0 : 3.8.0 python-config : /usr/bin/python3-config Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes Testing pyembed configuration : Could not build a python embedded interpreter Testing pyembed configuration : Could not build a python embedded interpreter BUILDSTDERR: The configuration failed BUILDSTDERR: (complete log in /builddir/build/BUILD/python-wxpython4-4.0.4/python3/build/waf/3.8/gtk3/config.log) Command '"/usr/bin/python3" /builddir/build/BUILD/python-wxpython4-4.0.4/python3/bin/waf-2.0.8 --wx_config=wx-config-3.0 --gtk3 --python="/usr/bin/python3" --out=build/waf/3.8/gtk3 configure build ' failed with exit code 1. Finished command: build_py (0.972s) BUILDSTDERR: error: Bad exit status from /var/tmp/rpm-tmp.H67ljx (%build)
let me try dig the config.log
Created attachment 1569456 [details] root.log from COPR
Created attachment 1569490 [details] config.log
[1/2] Compiling build/waf/3.8/gtk3/.conf_check_1c6b03a74ebec564757f8a7c923132ce/test.cpp ['/usr/bin/g++', '-O2', '-g', '-fexceptions', '-fstack-protector-strong', '-grecord-gcc-switches', '-m64', '-mtune=generic', '-fasynchronous-unwind-tables', '-fstack-clash-protection', '-fcf-protection', '-fPIC', '-fwrapv', '-O2', '-g', '-fexceptions', '-fstack-protector-strong', '-grecord-gcc-switches', '-m64', '-mtune=generic', '-fasynchronous-unwind-tables', '-fstack-clash-protection', '-fcf-protection', '-fPIC', '-fwrapv', '-I/usr/include/python3.8', '-DPYTHONDIR="/usr/local/lib/python3.8/site-packages"', '-DPYTHONARCHDIR="/usr/local/lib64/python3.8/site-packages"', '-D_GNU_SOURCE', '-DDYNAMIC_ANNOTATIONS_ENABLED=1', '-DNDEBUG', '-D_GNU_SOURCE', '../test.cpp', '-c', '-o/builddir/build/BUILD/python-wxpython4-4.0.4/python3/build/waf/3.8/gtk3/.conf_check_1c6b03a74ebec564757f8a7c923132ce/testbuild/test.cpp.1.o'] [2/2] Linking build/waf/3.8/gtk3/.conf_check_1c6b03a74ebec564757f8a7c923132ce/testbuild/testprog ['/usr/bin/g++', '-fPIC', '-fPIC', 'test.cpp.1.o', '-o/builddir/build/BUILD/python-wxpython4-4.0.4/python3/build/waf/3.8/gtk3/.conf_check_1c6b03a74ebec564757f8a7c923132ce/testbuild/testprog', '-Wl,-Bstatic', '-Wl,-Bdynamic', '-L/usr/lib64', '-lcrypt', '-lpthread', '-ldl', '-lutil', '-lm', '-lm', '-lcrypt', '-lpthread', '-ldl', '-lutil', '-lm', '-lm'] err: /usr/bin/ld: test.cpp.1.o: in function `main': /builddir/build/BUILD/python-wxpython4-4.0.4/python3/build/waf/3.8/gtk3/.conf_check_1c6b03a74ebec564757f8a7c923132ce/testbuild/../test.cpp:14: undefined reference to `Py_Initialize' /usr/bin/ld: /builddir/build/BUILD/python-wxpython4-4.0.4/python3/build/waf/3.8/gtk3/.conf_check_1c6b03a74ebec564757f8a7c923132ce/testbuild/../test.cpp:15: undefined reference to `Py_Finalize' collect2: error: ld returned 1 exit status
I also see this in the log: LIBPL = '/usr/lib64/python3.8/config--x86_64-linux-gnu' This should probably be: /usr/lib64/python3.8/config-3.8-x86_64-linux-gnu
@Miro - it looks like that LIBPL is coming from python itself: <mock-chroot> sh-5.0# python3 -c "from distutils.sysconfig import get_config_var; print(get_config_var('LIBPL'))" /usr/lib64/python3.8/config--x86_64-linux-gnu Looking at strace of that, it appears to be looking at /usr/lib64/python3.8/_sysconfigdata__linux_x86_64-linux-gnu.py. <mock-chroot> sh-5.0# grep LIBPL /usr/lib64/python3.8/_sysconfigdata__linux_x86_64-linux-gnu.py 'LIBPL': '/usr/lib64/python3.8/config--x86_64-linux-gnu',
Victor, this might be relevant to the "m" removal. Could you please look at this with very high priority? Thanks.
Just for the record: Those are the actual files: /usr/lib64/python3.7/config-3.7m-x86_64-linux-gnu /usr/lib64/python3.8/config-3.8-x86_64-linux-gnu This is a result of python3 -c "from distutils.sysconfig import get_config_var; print(get_config_var('LIBPL'))": /usr/lib64/python3.7/config-3.7m-x86_64-linux-gnu /usr/lib64/python3.8/config--x86_64-linux-gnu
Unpatched upstream at v3.8.0a4: $ ./configure && make -j $ grep LIBPL build/lib.linux-x86_64-3.8/_sysconfigdata__linux_x86_64-linux-gnu.py 'LIBPL': '/usr/local/lib/python3.8/config-3.8-x86_64-linux-gnu', With our patches at fedora-3.8.0a4, i'm unable to run ./configure && make -j - apparently, our patch doesn't work without setting all the other things we set during the build :(
[cpython ((fedora-3.8.0a4))]$ ./configure --enable-shared && make -j [cpython ((fedora-3.8.0a4))]$ grep LIBPL build/lib.linux-x86_64-3.8/_sysconfigdata__linux_x86_64-linux-gnu.py 'LIBPL': '/usr/local/lib64/python3.8/config--x86_64-linux-gnu',
I've talked to Victor on IRC and we found the cause of he problem. Fix in https://src.fedoraproject.org/rpms/python38/pull-request/20 - needs a review.
<mock-chroot> sh-5.0# python3 -c "from distutils.sysconfig import get_config_var; print(get_config_var('LIBPL'))" /usr/lib64/python3.8/config-3.8-x86_64-linux-gnu <mock-chroot> sh-5.0# file /usr/lib64/python3.8/config-3.8-x86_64-linux-gnu /usr/lib64/python3.8/config-3.8-x86_64-linux-gnu: directory
Okay, I'll have another look tonight.
Note that a new copr build of wxpytho4 failed again, so I'm running it in mock locally to get the new config.log.
Created attachment 1570152 [details] config.log
I didn't test this with the latest python3.8 build, but with the previous version, it appears that 'python3-config --ldflags' isn't including the python libraries in the output.
That is a deliberate change, see https://docs.python.org/dev/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build $ python3.8-config --ldflags -L/usr/lib64 -lcrypt -lpthread -ldl -lutil -lm -lm $ python3.7-config --ldflags -L/usr/lib64 -lpython3.7m -lcrypt -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
This might be blocked by https://bugs.python.org/issue36721. It seems that WAF wants to test building an embedded application, so it needs those flags. I don't think wxPython needs that, so I'm trying to see if I can work around it in wxPython.
Fixed, built fine locally using copr mock config.