470,604 Members | 2,163 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,604 developers. It's quick & easy.

distutils, PyBison and Mac OS X

I'm trying to build PyBison[1] on Mac OS X, and I'm running into some
problems with the distutils.

Just for starters: PyBison requires Pyrex[2]. This is not a problem,
and Pyrex seems to work without problems, at least the primes sample
module shows a nice 25 to 30 fold speed increase over the pure python

I used the distutils to create the module from the primes.pyx sample,
following the setup.py from the PyBison distrubution:

Expand|Select|Wrap|Line Numbers
  1. from distutils.core import setup, Extension
  2. from Pyrex.Distutils import build_ext
  4. setup( name = "primes", version = "1.0",
  5. description="Pyrex sample for calculating prime numbers",
  6. author='Greg Ewing',
  7. url='http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/',
  8. ext_modules=[Extension("primes", ["primes.pyx"])],
  9. cmdclass = {'build_ext': build_ext}
  10. )
I mention this, because PyBison seems to use the distutils to compile
the bison and flex source code on the fly, but fails to pick up some
parameters, which prevents it from working correctly.

Although Mac OS X uses gcc, and is an otherwise pretty complete unix
install, it is missing some components: shared libraries are not
linked with -shared but use -bundle instead. A succesful build of
primes is linked with:

export MACOSX_DEPLOYMENT_TARGET=10.3; gcc -Wl,-F. -Wl,-F. \
-bundle -undefined dynamic_lookup \
build/temp.darwin-7.9.0-Power_Macintosh-2.3/primes.o \
-o primes.so

(Another difference that caused major headaches: the absense of a
'dl' library has been resolved with version 10.3 ("Panther"). A dl
library is included as a wrapper around the bundles mechanism that
were present all along. Since the linux version uses the dl library,
I tried to compile the same source, and that part seems to run just

The issues:

- distutils.ccompiler uses the unixcompiler, which has hard coded a
cc -shared to create shared objects. I've tried to override this,
but no luck there (other issues seem to crop up). Is this a known
issue with distutils?

I installed pybison using the linux C-source, and tried it out
using the 'calc' example. After setting verbose=1 in the run.py,
and enabling the "int lineno = 0" in calc.py, the compilation phase
finishes without a hitch, but linking fails badly:

bisonCmd=['bison', '-d', '-v', '-t', 'tmp.y']
renaming bison output files
tmp.tab.c => tmp.bison.c
tmp.tab.h => tokens.h
cc: unrecognized option `-shared'
ld: Undefined symbols:
Traceback (most recent call last):
File "run.py", line 7, in ?
parser = calc.Parser(verbose=1, keepfiles=1)
File ". . ./python2.3/site-packages/bison.py", line 308,
in __init__ self.engine = ParserEngine(self)
File "bison_.pyx", line 187, in bison_.ParserEngine.__init__
File "bison_.pyx", line 202, in
File "bison_.pyx", line 540, in bison_.ParserEngine.buildLib
File ". . ./python2.3/distutils/ccompiler.py", line 843,
in link_shared_object extra_preargs, extra_postargs,
build_temp, target_lang)
File ". . ./python2.3/distutils/unixccompiler.py", line 178,
in link raise LinkError, msg
distutils.errors.LinkError: command 'cc' failed with exit status 1

- Would it be possible to modify PyBison to use a call to the
distutils.core.setup(. . .) function and call that as if 'python
setup.py build_ext --inplace' had been called from the command line,
since that seems to pick up the correct options.

- Where do I start: distutils is pretty large, and it seems to have
the right options, but they just aren't used in PyBison.

Thanks in advance for any insights that get me going,


[1] http://www.freenet.org.nz/python/pybison/
[2] http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/
Jul 19 '05 #1
0 1646

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Isaac Jones | last post: by
1 post views Thread by Mathieu Malaterre | last post: by
15 posts views Thread by Colin J. Williams | last post: by
1 post views Thread by Terry Hancock | last post: by
7 posts views Thread by Frans Englich | last post: by
1 post views Thread by George van den Driessche | last post: by
6 posts views Thread by ajikoe | last post: by
7 posts views Thread by vedrandekovic | last post: by
reply views Thread by newbie73 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.