[Zope-dev] compiling Zope 2.4.1 on Mac OS 10.1

Mitchell L Model mlm@acm.org
Mon, 1 Oct 2001 22:43:40 -0400


At 3:58 PM -0400 10/1/01, Jens Vagelpohl wrote:
>i think i found a working solution. since my knowledge of compilers 
>and linkers isn't the greatest i'll just explain what i did.
>
>trying to compile python2.1.1 on OS X 10.1 failed for me displaying 
>the very same error. searching through apple's discussion i found 
>the following link:
>
>http://fink.sourceforge.net/doc/porting/shared.php
>
>it explains that some linker/compiler default options have changed. 
>in order to get python compiled and running i edited the toplevel 
>Makefile after running ./configure and edited the lines starting 
>with LDSHARED and BLDSHARED, this is what they look like now in my 
>setup:
>
>LDSHARED=   $(CC) $(LDFLAGS) -bundle -flat_namespace -undefined suppress
>BLDSHARED=  $(CC) $(LDFLAGS) -bundle -flat_namespace -undefined suppress
>
>notice the "-flat_namespace" switch, this gets rid of the new 
>default "twolevel_namespace" that complains about "undefined 
>warning".
>
>running "make" was now successful and i was able to compile and run Zope 2.
>4.1.   you will probably have to recompile your python to set that 
>switch under 10.1.
>
>i only did some light testing, no guarantees and before using this 
>in production you might want to read up on those compiler/linker 
>options...
>
>jens
>
>
>
>On Sunday, September 30, 2001, at 07:19 , Mitchell L Model wrote:
>
>>Trouble compiling Zope 2.4.1 on Mac OS 10.1:
>>

<...>

Wonderful!  Thanks!!  Great information.

Having said that, and having spent a couple of hours experimenting, 
let me try to clarify things a bit:

1.  Python 2.2a4 defaults to --with-dylib, so you don't need that 
when making Python 2.2a4 as you did for 2.1.

2.  Likewise, you don't need to set OPT the way the 2.1 README says 
for Mac OS 10.

3.  Similarly, the Python2.2a4 configure.in knows to add 
-flat_namespace to Makefile.pre and therefore Makefile.

4.  Both 2.1 and 2.2a4 correctly specify -undefined suppress.

So, whereas I did need to fix the Python 2.1 Makefile to build it, I 
didn't need to fix the Python 2.2a4 Makefile to build it.  (I guess I 
didn't try building Python 2.1 yesterday, or I would have realized 
the problem wasn't in Zope, but in Python, as you discovered.)

 From my experience this evening, I'm surprised that fixing the Python 
Makefile would allow you to compile Zope.  It turns out that the zope 
configuration process uses the Makefile.pre.in installed in 
(typically) /usr/local/lib/python2.{1,2}/config.  It also turns out 
that although Python 2.2a4 correctly adds -flat_namespace to 
Makefile.pre and Makefile, it doesn't add it to Makefile.pre.in!  So 
for both 2.1 and 2.2 I had to add:

	LDSHARED=       $(CC) $(LDFLAGS) -flat_namespace -undefined suppress

to Makefile.pre.in, either in the Python src directory before doing 
'make install' or in the /usr/local/lib/python2.{1,2}/config after 
doing the install.

I'll report this problem to the Python developers.  Thanks for you 
hints and your careful reading of the fink documentation on shared 
libraries.  (fink is a fabulous resource!)

-- 

     --- Mitchell