diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2019-07-24 09:57:09 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2019-07-24 09:57:09 +0200 | 
| commit | c7665433b2004d2b404d6fb9d6fd064998486f63 (patch) | |
| tree | 8525ef6d24f7c6ceb238945ebb2cc997c7afc905 /src/engine/SCons/Tool/yacc.py | |
| parent | e48d2727885efda8369c7edbc2e3929a59532adc (diff) | |
| parent | 6e228c305122f0564eda1e67d56651f8386d24d7 (diff) | |
Merge branch 'release/debian/3.1.0+repack-1'debian/3.1.0+repack-1
Diffstat (limited to 'src/engine/SCons/Tool/yacc.py')
| -rw-r--r-- | src/engine/SCons/Tool/yacc.py | 49 | 
1 files changed, 43 insertions, 6 deletions
diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index 4f9fbc2..6857574 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/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,16 +31,25 @@ selection method.  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  # -__revision__ = "src/engine/SCons/Tool/yacc.py rel_3.0.0:4395:8972f6a2f699 2017/09/18 12:59:24 bdbaddog" +__revision__ = "src/engine/SCons/Tool/yacc.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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") +if sys.platform == 'win32': +    BINS = ['bison', 'yacc', 'win_bison'] +else: +    BINS = ["bison", "yacc"] +  def _yaccEmitter(target, source, env, ysuf, hsuf):      yaccflags = env.subst("$YACCFLAGS", target=target, source=source)      flags = SCons.Util.CLVar(yaccflags) @@ -94,6 +103,29 @@ 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 path to the yacc tool, searching several possible names + +    Only called in the Windows case, so the default_path +    can be Windows-specific + +    :param env: current construction environment +    :param append_paths: if set, add the path to the tool to PATH +    :return: path to yacc tool, if found +    """ +    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 append_paths: +                env.AppendENVPath('PATH', os.path.dirname(bin_path)) +            return bin_path +    SCons.Warnings.Warning('yacc tool requested, but yacc or bison 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,17 +145,22 @@ 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': +        # ignore the return, all we need is for the path to be added +        _ = get_yacc_path(env, append_paths=True) + +    env["YACC"] = env.Detect(BINS)      env['YACCFLAGS'] = SCons.Util.CLVar('')      env['YACCCOM']   = '$YACC $YACCFLAGS -o $TARGET $SOURCES'      env['YACCHFILESUFFIX'] = '.h' -      env['YACCHXXFILESUFFIX'] = '.hpp' -      env['YACCVCGFILESUFFIX'] = '.vcg'  def exists(env): -    return env.Detect(['bison', 'yacc']) +    if sys.platform == 'win32': +        return get_yacc_path(env) +    else: +        return env.Detect(BINS)  # Local Variables:  # tab-width:4  | 
