def Save(self, append=False): 'Writes this code unit to the filename' space = '\n\n' if not append: flag = 'w' else: flag = 'a' fout = SmartFile(self.filename, flag) fout.write('\n') # includes # boost.python header if self.code['pchinclude']: fout.write(left_equals('PCH')) fout.write(self.code['pchinclude'] + '\n') fout.write('#ifdef _MSC_VER\n') fout.write('#pragma hdrstop\n') fout.write('#endif\n') else: fout.write(left_equals('Boost Includes')) fout.write('#include <boost/python.hpp>\n') # include numerical boost for int64 definitions fout.write('#include <boost/cstdint.hpp>\n') fout.write('\n') # other includes if self.code['include']: fout.write(left_equals('Includes')) includes = remove_duplicated_lines(self.code['include']) fout.write(includes) fout.write(space) # using if settings.USING_BOOST_NS and not append: fout.write(left_equals('Using')) fout.write('using namespace boost::python;\n\n') # declarations declaration = self.code['declaration'] declaration_outside = self.code['declaration-outside'] if declaration_outside or declaration: fout.write(left_equals('Declarations')) if declaration_outside: fout.write(declaration_outside + '\n\n') if declaration: pyste_namespace = namespaces.pyste[:-2] fout.write('namespace %s {\n\n' % pyste_namespace) fout.write(declaration) fout.write('\n}// namespace %s\n' % pyste_namespace) fout.write(space) # module fout.write(left_equals('Module')) fout.write(self.module_definition + '\n') fout.write('{\n') fout.write(self.code['module']) fout.write('}\n\n') fout.close()
def GenerateMain(self, interfaces): # generate the main cpp filename = os.path.join(self.outdir, '_main.cpp') fout = SmartFile(filename, 'w') fout.write(utils.left_equals('Include')) fout.write('#include <boost/python/module.hpp>\n\n') fout.write(utils.left_equals('Exports')) functions = [self._FunctionName(x) for x in interfaces] for function in functions: fout.write('void %s();\n' % function) fout.write('\n') fout.write(utils.left_equals('Module')) fout.write('BOOST_PYTHON_MODULE(%s)\n' % self.modulename) fout.write('{\n') indent = ' ' * 4 for function in functions: fout.write(indent) fout.write('%s();\n' % function) fout.write('}\n')