#!/usr/bin/python2 # # Copyright 2019 Google Inc. # # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os roots = [ 'bench', 'dm', 'docs', 'example', 'experimental', 'fuzz', 'gm', 'include', 'modules', 'platform_tools/android/apps', 'samplecode', 'src', 'tests', 'third_party/etc1', 'third_party/gif', 'tools' ] # Map short name -> absolute path for all Skia headers. headers = {} for root in roots: for path, _, files in os.walk(root): for file_name in files: if file_name.endswith('.h'): if file_name in headers: print path, file_name, headers[file_name] assert file_name not in headers headers[file_name] = os.path.abspath(os.path.join(path, file_name)) # Rewrite any #includes relative to Skia's top-level directory. for root in roots: for path, _, files in os.walk(root): if 'generated' in path: continue for file_name in files: if (file_name.endswith('.h') or file_name.endswith('.c') or file_name.endswith('.m') or file_name.endswith('.mm') or file_name.endswith('.inc') or file_name.endswith('.fp') or file_name.endswith('.cc') or file_name.endswith('.cpp')): # Read the whole file into memory. file_path = os.path.join(path, file_name) lines = open(file_path).readlines() # Write it back out again line by line with substitutions for #includes. with open(file_path, 'w') as output: includes = [] for line in lines: parts = line.split('"') if (len(parts) == 3 and '#' in parts[0] and 'include' in parts[0] and os.path.basename(parts[1]) in headers): header = headers[os.path.basename(parts[1])] includes.append(parts[0] + '"%s"' % os.path.relpath(header, '.') + parts[2]) else: for inc in sorted(includes): print >>output, inc.strip('\n') includes = [] print >>output, line.strip('\n')