2014-10-06 15:50:19 +00:00
|
|
|
'''
|
|
|
|
|
Created on 13 fevr. 2014
|
|
|
|
|
|
|
|
|
|
@author: coissac
|
|
|
|
|
'''
|
|
|
|
|
|
2015-04-16 08:52:30 +00:00
|
|
|
from distutils import log
|
|
|
|
|
import sys
|
2015-04-16 12:41:43 +00:00
|
|
|
from obidistutils.serenity import is_serenity
|
|
|
|
|
|
2015-04-16 12:42:11 +00:00
|
|
|
import os
|
2015-04-16 13:05:21 +00:00
|
|
|
from obidistutils.serenity.checkpackage import install_requirements
|
|
|
|
|
from obidistutils.serenity.rerun import rerun_with_anothe_python
|
2015-04-16 08:52:30 +00:00
|
|
|
|
2014-10-17 16:06:46 +00:00
|
|
|
try:
|
|
|
|
|
from Cython.Distutils import build_ext as ori_build_ext # @UnresolvedImport
|
2015-04-16 13:05:21 +00:00
|
|
|
except ImportError:
|
2015-04-16 13:06:56 +00:00
|
|
|
if not is_serenity() and install_requirements():
|
2015-04-16 13:05:21 +00:00
|
|
|
log.info("Restarting installation with all dependencies ok")
|
|
|
|
|
rerun_with_anothe_python(os.path.realpath(sys.executable))
|
2014-10-06 15:50:19 +00:00
|
|
|
|
2015-04-16 13:05:21 +00:00
|
|
|
from distutils.errors import DistutilsSetupError
|
|
|
|
|
|
|
|
|
|
class build_ext(ori_build_ext):
|
|
|
|
|
def modifyDocScripts(self):
|
|
|
|
|
print >>open("doc/sphinx/build_dir.txt","w"),self.build_lib
|
2014-10-06 15:50:19 +00:00
|
|
|
|
2015-04-16 13:05:21 +00:00
|
|
|
def initialize_options(self):
|
|
|
|
|
ori_build_ext.initialize_options(self) # @UndefinedVariable
|
|
|
|
|
self.littlebigman = None
|
|
|
|
|
self.built_files = None
|
|
|
|
|
|
2015-04-16 12:41:43 +00:00
|
|
|
|
2015-04-16 13:05:21 +00:00
|
|
|
def finalize_options(self):
|
|
|
|
|
ori_build_ext.finalize_options(self) # @UndefinedVariable
|
|
|
|
|
|
|
|
|
|
self.set_undefined_options('littlebigman',
|
|
|
|
|
('littlebigman', 'littlebigman'))
|
|
|
|
|
|
|
|
|
|
self.set_undefined_options('build_files',
|
|
|
|
|
('files', 'built_files'))
|
|
|
|
|
|
|
|
|
|
self.cython_c_in_temp = 1
|
|
|
|
|
|
|
|
|
|
if self.littlebigman =='-DLITTLE_END':
|
|
|
|
|
if self.define is None:
|
|
|
|
|
self.define=[('LITTLE_END',None)]
|
|
|
|
|
else:
|
|
|
|
|
self.define.append('LITTLE_END',None)
|
|
|
|
|
|
|
|
|
|
def substitute_sources(self,exe_name,sources):
|
|
|
|
|
"""
|
|
|
|
|
Substitutes source file name starting by an @ by the actual
|
|
|
|
|
name of the built file (see --> build_files)
|
|
|
|
|
"""
|
|
|
|
|
sources = list(sources)
|
|
|
|
|
for i in xrange(len(sources)):
|
|
|
|
|
print exe_name,sources[i],
|
|
|
|
|
if sources[i][0]=='@':
|
|
|
|
|
try:
|
|
|
|
|
filename = self.built_files[sources[i][1:]]
|
|
|
|
|
except KeyError:
|
|
|
|
|
tmpfilename = os.path.join(self.build_temp,sources[i][1:])
|
|
|
|
|
if os.path.isfile (tmpfilename):
|
|
|
|
|
filename = tmpfilename
|
|
|
|
|
else:
|
|
|
|
|
raise DistutilsSetupError, \
|
|
|
|
|
('The %s filename declared in the source '
|
|
|
|
|
'files of the program %s have not been '
|
|
|
|
|
'built by the installation process') % (sources[i],
|
|
|
|
|
exe_name)
|
|
|
|
|
sources[i]=filename
|
|
|
|
|
print "changed to ",filename
|
|
|
|
|
else:
|
|
|
|
|
print " ok"
|
|
|
|
|
|
|
|
|
|
return sources
|
|
|
|
|
|
|
|
|
|
def build_extensions(self):
|
|
|
|
|
# First, sanity-check the 'extensions' list
|
|
|
|
|
|
|
|
|
|
for ext in self.extensions:
|
|
|
|
|
ext.sources = self.substitute_sources(ext.name,ext.sources)
|
2015-04-16 12:41:43 +00:00
|
|
|
|
2015-04-16 13:05:21 +00:00
|
|
|
self.check_extensions_list(self.extensions)
|
|
|
|
|
|
|
|
|
|
for ext in self.extensions:
|
|
|
|
|
print "#####>",ext.sources
|
|
|
|
|
ext.sources = self.cython_sources(ext.sources, ext)
|
|
|
|
|
self.build_extension(ext)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
|
self.modifyDocScripts()
|
|
|
|
|
ori_build_ext.run(self) # @UndefinedVariable
|
|
|
|
|
|
2014-10-06 15:50:19 +00:00
|
|
|
|
2015-04-16 12:41:43 +00:00
|
|
|
|
2015-06-02 15:52:18 +02:00
|
|
|
# from obidistutils.serenity.getcython import get_a_cython_module
|
2015-04-16 12:41:43 +00:00
|
|
|
# import imp
|
|
|
|
|
# import os.path
|
|
|
|
|
#
|
|
|
|
|
# log.info("No cython installed, try to install a temporary cython")
|
|
|
|
|
# cython = get_a_cython_module()
|
|
|
|
|
# sys.path.insert(0,os.path.dirname(os.path.dirname(cython.__file__)))
|
|
|
|
|
# f, filename, description=imp.find_module('Distutils',[os.path.dirname(cython.__file__)])
|
|
|
|
|
# submodule = imp.load_module('Cython.Distutils', f, filename, description)
|
|
|
|
|
# ori_build_ext = submodule.build_ext
|
|
|
|
|
#
|
2014-10-06 15:50:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|