summaryrefslogtreecommitdiffstats
path: root/build/gecko_templates.mozbuild
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--build/gecko_templates.mozbuild125
1 files changed, 125 insertions, 0 deletions
diff --git a/build/gecko_templates.mozbuild b/build/gecko_templates.mozbuild
new file mode 100644
index 0000000000..e4c781ce04
--- /dev/null
+++ b/build/gecko_templates.mozbuild
@@ -0,0 +1,125 @@
+# -*- 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-real",
+ ]
+ elif linkage == "standalone":
+ DEFINES["XPCOM_GLUE"] = True
+
+ USE_LIBS += [
+ "xpcomglue",
+ ]
+ elif linkage != None:
+ error('`linkage` must be "dependent", "standalone" or None')
+
+ if mozglue:
+ 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, output_category=None, **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, output_category)
+
+ kwargs.setdefault("mozglue", "library")
+
+ GeckoBinary(**kwargs)
+
+
+@template
+def GeckoFramework(name, output_category=None, **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, output_category)
+
+ kwargs.setdefault("mozglue", "library")
+
+ GeckoBinary(**kwargs)