Bug 1586798 - Use WalkerFront from the currently selected element in onTagEdit()...
[gecko.git] / build / templates.mozbuild
blob15165ad7ea939c52981418b586323797f2791c33
1 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
2 # vim: set filetype=python:
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 @template
8 def Binary():
9     '''Generic template for target binaries. Meant to be used by other
10     templates.'''
12     # Add -llog by default, since we use it all over the place.
13     if CONFIG['OS_TARGET'] == 'Android':
14         OS_LIBS += ['log']
17 @template
18 def Program(name):
19     '''Template for program executables.'''
20     PROGRAM = name
22     Binary()
25 @template
26 def SimplePrograms(names, ext='.cpp'):
27     '''Template for simple program executables.
29     Those have a single source with the same base name as the executable.
30     '''
31     SIMPLE_PROGRAMS += names
32     SOURCES += ['%s%s' % (name, ext) for name in names]
34     Binary()
37 @template
38 def CppUnitTests(names, ext='.cpp'):
39     '''Template for C++ unit tests.
41     Those have a single source with the same base name as the executable.
42     '''
43     COMPILE_FLAGS['EXTRA_INCLUDES'] = ['-I%s/dist/include' % TOPOBJDIR,
44                                        '-I%s/dist/include/testing' % TOPOBJDIR]
45     CPP_UNIT_TESTS += names
46     SOURCES += ['%s%s' % (name, ext) for name in names]
48     Binary()
51 @template
52 def Library(name):
53     '''Template for libraries.'''
54     LIBRARY_NAME = name
56 @template
57 def AllowCompilerWarnings():
58     COMPILE_FLAGS['WARNINGS_AS_ERRORS'] = []
60 @template
61 def DisableCompilerWarnings():
62     COMPILE_FLAGS['WARNINGS_CFLAGS'] = []
64 @template
65 def RustLibrary(name, features=None, output_category=None):
66     '''Template for Rust libraries.'''
67     Library(name)
69     IS_RUST_LIBRARY = True
70     # Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
71     AllowCompilerWarnings()
73     # And furthermore, don't even show warnings for them, so they don't regress
74     # the Compiler Warnings build metric
75     # <https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Automated_Performance_Testing_and_Sheriffing/Build_Metrics#compiler_warnings>.
76     DisableCompilerWarnings()
78     if features:
79         RUST_LIBRARY_FEATURES = features
81     if output_category:
82         RUST_LIBRARY_OUTPUT_CATEGORY = output_category
85 @template
86 def SharedLibrary(name, output_category=None):
87     '''Template for shared libraries.'''
88     Library(name)
90     FORCE_SHARED_LIB = True
92     if output_category:
93         SHARED_LIBRARY_OUTPUT_CATEGORY = output_category
95     Binary()
98 @template
99 def Framework(name, output_category=None):
100     '''Template for OSX Frameworks.'''
101     SharedLibrary(name, output_category)
103     IS_FRAMEWORK = True
106 @template
107 def HostProgram(name):
108     '''Template for build tools executables.'''
109     HOST_PROGRAM = name
112 @template
113 def HostSimplePrograms(names, ext='.cpp'):
114     '''Template for simple build tools executables.
116     Those have a single source with the same base name as the executable.
117     '''
118     HOST_SIMPLE_PROGRAMS += names
119     HOST_SOURCES += ['%s%s' % (name.replace('host_', ''), ext)
120         for name in names]
123 @template
124 def HostSharedLibrary(name):
125     '''Template for build tools libraries.'''
126     if name != 'clang-plugin':
127         error('Please make sure host shared library support is complete '
128               'before using for something else than the clang plugin')
130     HOST_LIBRARY_NAME = name
132     FORCE_SHARED_LIB = True
134 @template
135 def HostLibrary(name):
136     '''Template for build tools libraries.'''
137     HOST_LIBRARY_NAME = name
139 @template
140 def HostRustLibrary(name, features=None):
141     '''Template for host Rust libraries.'''
142     HostLibrary(name)
144     IS_RUST_LIBRARY = True
145     # Some Rust build scripts compile C/C++ sources, don't error on warnings for them.
146     AllowCompilerWarnings()
148     if features:
149         HOST_RUST_LIBRARY_FEATURES = features
151 @template
152 def DisableStlWrapping():
153     COMPILE_FLAGS['STL'] = []
155 @template
156 def NoVisibilityFlags():
157     COMPILE_FLAGS['VISIBILITY'] = []
159 @template
160 def ForceInclude(*headers):
161     """Force includes a set of header files in C++ compilations"""
162     if CONFIG['CC_TYPE'] == 'clang-cl':
163         include_flag = '-FI'
164     else:
165         include_flag = '-include'
166     for header in headers:
167         CXXFLAGS += [include_flag, header]
169 @template
170 def GeneratedFile(name, *names, **kwargs):
171     """Add one or more GENERATED_FILES with the given attributes.
173     You must pass in at least one generated file (the "name" argument). Other
174     names can be included as positional arguments after "name"."""
175     script = kwargs.get('script')
176     entry_point = kwargs.get('entry_point')
177     inputs = kwargs.get('inputs', [])
178     flags = kwargs.get('flags', [])
179     force = kwargs.get('force', False)
180     if entry_point and not script:
181        error('entry_point cannot be provided if script is not provided')
182     if script and ':' in script:
183        error('script should not include a `:`. If you want to provide an '
184              'alternative entry point for your script, use the entry_point '
185              'parameter.')
187     key = (name,) + names if names else name
188     GENERATED_FILES += [key]
189     generated_file = GENERATED_FILES[key]
190     if script and not entry_point:
191         generated_file.script = script
192     if script and entry_point:
193         generated_file.script = script + ':' + entry_point
194     generated_file.inputs = inputs
195     generated_file.flags = flags
196     generated_file.force = force
198 include('gecko_templates.mozbuild')
199 include('test_templates.mozbuild')