[ http://issues.apache.org/jira/browse/MODPYTHON-65?page=comments#action_12316435 ]
Graham Dumpleton commented on MODPYTHON-65: ------------------------------------------- The problem here is that on Mac OS X, distutils compiles Python loadable modules in a way that expects all symbols to be resolvable at the time the module is created. That is, all symbols must be present in either the objects being linked into the module or in libraries which are explicitly linked with the module. In a scenario like mod_python where there will be undefined references to symbols which are only defined within the executable running the interpreter into which the module is loaded, this will fail. Previously this wasn't a problem because distutils wasn't used to create the module and instead the makefile use libtool to do it. One of the options to libtool was "--silent". This option (at least I think so, it may be a different option), would underneath pass appropriate options to the linker for a platform to disable undefined symbols causing an error. Since distutils is now used, there is going to have to be platform specific hacks to add additional options to the link line when creating a module to add these platform specific options. This however is not as simple as defining extra_link_flags to the distutils extension object as they will only be placed at the end. These magic options tend to be positional dependent and need to be included at a specific spot early in the link line. The distutils package does not give you this level of control through its public APIs and thus a hack is required which delves into its private parts. If distutils changes, like it did from 2.2 to 2.3, this hack will break and no longer work. This problem may affect other platforms besides MacOSX as there are other platforms that also require specific options to ignore undefined symbols. Anyway, the hack required to get this to work for Mac OS X with Python 2.3 is as follows. If you know of a better way, by all means let me know. :-) Index: dist/setup.py.in =================================================================== --- dist/setup.py.in (revision 220194) +++ dist/setup.py.in (working copy) @@ -85,7 +85,7 @@ """returns apache lib directory""" apache_srcdir = getapache_srcdir() if apache_srcdir is None: - return "" + return getapxs_option("LIBDIR") else: return os.path.join(apache_srcdir, "lib") @@ -153,6 +153,17 @@ scripts = [] data_files = [] +import string +from distutils import sysconfig + +if sys.platform == "darwin": + sysconfig._config_vars["LDSHARED"] = \ + string.replace(sysconfig.get_config_var("LDSHARED"), \ + " -bundle "," -bundle -flat_namespace -undefined suppress ") + sysconfig._config_vars["BLDSHARED"] = \ + string.replace(sysconfig.get_config_var("BLDSHARED"), \ + " -bundle "," -bundle -flat_namespace -undefined suppress ") + setup(name="mod_python", version=VER, description="Apache/Python Integration", > 3.2 working version will not install on Mac OS X (10.3.7) > --------------------------------------------------------- > > Key: MODPYTHON-65 > URL: http://issues.apache.org/jira/browse/MODPYTHON-65 > Project: mod_python > Type: Bug > Components: core > Versions: 3.2.0 > Environment: Mac OS X (10.3.7) > Reporter: Graham Dumpleton > > Something is wrong with configure or setup.py file. > /usr/bin/python setup.py build > running build > running build_py > running build_ext > building 'mod_python_so' extension > gcc -Wl,-F. -Wl,-F. -bundle -framework Python > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/mod_python.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/_apachemodule.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/connobject.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/filterobject.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/hlist.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/hlistobject.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/requestobject.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/serverobject.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/tableobject.o > > build/temp.darwin-7.7.0-Power_Macintosh-2.3/Users/grahamd/Workspaces/mod_python/src/util.o > -L -lapr-0 -laprutil-0 -o > build/lib.darwin-7.7.0-Power_Macintosh-2.3/mod_python_so.so > ld: -L: directory name missing > error: command 'gcc' failed with exit status 1 > More later when I have a chance to work out what is wrong. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira