2016-02-08 21:36:07 -08:00
|
|
|
# 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/.
|
|
|
|
|
|
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
|
|
|
|
import os
|
2016-02-09 20:38:31 -08:00
|
|
|
import subprocess
|
2016-02-08 21:36:07 -08:00
|
|
|
import sys
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
def buildid_header(output):
|
|
|
|
buildid = os.environ.get('MOZ_BUILD_DATE')
|
|
|
|
if buildid and len(buildid) != 14:
|
|
|
|
print('Ignoring invalid MOZ_BUILD_DATE: %s' % buildid, file=sys.stderr)
|
|
|
|
buildid = None
|
|
|
|
if not buildid:
|
|
|
|
buildid = datetime.now().strftime('%Y%m%d%H%M%S')
|
|
|
|
output.write("#define MOZ_BUILDID %s\n" % buildid)
|
|
|
|
|
|
|
|
|
2016-02-09 20:38:31 -08:00
|
|
|
def get_program_output(*command):
|
|
|
|
try:
|
|
|
|
with open(os.devnull) as stderr:
|
|
|
|
return subprocess.check_output(command, stderr=stderr)
|
|
|
|
except:
|
|
|
|
return ''
|
|
|
|
|
|
|
|
|
|
|
|
def get_hg_info(workdir):
|
|
|
|
repo = get_program_output('hg', '-R', workdir, 'path', 'default')
|
|
|
|
if repo:
|
|
|
|
repo = repo.strip()
|
|
|
|
if repo.startswith('ssh://'):
|
|
|
|
repo = 'https://' + repo[6:]
|
|
|
|
repo = repo.rstrip('/')
|
|
|
|
|
|
|
|
changeset = get_program_output(
|
|
|
|
'hg', '-R', workdir, 'parent', '--template={node}')
|
|
|
|
|
|
|
|
return repo, changeset
|
|
|
|
|
|
|
|
|
|
|
|
def source_repo_header(output):
|
|
|
|
# We allow the source repo and changeset to be specified via the
|
|
|
|
# environment (see configure)
|
|
|
|
import buildconfig
|
|
|
|
repo = buildconfig.substs.get('MOZ_SOURCE_REPO')
|
|
|
|
changeset = buildconfig.substs.get('MOZ_SOURCE_CHANGESET')
|
|
|
|
source = ''
|
|
|
|
|
|
|
|
if bool(repo) != bool(changeset):
|
|
|
|
raise Exception('MOZ_SOURCE_REPO and MOZ_SOURCE_CHANGESET both must '
|
|
|
|
'be set (or not set).')
|
|
|
|
|
|
|
|
if not repo:
|
|
|
|
if os.path.exists(os.path.join(buildconfig.topsrcdir, '.hg')):
|
|
|
|
repo, changeset = get_hg_info(buildconfig.topsrcdir)
|
|
|
|
|
|
|
|
if changeset:
|
|
|
|
output.write('#define MOZ_SOURCE_STAMP %s\n' % changeset)
|
|
|
|
|
|
|
|
if repo and buildconfig.substs.get('MOZ_INCLUDE_SOURCE_INFO'):
|
|
|
|
source = '%s/rev/%s' % (repo, changeset)
|
|
|
|
output.write('#define MOZ_SOURCE_REPO %s\n' % repo)
|
|
|
|
output.write('#define MOZ_SOURCE_URL %s\n' % source)
|
|
|
|
|
|
|
|
|
2016-02-08 21:36:07 -08:00
|
|
|
def main(args):
|
|
|
|
if (len(args)):
|
|
|
|
func = globals().get(args[0])
|
|
|
|
if func:
|
|
|
|
return func(sys.stdout, *args[1:])
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main(sys.argv[1:]))
|