This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Py30a3: Possibly confusing message when module detection fails
Type: compile error Stage:
Components: Build Versions: Python 3.0
process
Status: closed Resolution: works for me
Dependencies: Superseder:
Assigned To: jafo Nosy List: jafo, loewis, mark
Priority: normal Keywords:

Created on 2008-03-03 08:12 by mark, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (10)
msg63202 - (view) Author: Mark Summerfield (mark) * Date: 2008-03-03 08:12
On Fedora 8 I get this message:
Failed to find the necessary bits to build these modules:
_bsddb
To find the necessary bits, look in setup.py in detect_modules() for the
module's name.

On Kubuntu 6.06 LTS I get the same message, but about different modules:
_hashlib _ssl bz2

In previous versions when headers or libraries couldn't be found I
thought the correct file to change was Modules/Setup or
Modules/Setup.local. If this is still the case then the above error
message should perhaps be changed?

BTW For Fedora 8, bsddb won't work since according to Modules/Setup the
most recent version supported is 4.0 while Fedora 8 has 4.4.
msg63203 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2008-03-03 08:35
Modules/Setup is out of date; _bsddb supports anything between 3.3 and 4.5.
msg63204 - (view) Author: Mark Summerfield (mark) * Date: 2008-03-03 08:52
On 2008-03-03, Martin v. Löwis wrote:
> Martin v. Löwis added the comment:
>
> Modules/Setup is out of date; _bsddb supports anything between 3.3 and 4.5.
>

FYI, only now I've just realised that Fedora 8's db version is 4.6.21,
but I thought I'd try it anyway.

% locate db-4.6
/lib/libdb-4.6.so
/usr/lib/libdb-4.6.a
/usr/lib/libdb-4.6.la
/usr/lib/libdb-4.6.so
% ls -l /usr/include/db.h
lrwxrwxrwx 1 root root 8 2008-01-10 14:57 /usr/include/db.h -> db4/db.h

I edited Modules/Setup as follows:

DB=/usr
DBLIBVER=4.6
DBINC=$(DB)/include
DBLIB=$(DB)/lib
_bsddb _bsddb.c -I$(DBINC) -L$(DBLIB) -ldb-$(DBLIBVER)

The last gcc call is this:

gcc -pthread  -Xlinker -export-dynamic -o python \
                        Modules/python.o \

libpython3.0.a -lpthread -ldl  -lutil -L/usr/lib -ldb-4.6   -lm
running build
running build_ext
Failed to find the necessary bits to build these modules:
_bsddb

I can't see the DB -I or -L lines but I'm no makefile expert so maybe
they come from somewhere else.
msg63205 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2008-03-03 09:02
Rereading your report, I cannot quite understand what issue specifically
you are reporting. What error message do you find confusing, and what do
you think should it say instead?

In any case, it is deliberate that db 4.6 is not supported - that
release doesn't really work.
msg63206 - (view) Author: Mark Summerfield (mark) * Date: 2008-03-03 09:44
On 2008-03-03, Martin v. Löwis wrote:
> Martin v. Löwis added the comment:
>
> Rereading your report, I cannot quite understand what issue specifically
> you are reporting. What error message do you find confusing, and what do
> you think should it say instead?

What I find confusing is:

Failed to find the necessary bits to build these modules:
<modules>
To find the necessary bits, look in setup.py in detect_modules() for the
module's name.

I find it confusing because AFAIK if a module can't be built it usually
means that you should change the Modules/Setup file and not setup.py
itself. (My impression is that the message is aimed at Python developers
rather than Python users.) If Modules/Setup is still the correct file
for users to edit perhaps the message should be something like:

Failed to find the necessary bits to build these modules:
<modules>
If you want these modules and they are on your system, try editing
Modules/Setup to be able to find them.

> In any case, it is deliberate that db 4.6 is not supported - that
> release doesn't really work.

OK. (But that is a pity since a lot of people use Fedora 8.)
msg63241 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2008-03-03 22:46
> What I find confusing is:
> 
> Failed to find the necessary bits to build these modules:
> <modules>
> To find the necessary bits, look in setup.py in detect_modules() for the
> module's name.
> 
> I find it confusing because AFAIK if a module can't be built it usually
> means that you should change the Modules/Setup file and not setup.py
> itself. (My impression is that the message is aimed at Python developers
> rather than Python users.) 

No, not at all. If you see that message, it usually means you are on
a Linux system, and you have forgotten to install the header files
for the library the module relies on. You need to look into setup.py
to find out what those header files are, and install them. Changing
Modules/Setup won't help at all, as you don't *have* the header
files.

It's true that sometimes, you can work around the problem by editing
Modules/Setup (in particular, if your system is not Linux). However,
this is not the case the message is aimed at.

> If Modules/Setup is still the correct file
> for users to edit

Yes, it is.

> perhaps the message should be something like:
> 
> Failed to find the necessary bits to build these modules:
> <modules>
> If you want these modules and they are on your system, try editing
> Modules/Setup to be able to find them.

No, that change should not be made.

>> In any case, it is deliberate that db 4.6 is not supported - that
>> release doesn't really work.
> 
> OK. (But that is a pity since a lot of people use Fedora 8.)

Please complain to Oracle.

Regards,
Martin
msg63245 - (view) Author: Mark Summerfield (mark) * Date: 2008-03-04 06:59
On 2008-03-03, Martin v. Löwis wrote:
> Martin v. Löwis added the comment:
> > What I find confusing is:
> >
> > Failed to find the necessary bits to build these modules:
> > <modules>
> > To find the necessary bits, look in setup.py in detect_modules() for the
> > module's name.
> >
> > I find it confusing because AFAIK if a module can't be built it usually
> > means that you should change the Modules/Setup file and not setup.py
> > itself. (My impression is that the message is aimed at Python developers
> > rather than Python users.)
>
> No, not at all. If you see that message, it usually means you are on
> a Linux system, and you have forgotten to install the header files
> for the library the module relies on. You need to look into setup.py
> to find out what those header files are, and install them. Changing
> Modules/Setup won't help at all, as you don't *have* the header
> files.

Then why isn't the message something like:

Failed to find the necessary bits to build these modules:
<modules>
To find the necessary bits, look in setup.py in detect_modules() for the
module's name and the header files it requires.

[snip]
> >> In any case, it is deliberate that db 4.6 is not supported - that
> >> release doesn't really work.
> >
> > OK. (But that is a pity since a lot of people use Fedora 8.)
>
> Please complain to Oracle.

I thought it was owned by Berkeley University... oh well.
msg64174 - (view) Author: Sean Reifschneider (jafo) * (Python committer) Date: 2008-03-20 16:02
Don't modify Modules/Setup*, do as the message says and modify setup.py.
 Search for "4, 5", and change that to "4, 6", then run configure and
make and it will build without this message.

I have done this against the py3k trunk and it built properly and did
not display this message, so I think the current message is correct.

As far as the bsddb 4.6 being broken, I spoke to Gregory and Martin and
the story is that it is broken on some platforms, and isn't enabled by
default because doing so breaks our buildbots on those platforms.

I wouldn't expect the problem from F8 version, if nothing else because
it's probably not a stock version, it's likely patched to the issues
that Gregory has seen, if they impact F8.
msg64179 - (view) Author: Mark Summerfield (mark) * Date: 2008-03-20 16:30
On 2008-03-20, Sean Reifschneider wrote:
> Sean Reifschneider <jafo@tummy.com> added the comment:
>
> Don't modify Modules/Setup*, do as the message says and modify setup.py.
>  Search for "4, 5", and change that to "4, 6", then run configure and
> make and it will build without this message.

I did as you said and it worked perfectly. Thanks!

> I have done this against the py3k trunk and it built properly and did
> not display this message, so I think the current message is correct.

Yes you're right---it was just a bit surprising because in the past it
has always been Modules/Setup that needed fixing.

> As far as the bsddb 4.6 being broken, I spoke to Gregory and Martin and
> the story is that it is broken on some platforms, and isn't enabled by
> default because doing so breaks our buildbots on those platforms.
>
> I wouldn't expect the problem from F8 version, if nothing else because
> it's probably not a stock version, it's likely patched to the issues
> that Gregory has seen, if they impact F8.

So presumably the Fedora maintainers will do the setup.py fix you
suggested.

Thanks!
msg64202 - (view) Author: Sean Reifschneider (jafo) * (Python committer) Date: 2008-03-20 20:29
It's actually been quite a while since it changed from being
Modules/Setup to being in setup.py, I think a couple of years at least.

And, yes, I realize that Fedora is changing the Modules/Setup file in
their SRPM, but with Python 3k they will probably be changing the setup.py.
History
Date User Action Args
2022-04-11 14:56:31adminsetgithub: 46472
2008-03-20 20:29:20jafosetmessages: + msg64202
2008-03-20 16:30:28marksetmessages: + msg64179
2008-03-20 16:02:05jafosetstatus: open -> closed
nosy: + jafo
messages: + msg64174
priority: normal
assignee: jafo
type: compile error
resolution: works for me
2008-03-04 06:59:20marksetmessages: + msg63245
2008-03-03 22:46:10loewissetmessages: + msg63241
2008-03-03 09:44:22marksetmessages: + msg63206
2008-03-03 09:02:07loewissetmessages: + msg63205
2008-03-03 08:52:19marksetmessages: + msg63204
2008-03-03 08:35:36loewissetnosy: + loewis
messages: + msg63203
2008-03-03 08:12:36markcreate