Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1164)

Unified Diff: src/shared/ppapi/update-scons.py

Issue 6715019: Switching ppapi on nacl side to import chrome side .gyp[i] directly. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/shared/ppapi/update-scons.py
===================================================================
--- src/shared/ppapi/update-scons.py (revision 4588)
+++ src/shared/ppapi/update-scons.py (working copy)
@@ -1,339 +0,0 @@
-#! /usr/bin/python
-# Copyright 2010 The Native Client Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can
-# be found in the LICENSE file.
-
-"""Script to update .scons rules from the ppapi.gyp file.
-
-This script reads the .scons files in this directory. It replaces all of the
-lines between the starting marker and the ending marker with the corresponding
-list of files from the given gyp file.
-
-The starting marker format is:
- # From GYP_FILE_NAME:TARGET:REGEXP
-The ending marker format is:
- # End GYP_FILE_NAME
-
-For example, if this exists in the .scons file:
- # From ppapi.gyp:ppapi_c:.*\.h
- ...
- # End ppapi.gyp
-
-then this script will remove all of the lines between the starting marker and
-the ending marker. It will then find the 'ppapi_c' target in the ppapi.gyp
-file. It will find all 'sources' for that target that match the regular
-expression '.*\.h' and will insert each of those source files in between the
-two markers.
-
-This script performs a similar action for the ppapi include tests. The files
-../../../tests/ppapi/cpp_header_test.cc and
-../../../tests/ppapi/cpp_dev_header_test.cc have their include statements
-replaced based on an include marker with format:
- // From ppapi.gyp:TARGET:REGEXP
-"""
-
-from optparse import OptionParser
-import os
-import re
-import sys
-
-# Constants.
-PROG = os.path.basename(sys.argv[0])
-NATIVE_CLIENT_SRC_SHARED_PPAPI = os.path.abspath(os.path.dirname(sys.argv[0]))
-NATIVE_CLIENT_SRC_SHARED = os.path.dirname(NATIVE_CLIENT_SRC_SHARED_PPAPI)
-NATIVE_CLIENT_SRC = os.path.dirname(NATIVE_CLIENT_SRC_SHARED)
-NATIVE_CLIENT = os.path.dirname(NATIVE_CLIENT_SRC)
-CLIENTDIR = os.path.dirname(NATIVE_CLIENT)
-
-# Known files names.
-PPAPI_GYP_DIR = os.path.join(CLIENTDIR, 'ppapi')
-BUILD_SCONS = os.path.join(NATIVE_CLIENT_SRC_SHARED_PPAPI, 'build.scons')
-NACL_SCONS = os.path.join(NATIVE_CLIENT_SRC_SHARED_PPAPI, 'nacl.scons')
-PPAPI_GYP = os.path.join(NATIVE_CLIENT_SRC_SHARED_PPAPI, 'ppapi.gyp')
-CPP_HEADER_TEST = os.path.join(
- NATIVE_CLIENT, 'tests', 'ppapi', 'cpp_header_test.cc')
-CPP_DEV_HEADER_TEST = os.path.join(
- NATIVE_CLIENT, 'tests', 'ppapi', 'cpp_dev_header_test.cc')
-
-# Regular expressions for the .scons files.
-START_PATTERN = re.compile(
- '^([ \t]*)#[ \t]*From ([^:]*):([^:]*):(.*) *\n',
- re.IGNORECASE)
-END_PATTERN = re.compile('^[ \t]*#[ \t]*End ([^:]*) *\n', re.IGNORECASE)
-
-# Regular expressions for the .cc files.
-INCLUDE_PATTERN = re.compile(
- '^[ \t]*//[ \t]*From ([^:]*):([^:]*):(.*) *\n',
- re.IGNORECASE)
-
-# Regular expressions for the ppapi.gyp file.
-TARGET_PATTERN = re.compile(
- '^[ \t]*\'target_name\'[ \t]*:[ \t]*\'([^\']*)\'[ \t]*,')
-SOURCES_PATTERN = re.compile('^[ \t]*\'sources\'[ \t]*:[ \t]*[[]')
-END_SOURCES_PATTERN = re.compile('^[ \t]*[]]')
-
-
-def ParseCommandLine():
- """Parses options from the command line.
-
- Parses options from the command line and returns the options and the
- arguments to the caller.
-
- Returns:
- options: the options settings from the command line.
- args: the arguments (things that were not options).
- """
- usage = '%prog [options]'
- description = ('Update the .scons files in the "%s" directory with the'
- ' current definitions from ppapi.gyp. Also update the #include'
- ' test files in the "%s/../../../tests/ppapi" directory'
- % (NATIVE_CLIENT_SRC_SHARED_PPAPI,
- NATIVE_CLIENT_SRC_SHARED_PPAPI))
- parser = OptionParser(usage=usage, description=description)
- (options, args) = parser.parse_args()
- return (options, args)
-
-
-def CheckFileIsReadable(filename):
- """Check the read accessibility of filename.
-
- Args:
- filename: the file to check.
-
- Returns:
- Exits to the system if the file is not readable.
- """
- if not os.access(filename, os.F_OK):
- print >> sys.stderr, '%s does not exist.' % (filename)
- sys.exit(1)
- if not os.access(filename, os.R_OK):
- print >> sys.stderr, 'Cannot read from %s' % (filename)
- sys.exit(1)
-
-
-def CheckFileIsWritable(filename):
- """Check the write accessibility of filename.
-
- Args:
- filename: the file to check.
-
- Returns:
- Exits to the system if the file is not writable.
- """
- if os.access(filename, os.F_OK):
- # The file already exists. Check if it is writable.
- if not os.access(filename, os.W_OK):
- print >> sys.stderr, 'Cannot write to %s' % (filename)
- sys.exit(1)
- else:
- # The file does not yet exist. Check the directory.
- dirname = os.path.dirname(filename)
- if not dirname:
- dirname = '.'
- if not os.access(dirname, os.W_OK):
- print >> sys.stderr, 'Cannot write to directory %s' % (dirname)
- sys.exit(1)
-
-
-def BuildTmpFilename(filename):
- """Returns the name of a temporary file for filename.
-
- Args:
- filename: the name of a file.
-
- Returns:
- The name of a temporary file.
- """
- return filename + '.tmp'
-
-
-def RenameTmpToFile(filename):
- """Renames filename.tmp to filename.
-
- Args:
- filename: the final name of the file.
- """
- tmp_filename = BuildTmpFilename(filename)
- print '%s: Renaming %s back to %s' % (PROG, tmp_filename, filename)
- os.remove(filename)
- os.rename(tmp_filename, filename)
-
-
-def TransferLinesFromPpapiGyp(marker, write_fp, is_cc_file):
- """Copies matching file lines from ppapi.gyp.
-
- Opens and reads ppapi.gyp to find the 'target' section that matches the
- target listed on the marker line. Copies all of the files that match the
- marker's regular expression into the output file.
-
- Note that this function reads and parses the contents of ppapi.gyp each
- time it is called. This entire script should take less than 1 second to
- run, so the increased complexity involved in pre-caching the contents of
- the file and passing it around is unnecessary.
-
- Args:
- marker: The marker line from the file; matches START_PATTERN.
- write_fp: The file to write to.
- is_cc_file: False if this is a .scons file, True if .cc.
- """
- # Pluck off the interesting parts of the marker.
- if not is_cc_file:
- match = re.match(START_PATTERN, marker)
- scons_indentation = match.group(1)
- gyp_file_name = match.group(2)
- target = match.group(3)
- file_regexp = match.group(4)
- else:
- match = re.match(INCLUDE_PATTERN, marker)
- gyp_file_name = match.group(1)
- target = match.group(2)
- file_regexp = match.group(3)
-
- # Convert the input file_regexp into a pattern that will match the syntax
- # of a source file in the ppapi.gyp file. The .gyp file looks like:
- # 'path/some-file.cc',
- # Put everything except the leading spaces into match.group(1).
- # So if the marker line in the .scons file contains the regexp:
- # .*\.cc
- # the file_pattern regular expression (for .scons) will look like:
- # ^ *('.*\.cc',)
- # and the file_pattern regular expression (for .cc) will look like:
- # ^ *'(.*\.cc)',
- if not is_cc_file:
- file_pattern = re.compile('^[ \t]*(\'' + file_regexp + '\',)')
- else:
- file_pattern = re.compile('^[ \t]*\'(' + file_regexp + ')\',')
-
- gyp_file = open(os.path.join(PPAPI_GYP_DIR, gyp_file_name), 'r')
- found_target = False
- found_sources = False
- for line in gyp_file:
- if not found_target:
- # Still looking for:
- # 'target_name': 'TARGET'
- match = re.match(TARGET_PATTERN, line)
- if match:
- if match.group(1) == target:
- found_target = True
- elif not found_sources:
- # Looking for the start of the sources section for this target:
- # 'sources': [
- if re.match(SOURCES_PATTERN, line):
- found_sources = True
- elif re.match(END_SOURCES_PATTERN, line):
- # Found the ']' at the end of the 'sources': section.
- break
- else:
- # This is a line from the 'sources' section. Does it match the filespec?
- match = re.match(file_pattern, line)
- if match:
- # Change the line's indentation to match the .scons file then write
- # the line to the .scons file.
- if not is_cc_file:
- out_line = scons_indentation + match.group(1) + '\n'
- else:
- out_line = '#include "ppapi/' + match.group(1) + '"\n'
- write_fp.write(out_line)
-
- gyp_file.close()
-
-
-def UpdateSconsToTmp(filename):
- """Updates the input .scons file, writing to filename.tmp.
-
- Updates all filename lines between the start and end header markers with
- the current values from gyp_file. Writes all output to a temporary file.
-
- Args:
- filename: the file to update.
- """
- tmp_filename = BuildTmpFilename(filename)
- print '%s: Updating %s to %s' % (PROG, filename, tmp_filename)
-
- read_fp = open(filename, 'r')
- write_fp = open(tmp_filename, 'w')
-
- skipping_lines = False
- for line in read_fp:
- if not skipping_lines:
- # Currently copying all lines until a START_PATTERN line is found.
- write_fp.write(line)
- if re.match(START_PATTERN, line):
- TransferLinesFromPpapiGyp(line, write_fp, False)
- skipping_lines = True
- else:
- # All of the most recent source files have been copied from the
- # ppapi.gyp file into the output file. We are now skipping all lines
- # until an END_PATTERN line is found.
- if re.match(END_PATTERN, line):
- write_fp.write(line)
- skipping_lines = False
-
- read_fp.close()
- write_fp.close()
-
-
-def UpdateCcToTmp(filename):
- """Updates the input .cc file, writing to filename.tmp.
-
- Updates all #include lines after the inclusion marker with the
- current values from gyp_file. Writes all output to a temporary file.
-
- Args:
- filename: the file to update.
- """
- tmp_filename = BuildTmpFilename(filename)
- print '%s: Updating %s to %s' % (PROG, filename, tmp_filename)
-
- read_fp = open(filename, 'r')
- write_fp = open(tmp_filename, 'w')
-
- for line in read_fp:
- # Currently copying all lines until a INCLUDE_PATTERN line is found.
- write_fp.write(line)
- if re.match(INCLUDE_PATTERN, line):
- TransferLinesFromPpapiGyp(line, write_fp, True)
- break
-
- read_fp.close()
- write_fp.close()
-
-
-def main():
- ParseCommandLine()
-
- # Make sure all of the files are accessible.
- CheckFileIsReadable(BUILD_SCONS)
- CheckFileIsReadable(NACL_SCONS)
- CheckFileIsReadable(PPAPI_GYP)
- CheckFileIsReadable(CPP_HEADER_TEST)
- CheckFileIsReadable(CPP_DEV_HEADER_TEST)
- CheckFileIsWritable(BuildTmpFilename(BUILD_SCONS))
- CheckFileIsWritable(BuildTmpFilename(NACL_SCONS))
- CheckFileIsWritable(BuildTmpFilename(PPAPI_GYP))
- CheckFileIsWritable(BuildTmpFilename(CPP_HEADER_TEST))
- CheckFileIsWritable(BuildTmpFilename(CPP_DEV_HEADER_TEST))
-
- # Update each of the .scons files into temporary files.
- UpdateSconsToTmp(BUILD_SCONS)
- UpdateSconsToTmp(NACL_SCONS)
-
- # Update the .gyp file into temporary file.
- UpdateSconsToTmp(PPAPI_GYP)
-
- # Update each of the .cc files into temporary files.
- UpdateCcToTmp(CPP_HEADER_TEST)
- UpdateCcToTmp(CPP_DEV_HEADER_TEST)
-
- # Copy the temporary files back to the real files.
- RenameTmpToFile(BUILD_SCONS)
- RenameTmpToFile(NACL_SCONS)
- RenameTmpToFile(PPAPI_GYP)
- RenameTmpToFile(CPP_HEADER_TEST)
- RenameTmpToFile(CPP_DEV_HEADER_TEST)
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())

Powered by Google App Engine
This is Rietveld 408576698