| Index: scripts/slave/recipe_modules/platform/api.py
|
| diff --git a/scripts/slave/recipe_modules/platform/api.py b/scripts/slave/recipe_modules/platform/api.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..97e57b23895e5c1b9cc5bfdcde58c89b75f2a552
|
| --- /dev/null
|
| +++ b/scripts/slave/recipe_modules/platform/api.py
|
| @@ -0,0 +1,92 @@
|
| +# Copyright 2013 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import sys
|
| +import platform
|
| +
|
| +from recipe_engine import recipe_api
|
| +
|
| +
|
| +def norm_plat(plat):
|
| + if plat.startswith('linux'):
|
| + return 'linux'
|
| + elif plat.startswith(('win', 'cygwin')):
|
| + return 'win'
|
| + elif plat.startswith(('darwin', 'mac')):
|
| + return 'mac'
|
| + else: # pragma: no cover
|
| + raise ValueError('Don\'t understand platform "%s"' % plat)
|
| +
|
| +
|
| +def norm_bits(arch):
|
| + return 64 if '64' in str(arch) else 32
|
| +
|
| +
|
| +class PlatformApi(recipe_api.RecipeApi):
|
| + """
|
| + Provides host-platform-detection properties.
|
| +
|
| + Mocks:
|
| + name (str): A value equivalent to something that might be returned by
|
| + sys.platform.
|
| + bits (int): Either 32 or 64.
|
| + """
|
| +
|
| + def __init__(self, **kwargs):
|
| + super(PlatformApi, self).__init__(**kwargs)
|
| + self._name = norm_plat(sys.platform)
|
| +
|
| + self._arch = 'intel'
|
| + self._bits = norm_bits(platform.machine())
|
| +
|
| + if self._test_data.enabled:
|
| + # Default to linux/64, unless test case says otherwise.
|
| + self._name = norm_plat(self._test_data.get('name', 'linux'))
|
| + self._bits = norm_bits(self._test_data.get('bits', 64))
|
| + else: # pragma: no cover
|
| + # platform.machine is based on running kernel. It's possible to use 64-bit
|
| + # kernel with 32-bit userland, e.g. to give linker slightly more memory.
|
| + # Distinguish between different userland bitness by querying
|
| + # the python binary.
|
| + if (self._name == 'linux' and
|
| + self._bits == 64 and
|
| + platform.architecture()[0] == '32bit'):
|
| + self._bits = 32
|
| + # On Mac, the inverse of the above is true: the kernel is 32-bit but the
|
| + # CPU and userspace both are capable of running 64-bit programs.
|
| + elif (self._name == 'mac' and
|
| + self._bits == 32 and
|
| + platform.architecture()[0] == '64bit'):
|
| + self._bits = 64
|
| +
|
| + @property
|
| + def is_win(self):
|
| + return self.name == 'win'
|
| +
|
| + @property
|
| + def is_mac(self):
|
| + return self.name == 'mac'
|
| +
|
| + @property
|
| + def is_linux(self):
|
| + return self.name == 'linux'
|
| +
|
| + @property
|
| + def name(self):
|
| + return self._name
|
| +
|
| + @property
|
| + def bits(self):
|
| + # The returned bitness corresponds to the userland. If anyone ever wants
|
| + # to query for bitness of the kernel, another accessor should be added.
|
| + return self._bits
|
| +
|
| + @property
|
| + def arch(self):
|
| + return self._arch
|
| +
|
| + @staticmethod
|
| + def normalize_platform_name(platform):
|
| + """One of python's sys.platform values -> 'win', 'linux' or 'mac'."""
|
| + return norm_plat(platform) # pragma: no cover
|
|
|