"""
Tool-specific initialization for Clang static analyzer

There normally shouldn't be any need to import this module directly.
It will usually be imported through the generic SCons.Tool.Tool()
selection method.
"""

__revision__ = "tools/clang-analyze.py 2013-09-06 grissiom"

import os
import os.path

import SCons.Action
import SCons.Builder
import SCons.Defaults
import SCons.Tool
import SCons.Util

import rtconfig

def generate(env):
    assert(rtconfig.CROSS_TOOL == 'clang-analyze')
    # let gnu_tools setup a basic env(learnt from SCons/Tools/mingw.py)
    gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas', 'm4']
    for tool in gnu_tools:
        SCons.Tool.Tool(tool)(env)

    # then we could stand on the shoulders of gaints
    env['CC']   = 'ccc-analyzer'
    env['CXX']  = 'c++-analyzer'
    env['AS']   = 'true'
    env['AR']   = 'true'
    env['LINK'] = 'true'

    env['CFLAGS']    = ['-fsyntax-only', '-Wall', '-Wno-invalid-source-encoding', '-m32']
    env['LINKFLAGS'] = '-Wl,--gc-sections'
    env['ARFLAGS']   = '-rc'

    # only check, don't compile. ccc-analyzer use CCC_CC as the CC.
    # fsyntax-only will give us some additional warning messages
    env['ENV']['CCC_CC'] = 'clang'
    env['ENV']['CCC_CXX'] = 'clang++'

    # setup the output dir and format
    env['ENV']['CCC_ANALYZER_HTML'] = './build/'
    env['ENV']['CCC_ANALYZER_OUTPUT_FORMAT'] = 'html'

    # Some setting from the platform also have to be overridden:
    env['OBJSUFFIX'] = '.o'
    env['LIBPREFIX'] = 'lib'
    env['LIBSUFFIX'] = '.a'

    if rtconfig.EXEC_PATH:
        if not os.path.exists(rtconfig.EXEC_PATH):
            print()
            print('warning: rtconfig.EXEC_PATH(%s) does not exists.' % rtconfig.EXEC_PATH)
            print()
            return
        env.AppendENVPath('PATH', rtconfig.EXEC_PATH)

def exists(env):
    return env.Detect(['ccc-analyzer', 'c++-analyzer'])

# Local Variables:
# tab-width:4
# indent-tabs-mode:nil
# End:
# vim: set expandtab tabstop=4 shiftwidth=4: