summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/build.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index 04979acbd3..a4deb00b88 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -188,6 +188,11 @@ class LogTee(object):
188def exec_func(func, d, dirs = None, pythonexception=False): 188def exec_func(func, d, dirs = None, pythonexception=False):
189 """Execute a BB 'function'""" 189 """Execute a BB 'function'"""
190 190
191 try:
192 oldcwd = os.getcwd()
193 except:
194 oldcwd = None
195
191 body = d.getVar(func, False) 196 body = d.getVar(func, False)
192 if not body: 197 if not body:
193 if body is None: 198 if body is None:
@@ -211,9 +216,7 @@ def exec_func(func, d, dirs = None, pythonexception=False):
211 bb.utils.mkdirhier(adir) 216 bb.utils.mkdirhier(adir)
212 adir = dirs[-1] 217 adir = dirs[-1]
213 else: 218 else:
214 adir = d.getVar('B', True) 219 adir = None
215 bb.utils.mkdirhier(adir)
216
217 ispython = flags.get('python') 220 ispython = flags.get('python')
218 221
219 lockflag = flags.get('lockfiles') 222 lockflag = flags.get('lockfiles')
@@ -257,6 +260,13 @@ def exec_func(func, d, dirs = None, pythonexception=False):
257 else: 260 else:
258 exec_func_shell(func, d, runfile, cwd=adir) 261 exec_func_shell(func, d, runfile, cwd=adir)
259 262
263 if oldcwd and os.getcwd() != oldcwd:
264 try:
265 bb.warn("Task %s changed cwd to %s" % (func, os.getcwd()))
266 os.chdir(oldcwd)
267 except:
268 pass
269
260_functionfmt = """ 270_functionfmt = """
261{function}(d) 271{function}(d)
262""" 272"""
@@ -272,7 +282,8 @@ def exec_func_python(func, d, runfile, cwd=None, pythonexception=False):
272 if cwd: 282 if cwd:
273 try: 283 try:
274 olddir = os.getcwd() 284 olddir = os.getcwd()
275 except OSError: 285 except OSError as e:
286 bb.warn("%s: Cannot get cwd: %s" % (func, e))
276 olddir = None 287 olddir = None
277 os.chdir(cwd) 288 os.chdir(cwd)
278 289
@@ -298,8 +309,8 @@ def exec_func_python(func, d, runfile, cwd=None, pythonexception=False):
298 if cwd and olddir: 309 if cwd and olddir:
299 try: 310 try:
300 os.chdir(olddir) 311 os.chdir(olddir)
301 except OSError: 312 except OSError as e:
302 pass 313 bb.warn("%s: Cannot restore cwd %s: %s" % (func, olddir, e))
303 314
304def shell_trap_code(): 315def shell_trap_code():
305 return '''#!/bin/sh\n 316 return '''#!/bin/sh\n