Exemplo n.º 1
0
def _add_flags_to_overrides(env, overrides, name, newflags):
    newflags = CLVar(newflags)
    flags = overrides.get(name, env.get(name, []))[:]
    flags = CLVar(flags)
    for nf in newflags:
        if not nf in flags:
            flags.append(nf)
    overrides[name] = flags
Exemplo n.º 2
0
def _remove_flags_from_overrides(env, overrides, name, delflags):
    delflags = CLVar(delflags)
    flags = overrides.get(name, env.get(name, []))[:]
    flags = CLVar(flags)
    for df in delflags:
        if df in flags:
            flags.remove(df)
    overrides[name] = flags
Exemplo n.º 3
0
def generate(env):
    env['CHPL'] = 'chpl'
    env['CHPLFLAGS'] = CLVar('')
    env['CHPLLINKFLAGS'] = CLVar('')
    env['CHPLSUFFIX'] = '.chpl'
    chapelBuilder = Builder(
        action='$CHPL $CHPLFLAGS -o $TARGET $SOURCES',
        src_suffix=['.chpl'],
        single_source=False,
    )
    env.Append(BUILDERS={
        'ChapelProgram': chapelBuilder,
    })
Exemplo n.º 4
0
def generate(env):
    env["CHPL"] = "chpl"
    env["CHPLFLAGS"] = CLVar("")
    env["CHPLLINKFLAGS"] = CLVar("")
    env["CHPLSUFFIX"] = ".chpl"
    chapelBuilder = Builder(
        action="$CHPL $CHPLFLAGS -o $TARGET $SOURCES",
        src_suffix=[".chpl"],
        single_source=False,
    )
    env.Append(
        BUILDERS={
            "ChapelProgram": chapelBuilder,
        }
    )
Exemplo n.º 5
0
    def createATypedSwigModule(self,
                               target,
                               sources=[],
                               deplibs=[],
                               skip=[],
                               **kwargs):
        env = self.myClone()
        env.loadTools(['swig'])

        nodes = []
        for atype in self['ATYPES']:
            if atype not in skip:
                libEnv = env.myClone()
                libTarget = '%s_%s' % (target, atype)
                libEnv.Append(CPPPATH=['$SRCDIR/modules/atypes/%s' % atype])
                libEnv.AppendUnique(
                    SWIGPATH=['$SRCDIR/modules/atypes/%s' % atype])
                libEnv.AppendUnique(SWIGFLAGS=CLVar('-module %s_atyped_%s' %
                                                    (target, atype)))

                libEnv['SHOBJSUFFIX'] = '_%s%s' % (atype, self['SHOBJSUFFIX'])
                nodes += libEnv.createSwigModule(libTarget,
                                                 sources,
                                                 deplibs,
                                                 createPublicHeader=False,
                                                 atype=atype,
                                                 **kwargs)

        return nodes
Exemplo n.º 6
0
    def createATypedSharedLibrary(self,
                                  target,
                                  sources=[],
                                  deplibs=[],
                                  skip=[],
                                  **kwargs):
        env = self.myClone()

        nodes = []
        for atype in self['ATYPES']:
            if atype not in skip:
                libEnv = env.myClone()
                if Arch.isWindows():
                    libEnv.AppendUnique(CPPDEFINES=CLVar('BUILDING_' +
                                                         target.upper()))
                libTarget = '%s_%s' % (target, atype)
                libEnv['SHOBJSUFFIX'] = '_%s%s' % (atype, self['SHOBJSUFFIX'])
                nodes += libEnv.createSharedLibrary(libTarget,
                                                    sources,
                                                    deplibs,
                                                    createPublicHeader=False,
                                                    targetAType=atype,
                                                    **kwargs)

        return nodes
Exemplo n.º 7
0
def generate(env):
    """Add Builders and construction variables for ar to an Environment."""

    env["CYTHON_FLAGS"] = CLVar("--fast-fail -3")
    env["CYTHON_DEPS"] = []
    env["CYTHON_COMPILE_DEPS"] = []

    env.Append(BUILDERS={"CythonToC": CythonToCBuilder})
    env.AddMethod(CythonCompile, "CythonCompile")
    env.AddMethod(CythonModule, "CythonModule")
Exemplo n.º 8
0
Arquivo: g++.py Projeto: wuhao1938/fvm
def generate(env):
    cppTool.generate(env)

    if not env.get('CXXVERSION'):
        try:
            line = os.popen("/bin/bash -c 'gcc --version 2>&1'").readline()
            env['CXXVERSION'] = re.compile(r'[^(]*[^)]*\) ([^\n ]*)').findall(
                line)[0]
        except:
            env['CXXVERSION'] = '4.2.1'

    env['COMPILER'] = 'gcc-' + env['CXXVERSION']

    env['CXXFLAGS'] = CLVar(
        '-Wall -fno-strict-aliasing -Woverloaded-virtual -ftemplate-depth-200 -frounding-math'
    )

    if is64Bit():
        env.Append(CPPDEFINES=CLVar('OS_64BIT'))

    if env['DEBUG']:
        env.Append(CXXFLAGS=['-g', '-O0'])
    elif env['PROFILE']:
        env.Append(CXXFLAGS=['-fprofile-arcs', '-ftest-coverage'])
    else:
        env.Append(CXXFLAGS=['-O3', '-finline-limit=500'])

    if env['OPENMP']:
        env.Append(CXXFLAGS=['-fopenmp'])

    if env['PARALLEL']:
        env['CXX'] = 'mpicxx'
        env.Append(CXXFLAGS=['-DFVM_PARALLEL'])
        #bug fix for mpich
        env.Append(CXXFLAGS=['-DMPICH_IGNORE_CXX_SEEK'])
    else:
        env['CXX'] = 'c++'

    #env['CCFLAGS'] = env['CXXFLAGS']

    env['SHCXXFLAGS'] = CLVar('$CXXFLAGS -fPIC')
Exemplo n.º 9
0
def generate(env):
    """Add Builders and construction variables for cyglink to an Environment."""
    gnulink.generate(env)

    env['LINKFLAGS'] = CLVar('-Wl,-no-undefined')

    env['SHLIBPREFIX'] = 'cyg'
    env['SHLIBSUFFIX'] = '.dll'

    env['IMPLIBPREFIX'] = 'lib'
    env['IMPLIBSUFFIX'] = '.dll.a'

    # Variables used by versioned shared libraries
    # SHLIBVERSIONFLAGS and LDMODULEVERSIONFLAGS are same as in gnulink...
    env['_SHLIBVERSIONFLAGS'] = '$SHLIBVERSIONFLAGS'
    env['_LDMODULEVERSIONFLAGS'] = '$LDMODULEVERSIONFLAGS'

    env['_IMPLIB_PRE_SOURCES'] = _implib_pre_flags
    env['_IMPLIB_POST_SOURCES'] = _implib_post_flags
    env['SHLINKCOM'] = '$SHLINK -o $TARGET $SHLINKFLAGS $__SHLIBVERSIONFLAGS $__RPATH ' \
                       '$_IMPLIB_PRE_SOURCES $SOURCES  $_IMPLIB_POST_SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
    env['LDMODULECOM'] = '$LDMODULE -o $TARGET $SHLINKFLAGS $__LDMODULEVERSIONFLAGS $__RPATH ' \
                         '$_IMPLIB_PRE_SOURCES $SOURCES $_IMPLIB_POST_SOURCES $_LIBDIRFLAGS  $_LIBFLAGS'

    # Overwrite emitters. Cyglink does things differently when creating symlinks
    env['SHLIBEMITTER'] = [cyglink_lib_emitter, cyglink_shlib_symlink_emitter]
    env['LDMODULEEMITTER'] = [
        cyglink_ldmodule_emitter, cyglink_ldmod_symlink_emitter
    ]

    # This is the non versioned shlib filename
    # If SHLIBVERSION is defined then this will symlink to $SHLIBNAME
    env['SHLIB_NOVERSION_SYMLINK'] = '${IMPLIBPREFIX}$_get_shlib_stem${IMPLIBSUFFIX}'
    env['LDMODULE_NOVERSION_SYMLINK'] = '${IMPLIBPREFIX}$_get_ldmodule_stem${IMPLIBSUFFIX}'

    env['SHLIB_IMPLIBNAME'] = '${IMPLIBPREFIX}$_get_shlib_stem${_SHLIB_IMPLIBSUFFIX}'
    env['LDMODULE_IMPLIBNAME'] = '${IMPLIBPREFIX}$_get_ldmodule_stem${_LDMODULE_IMPLIBSUFFIX}'

    env['_cyglink_shlibversion'] = cyglink_shlibversion
    env['_SHLIB_IMPLIBSUFFIX'] = '${_cyglink_shlibversion}${IMPLIBSUFFIX}'
    env['_SHLIBSUFFIX'] = '${_cyglink_shlibversion}${SHLIBSUFFIX}'

    env['_cyglink_ldmodule_version'] = cyglink_ldmodule_version

    env['_LDMODULESUFFIX'] = '${_cyglink_ldmodule_version}${LDMODULESUFFIX}'
    env['_LDMODULE_IMPLIBSUFFIX'] = '${_cyglink_ldmodule_version}${IMPLIBSUFFIX}'

    # Remove variables set by default initialization which aren't needed/used by cyglink
    # these variables were set by gnulink but are not used in cyglink
    for rv in ['_SHLIBSONAME', '_LDMODULESONAME']:
        if rv in env:
            del env[rv]
def generate(env):
    mylinker.generate(env)

    env['FRAMEWORKPATHPREFIX'] = '-F'
    env['_FRAMEWORKPATH'] = '${_concat(FRAMEWORKPATHPREFIX, FRAMEWORKPATH, "", __env__, RDirs)}'

    env['_FRAMEWORKS'] = '${_concat("-framework ", FRAMEWORKS, "", __env__)}'
    env['LINKCOM'] = env[
        'LINKCOM'] + ' $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS'
    env['SHLINKFLAGS'] = CLVar('$LINKFLAGS -dynamiclib')
    env['SHLINKCOM'] = env[
        'SHLINKCOM'] + ' $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS'

    env['_APPLELINK_CURRENT_VERSION'] = _applelib_currentVersionFromSoVersion
    env['_APPLELINK_COMPATIBILITY_VERSION'] = _applelib_compatVersionFromSoVersion
    env['_SHLIBVERSIONFLAGS'] = '$_APPLELINK_CURRENT_VERSION $_APPLELINK_COMPATIBILITY_VERSION '
    env['_LDMODULEVERSIONFLAGS'] = '$_APPLELINK_CURRENT_VERSION $_APPLELINK_COMPATIBILITY_VERSION '

    # override the default for loadable modules, which are different
    # on OS X than dynamic shared libs.  echoing what XCode does for
    # pre/suffixes:
    env['LDMODULEPREFIX'] = ''
    env['LDMODULESUFFIX'] = ''
    env['LDMODULEFLAGS'] = CLVar('$LINKFLAGS -bundle')
    env[
        'LDMODULECOM'] = '$LDMODULE -o ${TARGET} $LDMODULEFLAGS'\
                         ' $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $_FRAMEWORKPATH $_FRAMEWORKS $FRAMEWORKSFLAGS'

    # New stuff
    env['_SHLIBSONAME'] = _applelib_soname

    env['_SHLIBSUFFIX'] = '${_SHLIBVERSION}${SHLIBSUFFIX}'

    env[
        '__SHLIBVERSIONFLAGS'] = '${__lib_either_version_flag(__env__,'\
                                 '"SHLIBVERSION","_APPLELINK_CURRENT_VERSION", "_SHLIBVERSIONFLAGS")}'
    env[
        '__LDMODULEVERSIONFLAGS'] = '${__lib_either_version_flag(__env__,'\
                                    '"LDMODULEVERSION","_APPLELINK_CURRENT_VERSION", "_LDMODULEVERSIONFLAGS")}'
Exemplo n.º 11
0
def generate(env):
    cppTool.generate(env)

    if not env.get('CXXVERSION'):
        try:
            line = os.popen("/bin/bash -c 'icc --version 2>&1'").readline()
            env['CXXVERSION'] = re.compile(r'[^(]*[^)]*\) ([^\n ]*)').findall(
                line)[0]
        except:
            env['CXXVERSION'] = '10.1'

    env['COMPILER'] = 'icc-' + env['CXXVERSION']

    env['CXXFLAGS'] = CLVar('-fno-strict-aliasing -ftemplate-depth-200')

    if is64Bit():
        env.Append(CPPDEFINES=CLVar('OS_64BIT'))

    if env['DEBUG']:
        env.Append(CXXFLAGS=['-g'])
    else:
        env.Append(CXXFLAGS=['-O3', '-xHost'])

    if env['OPENMP']:
        env.Append(CXXFLAGS=['-fopenmp'])

    if env['PARALLEL']:
        env['CXX'] = 'mpicxx'
        env.Append(CXXFLAGS=['-DFVM_PARALLEL'])
        # bug fix for mpich
        env.Append(CXXFLAGS=['-DMPICH_IGNORE_CXX_SEEK'])
    else:
        env['CXX'] = 'icpcc'

    #env['CCFLAGS'] = env['CXXFLAGS']
    env['SHCXXFLAGS'] = CLVar('$CXXFLAGS -fPIC')
Exemplo n.º 12
0
    def createSwigModule(self,
                         target,
                         sources=[],
                         deplibs=[],
                         atype=None,
                         **kwargs):

        env = self.myClone()

        env.loadTools(['swig'])

        env.Append(CPPPATH=['$AUTOGENDIR'])
        env['SHLIBPREFIX'] = ""
        if env['PARALLEL']:
            env.AppendUnique(
                SWIGFLAGS=CLVar('-DFVM_PARALLEL -c++ -python -module %s' %
                                target))
        else:
            env.AppendUnique(SWIGFLAGS=CLVar('-c++ -python -module %s' %
                                             target))
        env['SWIGOUTDIR'] = '$COMPONENTTARGETDIR'

        env.AppendUnique(CPPDEFINES='RLOG_COMPONENT=%s' % target)
        deplibs += ['python']
        env._updateEnv(target, deplibs, atype, True)

        #        wrapSources = [ swigre.sub(r'\1_wrap.cc', source) for source in sources]

        nodes = env.SharedLibrary('$COMPONENTTARGETDIR/_' + target,
                                  sources,
                                  targetAType=atype,
                                  **kwargs)

        #self._addTarget(wrapSources)
        self._addTarget(nodes)
        return nodes
Exemplo n.º 13
0
def generate(env):
    SCons.Tool.gnulink.generate(env)

    env['LINKFLAGS'] = CLVar('-rdynamic')
    if env['DEBUG']:
        env.Append(LINKFLAGS=['-g'])
    elif env['PROFILE']:
        env.Append(LINKFLAGS=['-lgcov', '-fprofile-arcs', '-ftest-coverage'])

    env['SHLINKFLAGS'] = env['LINKFLAGS']
    env.Append(SHLINKFLAGS=['-shared'])

    if env['OPENMP']:
        env.Append(SHLINKFLAGS=['-fopenmp'])

    env['SYSLIBS'] = []
Exemplo n.º 14
0
def updateEnv(env):

    #default compiler suite is gcc
    env['CXXVERSION'] = None
    if env['COMPILER'] is None:
        compilerSuite = 'gcc'
    else:
        c = env['COMPILER'].split('-')
        compilerSuite = c[0]
        if len(c) > 1:
            env['CXXVERSION'] = c[1]

    if compilerSuite == 'gcc':
        env.loadTools(['gnulink', 'g++'])
    elif compilerSuite == 'intelc':
        env.loadTools(['gnulink', 'intelc'])
    else:
        raise UserError, 'Unknown compiler: %s' % env['COMPILER']

    env.AppendUnique(CPPDEFINES=CLVar('OS_LINUX'))
Exemplo n.º 15
0
def setup_shared_lib_logic(env):
    """Initialize an environment for shared library building.

    Args:
        env: environment to set up
    """
    createSharedLibBuilder(env)

    env["_get_shlib_stem"] = _get_shlib_stem
    env["_get_shlib_dir"] = _get_shlib_dir
    env["_SHLIBSOVERSION"] = _soversion
    env["_SHLIBSONAME"] = _soname

    env["SHLIBNAME"] = "${_get_shlib_dir}${SHLIBPREFIX}$_get_shlib_stem${_SHLIBSUFFIX}"

    # This is the non versioned shlib filename
    # If SHLIBVERSION is defined then this will symlink to $SHLIBNAME
    env["SHLIB_NOVERSION_SYMLINK"] = "${_get_shlib_dir}${SHLIBPREFIX}$_get_shlib_stem${SHLIBSUFFIX}"

    # This is the sonamed file name
    # If SHLIBVERSION is defined then this will symlink to $SHLIBNAME
    env["SHLIB_SONAME_SYMLINK"] = "${_get_shlib_dir}$_SHLIBSONAME"

    # Note this is gnu style
    env["SHLIBSONAMEFLAGS"] = "-Wl,-soname=$_SHLIBSONAME"
    env["_SHLIBVERSION"] = "${SHLIBVERSION and '.'+SHLIBVERSION or ''}"
    env["_SHLIBVERSIONFLAGS"] = "$SHLIBVERSIONFLAGS -Wl,-soname=$_SHLIBSONAME"

    env["SHLIBEMITTER"] = [lib_emitter, shlib_symlink_emitter]

    # If it's already set, then don't overwrite.
    env["SHLIBPREFIX"] = env.get('SHLIBPREFIX', "lib")
    env["_SHLIBSUFFIX"] = "${SHLIBSUFFIX}${_SHLIBVERSION}"

    env["SHLINKFLAGS"] = CLVar("$LINKFLAGS -shared")

    env["SHLINKCOM"] = "$SHLINK -o $TARGET $SHLINKFLAGS $__SHLIBVERSIONFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS"

    env["SHLINK"] = "$LINK"
Exemplo n.º 16
0
    def createSharedLibrary(self,
                            target,
                            sources=[],
                            deplibs=[],
                            createPublicHeader=True,
                            targetAType=None,
                            **kwargs):

        env = self.myClone()
        env._updateEnv(target, deplibs, targetAType)
        env.AppendUnique(CPPDEFINES='RLOG_COMPONENT=%s' % target)

        env.Append(CPPPATH=['$AUTOGENDIR'])
        env['CURRENTLIB'] = target.upper()
        if Arch.isWindows():
            env.AppendUnique(CPPDEFINES=CLVar('BUILDING_' + env['CURRENTLIB']))

        nodes = env.SharedLibrary('$COMPONENTTARGETDIR/' + target, sources,
                                  **kwargs)

        self._addTarget(nodes)
        #        if target not in self._compDirMap.keys():
        #            self.Alias(target, nodes)
        return nodes
Exemplo n.º 17
0
def generate(env):
    env["SPHINX"] = env.Detect("sphinx-build") or "sphinx-build"
    env["SPHINXFLAGS"] = CLVar("")
    env.AddMethod(Source)
    env.AddMethod(HTML)
Exemplo n.º 18
0
def buildCUnitTestFromFiles (env,
                             files,
                             buildFolder = "",
                             vars = None,
                             extraObjects = [],
                             package="cunit",
                             **kwargs):
    # Create the Builders
    env.Append (BUILDERS = {
        "CUTestSuite":
        env.Builder (action = env.Action (__makeCUTestSuite, "$$CUTESTSUITESTR"),
                     prefix = "cunit_",
                     single_source = True),

        "CUMainSource":
        env.Builder (action = env.Action (__makeCUMainSource,
                                          "$$CUMAINSOURCESTR"),
                     emitter = __emitCUMainSource)
        },
                CUTESTSUITESTR = \
                ("Creating source for test suite '${CU_SUITE_NAME}'..."),
                CUMAINSOURCESTR = \
                ("Creating main CUnit source file..."))
    # Create the source files for the suites
    suites = set()
    sources = []
    for source in files:
        path, base = os.path.split (source)
        suiteName = os.path.splitext (base)[0]
        sources.append (env.CUTestSuite (os.path.join (buildFolder, "cunit_%s" % base),
                                         source,
                                         CU_SUITE_NAME = suiteName,
                                         **kwargs))
        suites.add (suiteName)
    # Create the main source file
    sources.append (env.CUMainSource (os.path.join (buildFolder, "cutest_main.c"),
                                      env.Value (suites), **kwargs))

    # Build the test program
    from SCons.Util import CLVar
    libs = kwargs.get ("LIBS", None)
    if libs:
        del kwargs["LIBS"]
        libs = CLVar (libs) + "cunit"
    else:
        libs = CLVar (env.get ("LIBS", [])) + "cunit"
    cutest = env.Program (os.path.join (buildFolder, package + "-test"),
                          sources + extraObjects,
                          LIBS = libs,
                          **kwargs)[0]

    # Cleanup the coverage data.
    # - *.gcno files are generated along with the object files and
    #   contain function information. They must be cleaned along with
    #   the associated object;
    # - *.gcda files are generated when running the program. They must
    #   be deleted each time the program is rebuilt, and cleaned along
    #   with the related object.
    if env.get("coverage"):
        env["CLEANUP_COVERAGE_DATA_STR"] = \
            ("Cleaning coverage data for ${TARGET.name}...")
        objects = env.Flatten (sources + extraObjects)
        cutest.cuObjects = objects
        env.AddPreAction (cutest,
                          env.Action (__cleanupCoverageData,
                                      "$$CLEANUP_COVERAGE_DATA_STR"))
        for o in objects:
            baseName = os.path.splitext (o.path)[0]
            env.Clean (o, "#%s.gcda" % baseName)
            env.Clean (o, "#%s.gcno" % baseName)
            env.SideEffect ("#%s.gcno" % baseName, o)

    return cutest
Exemplo n.º 19
0
def generate(env):
    env['SPHINX'] = env.Detect('sphinx-build') or 'sphinx-build'
    env['SPHINXFLAGS'] = CLVar('')
    env.AddMethod(Source)
    env.AddMethod(HTML)
Exemplo n.º 20
0
    def test_CLVar(self):
        """Test the command-line construction variable class"""

        # the default value should be an empty list
        d = CLVar()
        assert isinstance(d, CLVar), type(d)
        assert d.data == [], d.data
        assert str(d) == '', str(d)

        # input to CLVar is a string - should be split
        f = CLVar('aa bb')

        r = f + 'cc dd'
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + ' cc dd'
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + ['cc dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + [' cc dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', ' cc dd'], r.data
        assert str(r) == 'aa bb  cc dd', str(r)

        r = f + ['cc', 'dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + [' cc', 'dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', ' cc', 'dd'], r.data
        assert str(r) == 'aa bb  cc dd', str(r)

        # input to CLVar is a list of one string, should not be split
        f = CLVar(['aa bb'])

        r = f + 'cc dd'
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + ' cc dd'
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + ['cc dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa bb', 'cc dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + [' cc dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa bb', ' cc dd'], r.data
        assert str(r) == 'aa bb  cc dd', str(r)

        r = f + ['cc', 'dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + [' cc', 'dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa bb', ' cc', 'dd'], r.data
        assert str(r) == 'aa bb  cc dd', str(r)

        # input to CLVar is a list of strings
        f = CLVar(['aa', 'bb'])

        r = f + 'cc dd'
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + ' cc dd'
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + ['cc dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + [' cc dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', ' cc dd'], r.data
        assert str(r) == 'aa bb  cc dd', str(r)

        r = f + ['cc', 'dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', 'cc', 'dd'], r.data
        assert str(r) == 'aa bb cc dd', str(r)

        r = f + [' cc', 'dd']
        assert isinstance(r, CLVar), type(r)
        assert r.data == ['aa', 'bb', ' cc', 'dd'], r.data
        assert str(r) == 'aa bb  cc dd', str(r)

        # make sure inplace adding a string works as well (issue 2399)
        # UserList would convert the string to a list of chars
        f = CLVar(['aa', 'bb'])
        f += 'cc dd'
        assert isinstance(f, CLVar), type(f)
        assert f.data == ['aa', 'bb', 'cc', 'dd'], f.data
        assert str(f) == 'aa bb cc dd', str(f)

        f = CLVar(['aa', 'bb'])
        f += ' cc dd'
        assert isinstance(f, CLVar), type(f)
        assert f.data == ['aa', 'bb', 'cc', 'dd'], f.data
        assert str(f) == 'aa bb cc dd', str(f)
Exemplo n.º 21
0
def generate(env, **kw):
    occbuild = kw.get('occbuild', None)
    if occbuild:
        occbuild_path = occbuild[0].abspath
        depend_emitter = lambda target, source, env: occbuild_depend_emitter(
            target, source, env, occbuild)
    else:
        occbuild_path = 'occbuild'
        depend_emitter = None
    pideps_scanner = Scanner(function=pideps_scan,
                             skeys=['.occ'],
                             path_function=FindPathDirs('INCPATH'))
    tce_bld = Builder(action=Action('$OCCBUILDCOM', '$OCCBUILDCOMSTR'),
                      emitter=depend_emitter,
                      suffix='.tce',
                      src_suffix='.occ')
    # FIXME: The source scanner does not work well enough yet :/
    #source_scanner = pideps_scanner)
    lib_bld = Builder(action=Action('$OCCBUILDLIBRARYCOM',
                                    '$OCCBUILDLIBRARYCOMSTR'),
                      emitter=[depend_emitter, occbuild_library_emitter],
                      suffix='.lib',
                      src_suffix='.tce',
                      src_builder=[tce_bld])
    prog_bld = Builder(
        action=Action('$OCCBUILDPROGRAMCOM', '$OCCBUILDPROGRAMCOMSTR'),
        emitter=[depend_emitter, occbuild_program_emitter],
        suffix='$PROGSUFFIX',
        src_suffix=['.occ', '.tce'],
        # FIXME: If I leave the sourcebuilder in, scons seems to
        # want to turn my .occ extensions when I have a mixed
        # .occ, .tce source list into .tce using the builder
    )  #src_builder = [tce_bld])
    tbc_headr_bld = Builder(action=Action('$TBCHEADERCOM', '$TBCHEADERCOMSTR'),
                            emitter=[depend_emitter],
                            suffix='.h',
                            src_suffix=['.occ', '.tce'],
                            src_bulider=[tce_bld])
    # Add the new Builder to the list of builders
    # Use of $( $)  causes bracketed flags not trigger rebuild when changed
    env['BUILDERS']['OccamObject'] = tce_bld
    env['OCCBUILDCOM'] = '$OCCBUILD $_OCCBUILD_TOOLCHAIN $_OCCBUILD_SEARCH_DIRS $OCCBUILDFLAGS --object $SOURCES'
    env['BUILDERS']['OccamLibrary'] = lib_bld
    env['OCCBUILDLIBRARYCOM'] = '$OCCBUILD $_OCCBUILD_TOOLCHAIN $_OCCBUILD_SEARCH_DIRS $OCCBUILDFLAGS --library $TARGET $SOURCES'
    env['BUILDERS']['OccamProgram'] = prog_bld
    env['OCCBUILDPROGRAMCOM'] = '$OCCBUILD $_OCCBUILD_TOOLCHAIN $_OCCBUILD_SEARCH_DIRS $OCCBUILDFLAGS --program $SOURCES'
    env['BUILDERS']['OccamBytecodeHeader'] = tbc_headr_bld
    env['TBCHEADERCOM'] = '$SKROC $_SKROC_SEARCH_DIRS $SKROCFLAGS --c -f $TARGET $SOURCES'
    env['OCCBUILD'] = occbuild_path
    env['_OCCBUILD_SEARCH_DIRS'] = '$( ${_concat(OCCBUILD_SEARCH_PFX, INCPATH, "", __env__, RDirs, TARGET, SOURCE)} $)'
    env['_SKROC_SEARCH_DIRS'] = '$( ${_concat(SKROC_SEARCH_PFX, INCPATH, "", __env__, RDirs, TARGET, SOURCE)} $)'
    env['OCCBUILD_SEARCH_PFX'] = '--search '
    env['SKROC_SEARCH_PFX'] = '-L '
    env['OCCBUILD_TOOLCHAIN'] = None
    env['_OCCBUILD_TOOLCHAIN'] = '${(OCCBUILD_TOOLCHAIN and "--toolchain $OCCBUILD_TOOLCHAIN" or "")}'

    def OccLibDepend(self, node, lib_name):
        if not isinstance(lib_name, list): list(lib_name)
        for lib in lib_name:
            self.Depends(node, self['OCCLIBS'][lib]['dep'])
            if 'inc' in self['OCCLIBS'][lib]:
                for n in node:
                    n.env.AppendUnique(INCPATH=self['OCCLIBS'][lib]['inc'])

    env.AddMethod(OccLibDepend)
    env['OCCLIBS'] = dict()
    env['INCPATH'] = CLVar('')
    env['OCCBUILDFLAGS'] = CLVar('')