build/templates.mozbuild
author David Keeler <dkeeler@mozilla.com>
Fri, 15 Sep 2017 14:47:54 -0700
changeset 432366 0893b7f1f14a830395dad12d2f0b5136589289f7
parent 431614 e4ac1e17ffe51b34721a569b259d57cb6f965628
child 434755 2dbb140bb423400ceb523377d2f74bee6a47edea
permissions -rw-r--r--
Bug 1369561 - Address misc. SnprintfLiteral correctness nits. r=jld, r=froydnj, a=ritu

# -*- 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 Binary():
    '''Generic template for target binaries. Meant to be used by other
    templates.'''

    if CONFIG['MOZ_LIBSTDCXX_TARGET_VERSION']:
        USE_LIBS += ['stdc++compat']

    # Ideally, we'd support not adding this to the LIB_IS_C_ONLY case,
    # but that variable is actually only set in db/sqlite/src, which
    # doesn't build a shared library on the relevant platforms anyways.
    # Eventually, though, we should detect LIB_IS_C_ONLY based on the
    # associated SOURCES (and there might actually be places where we
    # haven't set it but should have).
    if CONFIG['STLPORT_LIBS']:
        OS_LIBS += [CONFIG['STLPORT_LIBS']]

    # Add -llog by default, since we use it all over the place.
    if CONFIG['OS_TARGET'] == 'Android':
        OS_LIBS += ['log']


@template
def Program(name):
    '''Template for program executables.'''
    PROGRAM = name

    Binary()


@template
def SimplePrograms(names, ext='.cpp'):
    '''Template for simple program executables.

    Those have a single source with the same base name as the executable.
    '''
    SIMPLE_PROGRAMS += names
    SOURCES += ['%s%s' % (name, ext) for name in names]

    Binary()


@template
def CppUnitTests(names, ext='.cpp'):
    '''Template for C++ unit tests.

    Those have a single source with the same base name as the executable.
    '''
    COMPILE_FLAGS['EXTRA_INCLUDES'] = ['-I%s/dist/include' % TOPOBJDIR,
                                       '-I%s/dist/include/testing' % TOPOBJDIR]
    CPP_UNIT_TESTS += names
    SOURCES += ['%s%s' % (name, ext) for name in names]

    Binary()


@template
def Library(name):
    '''Template for libraries.'''
    LIBRARY_NAME = name


@template
def RustLibrary(name, features=None, target_dir=None):
    '''Template for Rust libraries.'''
    Library(name)

    IS_RUST_LIBRARY = True

    if features:
        RUST_LIBRARY_FEATURES = features

    if target_dir:
        RUST_LIBRARY_TARGET_DIR = target_dir


@template
def SharedLibrary(name):
    '''Template for shared libraries.'''
    Library(name)

    FORCE_SHARED_LIB = True

    Binary()


@template
def Framework(name):
    '''Template for OSX Frameworks.'''
    SharedLibrary(name)

    IS_FRAMEWORK = True


@template
def HostStdCppCompat():
    '''Template for libstdc++ compatibility for host binaries.'''

    if CONFIG['MOZ_LIBSTDCXX_HOST_VERSION']:
        HOST_USE_LIBS += ['host_stdc++compat']


@template
def HostProgram(name, c_only=False):
    '''Template for build tools executables.'''
    HOST_PROGRAM = name

    # With context-based templates, this won't be needed anymore, and will
    # work better than relying on the caller setting it, but at the moment,
    # this is the best we have. And it doesn't matter /that/ much, so there's
    # really only one place using this, where it does matter to avoid the
    # extra dependency (because it creates a circular one).
    if not c_only:
        HostStdCppCompat()


@template
def HostSimplePrograms(names, ext='.cpp'):
    '''Template for simple build tools executables.

    Those have a single source with the same base name as the executable.
    '''
    HOST_SIMPLE_PROGRAMS += names
    HOST_SOURCES += ['%s%s' % (name.replace('host_', ''), ext)
        for name in names]

    HostStdCppCompat()


@template
def HostLibrary(name):
    '''Template for build tools libraries.'''
    HOST_LIBRARY_NAME = name

@template
def HostRustLibrary(name, features=None):
    '''Template for host Rust libraries.'''
    HostLibrary(name)

    IS_RUST_LIBRARY = True

    if features:
        HOST_RUST_LIBRARY_FEATURES = features

@template
def DisableStlWrapping():
    COMPILE_FLAGS['STL'] = []

@template
def NoVisibilityFlags():
    COMPILE_FLAGS['VISIBILITY'] = []


include('gecko_templates.mozbuild')
include('test_templates.mozbuild')