Alien-SVN
view release on metacpan or search on metacpan
src/subversion/build/generator/swig/header_wrappers.py view on Meta::CPAN
#!/usr/bin/env python
#
#
# 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.
#
#
#
# header_wrappers.py: Generates SWIG proxy wrappers around Subversion
# header files
#
import os, re, sys, glob, shutil, tempfile
if __name__ == "__main__":
parent_dir = os.path.dirname(os.path.abspath(os.path.dirname(sys.argv[0])))
sys.path[0:0] = [ parent_dir, os.path.dirname(parent_dir) ]
from gen_base import unique, native_path, build_path_basename, build_path_join
import generator.swig
class Generator(generator.swig.Generator):
"""Generate SWIG proxy wrappers around Subversion header files"""
def __init__(self, conf, swig_path):
"""Initialize Generator object"""
generator.swig.Generator.__init__(self, conf, swig_path)
# Build list of header files
self.header_files = list(map(native_path, self.includes))
self.header_basenames = list(map(os.path.basename, self.header_files))
# Ignore svn_repos_parse_fns_t because SWIG can't parse it
_ignores = ["svn_repos_parse_fns_t",
"svn_auth_gnome_keyring_unlock_prompt_func_t",
]
def write_makefile_rules(self, makefile):
"""Write makefile rules for generating SWIG wrappers for Subversion
header files."""
wrapper_fnames = []
python_script = '$(abs_srcdir)/build/generator/swig/header_wrappers.py'
makefile.write('GEN_SWIG_WRAPPER = cd $(top_srcdir) && $(PYTHON)' +
' %s build.conf $(SWIG)\n\n' % python_script)
for fname in self.includes:
wrapper_fname = build_path_join(self.proxy_dir,
self.proxy_filename(build_path_basename(fname)))
wrapper_fnames.append(wrapper_fname)
makefile.write(
'%s: %s %s\n' % (wrapper_fname, fname, python_script) +
'\t$(GEN_SWIG_WRAPPER) %s\n\n' % fname
)
makefile.write('SWIG_WRAPPERS = %s\n\n' % ' '.join(wrapper_fnames))
for short_name in self.short.values():
# swig-pl needs the '.swig_checked' target here; swig-rb and swig-py
# already reach it via a different dependency chain:
#
# In build-outputs.mk, swig-py and swig-rb targets depend on *.la
# targets, which depend on *.lo targets, which depend on *.c targets,
# which depend on .swig_checked target.
makefile.write('autogen-swig-%s: .swig_checked $(SWIG_WRAPPERS)\n' % short_name)
makefile.write('\n\n')
def proxy_filename(self, include_filename):
"""Convert a .h filename into a _h.swg filename"""
return include_filename.replace(".h","_h.swg")
def _write_nodefault_calls(self, structs):
"""Write proxy definitions to a SWIG interface file"""
self.ofile.write("\n/* No default constructors for opaque structs */\n")
self.ofile.write('#ifdef SWIGPYTHON\n');
for structName, structDefinition in structs:
if not structDefinition:
self.ofile.write('%%nodefault %s;\n' % structName)
self.ofile.write('#endif\n');
( run in 0.514 second using v1.01-cache-2.11-cpan-97f6503c9c8 )