mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.8 KiB
162 lines
4.8 KiB
# -*- 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', msvcrt='dynamic', 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. |
|
|
|
`msvcrt` indicates which Microsoft Visual Studio CRT, for Windows build, |
|
ought to be linked: 'static' or 'dynamic'. |
|
|
|
`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 msvcrt == 'dynamic' or CONFIG['OS_ARCH'] != 'WINNT' or CONFIG['MOZ_ASAN']: |
|
xpcomglue = 'xpcomglue' |
|
elif msvcrt == 'static': |
|
USE_STATIC_LIBS = True |
|
xpcomglue = 'xpcomglue_staticruntime' |
|
if not CONFIG['GNU_CC']: |
|
mozglue = None |
|
if linkage == 'dependent': |
|
USE_LIBS += [ |
|
'mozalloc_staticruntime', |
|
] |
|
else: |
|
error('msvcrt must be "dynamic" or "static"') |
|
|
|
if linkage == 'dependent': |
|
USE_LIBS += [ |
|
'nspr', |
|
'%s_s' % xpcomglue, |
|
'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']: |
|
if CONFIG['GNU_CC']: |
|
LDFLAGS += ['-rdynamic'] |
|
if CONFIG['MOZ_MEMORY']: |
|
USE_LIBS += ['memory'] |
|
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"') |
|
|
|
if not CONFIG['JS_STANDALONE']: |
|
USE_LIBS += [ |
|
'fallible', |
|
] |
|
|
|
|
|
@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) |
|
|
|
|
|
@template |
|
def XPCOMBinaryComponent(name): |
|
'''Template defining an XPCOM binary component for Gecko. |
|
|
|
`name` is the name of the component. |
|
''' |
|
GeckoSharedLibrary(name) |
|
|
|
IS_COMPONENT = True
|
|
|