Bug 1259620 - Add an optional formatting callback to @checking. r=gps
authorMike Hommey <mh+mozilla@glandium.org>
Thu, 24 Mar 2016 17:43:31 +0900
changeset 290511 67e1d5126c9f68e424353a4412bfc31486d723ad
parent 290510 5eecbb62c31e3f6974cdaf8d71d153aab1f7fe57
child 290512 a7d69f146a52ccfa013aa3aed251ae8086ef84d8
push id19656
push usergwagner@mozilla.com
push dateMon, 04 Apr 2016 13:43:23 +0000
treeherderb2g-inbound@e99061fde28a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgps
bugs1259620
milestone48.0a1
Bug 1259620 - Add an optional formatting callback to @checking. r=gps
build/moz.configure/checks.configure
--- a/build/moz.configure/checks.configure
+++ b/build/moz.configure/checks.configure
@@ -16,26 +16,30 @@
 #       ret = foo
 #       sys.stdout.write(ret + '\n')
 #       return ret
 # This can be combined with e.g. @depends:
 #   @depends(some_option)
 #   @checking('for something')
 #   def check(value):
 #       ...
+# An optional callback can be given, that will be used to format the returned
+# value when displaying it.
 @template
-def checking(what):
+def checking(what, callback=None):
     def decorator(func):
         @advanced
         def wrapped(*args, **kwargs):
             import sys
             print('checking', what, end='... ')
             sys.stdout.flush()
             ret = func(*args, **kwargs)
-            if ret is True:
+            if callback:
+                print(callback(ret))
+            elif ret is True:
                 print('yes')
             elif ret is False:
                 print('no')
             else:
                 print(ret)
             sys.stdout.flush()
             return ret
         return wrapped
@@ -46,40 +50,37 @@ def checking(what):
 #   check('PROG', ('a', 'b'))
 # will look for 'a' or 'b' in $PATH, and set_config PROG to the one
 # it can find. If PROG is already set from the environment or command line,
 # use that value instead.
 @template
 def check_prog(var, progs, allow_missing=False):
     option(env=var, nargs=1, help='Path to the %s program' % var.lower())
 
-    not_found = 'not found'
     if not (isinstance(progs, tuple) or isinstance(progs, list)):
         configure_error('progs should be a list or tuple!')
     progs = list(progs)
 
     @depends(var)
-    @checking('for %s' % var.lower())
+    @checking('for %s' % var.lower(), lambda x: x or 'not found')
     def check(value):
         if value:
             progs[:] = value
         for prog in progs:
             result = find_program(prog)
             if result:
                 return result
-        return not_found
 
     @depends(check, var)
     @advanced
     def postcheck(value, raw_value):
-        if value is not_found and (not allow_missing or raw_value):
+        if value is None and (not allow_missing or raw_value):
             from mozbuild.shellutil import quote
             error('Cannot find %s (tried: %s)'
                   % (var.lower(), ', '.join(quote(p) for p in progs)))
-        return None if value is not_found else value
 
-    @depends(postcheck)
+    @depends(check)
     def normalized_for_config(value):
         return ':' if value is None else value
 
     set_config(var, normalized_for_config)
 
-    return postcheck
+    return check