We have multiple code generation scripts in utils/, mixed with other miscellaneous utilities, as well as a larger code base based on mojom in utils/ipc/. To make code sharing easier between the generator scripts, without creating a mess in the utils/ directory, move all the code generation code to utils/codegen/. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
# Copyright 2015 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import errno
|
|
import os.path
|
|
import sys
|
|
|
|
|
|
def _GetDirAbove(dirname):
|
|
"""Returns the directory "above" this file containing |dirname| (which must
|
|
also be "above" this file)."""
|
|
path = os.path.abspath(__file__)
|
|
while True:
|
|
path, tail = os.path.split(path)
|
|
if not tail:
|
|
return None
|
|
if tail == dirname:
|
|
return path
|
|
|
|
|
|
def EnsureDirectoryExists(path, always_try_to_create=False):
|
|
"""A wrapper for os.makedirs that does not error if the directory already
|
|
exists. A different process could be racing to create this directory."""
|
|
|
|
if not os.path.exists(path) or always_try_to_create:
|
|
try:
|
|
os.makedirs(path)
|
|
except OSError as e:
|
|
# There may have been a race to create this directory.
|
|
if e.errno != errno.EEXIST:
|
|
raise
|
|
|
|
|
|
def AddLocalRepoThirdPartyDirToModulePath():
|
|
"""Helper function to find the top-level directory of this script's repository
|
|
assuming the script falls somewhere within a 'mojo' directory, and insert the
|
|
top-level 'third_party' directory early in the module search path. Used to
|
|
ensure that third-party dependencies provided within the repository itself
|
|
(e.g. Chromium sources include snapshots of jinja2 and ply) are preferred over
|
|
locally installed system library packages."""
|
|
toplevel_dir = _GetDirAbove('mojo')
|
|
if toplevel_dir:
|
|
sys.path.insert(1, os.path.join(toplevel_dir, 'third_party'))
|