diff options
Diffstat (limited to 'engine/SCons/Scanner/Fortran.py')
| -rw-r--r-- | engine/SCons/Scanner/Fortran.py | 42 | 
1 files changed, 25 insertions, 17 deletions
diff --git a/engine/SCons/Scanner/Fortran.py b/engine/SCons/Scanner/Fortran.py index 79ce628..50cc16e 100644 --- a/engine/SCons/Scanner/Fortran.py +++ b/engine/SCons/Scanner/Fortran.py @@ -5,7 +5,7 @@ This module implements the dependency scanner for Fortran code.  """  # -# 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 @@ -26,7 +26,7 @@ This module implements the dependency scanner for Fortran code.  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -__revision__ = "src/engine/SCons/Scanner/Fortran.py 74b2c53bc42290e911b334a6b44f187da698a668 2017/11/14 13:16:53 bdbaddog" +__revision__ = "src/engine/SCons/Scanner/Fortran.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"  import re @@ -78,7 +78,7 @@ class F90Scanner(SCons.Scanner.Classic):      def scan(self, node, env, path=()):          # cache the includes list in node so we only scan it once: -        if node.includes != None: +        if node.includes is not None:              mods_and_includes = node.includes          else:              # retrieve all included filenames @@ -187,7 +187,7 @@ def FortranScan(path_variable="FORTRANPATH"):  #   (\w+)              : match the module name that is being USE'd  #  # -    use_regex = "(?i)(?:^|;)\s*USE(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)" +    use_regex = r"(?i)(?:^|;)\s*USE(?:\s+|(?:(?:\s*,\s*(?:NON_)?INTRINSIC)?\s*::))\s*(\w+)"  #   The INCLUDE statement regex matches the following: @@ -275,7 +275,7 @@ def FortranScan(path_variable="FORTRANPATH"):  #                        set of semicolon-separated INCLUDE statements  #                        (as allowed by the F2003 standard) -    include_regex = """(?i)(?:^|['">]\s*;)\s*INCLUDE\s+(?:\w+_)?[<"'](.+?)(?=["'>])""" +    include_regex = r"""(?i)(?:^|['">]\s*;)\s*INCLUDE\s+(?:\w+_)?[<"'](.+?)(?=["'>])"""  #   The MODULE statement regex finds module definitions by matching  #   the following: @@ -285,21 +285,29 @@ def FortranScan(path_variable="FORTRANPATH"):  #   but *not* the following:  #  #   MODULE PROCEDURE procedure_name +#   MODULE SUBROUTINE subroutine_name +#   MODULE FUNCTION function_name +#   MODULE PURE SUBROUTINE|FUNCTION subroutine_name|function_name +#   MODULE ELEMENTAL SUBROUTINE|FUNCTION subroutine_name|function_name  #  #   Here is a breakdown of the regex:  # -#   (?i)               : regex is case insensitive -#   ^\s*               : any amount of white space -#   MODULE             : match the string MODULE, case insensitive -#   \s+                : match one or more white space characters -#   (?!PROCEDURE)      : but *don't* match if the next word matches -#                        PROCEDURE (negative lookahead assertion), -#                        case insensitive -#   (\w+)              : match one or more alphanumeric characters -#                        that make up the defined module name and -#                        save it in a group - -    def_regex = """(?i)^\s*MODULE\s+(?!PROCEDURE)(\w+)""" +#   (?i)                               : regex is case insensitive +#   ^\s*                               : any amount of white space +#   MODULE                             : match the string MODULE, case +#                                        insensitive +#   \s+                                : match one or more white space +#                                        characters +#   (?!PROCEDURE|SUBROUTINE|FUNCTION|PURE|ELEMENTAL) +#                                      : but *don't* match if the next word +#                                        matches PROCEDURE, SUBROUTINE, +#                                        FUNCTION, PURE or ELEMENTAL (negative +#                                        lookahead assertion), case insensitive +#   (\w+)                              : match one or more alphanumeric +#                                        characters that make up the defined +#                                        module name and save it in a group + +    def_regex = r"""(?i)^\s*MODULE\s+(?!PROCEDURE|SUBROUTINE|FUNCTION|PURE|ELEMENTAL)(\w+)"""      scanner = F90Scanner("FortranScan",                           "$FORTRANSUFFIXES",  | 
