Bug 1449623 - Rework exports in the tup backend; r?Build draft
authorMike Shal <mshal@mozilla.com>
Tue, 27 Mar 2018 17:26:56 -0400
changeset 774383 dcba17bb043991a9761ae3d9c20bd58aba794da0
parent 773564 56d6db4ad38c869d0bbc2aea449a4a382f109163
child 774384 8c336f05147617e30526b92778540a59f6026fbc
push id104380
push userbmo:mshal@mozilla.com
push dateWed, 28 Mar 2018 20:33:39 +0000
reviewersBuild
bugs1449623
milestone61.0a1
Bug 1449623 - Rework exports in the tup backend; r?Build In some cases we need to export other environment variables, so make it easier to track them. MozReview-Commit-ID: 82OOlRTdhH0
python/mozbuild/mozbuild/backend/tup.py
--- a/python/mozbuild/mozbuild/backend/tup.py
+++ b/python/mozbuild/mozbuild/backend/tup.py
@@ -57,29 +57,29 @@ class BackendTupfile(object):
 
     def __init__(self, objdir, environment, topsrcdir, topobjdir):
         self.topsrcdir = topsrcdir
         self.objdir = objdir
         self.relobjdir = mozpath.relpath(objdir, topobjdir)
         self.environment = environment
         self.name = mozpath.join(objdir, 'Tupfile')
         self.rules_included = False
-        self.shell_exported = False
         self.defines = []
         self.host_defines = []
         self.delayed_generated_files = []
         self.delayed_installed_files = []
         self.per_source_flags = defaultdict(list)
         self.local_flags = defaultdict(list)
         self.sources = defaultdict(list)
         self.host_sources = defaultdict(list)
         self.variables = {}
         self.static_lib = None
         self.shared_lib = None
         self.program = None
+        self.exports = set()
 
         self.fh = FileAvoidWrite(self.name, capture_diff=True)
         self.fh.write('# THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT.\n')
         self.fh.write('\n')
 
     def write(self, buf):
         self.fh.write(buf)
 
@@ -152,23 +152,26 @@ class BackendTupfile(object):
                 self.rule(
                     cmd=cmd,
                     inputs=[src],
                     extra_inputs=extra_inputs,
                     outputs=[prefix + '%B.o'],
                     display='%s %%f' % compiler,
                 )
 
+    def export(self, env):
+        for var in env:
+            if var not in self.exports:
+                self.exports.add(var)
+                self.write('export %s\n' % var)
+
     def export_shell(self):
-        if not self.shell_exported:
-            # These are used by mach/mixin/process.py to determine the current
-            # shell.
-            for var in ('SHELL', 'MOZILLABUILD', 'COMSPEC'):
-                self.write('export %s\n' % var)
-            self.shell_exported = True
+        # These are used by mach/mixin/process.py to determine the current
+        # shell.
+        self.export(['SHELL', 'MOZILLABUILD', 'COMSPEC'])
 
     def close(self):
         return self.fh.close()
 
     @property
     def diff(self):
         return self.fh.diff