misc/libfreetype/src/tools/chktrcmp.py
author nemo
Sun, 03 Jun 2012 23:04:21 -0400
changeset 7174 80480d21e6ed
parent 5172 88f2e05288ba
permissions -rw-r--r--
Workaround for bug #144. This workaround had occurred to me a while ago, but wasn't sure if placing them unfairly was better than not placing them at all. Argument for not placing at all is people should probably abort the game when they notice it. Argument for placing unfairly is people can still abort, and if we really wanted them to abort, we should probably just have halted launch if all hogs failed to spawn. This way at least play can continue.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5172
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     1
#!/usr/bin/env python
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     2
#
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     3
# Check trace components in FreeType 2 source.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     4
# Author: suzuki toshiya, 2009
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     5
#
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     6
# This code is explicitly into the public domain.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     7
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     8
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
     9
import sys
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    10
import os
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    11
import re
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    12
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    13
SRC_FILE_LIST   = []
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    14
USED_COMPONENT  = {}
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    15
KNOWN_COMPONENT = {}
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    16
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    17
SRC_FILE_DIRS   = [ "src" ]
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    18
TRACE_DEF_FILES = [ "include/freetype/internal/fttrace.h" ]
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    19
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    20
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    21
# --------------------------------------------------------------
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    22
# Parse command line options
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    23
#
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    24
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    25
for i in range( 1, len( sys.argv ) ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    26
  if sys.argv[i].startswith( "--help" ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    27
    print "Usage: %s [option]" % sys.argv[0]
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    28
    print "Search used-but-defined and defined-but-not-used trace_XXX macros"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    29
    print ""
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    30
    print "  --help:"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    31
    print "        Show this help"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    32
    print ""
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    33
    print "  --src-dirs=dir1:dir2:..."
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    34
    print "        Specify the directories of C source files to be checked"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    35
    print "        Default is %s" % ":".join( SRC_FILE_DIRS )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    36
    print ""
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    37
    print "  --def-files=file1:file2:..."
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    38
    print "        Specify the header files including FT_TRACE_DEF()"
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    39
    print "        Default is %s" % ":".join( TRACE_DEF_FILES )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    40
    print ""
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    41
    exit(0)
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    42
  if sys.argv[i].startswith( "--src-dirs=" ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    43
    SRC_FILE_DIRS = sys.argv[i].replace( "--src-dirs=", "", 1 ).split( ":" )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    44
  elif sys.argv[i].startswith( "--def-files=" ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    45
    TRACE_DEF_FILES = sys.argv[i].replace( "--def-files=", "", 1 ).split( ":" )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    46
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    47
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    48
# --------------------------------------------------------------
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    49
# Scan C source and header files using trace macros.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    50
#
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    51
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    52
c_pathname_pat = re.compile( '^.*\.[ch]$', re.IGNORECASE )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    53
trace_use_pat  = re.compile( '^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+trace_' )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    54
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    55
for d in SRC_FILE_DIRS:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    56
  for ( p, dlst, flst ) in os.walk( d ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    57
    for f in flst:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    58
      if c_pathname_pat.match( f ) != None:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    59
        src_pathname = os.path.join( p, f )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    60
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    61
        line_num = 0
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    62
        for src_line in open( src_pathname, 'r' ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    63
          line_num = line_num + 1
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    64
          src_line = src_line.strip()
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    65
          if trace_use_pat.match( src_line ) != None:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    66
            component_name = trace_use_pat.sub( '', src_line )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    67
            if component_name in USED_COMPONENT:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    68
              USED_COMPONENT[component_name].append( "%s:%d" % ( src_pathname, line_num ) )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    69
            else:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    70
              USED_COMPONENT[component_name] = [ "%s:%d" % ( src_pathname, line_num ) ]
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    71
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    72
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    73
# --------------------------------------------------------------
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    74
# Scan header file(s) defining trace macros.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    75
#
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    76
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    77
trace_def_pat_opn = re.compile( '^.*FT_TRACE_DEF[ \t]*\([ \t]*' )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    78
trace_def_pat_cls = re.compile( '[ \t\)].*$' )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    79
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    80
for f in TRACE_DEF_FILES:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    81
  line_num = 0
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    82
  for hdr_line in open( f, 'r' ):
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    83
    line_num = line_num + 1
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    84
    hdr_line = hdr_line.strip()
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    85
    if trace_def_pat_opn.match( hdr_line ) != None:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    86
      component_name = trace_def_pat_opn.sub( '', hdr_line )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    87
      component_name = trace_def_pat_cls.sub( '', component_name )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    88
      if component_name in KNOWN_COMPONENT:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    89
        print "trace component %s is defined twice, see %s and fttrace.h:%d" % \
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    90
          ( component_name, KNOWN_COMPONENT[component_name], line_num )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    91
      else:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    92
        KNOWN_COMPONENT[component_name] = "%s:%d" % \
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    93
          ( os.path.basename( f ), line_num )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    94
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    95
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    96
# --------------------------------------------------------------
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    97
# Compare the used and defined trace macros.
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    98
#
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
    99
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   100
print "# Trace component used in the implementations but not defined in fttrace.h."
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   101
cmpnt = USED_COMPONENT.keys()
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   102
cmpnt.sort()
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   103
for c in cmpnt:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   104
  if c not in KNOWN_COMPONENT:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   105
    print "Trace component %s (used in %s) is not defined." % ( c, ", ".join( USED_COMPONENT[c] ) )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   106
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   107
print "# Trace component is defined but not used in the implementations."
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   108
cmpnt = KNOWN_COMPONENT.keys()
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   109
cmpnt.sort()
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   110
for c in cmpnt:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   111
  if c not in USED_COMPONENT:
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   112
    if c != "any":
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   113
      print "Trace component %s (defined in %s) is not used." % ( c, KNOWN_COMPONENT[c] )
88f2e05288ba aaand let's add freetype as well while we are at it
koda
parents:
diff changeset
   114