Source code for openalea.sconsx.tools.builddir

# -*-python-*-
#--------------------------------------------------------------------------------
#
#       OpenAlea.SConsX: SCons extension package for building platform
#                        independant packages.
#
#       Copyright 2006-2016 CIRAD - INRIA - INRA
#
#       File author(s): Christophe Pradal <christophe.prada@cirad.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
#
#--------------------------------------------------------------------------------
""" Build directory configure environment. """

__license__ = "Cecill-C"

import os
from openalea.sconsx.config import *

[docs] class BuildDir: """Define Variant Dir options for putting build files outside the source tree.""" def __init__(self, config): """Pluggin definition.""" self.name = 'build_dir' self.config = config self._default = {}
[docs] def default(self): """Set the default directory values for build_prefix.""" self._conda_build = is_conda_build() prefix = pj(self.config.dir[0],"build-scons") self._default['build_prefix'] = prefix if self._conda_build and os.name == 'posix': # For linux and mac, we should position the build lib directly in the conda library path self._default['build_bindir'] = pj(CONDA_LIBRARY_PREFIX,"bin") self._default['build_libdir'] = pj(CONDA_LIBRARY_PREFIX,"lib") self._default['build_includedir'] = pj(CONDA_LIBRARY_PREFIX,"include") else: self._default['build_bindir'] = pj(prefix,"bin") self._default['build_libdir'] = pj(prefix,"lib") self._default['build_includedir'] = pj(prefix,"include")
[docs] def option(self, opts): """Define user options to redefine the default values.""" self.default() opts.Add(BoolVariable('with_build_dir', 'build files in a separate directory?', True)) opts.Add('build_prefix', 'local preinstall directory', self._default['build_prefix']) opts.Add('build_bindir', 'local preinstall directory for binaries', self._default['build_bindir']) opts.Add('build_libdir', 'local preinstall directory for libraries', self._default['build_libdir']) opts.Add('build_includedir', 'local preinstall directory for headers', self._default['build_includedir'])
[docs] def update(self, env): """Update the environment with specific flags.""" if env['with_build_dir'] or self._conda_build: prefix = env['build_prefix'] bin_prefix = env['build_bindir'] lib_prefix = env['build_libdir'] inc_prefix = env['build_includedir'] else: prefix = self.config.dir[0] bin_prefix = pj(prefix, 'bin') lib_prefix = pj(prefix, 'lib') inc_prefix = pj(prefix, 'include') build = { 'build_prefix': prefix, 'build_bindir': bin_prefix, 'build_libdir': lib_prefix, 'build_includedir': inc_prefix} if env['with_build_dir']: build['build_dir'] = pj(prefix, 'src') # Creation of missing directories for udir in build: _path = build[udir] env[udir] = os.path.abspath(_path) if _path and not os.path.exists(_path): print('Create '+repr(_path)) os.makedirs(_path) if not env['with_build_dir']: env['build_dir'] = pj(env['build_prefix'], 'src')
[docs] def configure(self, config): """Configure code needs to go here.""" pass
[docs] def create(config): """Create builddir tool.""" builddir = BuildDir(config) return builddir