xref: /aosp_15_r20/external/libchrome/build/gyp_helper.py (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker# Copyright (c) 2012 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker# found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker
5*635a8641SAndroid Build Coastguard Worker# This file helps gyp_chromium and landmines correctly set up the gyp
6*635a8641SAndroid Build Coastguard Worker# environment from chromium.gyp_env on disk
7*635a8641SAndroid Build Coastguard Worker
8*635a8641SAndroid Build Coastguard Workerimport os
9*635a8641SAndroid Build Coastguard Worker
10*635a8641SAndroid Build Coastguard WorkerSCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
11*635a8641SAndroid Build Coastguard WorkerCHROME_SRC = os.path.dirname(SCRIPT_DIR)
12*635a8641SAndroid Build Coastguard Worker
13*635a8641SAndroid Build Coastguard Worker
14*635a8641SAndroid Build Coastguard Workerdef apply_gyp_environment_from_file(file_path):
15*635a8641SAndroid Build Coastguard Worker  """Reads in a *.gyp_env file and applies the valid keys to os.environ."""
16*635a8641SAndroid Build Coastguard Worker  if not os.path.exists(file_path):
17*635a8641SAndroid Build Coastguard Worker    return
18*635a8641SAndroid Build Coastguard Worker  with open(file_path, 'rU') as f:
19*635a8641SAndroid Build Coastguard Worker    file_contents = f.read()
20*635a8641SAndroid Build Coastguard Worker  try:
21*635a8641SAndroid Build Coastguard Worker    file_data = eval(file_contents, {'__builtins__': None}, None)
22*635a8641SAndroid Build Coastguard Worker  except SyntaxError as e:
23*635a8641SAndroid Build Coastguard Worker    e.filename = os.path.abspath(file_path)
24*635a8641SAndroid Build Coastguard Worker    raise
25*635a8641SAndroid Build Coastguard Worker  supported_vars = (
26*635a8641SAndroid Build Coastguard Worker      'CC',
27*635a8641SAndroid Build Coastguard Worker      'CC_wrapper',
28*635a8641SAndroid Build Coastguard Worker      'CC.host_wrapper',
29*635a8641SAndroid Build Coastguard Worker      'CHROMIUM_GYP_FILE',
30*635a8641SAndroid Build Coastguard Worker      'CHROMIUM_GYP_SYNTAX_CHECK',
31*635a8641SAndroid Build Coastguard Worker      'CXX',
32*635a8641SAndroid Build Coastguard Worker      'CXX_wrapper',
33*635a8641SAndroid Build Coastguard Worker      'CXX.host_wrapper',
34*635a8641SAndroid Build Coastguard Worker      'GYP_DEFINES',
35*635a8641SAndroid Build Coastguard Worker      'GYP_GENERATOR_FLAGS',
36*635a8641SAndroid Build Coastguard Worker      'GYP_CROSSCOMPILE',
37*635a8641SAndroid Build Coastguard Worker      'GYP_GENERATOR_OUTPUT',
38*635a8641SAndroid Build Coastguard Worker      'GYP_GENERATORS',
39*635a8641SAndroid Build Coastguard Worker      'GYP_INCLUDE_FIRST',
40*635a8641SAndroid Build Coastguard Worker      'GYP_INCLUDE_LAST',
41*635a8641SAndroid Build Coastguard Worker      'GYP_MSVS_VERSION',
42*635a8641SAndroid Build Coastguard Worker  )
43*635a8641SAndroid Build Coastguard Worker  for var in supported_vars:
44*635a8641SAndroid Build Coastguard Worker    file_val = file_data.get(var)
45*635a8641SAndroid Build Coastguard Worker    if file_val:
46*635a8641SAndroid Build Coastguard Worker      if var in os.environ:
47*635a8641SAndroid Build Coastguard Worker        behavior = 'replaces'
48*635a8641SAndroid Build Coastguard Worker        if var == 'GYP_DEFINES':
49*635a8641SAndroid Build Coastguard Worker          result = file_val + ' ' + os.environ[var]
50*635a8641SAndroid Build Coastguard Worker          behavior = 'merges with, and individual components override,'
51*635a8641SAndroid Build Coastguard Worker        else:
52*635a8641SAndroid Build Coastguard Worker          result = os.environ[var]
53*635a8641SAndroid Build Coastguard Worker        print('INFO: Environment value for "%s" %s value in %s' % (
54*635a8641SAndroid Build Coastguard Worker            var, behavior, os.path.abspath(file_path)
55*635a8641SAndroid Build Coastguard Worker        ))
56*635a8641SAndroid Build Coastguard Worker        string_padding = max(len(var), len(file_path), len('result'))
57*635a8641SAndroid Build Coastguard Worker        print('      %s: %s' % (var.rjust(string_padding), os.environ[var]))
58*635a8641SAndroid Build Coastguard Worker        print('      %s: %s' % (file_path.rjust(string_padding), file_val))
59*635a8641SAndroid Build Coastguard Worker        os.environ[var] = result
60*635a8641SAndroid Build Coastguard Worker      else:
61*635a8641SAndroid Build Coastguard Worker        os.environ[var] = file_val
62*635a8641SAndroid Build Coastguard Worker
63*635a8641SAndroid Build Coastguard Worker
64*635a8641SAndroid Build Coastguard Workerdef apply_chromium_gyp_env():
65*635a8641SAndroid Build Coastguard Worker  if 'SKIP_CHROMIUM_GYP_ENV' not in os.environ:
66*635a8641SAndroid Build Coastguard Worker    # Update the environment based on chromium.gyp_env
67*635a8641SAndroid Build Coastguard Worker    path = os.path.join(os.path.dirname(CHROME_SRC), 'chromium.gyp_env')
68*635a8641SAndroid Build Coastguard Worker    apply_gyp_environment_from_file(path)
69