PageRenderTime 35ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/src/scripts/__init__.py

https://github.com/Infinidat/relocatable-python
Python | 167 lines | 164 code | 3 blank | 0 comment | 2 complexity | 0fad921fac2a6805c834cbcc03de304e MD5 | raw file
  1. __import__("pkg_resources").declare_namespace(__name__)
  2. from subprocess import Popen
  3. from platform import system
  4. from infi.execute import execute_assert_success
  5. def test():
  6. from logging import basicConfig, getLogger, DEBUG
  7. from subprocess import Popen
  8. from os import path, name
  9. from glob import glob
  10. basicConfig(level=DEBUG)
  11. python = path.join('dist', 'bin', 'python%s' % ('.exe' if name == 'nt' else ''))
  12. getLogger(__name__).info("testing %s" % python)
  13. test_files = glob(path.join("tests", "test_*.py"))
  14. for test_file in test_files:
  15. assert Popen([python, test_file]).wait() == 0
  16. def execte_buildout(buildout_file, env=None):
  17. import sys
  18. argv = ' '.join(sys.argv[1:])
  19. command = "./bin/buildout -c {0} {1}".format(buildout_file, argv)
  20. print 'executing "%s"' % command
  21. process = Popen(command.split(), env=env)
  22. stdout, stderr = process.communicate()
  23. sys.exit(process.returncode)
  24. def build():
  25. from sys import maxsize
  26. from os import environ
  27. from platform import version
  28. environ = environ.copy()
  29. buildout_file = 'buildout-build.cfg'
  30. if system() == 'Linux':
  31. from distro import linux_distribution
  32. dist_name, version, distid = linux_distribution(full_distribution_name=False)
  33. dist_name = dist_name.replace('rhel', 'redhat').replace('sles', 'suse').replace('enterpriseenterpriseserver', 'oracle')
  34. if dist_name == 'ubuntu':
  35. if version >= '16.04':
  36. buildout_file = 'buildout-build-ubuntu-16.04.cfg'
  37. else:
  38. buildout_file = 'buildout-build-ubuntu.cfg'
  39. if dist_name in ['redhat', 'centos']:
  40. arch = execute_assert_success(["uname", "-i"]).get_stdout().lower()
  41. if 'ppc64le' in arch:
  42. buildout_file = 'buildout-build-redhat-ppc64le.cfg'
  43. elif 'ppc64' in arch:
  44. buildout_file = 'buildout-build-redhat-ppc64.cfg'
  45. elif 'i386' in arch:
  46. buildout_file = 'buildout-build-redhat-32bit.cfg'
  47. else:
  48. if version.startswith('8'):
  49. buildout_file = 'buildout-build-redhat-8-64bit.cfg'
  50. else:
  51. buildout_file = 'buildout-build-redhat-64bit.cfg'
  52. if dist_name in ['suse']:
  53. arch = execute_assert_success(["uname", "-i"]).get_stdout().lower()
  54. if 'ppc64le' in arch:
  55. buildout_file = 'buildout-build-suse-ppc64le.cfg'
  56. elif 'ppc64' in arch:
  57. buildout_file = 'buildout-build-suse-ppc64.cfg'
  58. elif version.startswith("15"):
  59. buildout_file = 'buildout-build-suse-15.cfg'
  60. elif system() == 'Darwin':
  61. from platform import mac_ver
  62. environ["MACOSX_DEPLOYMENT_TARGET"] = '.'.join(mac_ver()[0].split('.', 2)[:2])
  63. gcc_version = execute_assert_success(["gcc", "--version"]).get_stdout()
  64. if 'version 5.' in gcc_version:
  65. buildout_file = 'buildout-build-osx-xcode-5.cfg'
  66. elif 'version 6.' in gcc_version:
  67. buildout_file = 'buildout-build-osx-xcode-6.cfg'
  68. elif 'version 7.' in gcc_version:
  69. buildout_file = 'buildout-build-osx-xcode-7.cfg'
  70. elif 'version 8.' in gcc_version:
  71. buildout_file = 'buildout-build-osx-xcode-8.cfg'
  72. elif 'version 9.' in gcc_version:
  73. buildout_file = 'buildout-build-osx-xcode-8.cfg'
  74. elif 'version 10.' in gcc_version:
  75. buildout_file = 'buildout-build-osx-xcode-8.cfg'
  76. else:
  77. buildout_file = 'buildout-build-osx.cfg'
  78. elif system() == 'Windows':
  79. if maxsize > 2**32:
  80. buildout_file = 'buildout-build-windows-64bit.cfg'
  81. else:
  82. buildout_file = 'buildout-build-windows.cfg'
  83. elif system() == "SunOS":
  84. if 'sparc' in execute_assert_success(["isainfo"]).get_stdout().lower():
  85. buildout_file = 'buildout-build-solaris-sparc.cfg'
  86. if '11.4' in version():
  87. buildout_file = 'buildout-build-solaris-11.4-sparc.cfg'
  88. elif '64' in execute_assert_success(["isainfo", "-b"]).get_stdout():
  89. buildout_file = 'buildout-build-solaris-64bit.cfg'
  90. if '11.4' in version():
  91. buildout_file = 'buildout-build-solaris-11.4-64bit.cfg'
  92. else:
  93. pass # TODO support 32 bit
  94. elif system() == "AIX":
  95. from os import uname
  96. aix_version = "{0[3]}.{0[2]}".format(uname())
  97. if aix_version == "7.1":
  98. buildout_file = 'buildout-build-aix.cfg'
  99. elif aix_version == "7.2":
  100. buildout_file = 'buildout-build-aix-7.2.cfg'
  101. execte_buildout(buildout_file, environ)
  102. def pack():
  103. buildout_file = 'buildout-pack.cfg'
  104. if system() == 'Windows':
  105. buildout_file = 'buildout-pack-windows.cfg'
  106. elif system() == "AIX":
  107. buildout_file = 'buildout-pack-aix.cfg'
  108. execte_buildout(buildout_file)
  109. def clean():
  110. from os.path import abspath, pardir, exists
  111. from os import mkdir, remove, path
  112. from glob import glob
  113. from shutil import rmtree, move
  114. sep = '/'
  115. filepath = __file__.replace(path.sep, '/')
  116. base = abspath(sep.join([filepath, pardir, pardir, pardir]))
  117. dist = sep.join([base, 'dist'])
  118. parts = sep.join([base, 'parts'])
  119. installed_file = sep.join([base, '.installed-build.cfg'])
  120. print "base = %s" % repr(base)
  121. for tar_gz in glob(sep.join([base, '*tar.gz'])):
  122. print "rm %s" % tar_gz
  123. remove(tar_gz)
  124. print "rm -rf %s" % repr(dist)
  125. _catch_and_print(rmtree, *[dist])
  126. src = sep.join([parts, 'buildout'])
  127. dst = sep.join([base, 'buildout'])
  128. print "mv %s %s" % (repr(src), repr(dst))
  129. _catch_and_print(move, *[src, dst])
  130. print "rm %s" % repr(installed_file)
  131. if exists(installed_file):
  132. remove(installed_file)
  133. print "rm -rf %s" % repr(parts)
  134. _catch_and_print(rmtree, *[parts])
  135. print "mkdir %s" % repr(parts)
  136. _catch_and_print(mkdir, *[parts])
  137. dst = sep.join([parts, 'buildout'])
  138. src = sep.join([base, 'buildout'])
  139. print "mv %s %s" % (repr(src), repr(dst))
  140. _catch_and_print(move, *[src, dst])
  141. def _catch_and_print(func, *args, **kwargs):
  142. try:
  143. func(*args, **kwargs)
  144. except (OSError, IOError), e:
  145. print e