[Python-bugs-list] [ python-Bugs-475951 ] HP-UX: Problem building socket
noreply@sourceforge.net
noreply@sourceforge.net
Mon, 12 Nov 2001 00:51:51 -0800
Bugs item #475951, was opened at 2001-10-29 02:15
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=475951&group_id=5470
Category: Build
Group: Platform-specific
Status: Open
Resolution: Wont Fix
Priority: 5
Submitted By: Nobody/Anonymous (nobody)
Assigned to: Martin v. Löwis (loewis)
Summary: HP-UX: Problem building socket
Initial Comment:
On HP-UX 11, I get errors compiling Python 2.1.1 from
source.
It crashes when parsing sys/socket.h
Here's the offending code:
extern sbsize_t sendfile __((int, int, off_t,
bsize_t,
const struct iovec *,
int));
extern sbsize_t sendpath __((int, char *, off_t,
bsize_t,
const struct iovec *,
int));
When I switch from gcc to cc (native c compiler) the
socket
library compiles, but many other libs don't.
(sidenote: when using cc, cc is noteably faster than
gcc)
----------------------------------------------------------------------
Comment By: Nobody/Anonymous (nobody)
Date: 2001-11-12 00:51
Message:
Logged In: NO
'sbsize_t' is an HPUX11i issue - possible solution see below.
I can't test it, I have only 11 without 'i'.
More important is the fact, that Python uses UNIX style
sockets as far as i understand. HPUX offers two types of
sockets: BSD-style via libc and UNIX style via libxnet.
The HPUX11 python build is linked against libxti (not xnet)
via libnsl.
Compilation of socketmodule.c HAS TO BE DONE with
_XOPEN_SOURCE_EXTENDED defined - see below.
With this one gets rid of a lot of compiler warnings
with socketmodule.c
However, my poor C skills don't tell me if -lxnet should be added
additionally at link time or not.
Carl cmkleffner.gmx.de
--------------
The following article on devresource is a must for all HPUX porters:
http://devresource.hp.com/STKL/inhibitors.html
'Linux porting inhibitors'
> socket flavors
>
> HP-UX supports two types of sockets - BSD 4.2 style sockets in libc and UNIX95/98
> style sockets in libxnet. Linux's socket is a UNIX98 style socket, so the path of least
> resistance would be to use the UNIX95/98 style socket in HP-UX. However, since
> socklen_t in Linux is typedef to int while socklen_t in HP-UX is typedef to size_t, some
> additional reconciliation may still be needed. Note, socklen_t is used in places where
> "len" objects are defined. An example of its use is shown below.
>
> To use UNIX95/98 style sockets in HP-UX, the libxnet library needs to be added to the
> link line. Also, the macro, _XOPEN_SOURCE, needs to be defined, and the macro,
> _XOPEN_SOURCE_EXTENDED, needs to be defined as 1. Refer to HP-UX manpage,
> xopen_networking(7) for further details.
http://gcc.gnu.org/ml/gcc-prs/2001-07/msg00527.html
. . . . .
> HPUX 11i is quite different from HPUX 11 because many of the
> header files have been changed and new types are used such as
> sbsize_t and bsize_t.
http://gcc.gnu.org/ml/gcc-bugs/2001-09/msg00139.html
> To: hpux at connect dot org dot uk, gcc-bugs at gcc dot gnu dot org
> Subject: GCC 3.0.1 on HP-UX 11i
> From: Remi COLLET <root at iut-info dot ens dot univ-reims dot fr>
> Date: Wed, 05 Sep 2001 17:40:33 +0200
> Organization: IUT de Reims - Departement Informatique
>
. . . . .
> 3) non ANSI declaration of sendfile and sendpath (C++) in socket.h
>
> Copy socket.h in
> /opt/gcc/lib/gcc-lib/hppa2.0n-hp-hpux11.00/3.0.1/include/sys
>
> Replace (line 470)
>
> > inline sbsize_t sendfile(a,b,c,d,e,f) int a,b,f; off_t c; bsize_t d; const struct iovec * e; { return
__sendfile64(a,b,c,d,e,f); }
> > inline sbsize_t sendpath(a,b,c,d,e,f) int a,f; char *b; off_t c; bsize_t d; const struct iovec * e; {
return __sendpath64(a,b,c,d,e,f); }
> >
> >
> With:
>
> > inline sbsize_t sendfile(int a,int b,off_t c,bsize_t d,const struct iovec *e,int f)
> > { return __sendfile64(a,b,c,d,e,f); }
> > inline sbsize_t sendpath(int a,char *b,off_t c,bsize_t d,const struct iovec *e,int f)
> > { return __sendpath64(a,b,c,d,e,f); }
> >
> >
> Then, all works fine !
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2001-11-06 11:12
Message:
Logged In: YES
user_id=21627
The likely cause is that sbsize_t is not defined. Please try
to find out what header file of HP-UX defines sbsize_t, and
under what conditions?
Outright including that header file probably is the wrong
solution, so please also find out where it is included from,
tracking it eventually back to socket.h. It appears that a
certain #define is missing to cause a proper definition of
sbsize_t. We must find out what that define is, and why it
is not set when compiling with gcc.
Also, could you please identify yourself?
----------------------------------------------------------------------
Comment By: Nobody/Anonymous (nobody)
Date: 2001-11-06 04:42
Message:
Logged In: NO
gcc --version is now 3.0.1
The problem however is still there:
building '_socket' extension
gcc -g -O2 -Wall -Wstrict-prototypes -fpic -I.
-I/utmnt/ut/si/dv0216/Python-2.1.1/./Include
-I/usr/local/include -IInclude/ -c
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c -o
build/temp.hp-ux-B.11.11-9000/785-2.1/socketmodule.o
In file included from /usr/include/netdb.h:72,
from
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:145:
/usr/include/sys/socket.h:439: parse error before "sendfile"
/usr/include/sys/socket.h:439: parse error before "bsize_t"
/usr/include/sys/socket.h:441: parse error before "sendpath"
/usr/include/sys/socket.h:441: parse error before "bsize_t"
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c: In
function `PySocketSock_accept':
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:795:
warning: passing arg 3 of `accept' from incompatible pointer
type
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c: In
function `PySocketSock_getsockopt':
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:978:
warning: passing arg 5 of `getsockopt' from incompatible
pointer type
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:992:
warning: passing arg 5 of `getsockopt' from incompatible
pointer type
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c: In
function `PySocketSock_getsockname':
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:1188:
warning: passing arg 3 of `getsockname' from incompatible
pointer type
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c: In
function `PySocketSock_getpeername':
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:1218:
warning: passing arg 3 of `getpeername' from incompatible
pointer type
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c: In
function `PySocketSock_recvfrom':
/utmnt/ut/si/dv0216/Python-2.1.1/Modules/socketmodule.c:1376:
warning: passing arg 6 of `recvfrom' from incompatible
pointer type
WARNING: building of extension "_socket" failed: command
'gcc' failed with exit status 1
Here are the offending lines from socket.h
extern sbsize_t sendfile __((int, int, off_t, bsize_t,
const struct iovec *, int));
extern sbsize_t sendpath __((int, char *, off_t, bsize_t,
const struct iovec *, int));
However, my medium c skills tell me that the lines are ok.
I cannot offer an explanation why gcc fails here.
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2001-11-01 08:57
Message:
Logged In: YES
user_id=21627
gcc 2.95 does not support HP-UX 11; this appears to be an
instance of that problem. The __va__list problem is not at
all Python-specific; it occurs in many packages (just search
Google for "HP-UX __va__list"). With such problems, there is
no point into looking further into the problem; just drop
the compiler. If you want to port Python to HP-UX and gcc
2.95, you are on your own.
Notice that gcc 3.0.1 *does* support HP-UX 11; I recommend
to upgrade.
----------------------------------------------------------------------
Comment By: Nobody/Anonymous (nobody)
Date: 2001-11-01 07:41
Message:
Logged In: NO
gcc version is 2.95.3
HP-UX hp18 B.11.11 U 9000/785 2011589119
both Python 2.1.1 and 2.2b1 do not compile ootb here.
Error messages during compile are
building '_socket' extension
gcc -g -O3 -Wall -Wstrict-prototypes -fPIC -I.
-I/utmnt/ut/si/dv0216/Python-2.2b1/./Include
-I/usr/local/include -IInclude/ -c
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/socketmodule.c -o
build/temp.hp-ux-B.11.11-9000/785-2.2/socketmodule.o
In file included from
/utmnt/ut/si/dv0216/Python-2.2b1/Include/Python.h:42,
from
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/socketmodule.c:77:
/opt/gcc/lib/gcc-lib/hppa2.0n-hp-hpux11.00/2.95.3/include/stdio.h:30:
warning: `__va__list' redefined
/usr/include/sys/stdsyms.h:422: warning: this is the
location of the previous definition
In file included from
/utmnt/ut/si/dv0216/Python-2.2b1/Include/Python.h:47,
from
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/socketmodule.c:77:
/opt/gcc/lib/gcc-lib/hppa2.0n-hp-hpux11.00/2.95.3/include/string.h:26:
warning: `__va__list' redefined
/opt/gcc/lib/gcc-lib/hppa2.0n-hp-hpux11.00/2.95.3/include/stdio.h:30:
warning: this is the location of the previous definition
In file included from /usr/include/netdb.h:72,
from
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/socketmodule.c:152:
/usr/include/sys/socket.h:439: parse error before `sendfile'
/usr/include/sys/socket.h:439: parse error before `bsize_t'
/usr/include/sys/socket.h:440: warning: data definition has
no type or storage class
/usr/include/sys/socket.h:441: parse error before `sendpath'
/usr/include/sys/socket.h:441: parse error before `bsize_t'
/usr/include/sys/socket.h:442: warning: data definition has
no type or storage class
/usr/include/sys/socket.h:456: parse error before
`__sendfile64'
/usr/include/sys/socket.h:456: parse error before `bsize_t'
/usr/include/sys/socket.h:456: warning: data definition has
no type or storage class
/usr/include/sys/socket.h:457: parse error before
`__sendpath64'
/usr/include/sys/socket.h:457: parse error before `bsize_t'
/usr/include/sys/socket.h:457: warning: data definition has
no type or storage class
/usr/include/sys/socket.h:459: parse error before `sendfile'
/usr/include/sys/socket.h:459: warning: function declaration
isn't a prototype
/usr/include/sys/socket.h: In function `sendfile':
/usr/include/sys/socket.h:459: parse error before `bsize_t'
/usr/include/sys/socket.h: At top level:
/usr/include/sys/socket.h:460: parse error before `sendpath'
/usr/include/sys/socket.h:460: warning: function declaration
isn't a prototype
/usr/include/sys/socket.h: In function `sendpath':
/usr/include/sys/socket.h:460: parse error before `bsize_t'
In file included from
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/socketmodule.c:238:
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c: At
top level:
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c:203:
warning: function declaration isn't a prototype
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c:212:
warning: function declaration isn't a prototype
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c: In
function `freeaddrinfo':
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c:219:
warning: implicit declaration of function `free'
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c: In
function `str_isnumber':
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c:231:
warning: subscript has type `char'
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c: In
function `getaddrinfo':
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c:345:
warning: implicit declaration of function `atoi'
/utmnt/ut/si/dv0216/Python-2.2b1/Modules/getaddrinfo.c:396:
warning: implicit declaration of function `malloc'
WARNING: building of extension "_socket" failed: command
'gcc' failed with exit status 1
I now thought that since the errors happen in a system
header that compiles with
cc and not gcc, why not copy <sys/socket.h> to "socket.h"
and delete the two offending lines.
However, as you see, <sys/socket.h> is still included (why
?).
Another option is using cc just for this library, but I'm
not sure, that the object files are compatible. Using cc
alone creates a lot of non-working modules, although it is
in (extended) ANSI mode.
I also tried the HP Porting centre (http://hpux.asknet.de)
but the Python 2.1 package there -just like mine- does crash
on importing socket (too with 2.2b1)
hp18: Python-2.2b1 % ./python
Python 2.2b1 (#4, Nov 1 2001, 16:36:54) [C] on hp-uxB
Type "help", "copyright", "credits" or "license" for more
information.
>>> import socket
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/utmnt/ut/si/dv0216/Python-2.2b1/Lib/socket.py",
line 41, in ?
from _socket import *
ImportError: No module named _socket
>>>
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2001-10-30 00:56
Message:
Logged In: YES
user_id=21627
It would be helpful if you would provide all details in a
report also. When you say "it crashes", did you really
mean "it crashes" (i.e. with a core dump, machine reboot,
or the like)?
If the compiler merely rejected the code, it would be good
to see what the error message was.
Please also report version numbers: HP-UX version, gcc
version, etc. Are you sure you are using a gcc built for
your OS version? If the gcc doesn't get prototypes right,
this often comes from having fixincluded header files of a
different OS version.
----------------------------------------------------------------------
Comment By: Guido van Rossum (gvanrossum)
Date: 2001-10-29 04:59
Message:
Logged In: YES
user_id=6380
Please try again with Python 2.2b1 (http://python.org/2.2/).
We've done a lot of work and we've got at least one report
that it now works out of the box on HP-UX 11. I'd like to
hear if that solves your problems (and if 2.2b1 builds with
either compiler).
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=475951&group_id=5470