PageRenderTime 54ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/lcgcmt/pyLCG/python/lcg/aa/config.py

https://github.com/mana-fwk/lcgwaf
Python | 232 lines | 217 code | 13 blank | 2 comment | 5 complexity | 3cf9c48109d3c441320c5e5e72e4c210 MD5 | raw file
  1. import lcg.config, os.path, re, cmt, string
  2. import sys
  3. from subprocess import Popen, PIPE
  4. class config(lcg.config.config) :
  5. def __init__(self):
  6. self.msg = lcg.msg.msg('LCG AA Configuration')
  7. lcg.config.config.__init__(self)
  8. self.cmt = cmt.CMT()
  9. # the names of the LCG/AA projects
  10. self.lcg_projects = ['LCGCMT','RELAX','CORAL', 'COOL','ROOT']
  11. self.not_lcgaa_packages = ['GAUDI']
  12. # important directories
  13. self.lcg_lcgcmtroot_dir = os.sep.join(os.path.dirname(lcg.aa.config.__file__).split(os.sep)[:-4])+os.sep
  14. self.lcg_distNew_dirname = 'distNew4'
  15. self.lcg_external_dir = ''
  16. self.lcg_release_dir = ''
  17. self.lcg_distribution_dir = ''
  18. self.lcg_distNew_dir = ''
  19. # retrieve macros from LCG_Settings
  20. sav_dir = os.path.realpath(os.curdir)
  21. os.chdir(self.lcg_lcgcmtroot_dir + 'LCG_Settings' + os.sep + 'cmt')
  22. self.cmt.init_macros()
  23. if self.lcg_external_dir == '' and self.cmt.macros.has_key('LCG_external') :
  24. self.lcg_external_dir = self.normalize_path(self.cmt.macros['LCG_external'])
  25. if self.lcg_release_dir == '' and self.cmt.macros.has_key('LCG_releases') :
  26. self.lcg_release_dir = self.normalize_path(self.cmt.macros['LCG_releases'])
  27. os.chdir(sav_dir)
  28. self.lcg_distribution_dir = self.lcg_external_dir + os.sep + 'distribution'
  29. self.lcg_distNew_dir = self.lcg_external_dir + os.sep + self.lcg_distNew_dirname
  30. # actual lcg tags
  31. self.all_platform_tags = [
  32. 'i686-slc5-gcc43-opt',
  33. 'i686-slc5-gcc43-dbg',
  34. 'x86_64-slc5-icc11-opt',
  35. 'x86_64-slc5-icc11-dbg',
  36. 'x86_64-slc5-gcc43-opt',
  37. 'x86_64-slc5-gcc43-dbg',
  38. 'x86_64-slc5-gcc46-opt',
  39. 'x86_64-slc5-gcc46-dbg',
  40. 'x86_64-slc6-gcc46-opt',
  41. 'x86_64-slc6-gcc46-dbg',
  42. 'x86_64-mac106-gcc42-opt',
  43. 'x86_64-mac106-gcc42-dbg'
  44. ]
  45. self.release_platform_tags = [
  46. 'i686-slc5-gcc43-opt',
  47. 'i686-slc5-gcc43-dbg',
  48. 'x86_64-slc5-icc11-opt',
  49. 'x86_64-slc5-icc11-dbg',
  50. 'x86_64-slc5-gcc43-opt',
  51. 'x86_64-slc5-gcc43-dbg',
  52. 'x86_64-slc5-gcc46-opt',
  53. 'x86_64-slc5-gcc46-dbg',
  54. 'x86_64-slc6-gcc46-opt',
  55. 'x86_64-slc6-gcc46-dbg',
  56. 'x86_64-mac106-gcc42-opt',
  57. 'x86_64-mac106-gcc42-dbg'
  58. ]
  59. self.tarball_platform_tags = [
  60. 'i686-slc5-gcc43-opt',
  61. 'i686-slc5-gcc43-dbg',
  62. 'x86_64-slc5-icc11-opt',
  63. 'x86_64-slc5-icc11-dbg',
  64. 'x86_64-slc5-gcc43-opt',
  65. 'x86_64-slc5-gcc43-dbg',
  66. 'x86_64-slc5-gcc46-opt',
  67. 'x86_64-slc5-gcc46-dbg',
  68. 'x86_64-slc6-gcc46-opt',
  69. 'x86_64-slc6-gcc46-dbg',
  70. 'x86_64-mac106-gcc42-opt',
  71. 'x86_64-mac106-gcc42-dbg'
  72. ]
  73. self.old_platform_tags = [
  74. 'osx104_ia32_gcc401',
  75. 'osx104_ia32_gcc401_dbg',
  76. 'osx104_ppc_gcc401',
  77. 'osx104_ppc_gcc401_dbg',
  78. 'slc3_ia32_gcc323',
  79. 'slc3_ia32_gcc323_dbg'
  80. 'slc4_amd64_gcc41',
  81. 'slc4_amd64_gcc41_dbg',
  82. 'slc4_ia32_gcc41',
  83. 'slc4_ia32_gcc41_dbg',
  84. ]
  85. # checks
  86. for t in self.release_platform_tags :
  87. if t not in self.all_platform_tags :
  88. msg.error('Consistency check: release tag %s not in container of all tags' % t)
  89. for t in self.tarball_platform_tags :
  90. if t not in self.release_platform_tags :
  91. msg.error('Consistency check: tarball tag %s not in container of release tags' % t)
  92. for t in self.old_platform_tags :
  93. if t in self.all_platform_tags :
  94. msg.error('Consistency check: old platform tag %s is part of container of all tags' % t)
  95. # compiler settings
  96. # variables
  97. self.compiler = ''
  98. self.compilerMax = 0
  99. self.compilerMaj = 0
  100. self.compilerMin = 0
  101. # checks
  102. if self.isWin32 :
  103. pass
  104. else :
  105. # try gcc
  106. p = Popen('gcc --version', shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
  107. i,o,e = p.stdin, p.stdout, p.stderr
  108. err = e.readlines()
  109. if len(err) : self.msg.error(err)
  110. else :
  111. self.compiler = 'gcc'
  112. patt = re.compile('.*\s(\d+)\.(\d+)(\.(\d+))*\s.*')
  113. mobj = patt.match(o.readlines()[0])
  114. self.compilerMax = int(mobj.group(1))
  115. self.compilerMaj = int(mobj.group(2))
  116. self.compilerMin = int(mobj.group(4))
  117. # lcg tag
  118. # variables
  119. self.lcg_tag = ''
  120. self.lcg_tag_dbg = ''
  121. # setup
  122. if self.isLinux :
  123. if self.osReleaseStr in ('slc3', 'slc4', 'slc5', 'slc6') : self.lcg_tag += '%s' % self.osReleaseStr
  124. else : self.msg.error('Trying to setup tag info, unknown string for OS %s' % self.osReleaseStr)
  125. if self.is32bit : self.lcg_tag += '_ia32'
  126. elif self.is64bit : self.lcg_tag += '_amd64'
  127. if self.compiler == 'gcc' :
  128. if self.compilerMax == 3 and self.compilerMaj == 2 and self.compilerMin == 3 :
  129. self.lcg_tag += '_gcc%s%s%s' % (self.compilerMax, self.compilerMaj, self.compilerMin)
  130. else : self.lcg_tag += '_gcc%s%s' % ( self.compilerMax, self.compilerMaj)
  131. else : self.msg.warning('Nothing known about compiler %s' % self.compiler)
  132. elif self.isMacOS :
  133. self.lcg_tag += 'osx%s%s' % ( self.osMaxRelease, self.osMajRelease )
  134. if self.processor == 'powerpc' : self.lcg_tag += '_ppc'
  135. elif self.processor == 'i386' : self.lcg_tag += '_ia32'
  136. else : self.msg.error('Processor type %s unknown' % self.processor )
  137. if self.compiler == 'gcc' :
  138. if self.compilerMax == 4 and self.compilerMaj == 0 and self.compilerMin == 1 : self.lcg_tag += '_gcc401'
  139. else : self.lcg_tag += '_gcc%s%s' % (self.compilerMax, self.compilerMaj)
  140. elif self.isWin32 :
  141. pass
  142. self.lcg_tag_dbg = '%s_dbg' % self.lcg_tag
  143. # licenses
  144. self.licenseURLs = {
  145. '4SUITE' : 'http://4suite.org/COPYRIGHT.doc',
  146. 'APACHE' : 'http://www.apache.org/licenses/',
  147. 'BOOST' : 'http://boost.org/more/license_info.html',
  148. 'BLAS' : 'http://www.netlib.org/blas/faq.html#2',
  149. 'BSD' : 'http://www.opensource.org/licenses/bsd-license.php',
  150. 'BZ2LIB' : 'http://service-spi.web.cern.ch/service-spi/external/bz2lib/_SPI/LICENSE',
  151. 'CGAL' : 'http://www.cgal.org/license.html',
  152. 'CMT' : 'http://www.cecill.info/licences/Licence_CeCILL_V2-en.html',
  153. 'CMAKE' : 'http://www.cmake.org/HTML/Copyright.html',
  154. 'CNRI' : 'http://www.opensource.org/licenses/pythonpl.php',
  155. 'CXORACLE': 'http://www.python.net/crew/atuining/cx_Oracle/LICENSE.txt',
  156. 'CYGWIN' : 'http://cygwin.com/licensing.html',
  157. 'GCCXML' : 'http://www.gccxml.org/HTML/Copyright.html',
  158. 'GPL' : 'http://www.gnu.org/copyleft/gpl.html',
  159. 'LAPACK' : 'http://www.netlib.org/lapack/COPYING',
  160. 'LCGAA' : '',
  161. 'LGPL' : 'http://www.gnu.org/licenses/lgpl.html',
  162. 'LIBPNG' : 'http://www.libpng.org/pub/png/src/libpng-LICENSE.txt',
  163. 'LLVM' : 'http://llvm.org/releases/2.5/LICENSE.TXT',
  164. 'MATPLOTLIB': 'http://matplotlib.sourceforge.net/users/license.html',
  165. 'MIT' : 'http://www.opensource.org/licenses/mit-license.php',
  166. 'MYSQL' : 'http://www.mysql.com/company/legal/licensing/opensource-license.html',
  167. 'ORACLE' : 'http://www.oracle.com/corporate/license/agreements.html',
  168. 'PCRE' : 'http://www.pcre.org/license.txt',
  169. 'PYTHON' : 'http://www.opensource.org/licenses/PythonSoftFoundation.php',
  170. 'SCONS' : 'http://service-spi.web.cern.ch/service-spi/external/scons/_SPI/LICENSE.txt',
  171. 'SQLITE' : 'http://www.sqlite.org/copyright.html',
  172. 'SUBVERSION': 'http://subversion.tigris.org/license-1.html',
  173. 'X11' : 'http://www.xfree86.org/3.3.6/COPYRIGHT2.html',
  174. 'UNKNOWN' : '',
  175. }
  176. self.licenses = self.licenseURLs.keys()
  177. def normalize_path(self,path):
  178. return path.replace('\\',os.sep)
  179. def build_pkg_tarball_name(self,pkg,ver,plat):
  180. if self.isProject(pkg) and string.upper(pkg) != 'ROOT' :
  181. return '%s__LCG_%s.tar.gz' % (ver, plat)
  182. else :
  183. return '%s_%s__LCG_%s.tar.gz' % ( pkg,ver,plat )
  184. def isProject(self,pkg):
  185. if string.upper(pkg) in self.lcg_projects : return 1
  186. return 0