Source code for openalea.sconsx.tools.eigen
# -*-python-*-
#-------------------------------------------------------------------------
#
# OpenAlea.SConsX: SCons extension package for building platform
# independant packages.
#
# Copyright 2006-2017 INRIA - CIRAD - INRA
#
# File author(s): Daniel Barbeau <daniel.barbeau@inria.fr>
#
# Distributed under the Cecill-C License.
# See accompanying file LICENSE.txt or copy at
# http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
# OpenAlea WebSite : http://openalea.gforge.inria.fr
#
#-------------------------------------------------------------------------
""" Eigen configure environment. """
__license__ = "Cecill-C"
__revision__ = "$Id$"
import os
import sys
from openalea.sconsx.config import *
import openalea.sconsx.errormsg as em
[docs]
class Eigen:
def __init__(self, config):
self.name = 'eigen'
self.config = config
self._default = {}
def default(self):
name = str(platform)
if CONDA_ENV:
inc_path = pj(CONDA_LIBRARY_PREFIX, 'include', 'eigen3')
elif isinstance(platform, Linux):
dist = platform.distribution()
name += " " + dist
if dist == "ubuntu":
inc_path = "/usr/include/eigen2/"
else:
inc_path = "/usr/include/"
elif isinstance(platform, Win32):
try:
import openalea.config as conf
inc_path = conf.include_dir
except ImportError as e:
inc_path = 'C:' + os.sep
elif isinstance(platform, Darwin):
inc_path = '/opt/local/include/eigen3'
self._default['include'] = inc_path
def option(self, opts):
self.default()
opts.AddVariables(
('eigen_includes',
'eigen include files',
self._default['include']),
BoolVariable(
'WITH_EIGEN',
'Specify whether you want to compile your project with EIGEN',
True))
def update(self, env):
""" Update the environment with specific flags """
if env['WITH_EIGEN']:
eigen_includes = env['eigen_includes']
if isinstance(eigen_includes, str):
eigen_includes = eigen_includes.split()
eigen_includes = eigen_includes[0]
if not os.path.exists(os.path.join(eigen_includes, 'Eigen')):
em.error("EIGEN lib not found. EIGEN disabled ...")
env['WITH_EIGEN'] = False
if env['WITH_EIGEN']:
env.AppendUnique(CPPPATH=[env['eigen_includes']])
env.Append(CPPDEFINES='WITH_EIGEN')
def configure(self, config):
if not config.conf.CheckCHeader('Eigen/Core'):
print("""Error: Eigen headers not found !!!
Please install eigen and start again.""")
sys.exit(-1)
[docs]
def create(config):
" Create eigen tool "
eigen = Eigen(config)
return eigen