PageRenderTime 50ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/lib-python/modified-2.7/ctypes/macholib/dylib.py

https://bitbucket.org/evelyn559/pypy
Python | 66 lines | 57 code | 3 blank | 6 comment | 0 complexity | 5e64d9a7fb630b07337be45e624f0403 MD5 | raw file
  1. ######################################################################
  2. # This file should be kept compatible with Python 2.3, see PEP 291. #
  3. ######################################################################
  4. """
  5. Generic dylib path manipulation
  6. """
  7. import re
  8. __all__ = ['dylib_info']
  9. DYLIB_RE = re.compile(r"""(?x)
  10. (?P<location>^.*)(?:^|/)
  11. (?P<name>
  12. (?P<shortname>\w+?)
  13. (?:\.(?P<version>[^._]+))?
  14. (?:_(?P<suffix>[^._]+))?
  15. \.dylib$
  16. )
  17. """)
  18. def dylib_info(filename):
  19. """
  20. A dylib name can take one of the following four forms:
  21. Location/Name.SomeVersion_Suffix.dylib
  22. Location/Name.SomeVersion.dylib
  23. Location/Name_Suffix.dylib
  24. Location/Name.dylib
  25. returns None if not found or a mapping equivalent to:
  26. dict(
  27. location='Location',
  28. name='Name.SomeVersion_Suffix.dylib',
  29. shortname='Name',
  30. version='SomeVersion',
  31. suffix='Suffix',
  32. )
  33. Note that SomeVersion and Suffix are optional and may be None
  34. if not present.
  35. """
  36. is_dylib = DYLIB_RE.match(filename)
  37. if not is_dylib:
  38. return None
  39. return is_dylib.groupdict()
  40. def test_dylib_info():
  41. def d(location=None, name=None, shortname=None, version=None, suffix=None):
  42. return dict(
  43. location=location,
  44. name=name,
  45. shortname=shortname,
  46. version=version,
  47. suffix=suffix
  48. )
  49. assert dylib_info('completely/invalid') is None
  50. assert dylib_info('completely/invalide_debug') is None
  51. assert dylib_info('P/Foo.dylib') == d('P', 'Foo.dylib', 'Foo')
  52. assert dylib_info('P/Foo_debug.dylib') == d('P', 'Foo_debug.dylib', 'Foo', suffix='debug')
  53. assert dylib_info('P/Foo.A.dylib') == d('P', 'Foo.A.dylib', 'Foo', 'A')
  54. assert dylib_info('P/Foo_debug.A.dylib') == d('P', 'Foo_debug.A.dylib', 'Foo_debug', 'A')
  55. assert dylib_info('P/Foo.A_debug.dylib') == d('P', 'Foo.A_debug.dylib', 'Foo', 'A', 'debug')
  56. if __name__ == '__main__':
  57. test_dylib_info()