mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-02 08:41:34 +00:00
161 lines
5.2 KiB
Python
Executable File
161 lines
5.2 KiB
Python
Executable File
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
# This module produces a JSON file that provides basic build info and
|
|
# configuration metadata.
|
|
|
|
from __future__ import absolute_import
|
|
|
|
import os
|
|
import re
|
|
import json
|
|
import mozbuild.mozconfig as mozconfig
|
|
|
|
def build_dict(config, env=os.environ):
|
|
"""
|
|
Build a dict containing data about the build configuration from
|
|
the environment.
|
|
"""
|
|
substs = config.substs
|
|
|
|
# Check that all required variables are present first.
|
|
required = ["TARGET_CPU", "OS_TARGET", "MOZ_WIDGET_TOOLKIT"]
|
|
missing = [r for r in required if r not in substs]
|
|
if missing:
|
|
raise Exception("Missing required environment variables: %s" %
|
|
', '.join(missing))
|
|
|
|
d = {}
|
|
d['topsrcdir'] = config.topsrcdir
|
|
|
|
the_mozconfig = mozconfig.MozconfigLoader(config.topsrcdir).find_mozconfig(env)
|
|
if the_mozconfig:
|
|
d['mozconfig'] = the_mozconfig
|
|
|
|
# os
|
|
o = substs["OS_TARGET"]
|
|
known_os = {"Linux": "linux",
|
|
"WINNT": "win",
|
|
"Darwin": "mac",
|
|
"Android": "b2g" if substs["MOZ_WIDGET_TOOLKIT"] == "gonk" else "android"}
|
|
if o in known_os:
|
|
d["os"] = known_os[o]
|
|
else:
|
|
# Allow unknown values, just lowercase them.
|
|
d["os"] = o.lower()
|
|
|
|
# Widget toolkit, just pass the value directly through.
|
|
d["toolkit"] = substs["MOZ_WIDGET_TOOLKIT"]
|
|
|
|
# Application name
|
|
if 'MOZ_APP_NAME' in substs:
|
|
d["appname"] = substs["MOZ_APP_NAME"]
|
|
|
|
# Build app name
|
|
if 'MOZ_MULET' in substs and substs.get('MOZ_MULET') == "1":
|
|
d["buildapp"] = "mulet"
|
|
elif 'MOZ_BUILD_APP' in substs:
|
|
d["buildapp"] = substs["MOZ_BUILD_APP"]
|
|
|
|
# processor
|
|
p = substs["TARGET_CPU"]
|
|
# for universal mac builds, put in a special value
|
|
if d["os"] == "mac" and "UNIVERSAL_BINARY" in substs and substs["UNIVERSAL_BINARY"] == "1":
|
|
p = "universal-x86-x86_64"
|
|
else:
|
|
# do some slight massaging for some values
|
|
#TODO: retain specific values in case someone wants them?
|
|
if p.startswith("arm"):
|
|
p = "arm"
|
|
elif re.match("i[3-9]86", p):
|
|
p = "x86"
|
|
d["processor"] = p
|
|
# hardcoded list of 64-bit CPUs
|
|
if p in ["x86_64", "ppc64"]:
|
|
d["bits"] = 64
|
|
# hardcoded list of known 32-bit CPUs
|
|
elif p in ["x86", "arm", "ppc"]:
|
|
d["bits"] = 32
|
|
# other CPUs will wind up with unknown bits
|
|
|
|
d['debug'] = substs.get('MOZ_DEBUG') == '1'
|
|
d['release_build'] = substs.get('RELEASE_BUILD') == '1'
|
|
d['pgo'] = substs.get('MOZ_PGO') == '1'
|
|
d['crashreporter'] = bool(substs.get('MOZ_CRASHREPORTER'))
|
|
d['datareporting'] = bool(substs.get('MOZ_DATA_REPORTING'))
|
|
d['healthreport'] = substs.get('MOZ_SERVICES_HEALTHREPORT') == '1'
|
|
d['sync'] = substs.get('MOZ_SERVICES_SYNC') == '1'
|
|
d['asan'] = substs.get('MOZ_ASAN') == '1'
|
|
d['tsan'] = substs.get('MOZ_TSAN') == '1'
|
|
d['telemetry'] = substs.get('MOZ_TELEMETRY_REPORTING') == '1'
|
|
d['tests_enabled'] = substs.get('ENABLE_TESTS') == "1"
|
|
d['bin_suffix'] = substs.get('BIN_SUFFIX', '')
|
|
d['addon_signing'] = substs.get('MOZ_ADDON_SIGNING') == '1'
|
|
|
|
d['webm'] = bool(substs.get('MOZ_WEBM'))
|
|
d['wave'] = bool(substs.get('MOZ_WAVE'))
|
|
|
|
d['official'] = bool(substs.get('MOZILLA_OFFICIAL'))
|
|
|
|
def guess_platform():
|
|
if d['buildapp'] in ('browser', 'mulet'):
|
|
p = d['os']
|
|
if p == 'mac':
|
|
p = 'macosx64'
|
|
elif d['bits'] == 64:
|
|
p = '{}64'.format(p)
|
|
elif p in ('win',):
|
|
p = '{}32'.format(p)
|
|
|
|
if d['buildapp'] == 'mulet':
|
|
p = '{}-mulet'.format(p)
|
|
|
|
if d['asan']:
|
|
p = '{}-asan'.format(p)
|
|
|
|
return p
|
|
|
|
if d['buildapp'] == 'b2g':
|
|
if d['toolkit'] == 'gonk':
|
|
return 'emulator'
|
|
|
|
if d['bits'] == 64:
|
|
return 'linux64_gecko'
|
|
return 'linux32_gecko'
|
|
|
|
if d['buildapp'] == 'mobile/android':
|
|
if d['processor'] == 'x86':
|
|
return 'android-x86'
|
|
return 'android-arm'
|
|
|
|
def guess_buildtype():
|
|
if d['debug']:
|
|
return 'debug'
|
|
if d['pgo']:
|
|
return 'pgo'
|
|
return 'opt'
|
|
|
|
# if buildapp or bits are unknown, we don't have a configuration similar to
|
|
# any in automation and the guesses are useless.
|
|
if 'buildapp' in d and (d['os'] == 'mac' or 'bits' in d):
|
|
d['platform_guess'] = guess_platform()
|
|
d['buildtype_guess'] = guess_buildtype()
|
|
|
|
return d
|
|
|
|
|
|
def write_mozinfo(file, config, env=os.environ):
|
|
"""Write JSON data about the configuration specified in config and an
|
|
environment variable dict to |file|, which may be a filename or file-like
|
|
object.
|
|
See build_dict for information about what environment variables are used,
|
|
and what keys are produced.
|
|
"""
|
|
build_conf = build_dict(config, env)
|
|
if isinstance(file, basestring):
|
|
with open(file, "w") as f:
|
|
json.dump(build_conf, f)
|
|
else:
|
|
json.dump(build_conf, file)
|