text: #
  #
  # Licensed to the Apache Software Foundation (ASF) under one
  # or more contributor license agreements.  See the NOTICE file
  # distributed with this work for additional information
  # regarding copyright ownership.  The ASF licenses this file
  # to you under the Apache License, Version 2.0 (the
  # "License"); you may not use this file except in compliance
  # with the License.  You may obtain a copy of the License at
  #
  #   http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing,
  # software distributed under the License is distributed on an
  # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  # KIND, either express or implied.  See the License for the
  # specific language governing permissions and limitations
  # under the License.
  #
  #
  #
  # generator.swig: Base class for SWIG-related generators
  #
  
  import os
  import re
  import shutil
  import generator.util.executable as _exec
  from generator.gen_base import _collect_paths
  try:
    # Python >=3.0
    import configparser
  except ImportError:
    # Python <3.0
    import ConfigParser as configparser
  
  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
      self.swig_libdir = _exec.output([self.swig_path, "-swiglib"], strip=1)
  
    _swigVersion = None
    def version(self):
      """Get the version number of SWIG"""
  
      if not self._swigVersion:
        swig_version = _exec.output([self.swig_path, "-version"])
        m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
        if m:
          self._swigVersion = tuple(map(int, m.groups()))
        else:
          self._swigVersion = (0, 0, 0)
  
      # Copy value to avoid changes
      return tuple(list(self._swigVersion))
  