[Pythonmac-SIG] setup.py for Numeric/Numarray
Markus W.Weissmann
mww at opendarwin.org
Wed Nov 24 01:36:44 CET 2004
On Nov 22, 2004, at 23:37, Bob Ippolito wrote:
> Two things:
>
> 1) Apple can't (or rather, won't ever) change their framework location.
> 2) Darwin might be Darwin and not Mac OS X, which won't have vecLib.
this is a mistake that I see quite often:
implying MacOS-X or just PPC from "darwin"
I have to second Bob on that one - please don't do that!
It's quite a pain to fix this kind of bugs so stuff will work on
OpenDarwin or even OpenDarwin/x86;
-Markus
> 3) Checking for both is silly, because you won't reasonably ever have
> the path to vecLib on a non-Darwin platform.. and if you somehow do,
> it'll probably work anyway.
>
> I can give more flexible code with regard to locating frameworks in an
> identical manner to what gcc and dyld do, but that is only going to be
> applicable if you work at Apple, or you are building against an SDK,
> neither of which happen very often in practice. With regard to
> building against a SDK, the API used by Numeric that is provided by
> vecLib isn't going to change, ever, unless Numeric wants more stuff
> that is provided only in OS X 10.4+, for example. This would be an
> issue when and if it happens, but in that case you would probably link
> against the NEW name (Accelerate.framework). I'm not sure if the
> vecLib API is supported by OS X 10.1, but someone else is going to
> have to care about that because I sure don't.
>
> Alternate linkers isn't really a concern because the three
> command-line compilers that matter probably all support the -framework
> flag. Apple's GCC (obviously..) and IBM's XLC (according to Robert)
> certainly do, and more likely than not, MetroWerks CodeWarrior also
> does (someone else would have to confirm this). If Fink or Gentoo
> ships some purely GNU-based compiler/linker that doesn't support
> -framework, I'd consider that a bug. I'm not sure how they'd get many
> things to compile correctly without it, unless they're emulating it by
> specifying paths directly to the Mach-O MH_DYLIB files
> (/System/Library/Frameworks/vecLib.framework/vecLib, for example) PLUS
> using non-framework-style header paths everywhere, since
> <vecLib/vecLib.h> would never work if you -I to anywhere in the
> framework tree. Does an unpatched GNU toolchain even understand
> Mach-O in the first place? Most likely a non-issue in any case, but
> I'm not about to Finkify any machine to test that theory.
>
> In summary, I wrote the patch in that way for the specific reason of
> doing it as correctly as possible without overcomplicating things. I
> hope that people would trust that I know what I'm doing.
>
> [not cross-posted because the message I'm replying to isn't
> cross-posted, too lazy to figure out where it should be CC'ed to]
>
> -bob
>
> On Nov 22, 2004, at 10:08 PM, Chris Barker wrote:
>
>> Hi all,
>>
>> Bob's patch to the Numeric setup.py made it's way to the numaray CVS,
>> and there is a little discussion about improvements. I really don't
>> know what to say but if some if the OS-X experts (Bob and Jack,
>> anyway!) on this list could weigh in, the would be great. Here is a
>> consolidation of the thread:
>>
>> Andrea Riciputi wrote:
>>> I've noticed your patch for MacOS X, and I think that a better
>>> solution should use sys.platform instead of a path search, since
>>> Apple could always change its framework location. I've also removed
>>> the VECLIB_PATH/Headers from the include path because AFAIK Apple
>>> gcc already knows where to search for the vecLib framework. Here it
>>> is a diff output between my addons.py and the CVS one.
>>
>> <trimmed by me: chb>
>>
>>>> ! if sys.platform == "darwin":
>>>> ! lapack_include_dirs =
>>>> ["Packages/LinearAlgebra2/Src",'Include/numarray']
>>
>>>> - lapack_link_args = ['-framework', 'vecLib']
>>
>>>> ! VECLIB_PATH = '/System/Library/Frameworks/vecLib.framework'
>>>> ! if os.path.exists(VECLIB_PATH):
>>>> ! lapack_link_args = ['-framework', 'vecLib']
>>>> ! lapack_include_dirs.append( os.path.join(VECLIB_PATH,
>>>> 'Headers'))
>>>> lapack_libs = []
>>>> lapack_dirs = []
>>
>> Todd Miller wrote:
>>
>>> Not to look a patch-horse in the mouth, but IMHO, the sys.platform
>>> idea
>>> is good but the VECLIB_PATH elimination maybe less so. The reason I
>>> question the VECLIB_PATH change is that we're removing explicit and
>>> generally harmless extra information in exchange for two
>>> assumptions: (1) gcc knows the path already (2) the numarray Mac
>>> user is using gcc. Other opinions? Mac users please speak up if you
>>> think the VECLIB_PATH
>>> change is a good one or it won't get done.
>>
>> Andrea Riciputi wrote:
>>> I see your point but AFAIK the links option "-framework vecLib" will
>>> work *only* with Apple gcc (ld) and Apple gcc (ld) does know where
>>> frameworks are. From Apple ld man page:
>>>> -framework name[,suffix]
>>>> Specifies a framework to link against. Frameworks are dynamic
>>>> shared libraries, but they are stored in different locations,
>>>> and therefore must be searched for differently. When this option
>>>> is specified, ld searches for framework `name.framework/name'
>>>> first in any directories specified with the -F option, then in
>>>> the standard framework directories /Library/Frameworks, /Net-
>>>> work/Library/Frameworks, and /System/Library/Frameworks. The
>>>> placement of the -framework option is significant, as it deter-
>>>> mines when and how the framework is searched. If the optional
>>>> suffix is specified the framework is first searched for the name
>>>> with the suffix and then without.
>>>> -Fdir
>>>> In Apple's version of GCC only, add the directory dir to the
>>>> head
>>>> of the list of directories to be searched for frameworks.
>>>>
>>>> The framework search algorithm is, for an inclusion of
>>>> <Fmwk/Header.h>, to look for files named
>>>> path/Fmwk.framework/Head-
>>>> ers/Header.h or path/Fmwk.framework/PrivateHeaders/Header.h
>>>> where
>>>> path includes /System/Library/Frameworks/ /Library/Frameworks/,
>>>> and
>>>> /Local/Library/Frameworks/, plus any additional paths specified
>>>> by
>>>> -F.
>>
>> Robert Kern wrote:
>>> IBM's xlc will also find the appropriate framework, but as you can
>>> see this is only a link-time option and has nothing to do with
>>> finding headers.
>>> Using
>>> #include <vecLib/vecLib.h>
>>> will find the appropriate header without any command-line options.
>>> Using
>>> #include <clapack.h>
>>> will not.
>>> Fortunately, neither one is used nor needed by lapack_litemodule.c,
>>> so for this case, no include-path needs to be specified.
>>
>> If you don't want to post tot he NumPy list directly, I'd be glad to
>> forward comments on.
>>
>> -Chris
>>
>> --
>> Christopher Barker, Ph.D.
>> Oceanographer
>>
>> NOAA/OR&R/HAZMAT (206) 526-6959 voice
>> 7600 Sand Point Way NE (206) 526-6329 fax
>> Seattle, WA 98115 (206) 526-6317 main reception
>>
>> Chris.Barker at noaa.gov
>> _______________________________________________
>> Pythonmac-SIG maillist - Pythonmac-SIG at python.org
>> http://mail.python.org/mailman/listinfo/pythonmac-sig
>
> _______________________________________________
> Pythonmac-SIG maillist - Pythonmac-SIG at python.org
> http://mail.python.org/mailman/listinfo/pythonmac-sig
>
---
Markus W. Weissmann
http://www.mweissmann.de/
http://www.opendarwin.org/~mww/
More information about the Pythonmac-SIG
mailing list