Blob Blame History Raw
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.

with Files('**'):
    BUG_COMPONENT = ('Core', 'Build Config')

# This cannot be named "build" because of bug 922191.
SPHINX_TREES['buildsystem'] = 'docs'

with Files('docs/**'):
    SCHEDULES.exclusive = ['docs']

if CONFIG['OS_ARCH'] == 'WINNT':
    DIRS += ['win32']
    if CONFIG['WIN64_CARGO_LINKER']:
        CONFIGURE_SUBST_FILES += ['win64/cargo-linker.bat']
else:
    DIRS += ['unix']

CRAMTEST_MANIFESTS += [
    'tests/cram/cram.ini',
]

if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
    DIRS += ['annotationProcessors']

DEFINES['ACCEPTED_MAR_CHANNEL_IDS'] = CONFIG['ACCEPTED_MAR_CHANNEL_IDS']

if CONFIG['MOZ_BUILD_APP'] == 'browser':
    PYTHON_UNITTEST_MANIFESTS += [
        'compare-mozconfig/python.ini',
    ]

if CONFIG['ENABLE_TESTS'] or CONFIG['MOZ_DMD']:
    FINAL_TARGET_FILES += ['/tools/rb/fix_stack_using_bpsyms.py']
    if CONFIG['OS_ARCH'] == 'Darwin':
        FINAL_TARGET_FILES += ['/tools/rb/fix_macosx_stack.py']
    if CONFIG['OS_ARCH'] == 'Linux':
        FINAL_TARGET_FILES += ['/tools/rb/fix_linux_stack.py']

if CONFIG['MOZ_DMD']:
    FINAL_TARGET_FILES += ['/memory/replace/dmd/dmd.py']

# Put a useful .gdbinit in the bin directory, to be picked up automatically
# by GDB when we debug executables there.
FINAL_TARGET_FILES += ['/.gdbinit']
FINAL_TARGET_PP_FILES += ['.gdbinit_python.in']
OBJDIR_FILES += ['!/dist/bin/.gdbinit_python']

# Install the clang-cl runtime library for ASAN next to the binaries we produce.
if CONFIG['MOZ_ASAN'] and CONFIG['CC_TYPE'] == 'clang-cl':
    FINAL_TARGET_FILES += ['%' + CONFIG['MOZ_CLANG_RT_ASAN_LIB_PATH']]

if CONFIG['LLVM_SYMBOLIZER']:
    FINAL_TARGET_FILES += ['/' + CONFIG['LLVM_SYMBOLIZER']]

if CONFIG['MOZ_APP_BASENAME']:
    appini_defines = {
        'TOPOBJDIR': TOPOBJDIR,
    }

    for var in ('GRE_MILESTONE', 'MOZ_APP_VERSION', 'MOZ_APP_BASENAME',
                'MOZ_APP_VENDOR', 'MOZ_APP_ID', 'MAR_CHANNEL_ID',
                'MOZ_APP_REMOTINGNAME'):
        appini_defines[var] = CONFIG[var]

    if CONFIG['MOZ_APP_DISPLAYNAME'] != CONFIG['MOZ_APP_BASENAME']:
        appini_defines['MOZ_APP_DISPLAYNAME'] = CONFIG['MOZ_APP_DISPLAYNAME']

    if CONFIG['MOZ_BUILD_APP'] == 'browser':
        appini_defines['MOZ_BUILD_APP_IS_BROWSER'] = True

    if CONFIG['MOZ_APP_PROFILE']:
        appini_defines['MOZ_APP_PROFILE'] = CONFIG['MOZ_APP_PROFILE']

    for var in ('MOZ_CRASHREPORTER', 'MOZ_PROFILE_MIGRATOR'):
        if CONFIG[var]:
            appini_defines[var] = True

    GENERATED_FILES += ['application.ini']

    appini = GENERATED_FILES['application.ini']
    appini.script = '../python/mozbuild/mozbuild/action/preprocessor.py:generate'
    appini.inputs = ['application.ini.in']
    appini.flags = ['-D%s=%s' % (k, '1' if v is True else v)
                    for k, v in appini_defines.iteritems()]
    FINAL_TARGET_FILES += ['!application.ini']
    if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android' and CONFIG['MOZ_UPDATER']:
        FINAL_TARGET_PP_FILES += ['update-settings.ini']

    GENERATED_FILES += ['application.ini.h']
    appini = GENERATED_FILES['application.ini.h']
    appini.script = 'appini_header.py'
    appini.inputs = ['!application.ini']

# NOTE: Keep .gdbinit in the topsrcdir for people who run gdb from the topsrcdir.
OBJDIR_FILES += ['/.gdbinit']

# Put a .lldbinit in the bin directory and the objdir, to be picked up
# automatically by LLDB when we debug executables using either of those two
# directories as the current working directory.  The .lldbinit file will
# load $(topsrcdir)/.lldbinit, which is where the actual debugging commands are.
DEFINES['topsrcdir'] = TOPSRCDIR
FINAL_TARGET_PP_FILES += ['.lldbinit.in']
OBJDIR_FILES += ['!/dist/bin/.lldbinit']

# Put the .ycm_extra_conf.py file at the root of the objdir. It is used by
# the vim plugin YouCompleteMe.
OBJDIR_FILES += ['/.ycm_extra_conf.py']

if CONFIG['MOZ_VALGRIND']:
    OBJDIR_FILES._valgrind += [
        'valgrind/cross-architecture.sup',
        'valgrind/i386-pc-linux-gnu.sup',
        'valgrind/x86_64-pc-linux-gnu.sup',
    ]

if CONFIG['MOZ_ARTIFACT_BUILDS']:
    # Ensure a pre-built interfaces.xpt installed to the objdir by the artifact
    # code is included by the top-level chrome.manifest.
    EXTRA_COMPONENTS += [
        'prebuilt-interfaces.manifest',
    ]