diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2019-07-12 17:48:12 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2019-07-12 17:48:12 +0200 | 
| commit | 19712e5025e3cf6a33fccd0738f04e018d55025f (patch) | |
| tree | 25683461da536e1e7ffee70279780b4f3586142f /engine/SCons/Tool/yacc.py | |
| parent | cd2ab5002aa2359575088bbc3183a9a91cc50c31 (diff) | |
New upstream version 3.0.5upstream/3.0.5
Diffstat (limited to 'engine/SCons/Tool/yacc.py')
| -rw-r--r-- | engine/SCons/Tool/yacc.py | 45 | 
1 files changed, 42 insertions, 3 deletions
diff --git a/engine/SCons/Tool/yacc.py b/engine/SCons/Tool/yacc.py index 0a73f60..d328d20 100644 --- a/engine/SCons/Tool/yacc.py +++ b/engine/SCons/Tool/yacc.py @@ -9,7 +9,7 @@ selection method.  """  # -# Copyright (c) 2001 - 2017 The SCons Foundation +# Copyright (c) 2001 - 2019 The SCons Foundation  #  # Permission is hereby granted, free of charge, to any person obtaining  # a copy of this software and associated documentation files (the @@ -31,13 +31,17 @@ selection method.  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  # -__revision__ = "src/engine/SCons/Tool/yacc.py 74b2c53bc42290e911b334a6b44f187da698a668 2017/11/14 13:16:53 bdbaddog" +__revision__ = "src/engine/SCons/Tool/yacc.py a56bbd8c09fb219ab8a9673330ffcd55279219d0 2019-03-26 23:16:31 bdeegan"  import os.path +import sys  import SCons.Defaults  import SCons.Tool  import SCons.Util +from SCons.Platform.mingw import MINGW_DEFAULT_PATHS +from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS +from SCons.Platform.win32 import CHOCO_DEFAULT_PATH  YaccAction = SCons.Action.Action("$YACCCOM", "$YACCCOMSTR") @@ -94,6 +98,28 @@ def ymEmitter(target, source, env):  def yyEmitter(target, source, env):      return _yaccEmitter(target, source, env, ['.yy'], '$YACCHXXFILESUFFIX') +def get_yacc_path(env, append_paths=False): +    """ +    Find the a path containing the lex or flex binaries. If a construction  +    environment is passed in then append the path to the ENV PATH. +    """ +    # save existing path to reset if we don't want to append any paths +    envPath = env['ENV']['PATH'] +    bins = ['bison', 'yacc', 'win_bison'] + +    for prog in bins: +        bin_path = SCons.Tool.find_program_path( +            env,  +            prog,  +            default_paths=CHOCO_DEFAULT_PATH + MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) +        if bin_path: +            if not append_paths: +                env['ENV']['PATH'] = envPath +            else: +                env.AppendENVPath('PATH', os.path.dirname(bin_path)) +            return bin_path +    SCons.Warnings.Warning('lex tool requested, but lex or flex binary not found in ENV PATH') +  def generate(env):      """Add Builders and construction variables for yacc to an Environment."""      c_file, cxx_file = SCons.Tool.createCFileBuilders(env) @@ -113,7 +139,20 @@ def generate(env):      cxx_file.add_action('.yy', YaccAction)      cxx_file.add_emitter('.yy', yyEmitter) -    env['YACC']      = env.Detect('bison') or 'yacc' +    if sys.platform == 'win32': +        bison = SCons.Tool.find_program_path(env, 'bison', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) +        if bison: +            bison_bin_dir = os.path.dirname(bison) +            env.AppendENVPath('PATH', bison_bin_dir) +        else: +            SCons.Warnings.Warning('yacc tool requested, but bison binary not found in ENV PATH') + +    if sys.platform == 'win32': +        get_yacc_path(env, append_paths=True) +        env["YACC"] = env.Detect(['bison', 'yacc', 'win_bison']) +    else: +        env["YACC"] = env.Detect(["bison", "yacc"]) +          env['YACCFLAGS'] = SCons.Util.CLVar('')      env['YACCCOM']   = '$YACC $YACCFLAGS -o $TARGET $SOURCES'      env['YACCHFILESUFFIX'] = '.h'  | 
