diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2019-07-14 08:35:24 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2019-07-14 08:35:24 +0200 | 
| commit | 697e33ed224b539a42ff68121f7497f5bbf941b2 (patch) | |
| tree | 44ae83ad6ad4a7f6762a6d1bfde3766a1993b5ec /src/engine/SCons/Tool/lex.py | |
| parent | baee03c569c91b745a1e025660b19a718db16e7d (diff) | |
New upstream version 3.0.5upstream/3.0.5
Diffstat (limited to 'src/engine/SCons/Tool/lex.py')
| -rw-r--r-- | src/engine/SCons/Tool/lex.py | 48 | 
1 files changed, 43 insertions, 5 deletions
diff --git a/src/engine/SCons/Tool/lex.py b/src/engine/SCons/Tool/lex.py index e185b93..affb52c 100644 --- a/src/engine/SCons/Tool/lex.py +++ b/src/engine/SCons/Tool/lex.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/lex.py rel_3.0.0:4395:8972f6a2f699 2017/09/18 12:59:24 bdbaddog" +__revision__ = "src/engine/SCons/Tool/lex.py 103260fce95bf5db1c35fb2371983087d85dd611 2019-07-13 18:25:30 bdbaddog"  import os.path +import sys  import SCons.Action  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  LexAction = SCons.Action.Action("$LEXCOM", "$LEXCOMSTR") @@ -64,6 +68,29 @@ def lexEmitter(target, source, env):                  target.append(fileName)      return (target, source) +def get_lex_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 = ['flex', 'lex', 'win_flex'] + +    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 lex to an Environment."""      c_file, cxx_file = SCons.Tool.createCFileBuilders(env) @@ -83,12 +110,23 @@ def generate(env):      cxx_file.add_action(".ll", LexAction)      cxx_file.add_emitter(".ll", lexEmitter) -    env["LEX"]      = env.Detect("flex") or "lex"      env["LEXFLAGS"] = SCons.Util.CLVar("") -    env["LEXCOM"] = "$LEX $LEXFLAGS -t $SOURCES > $TARGET" + +    if sys.platform == 'win32': +        get_lex_path(env, append_paths=True) +        env["LEX"] = env.Detect(['flex', 'lex', 'win_flex']) +        if not env.get("LEXUNISTD"): +            env["LEXUNISTD"] = SCons.Util.CLVar("") +        env["LEXCOM"] = "$LEX $LEXUNISTD $LEXFLAGS -t $SOURCES > $TARGET" +    else: +        env["LEX"] = env.Detect(["flex", "lex"]) +        env["LEXCOM"] = "$LEX $LEXFLAGS -t $SOURCES > $TARGET"  def exists(env): -    return env.Detect(["flex", "lex"]) +    if sys.platform == 'win32': +        return get_lex_path(env) +    else: +        return env.Detect(["flex", "lex"])  # Local Variables:  # tab-width:4  | 
