py-m2crypto conflict with openssl-devel (really swig vs. system headers) resolved

Kubilay Kocak koobs at FreeBSD.org
Mon Sep 24 10:24:31 UTC 2018


On 24/09/2018 6:08 pm, Viktor Dukhovni wrote:
> In /etc/make.conf I have:
> 
>     DEFAULT_VERSIONS=python=2.7 python2=2.7 python3=3.3 ssl=openssl-devel
> 
> since I want OpenSSL 1.1.0 for most of the ports I build.  However, this
> disables the py2-m2crypto port, whose Makefile contains:
> 
>     BROKEN_SSL=    openssl-devel
>     BROKEN_SSL_REASON_openssl-devel=       Error: Syntax error in input(1).
> 
> I commented those out, and tried to build, and indeed the build
> fails with an error from swig3.0:
> 
>     /usr/local/bin/swig3.0 -python -I/usr/local/include -I/usr/local/include/python2.7 \
>       -I/usr/local/include -I/usr/local/include/openssl -I/usr/bin/../lib/clang/4.0.0/include \
>       -I/usr/include -includeall -modern -builtin \
>       -outdir /usr/ports/security/py-m2crypto/work-py27/M2Crypto-0.30.1/M2Crypto \
>       -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
>     /usr/include/x86/_types.h:67: Error: Syntax error in input(1).
> 
> I got curious as to what if anything OpenSSL 1.1.0 has to do with
> this, and it turns out that its only sin is to "#include <stdint.h>"
> in <openssl/e_os2.h>, which should cause no problems.  But it turns
> out that this runs into:
> 
>     https://github.com/freebsd/freebsd/blob/master/sys/x86/include/_types.h#L65
> 
>     __extension__
>     typedef	long long		__int64_t;
>     __extension__
> 
> with the unexpected "__extension__" giving "swig3.0" indigestion.
> 
> The unrecognized syntax in <x86/_types.h> is the real problem, and
> either FreeBSD needs a "swig" that can deal with this, or the headers
> need to be more compatible with the existing "swig".
> 
> Testing with the "__extension__" lines removed, however runs into
> another problem:
> 
>     /usr/include/sys/_types.h:104: Error: Syntax error - possibly a missing semicolon.
>     error: command '/usr/local/bin/swig3.0' failed with exit status 1
> 
> This time "swig" chokes on:
> 
>     typedef struct {
> 	    long long __max_align1 __aligned(_Alignof(long long));
> 	    long double __max_align2 __aligned(_Alignof(long double));
>     } __max_align_t;
> 
> where I assume it does not understand the "__aligned" macro.  Bottom
> line, the internal system C-header files are much too exotic for
> swig, and OpenSSL 1.1.x is rather a bystander, with previous releases
> working with m2crypto somewhat by accident.
> 
> I managed to find a solution that does not modify <openssl/e_os2.h>,
> but rather comments out the switch "-includeall" option from
> M2crypto's setup.py:
> 
>         self.swig_opts.extend(['-I%s' % i for i in _get_additional_includes()])
>         # self.swig_opts.append('-includeall')
>         self.swig_opts.append('-modern')
>         self.swig_opts.append('-builtin')
> 
> and adds a couple of additional explicit include files to SWIG/_m2crypto.i:
> 
>     %include <openssl/e_os2.h>
>     %include <openssl/stack.h>
> 
> above:
> 
>     %include <openssl/safestack.h>
> 
> With this, py-m2crypto builds with OpenSSL 1.1.x and the system
> header files unmolested.  If the maintainer of the py-m2crypto port
> is not on this list, please forward to the right person.  It would
> be good to remove this roadblock to using "openssl-devel" (since
> actually OpenSSL 1.1.1 is now an LTS release, and 1.0.x will be EOL
> at the end of 2019, so "devel" is not really the best label anymore).
> 
> Perhaps the changes could also go to the upstream maintainer of
> m2crypto.
> 

I also note that there is an open bug report for the issue:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=229019


More information about the freebsd-python mailing list