| # |
| # generator.swig: Base class for SWIG-related generators |
| # |
| |
| import shutil, ConfigParser, re, os |
| import generator.util.executable as _exec |
| from generator.gen_base import _collect_paths |
| |
| class Generator: |
| """Base class for SWIG-related generators""" |
| langs = ["python", "perl", "ruby"] |
| short = { "perl": "pl", "python": "py", "ruby": "rb" } |
| |
| def __init__(self, conf, swig_path): |
| """Read build.conf""" |
| |
| # Now read and parse build.conf |
| parser = ConfigParser.ConfigParser() |
| parser.read(conf) |
| |
| # Read configuration options |
| self.proxy_dir = parser.get('options', 'swig-proxy-dir') |
| self.includes = _collect_paths(parser.get('options', 'includes')) |
| self.swig_checkout_files = \ |
| _collect_paths(parser.get('options', 'swig-checkout-files')) |
| |
| # Calculate build options |
| self.opts = {} |
| for lang in self.langs: |
| self.opts[lang] = parser.get('options', 'swig-%s-opts' % lang) |
| |
| # Calculate SWIG paths |
| self.swig_path = swig_path |
| try: |
| self.swig_libdir = _exec.output("%s -swiglib" % self.swig_path, strip=1) |
| except AssertionError: |
| pass |
| |
| def version(self): |
| """Get the version number of SWIG""" |
| try: |
| swig_version = _exec.output("%s -version" % self.swig_path) |
| m = re.search("Version (\d+).(\d+).(\d+)", swig_version) |
| if m: |
| return int( |
| "%s0%s0%s" % (m.group(1), m.group(2), m.group(3))) |
| except AssertionError: |
| pass |
| return 0 |
| |