port to PDOS (especially mainframe)

Paul Edwards mutazilah at gmail.com
Tue Mar 23 17:22:11 EDT 2021


On Tuesday, March 23, 2021 at 10:19:46 PM UTC+11, Paul Edwards wrote:

> Objects/exceptions.c: ADD_ERRNO(ConnectionRefusedError, ECONNREFUSED); 
> 
> Those errno are non-standard (non-C90) and I assume 
> other platforms can't cope with that either. But I can't 
> see how other platforms are circumventing that problem. 
> (ie I did a grep -R of the whole source code). 
> 
> I could define a stack of constants in pyconfig.h to allow 
> the compile to go through, but I don't see anyone else 
> doing the same thing. 

I defined a stack of E* in pyconfig.h and here is my
latest problem:

../Objects/longobject.c:940:5: #error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"

/* Create a new long int object from a C pointer */

PyObject *
PyLong_FromVoidPtr(void *p)
{
#ifndef HAVE_LONG_LONG
#   error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
#endif

That to me sounds like having "long long" is compulsory,
but the error it is showing is not correct. My "void *" is
he same as "long", ie 32 bits. Everything I do is 32 bits
unless I'm doing the occasional MSDOS build which is
16 bits.

What's the point of having a variable HAVE_LONG_LONG
if it's compulsory?

"long long" is not C90. I don't have support for that. The
"i370" target of GCC 3.2.3 doesn't have DI instructions
working. Just 32 bits. Everything is 32 bits.

Any suggestions?

Thanks. Paul.


More information about the Python-list mailing list