The easiest way to describe this is to repeat the info that's been
posted into the "macpython" mailing list--sorry if you've already
seen it. According to one of the people who helped me on the
macpython list, the problem I'm having is
likely caused by matplotlib using a custom method of finding
Tcl/Tk headers, rather than by a Python/OS X interaction problem,
which is why I'm bringing the topic over to this list.
Many thanks for any help you can offer!
Here's what has gone before, consisting of questions from me and
answers from other people. I've done some editing to shorten things up.
>>>> I'm attempting to compile matplotlib, and get messages saying that
>>>> it can't find the headers for Tcl/Tk. They exist, they just happen
>>>> to
>>>> be in the Frameworks directories for Tcl and for Tk. I know I can
>>>> get this to work by hacking (setting up path variables, putting
>>>> symbolic
>>>> links in directories, or some such), but aside from the fact that
>>>> that's
>>>> a pain and ugly, it doesn't solve the more general problem; if
>>>> header
>>>> files are supposed to be in Frameworks directories (for example, I
>>>> found my Tk header files in
>>>> /Library/Frameworks/Tk.framework/Headers),
>>>> what is the best way to set up OS X so that they will be available
>>>> to link
>>>> against?
>>> Short answer: Whatever you're trying to build is (incorrectly) not
>>> using tclConfig.sh (they should allow the user to choose which one,
>>> but should default to /usr/lib/tclConfig.sh I guess). This is
>>> equivalent to not using distutils. It probably won't be a problem
>>> in the Mac OS X future however, because...
>>>
>>> Apple's latest strategy for unixy stuff (at least for Python) seems
>>> to be a hybrid approach that should please almost anyone:
>>> (1) the actual dylib lives in /usr/lib and has a mach-o id pointing
>>> to /usr/lib
>>> (2) the framework has symlinks to /usr/lib for its dylib
>>> (3) the headers live in the framework
>>> (4) /usr/include has appropriate symlinks into the framework
>>>
>>> [I can say this without breaking NDA because Apple has publicly
>>> released their sources for Python in Darwin 8.0.0b1]
>>
>> After reading Bob's message, I looked into /usr/lib and found that
>> while
>> it contained a tclConfig.sh, there was no tkConfig.sh. A search of the
>> file system revealed a tkConfig.sh in
>> /Library/Framewords/Tk.framework, so
>> I copied it there.
>>
>> While I suspect this was a Good Thing To Do, it still hasn't solved
>> the problem of matplotlib's setup.py not being able to find the tcl/tk
>> headers. Here's my attempt at building and the resultant message:
>>
>> ken% python setup.py build
>> GTKAgg requires pygtk
>> cannot find tcl/tk headers. giving up.
>>
>> The message about "GTKAgg" is expected and should be ignored.
>> Attempting
>> a "python setup.py -v build" gave exactly the same error messages.
>> Unfortunately
>> the error message about the header, while to the point, isn't
>> terribly helpful :-)
>>
>> matplotlib is packaged using distutil, and presumably distutil isn't
>> getting
>> the info it needs to figure out where the headers are. I've started
>> reading
>> about distutil, but am a novice at it (and it's a fairly involved
>> package, as
>> well), so if others could offer suggestions as to how to track
>> down/fix this
>> problem, it would be a real help.
>>
> distutils is only good at finding Python's compiler/linker settings
> and Python's headers.
> matplotlib has custom code to find Tcl/Tk in its setup.py, and that
> custom code is not doing the right thing.
|