moz.build
author Gregory Szorc <gps@mozilla.com>
Thu, 26 Feb 2015 10:21:52 -0800
changeset 260117 c3a0cb4b45b17efa64bd8419b08d23d59ffc2883
parent 254095 231a8c61b49f3fb528fff76b4c4bb18b14cae473
child 260119 4cc39c54099d3eb7a40cb114e22da2a0da9e419a
permissions -rw-r--r--
Bug 1132771 - Support and test for reading without a config object; r=glandium We want the ability to read data from any moz.build file without needing a full build configuration (running configure). This will enable tools to consume metadata by merely having a copy of the source code and nothing more. This commit creates the EmptyConfig object. It is a config object that - as its name implies - is empty. It will be used for reading moz.build files in "no config" mode. Many moz.build files make assumptions that variables in CONFIG are defined and that they are strings. We create the EmptyValue type that behaves like an empty unicode string. Since moz.build files also do some type checking, we carve an exemption for EmptyValue, just like we do for None. We add a test to verify that reading moz.build files in "no config" mode works. This required some minor changes to existing moz.build files to make them work in the new execution mode.

# -*- Mode: python; c-basic-offset: 4; 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/.

CONFIGURE_SUBST_FILES += [
    'config/autoconf.mk',
    'config/emptyvars.mk',
]

if CONFIG['ENABLE_CLANG_PLUGIN']:
    DIRS += ['build/clang-plugin']

DIRS += [
    'config',
    'python',
]

if not CONFIG['JS_STANDALONE']:
    CONFIGURE_SUBST_FILES += [
        'mozilla-config.h',
        'tools/update-packaging/Makefile',
    ]

    DIRS += [
        'build',
        'probes',
    ]

if not CONFIG['LIBXUL_SDK']:
    DIRS += [
        'mfbt',
        'config/external/zlib',
    ]

    if not CONFIG['JS_STANDALONE']:
        if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
            DIRS += ['other-licenses/android']

        if CONFIG['MOZ_MEMORY']:
            DIRS += ['memory']

        DIRS += [
            'mozglue',
            'memory/fallible',
            'memory/mozalloc',
            'memory/volatile',
        ]

if not CONFIG['JS_STANDALONE']:
    DIRS += ['xpcom/xpidl']

if CONFIG['COMPILE_ENVIRONMENT'] and not CONFIG['LIBXUL_SDK']:
    DIRS += ['config/external/nspr']

    if not CONFIG['JS_STANDALONE']:
        DIRS += [
            'config/external',
            'config/external/nss',
        ]

    if CONFIG['BUILD_CTYPES']:
        DIRS += ['config/external/ffi']
    if CONFIG['USE_ICU']:
        DIRS += ['config/external/icu']
    DIRS += ['js/src']

if not CONFIG['JS_STANDALONE'] and CONFIG['MOZ_BUILD_APP']:
    # Bring in the configuration for the configured application.
    include('/' + CONFIG['MOZ_BUILD_APP'] + '/app.mozbuild')

include('build/templates.mozbuild')