mirror of
https://github.com/boostorg/python.git
synced 2026-01-19 04:22:16 +00:00
https://svn.boost.org/svn/boost/trunk ........ r43417 | danieljames | 2008-02-26 22:04:55 +0000 (Tue, 26 Feb 2008) | 2 lines Fix a link to Boost.Bimap. ........ r43418 | danieljames | 2008-02-26 22:07:25 +0000 (Tue, 26 Feb 2008) | 2 lines Change another link that's no longer in the repository to link to the website. ........ r43422 | danieljames | 2008-02-27 18:51:14 +0000 (Wed, 27 Feb 2008) | 1 line Fix broken copyright urls. Fixes #1573. ........ r43423 | danieljames | 2008-02-27 19:22:01 +0000 (Wed, 27 Feb 2008) | 1 line Fix incorrect links to copyright of the form 'http:#www.boost.org ........ [SVN r43425]
122 lines
4.3 KiB
Python
122 lines
4.3 KiB
Python
# Copyright Bruno da Silva de Oliveira 2003. Use, modification and
|
|
# distribution is subject to the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
from settings import namespaces
|
|
import settings
|
|
from utils import remove_duplicated_lines, left_equals
|
|
from SmartFile import SmartFile
|
|
|
|
|
|
#==============================================================================
|
|
# SingleCodeUnit
|
|
#==============================================================================
|
|
class SingleCodeUnit:
|
|
'''
|
|
Represents a cpp file, where other objects can write in one of the
|
|
predefined sections.
|
|
The avaiable sections are:
|
|
pchinclude - The pre-compiled header area
|
|
include - The include area of the cpp file
|
|
declaration - The part before the module definition
|
|
module - Inside the BOOST_PYTHON_MODULE macro
|
|
'''
|
|
|
|
def __init__(self, modulename, filename):
|
|
self.modulename = modulename
|
|
self.filename = filename
|
|
# define the avaiable sections
|
|
self.code = {}
|
|
# include section
|
|
self.code['pchinclude'] = ''
|
|
# include section
|
|
self.code['include'] = ''
|
|
# declaration section (inside namespace)
|
|
self.code['declaration'] = ''
|
|
# declaration (outside namespace)
|
|
self.code['declaration-outside'] = ''
|
|
# inside BOOST_PYTHON_MACRO
|
|
self.code['module'] = ''
|
|
# create the default module definition
|
|
self.module_definition = 'BOOST_PYTHON_MODULE(%s)' % modulename
|
|
|
|
|
|
def Write(self, section, code):
|
|
'write the given code in the section of the code unit'
|
|
if section not in self.code:
|
|
raise RuntimeError, 'Invalid CodeUnit section: %s' % section
|
|
self.code[section] += code
|
|
|
|
|
|
def Merge(self, other):
|
|
for section in ('include', 'declaration', 'declaration-outside', 'module'):
|
|
self.code[section] = self.code[section] + other.code[section]
|
|
|
|
|
|
def Section(self, section):
|
|
return self.code[section]
|
|
|
|
|
|
def SetCurrent(self, *args):
|
|
pass
|
|
|
|
|
|
def Current(self):
|
|
pass
|
|
|
|
|
|
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()
|