3

I am trying to build Python3 on a RHEL 5.7 machine, I successful managed to build Python 3.2.2, with :

# Install required build dependencies
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

# Fetch and extract source. Please refer to http://www.python.org/download/releases
# to ensure the latest source is used.
wget http://www.python.org/ftp/python/3.2/Python-3.2.tar.bz2
tar -xjf Python-3.2.tar.bz2
cd Python-3.2

# Configure the build with a prefix (install dir) of /opt/python3, compile, and install.
./configure --prefix=/opt/python3
make

But I am failing (?) with Python 3.2.3:

Failed to build these modules:
_posixsubprocess     

Is this a problem that should bother me ? How do I build it? I found this patch, but it's not included in sources Python 3.2.3 I obtained from the website ...

Here is the output from stderr:

 ~/tmp/Python-3.2.3 $ make > build.log
ldd: warning: you do not have execution permission for `/usr/local/lib/libreadline.so'
/usr/bin/ld: skipping incompatible /usr/local/lib/libreadline.so when searching for -lreadline
/usr/bin/ld: skipping incompatible /usr/local/lib/libreadline.a when searching for -lreadline
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c: In function '_close_open_fd_range_safe':
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c:205: error: 'O_CLOEXEC' undeclared (first use in this function)
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c:205: error: (Each undeclared identifier is reported only once
/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c:205: error: for each function it appears in.)
/usr/bin/ld: skipping incompatible /usr/local/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/local/lib/libz.so when searching for -lz

~/tmp/Python-3.2.3 $ grep posix build.log 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes    -I. -IInclude -I./Include    -DPy_BUILD_CORE  -c ./Modules/posixmodule.c -o Modules/posixmodule.o
ar rc libpython3.2m.a Modules/_threadmodule.o  Modules/signalmodule.o  Modules/posixmodule.o  Modules/errnomodule.o  Modules/pwdmodule.o  Modules/_sre.o  Modules/_codecsmodule.o  Modules/_weakref.o  Modules/_functoolsmodule.o  Modules/operator.o  Modules/_collectionsmodule.o  Modules/itertoolsmodule.o  Modules/_localemodule.o  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o  Modules/zipimport.o  Modules/symtablemodule.o  Modules/xxsubtype.o
building '_posixsubprocess' extension
gcc -pthread -fPIC -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -IInclude -I/home/oznahum/localroot/include -I. -I./Include -I/usr/local/include -I/home/oznahum/tmp/Python-3.2.3 -c /home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.c -o build/temp.linux-x86_64-3.2/home/oznahum/tmp/Python-3.2.3/Modules/_posixsubprocess.o
_posixsubprocess
4
  • Can you parse through your compile output and see if there's any mention of posixsubprocess or any lines containing error, just to verify that this is, indeed, the reason its failing?
    – Andrew M.
    May 14, 2012 at 15:41
  • @AndrewM. sorry for the late reply, I added above the error output...
    – oz123
    May 15, 2012 at 12:36
  • No worries; it does indeed look like this is the issue you're running into. I would consider filing a bug with the Python folks, as it looks like the patch had the right idea, but no longer covers all the cases.
    – Andrew M.
    May 15, 2012 at 16:13
  • @AndrewM.sometimes working more than 8 hours a day is really counter productive ... you miss elementary things !!! The patch did help, i put a full report below.
    – oz123
    May 16, 2012 at 12:45

1 Answer 1

5

OK... I am answering here, not to leave the question unanswered. I re-downloaded the Python-3.2.3 sources and examined them. They indeed do not include that patch.
I re-applied the patch and tested the building on CentOS-5.7 and RedHat-5.7. I managed to compile with out errors.
So, I guess the key is to apply the patch correctly. My failed build had in Modules/_posixsubprocess:

199 static void
200 _close_open_fd_range_safe(int start_fd, int end_fd, PyObject* py_fds_to_keep)
201 {
202     int fd_dir_fd;
203     if (start_fd >= end_fd)
204         return;
205         fd_dir_fd = open(FD_DIR, O_RDONLY | O_CLOEXEC, 0);
206 #ifdef O_CLOEXEC
207      fd_dir_fd = open(FD_DIR, O_RDONLY | O_CLOEXEC, 0);
208 #else
209     fd_dir_fd = open(FD_DIR, O_RDONLY, 0);
210 #ifdef FD_CLOEXEC

Line 205, should have been deleted ...

2
  • Awesome! I'm glad this worked for you. I'm not quite sure why this patch wasn't in version 3.2.3, since the patch was submitted many months before, so hopefully it will appear in 3.2.4! :)
    – Andrew M.
    May 16, 2012 at 15:25
  • 1
    This was issue reported and fixed - bugs.python.org/issue14359 Sep 5, 2012 at 20:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.