Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.

Bug 1715756

Summary: libselinux fails to build with Python 3.8
Product: [Fedora] Fedora Reporter: Miro Hrončok <mhroncok>
Component: libselinuxAssignee: Petr Lautrbach <plautrba>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: urgent Docs Contact:
Priority: unspecified    
Version: rawhideCC: dwalsh, mgrepl, plautrba, vmojzis
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://copr.fedorainfracloud.org/coprs/g/python/python3.8/package/libselinux/
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2019-05-31 09:33:05 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1686977    

Description Miro Hrončok 2019-05-31 07:40:32 UTC
See https://copr.fedorainfracloud.org/coprs/g/python/python3.8/build/918427/ and https://copr.fedorainfracloud.org/coprs/g/python/python3.8/package/libselinux/

libselinux 2.9-4.fc31 fails to build with Python 3.8.0a4+:

+ make PYTHON=/usr/bin/python3 LIBDIR=/usr/lib64 -j2 pywrap
make -C src pywrap pywrap
make[1]: Entering directory '/builddir/build/BUILD/libselinux-2.9/src'
cc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DOVERRIDE_GETTID=0 -I../include -D_GNU_SOURCE -DDISABLE_RPM -DNO_ANDROID_BACKEND -DUSE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8  -Wno-error -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-shadow -Wno-uninitialized -Wno-missing-prototypes -Wno-missing-declarations -I/usr/include/python3.8  -fPIC -DSHARED -c -o python-3.8selinuxswig_wrap.lo selinuxswig_wrap.c
cc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DOVERRIDE_GETTID=0 -I../include -D_GNU_SOURCE -DDISABLE_RPM -DNO_ANDROID_BACKEND -DUSE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8 -I/usr/include/python3.8  -fPIC -DSHARED -c -o python-3.8audit2why.lo audit2why.c
cc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DOVERRIDE_GETTID=0 -I../include -D_GNU_SOURCE -DDISABLE_RPM -DNO_ANDROID_BACKEND -DUSE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8  -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L. -shared -o python-3.8audit2why.so python-3.8audit2why.lo -lselinux -l:libsepol.a  -Wl,-soname,audit2why.so,--version-script=audit2why.map,-z,defs
/usr/bin/ld: python-3.8audit2why.lo: in function `finish':
/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:166: undefined reference to `PyArg_ParseTuple'
/usr/bin/ld: python-3.8audit2why.lo: in function `_Py_INCREF':
/usr/include/python3.8/object.h:449: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /usr/include/python3.8/object.h:449: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: python-3.8audit2why.lo: in function `check_booleans':
/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:84: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:84: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:107: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:107: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:117: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:117: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:76: undefined reference to `PyExc_MemoryError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:76: undefined reference to `PyErr_SetString'
/usr/bin/ld: python-3.8audit2why.lo: in function `analyze':
/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:327: undefined reference to `PyList_Type'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:327: undefined reference to `PyArg_ParseTuple'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:331: undefined reference to `PyList_Size'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:360: undefined reference to `PyList_GetItem'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:364: undefined reference to `PyUnicode_AsUTF8'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:371: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:371: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:341: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:341: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:379: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:379: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:337: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:337: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:345: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:345: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:419: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:349: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:349: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:391: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:391: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:382: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:382: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:403: undefined reference to `PyList_New'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:406: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:407: undefined reference to `PyList_SetItem'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:412: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:393: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:423: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:423: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:430: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:430: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:427: undefined reference to `_Py_NoneStruct'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:427: undefined reference to `Py_BuildValue'
/usr/bin/ld: python-3.8audit2why.lo: in function `__policy_init':
/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:246: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:246: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:218: undefined reference to `PyExc_ValueError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:218: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:254: undefined reference to `PyExc_ValueError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:227: undefined reference to `PyExc_ValueError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:227: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:267: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:267: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:284: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:284: undefined reference to `PyErr_SetString'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:234: undefined reference to `PyExc_MemoryError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:273: undefined reference to `PyExc_MemoryError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:273: undefined reference to `PyErr_SetString'
/usr/bin/ld: python-3.8audit2why.lo: in function `init':
/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:299: undefined reference to `PyArg_ParseTuple'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:302: undefined reference to `Py_BuildValue'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:296: undefined reference to `PyExc_RuntimeError'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:296: undefined reference to `PyErr_SetString'
/usr/bin/ld: python-3.8audit2why.lo: in function `PyInit_audit2why':
/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:468: undefined reference to `PyModule_Create2'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:475: undefined reference to `PyModule_AddIntConstant'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:476: undefined reference to `PyModule_AddIntConstant'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:477: undefined reference to `PyModule_AddIntConstant'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:478: undefined reference to `PyModule_AddIntConstant'
/usr/bin/ld: /builddir/build/BUILD/libselinux-2.9/src/audit2why.c:479: undefined reference to `PyModule_AddIntConstant'
/usr/bin/ld: python-3.8audit2why.lo:/builddir/build/BUILD/libselinux-2.9/src/audit2why.c:480: more undefined references to `PyModule_AddIntConstant' follow
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:168: python-3.8audit2why.so] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/builddir/build/BUILD/libselinux-2.9/src'
make: *** [Makefile:52: pywrap] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.RvXd0t (%build)


I think this is caused by https://docs.python.org/dev/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build


We'd like to start 3.8 rebuilds in a side tag next week.

Comment 1 Petr Lautrbach 2019-05-31 08:54:34 UTC
I believe this is already fixed in libselinux-2.9-2.fc31, see https://copr.fedorainfracloud.org/coprs/plautrba/libselinux-python-3.8/build/918499/


in -2 we switched to use distutils and follow https://docs.python.org/3.8/extending/building.html#building

Now our setup.py looks like:

#!/usr/bin/python3

from distutils.core import Extension, setup

setup(
    name="selinux",
    version="2.9",
    description="SELinux python 3 bindings",
    author="SELinux Project",
    author_email="selinux.org",
    ext_modules=[
        Extension('selinux._selinux',
                  sources=['selinuxswig_python.i'],
                  include_dirs=['../include'],
                  library_dirs=['.'],
                  libraries=['selinux']),
        Extension('selinux.audit2why',
                  sources=['audit2why.c'],
                  include_dirs=['../include'],
                  library_dirs=['.'],
                  libraries=['selinux'],
                  extra_link_args=['-l:libsepol.a'])
    ],
)
 
Miro, please review the results and close it works for you

Comment 2 Miro Hrončok 2019-05-31 09:25:30 UTC
Seems like I might have just forgot to pull :facepalm:

Sorry about that, running a verifying build.

Comment 3 Miro Hrončok 2019-05-31 09:33:05 UTC
Builds. Sorry again.