You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
request to reopen Issue837046 - pyport.h redeclares gethostname() if SOLARIS is defined #63760
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2013-11-12.14:39:41.350>labels= ['build', '3.8', '3.9', '3.10']
title='request to reopen Issue837046 - pyport.h redeclares gethostname() if SOLARIS is defined'updated_at=<Date2020-12-22.16:36:14.544>user='https://bugs.python.org/risto3'
I'd like to have reopened this previous issue as it is still very much the case.
I believe as well that the common distros (I can easily verify OpenIndiana and OmniOS) patch it out (patch file attached).
Upstream/oracle/userland-gate seems to as well.
It is time to retire this check, or at least take into consideration the parametrization from unistd.h:
We have an OpenIndian buildbot that compiles from our source, so no distro changes. Can you sort out why this isn't a problem on the buildbut but is for you? Your patch files says 2.6, so is it possible it is fixed in 2.7?
risto3 commented on Nov 12, 2013
risto3mannequin
MannequinAuthor
More actions
I don't believe the problem is a question solely of building the python sources, but also certain dependent application sources...
I know of at least libreoffice building against python and this problem has come up.
The workaround was to apply the patch indicated (here, on python3.3).
Libreoffice is a big thing to compile as a test...do you know of any smaller packages that exhibit the bug?
I've added jcea to nosy, he set up the OpenIndiana buildbots and may be able to help clarify the issue. I'm not willing to opine on it since I don't know what effect modifying those directives might have on other platforms.
Sure, attached is a simple test found on the internet, compiled with the following reproduces the problem:
richard@devzone:~/src$ /opt/local/gcc48/bin/g++ -o tp tp.cpp -DSOLARIS -I/opt/local/include/python2.7 -L/opt/local/lib -lpython2.7
In file included from /opt/local/include/python2.7/Python.h:58:0,
from tp.cpp:1:
/opt/local/include/python2.7/pyport.h:645:35: error: declaration of C function 'int gethostname(char*, int)' conflicts with
extern int gethostname(char *, int);
^
In file included from /opt/local/include/python2.7/Python.h:44:0,
from tp.cpp:1:
/usr/include/unistd.h:351:12: error: previous declaration 'int gethostname(char*, uint_t)' here
extern int gethostname(char *, size_t);
jbeck commented on Apr 9, 2015
jbeckmannequin
Mannequin
More actions
We (Solaris engineering) have hit this issue after migrating from 2.6
being our default version of Python to 2.7 being the default. The
specific component that broke was vim (version 7.4), trying to compile
if_python.c:
"/usr/include/python2.7/pyport.h", line 645: identifier redeclared:
gethostname
current : function(pointer to char, int) returning int
previous: function(pointer to char, unsigned long) returning int :
"/usr/include/unistd.h", line 412
Also, AFAIK, 'SOLARIS' macro is not predefined on Solaris systems in compiler preprocessors today *; hence, unless compiled with -DSOLARIS, this code has no effect.
*) I tested this with several GCC [7|9|10] and Solaris studio and neither of those defined it. It seems like it might have worked many years ago, but it certainly isn't a way to #ifdef Solaris today.
kulikjak commented on Nov 9, 2020
kulikjakmannequin
Mannequin
More actions
And for the reference, Solaris distros are already removing this code:
Activity
risto3 commentedon Nov 12, 2013
I'd like to have reopened this previous issue as it is still very much the case.
I believe as well that the common distros (I can easily verify OpenIndiana and OmniOS) patch it out (patch file attached).
Upstream/oracle/userland-gate seems to as well.
It is time to retire this check, or at least take into consideration the parametrization from unistd.h:
bitdancer commentedon Nov 12, 2013
We have an OpenIndian buildbot that compiles from our source, so no distro changes. Can you sort out why this isn't a problem on the buildbut but is for you? Your patch files says 2.6, so is it possible it is fixed in 2.7?
risto3 commentedon Nov 12, 2013
I don't believe the problem is a question solely of building the python sources, but also certain dependent application sources...
I know of at least libreoffice building against python and this problem has come up.
The workaround was to apply the patch indicated (here, on python3.3).
bitdancer commentedon Nov 12, 2013
Libreoffice is a big thing to compile as a test...do you know of any smaller packages that exhibit the bug?
I've added jcea to nosy, he set up the OpenIndiana buildbots and may be able to help clarify the issue. I'm not willing to opine on it since I don't know what effect modifying those directives might have on other platforms.
risto3 commentedon Nov 13, 2013
Sure, attached is a simple test found on the internet, compiled with the following reproduces the problem:
richard@devzone:~/src$ /opt/local/gcc48/bin/g++ -o tp tp.cpp -DSOLARIS -I/opt/local/include/python2.7 -L/opt/local/lib -lpython2.7
In file included from /opt/local/include/python2.7/Python.h:58:0,
from tp.cpp:1:
/opt/local/include/python2.7/pyport.h:645:35: error: declaration of C function 'int gethostname(char*, int)' conflicts with
extern int gethostname(char *, int);
^
In file included from /opt/local/include/python2.7/Python.h:44:0,
from tp.cpp:1:
/usr/include/unistd.h:351:12: error: previous declaration 'int gethostname(char*, uint_t)' here
extern int gethostname(char *, size_t);
jbeck commentedon Apr 9, 2015
We (Solaris engineering) have hit this issue after migrating from 2.6
being our default version of Python to 2.7 being the default. The
specific component that broke was vim (version 7.4), trying to compile
if_python.c:
"/usr/include/python2.7/pyport.h", line 645: identifier redeclared:
gethostname
current : function(pointer to char, int) returning int
previous: function(pointer to char, unsigned long) returning int :
"/usr/include/unistd.h", line 412
We had this patched out in Python 2.6's Include/pyport.h:
-#ifdef SOLARIS
-/* Unchecked */
-extern int gethostname(char *, int);
-#endif
but for some reason that patch was not propagated to our 2.7 line.
Until today, that is; I will be applying that patch shortly to both
2.7 and 3.4.
kulikjak commentedon Nov 9, 2020
I think this code should be removed.
It was added in its current form more than 20 years ago with the intention to add function declarations missing from system include files:
1e0c2f4
Today, every Solaris system should have gethostname() available in unistd.h. I am not sure when exactly was it added, but it was available in the OpenSolaris since the first commit (year 2005):
https://github.com/illumos/illumos-gate/blame/master/usr/src/head/unistd.h#L344
Also, AFAIK, 'SOLARIS' macro is not predefined on Solaris systems in compiler preprocessors today *; hence, unless compiled with
-DSOLARIS, this code has no effect.*) I tested this with several GCC [7|9|10] and Solaris studio and neither of those defined it. It seems like it might have worked many years ago, but it certainly isn't a way to #ifdef Solaris today.
kulikjak commentedon Nov 9, 2020
And for the reference, Solaris distros are already removing this code:
https://github.com/oracle/solaris-userland/blob/master/components/python/python37/patches/15-gethostname.patch
https://github.com/OpenIndiana/oi-userland/blob/oi/hipster/components/python/python37/patches/15-gethostname.patch
https://github.com/omniosorg/omnios-build/blob/master/build/python37/patches/15-gethostname.patch
vstinner commentedon Sep 2, 2023
@kulikjak proposed at PR: #23208
pythongh-63760: Solaris declares gethostname()
pythongh-63760: Don't declare gethostname() on Solaris
pythongh-63760: Don't declare gethostname() on Solaris
pythongh-63760: Don't declare gethostname() on Solaris
gh-63760: Don't declare gethostname() on Solaris (#108817)
pythongh-63760: Don't declare gethostname() on Solaris (python#108817)
[3.12] gh-63760: Don't declare gethostname() on Solaris (#108817) (#1…
[3.12] pythongh-63760: Don't declare gethostname() on Solaris (python…
[3.11] [3.12] gh-63760: Don't declare gethostname() on Solaris (GH-10…
vstinner commentedon Sep 3, 2023
Thanks for the fix @kulikjak, it's now merged in the 3 maintained branches.
vstinner commentedon Sep 7, 2023
See also issue #78469: Declare sethostname in socketmodule.c for SOLARIS.