build/gecko_templates.mozbuild
author Tom Ritter <tom@mozilla.com>
Sat, 19 May 2018 01:26:33 -0500
changeset 475965 bf7ac536eb942fe12ef60f082f20ce30f0ec75a3
parent 450143 8c677030915b8c1ea1451eead9b991d0f1e1f36f
child 487871 acde419e016e70d8d3d80d93acfc6034beb09278
permissions -rw-r--r--
Bug 1457162 Remove -TC from CFLAGS r=ted -TC specifies 'treat all inputs at C files' which breaks things when you specify a @list file of inputs. During configure, -TP is required for C++ configure checks (although we could probably make it smart and not need it at all), but -TC does not seem to be required. MozReview-Commit-ID: DNA8vUMdIXb

# -*- 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/.

@template
def GeckoBinary(linkage='dependent', mozglue=None):
    '''Template for Gecko-related binaries.

    This template is meant to be used in other templates.

    `linkage` indicates the wanted xpcom linkage type. Valid values are
    'dependent', 'standalone' or None. 'dependent' is the default. It is
    used for e.g. XPCOM components and executables with direct dependencies
    on libxul. Most executables should use the 'standalone' linkage, which
    uses the standalone XPCOM glue to load libxul. None means no XPCOM glue
    or libxul linkage at all.

    `mozglue` indicates whether to link against the mozglue library, and if
    so, what linkage to apply. Valid values are None (mozglue not linked),
    'program' (mozglue linked to an executable program), or 'library' (mozglue
    linked to a shared library).
    '''
    if linkage == 'dependent':
        USE_LIBS += [
            'nspr',
            'xul',
        ]
    elif linkage == 'standalone':
        DEFINES['XPCOM_GLUE'] = True

        USE_LIBS += [
            'xpcomglue',
        ]
    elif linkage != None:
        error('`linkage` must be "dependent", "standalone" or None')

    if mozglue:
        LDFLAGS += CONFIG['MOZ_GLUE_WRAP_LDFLAGS']
        if mozglue == 'program':
            USE_LIBS += ['mozglue']
            DEFINES['MOZ_HAS_MOZGLUE'] = True
            if CONFIG['MOZ_GLUE_IN_PROGRAM'] and CONFIG['CC_TYPE'] in ('clang', 'gcc'):
                LDFLAGS += ['-rdynamic']
        elif mozglue == 'library':
            LIBRARY_DEFINES['MOZ_HAS_MOZGLUE'] = True
            if not CONFIG['MOZ_GLUE_IN_PROGRAM']:
                USE_LIBS += ['mozglue']
        else:
            error('`mozglue` must be "program" or "library"')


@template
def GeckoProgram(name, linkage='standalone', **kwargs):
    '''Template for program executables related to Gecko.

    `name` identifies the executable base name.

    See the documentation for `GeckoBinary` for other possible arguments,
    with the notable difference that the default for `linkage` is 'standalone'.
    '''
    Program(name)

    kwargs.setdefault('mozglue', 'program')

    GeckoBinary(linkage=linkage, **kwargs)


@template
def GeckoSimplePrograms(names, **kwargs):
    '''Template for simple program executables related to Gecko.

    `names` identifies the executable base names for each executable.

    See the documentation for `GeckoBinary` for other possible arguments.
    '''
    SimplePrograms(names)

    kwargs.setdefault('mozglue', 'program')

    GeckoBinary(**kwargs)


@template
def GeckoCppUnitTests(names, **kwargs):
    '''Template for C++ unit tests related to Gecko.

    `names` identifies the executable base names for each executable.

    See the documentation for `GeckoBinary` for other possible arguments.
    '''
    CppUnitTests(names)

    kwargs.setdefault('mozglue', 'program')

    GeckoBinary(**kwargs)


@template
def GeckoSharedLibrary(name, **kwargs):
    '''Template for shared libraries related to Gecko.

    `name` identifies the library base name.
    See the documentation for `GeckoBinary` for other possible arguments.
    '''
    SharedLibrary(name)

    kwargs.setdefault('mozglue', 'library')

    GeckoBinary(**kwargs)


@template
def GeckoFramework(name, **kwargs):
    '''Template for OSX frameworks related to Gecko.

    `name` identifies the library base name.
    See the documentation for `GeckoBinary` for other possible arguments.
    '''
    Framework(name)

    kwargs.setdefault('mozglue', 'library')

    GeckoBinary(**kwargs)