Skip to content
Snippets Groups Projects

Added tests for CMake parsing

3 files
+ 205
53
Compare changes
  • Side-by-side
  • Inline

Files

@@ -8,13 +8,14 @@ import os
@@ -8,13 +8,14 @@ import os
import re
import re
import sys
import sys
import urllib2
import urllib2
 
import LbUtils
from LbConfiguration.Repository import getRepositories
from LbConfiguration.Repository import getRepositories
from LbRelease import rcs
from LbRelease import rcs
from LbRelease.SvnTools.Project import translateProject, getProjectCmt
from LbRelease.SvnTools.Project import translateProject, getProjectCmt
from LbUtils.Processes import callCommand
from LbUtils.Processes import callCommand
from LbRelease.SoftConfDB.SoftConfDB import SoftConfDB
from LbRelease.SoftConfDB.SoftConfDB import SoftConfDB
from LbUtils.CMake import getHeptoolsVersion, getGaudiUse
# SVN Repositories definition
# SVN Repositories definition
url = str(getRepositories(protocol='anonymous')["lbsvn"])
url = str(getRepositories(protocol='anonymous')["lbsvn"])
@@ -92,53 +93,17 @@ class GitlabProject:
@@ -92,53 +93,17 @@ class GitlabProject:
def getDependencies(self):
def getDependencies(self):
""" Returns the list of project dependencies """
""" Returns the list of project dependencies """
if self.project.upper() == "GAUDI":
if self.project.upper() == "GAUDI" or self.project.upper() == "GEANT4":
# For GAUDI we take the dependency in the toolchain file
# For GAUDI we take the dependency in the toolchain file
data = self.getToolchain()
data = self.getToolchain()
r = re.compile("\s*set\s*\(\s*heptools_version\s+(\w+)\s*\)", re.MULTILINE)
htv = getHeptoolsVersion(data)
m = r.search(data)
deplist = [ ("LCG", htv) ]
if m != None:
return deplist
self.log.debug("Found match for heptools_version: %s" % m.group(1))
return [ ("LCG", m.group(1)) ]
else:
else:
# For all other projects use the gaudi_project macro
# For all other projects use the gaudi_project macro
data = self.getCMakeLists()
data = self.getCMakeLists()
# e.g.
deplist = getGaudiUse(data)
# gaudi_project(LHCb v39r2
return deplist
# USE Gaudi v26r4
# DATA Gen/DecFiles
# Det/SQLDDDB VERSION v7r*
# FieldMap
# ParamFiles
# PRConfig
# RawEventFormat
# TCK/HltTCK
# TCK/L0TCK VERSION v4r*)
# Group to one line to avoid dealing with carriage returns, then gets the lists of deps
# Remove all comments
# This is NOT ERROR PROOF as it ignores the fact that the # could be within ascript
# but we need a proepr parser to sort that out.
databak = data
alllines = [ l.strip().split("#")[0] for l in data.splitlines() ]
data = ' '.join(alllines)
r = re.compile("gaudi_project\s*\(\s*(\w+)\s+(\w+)\s+USE\s+(.*?)\s*(?:\sDATA[^)]*)?\)")
m = r.search(data)
if m != None:
# Checking that we have the right section in the CMakeLists
tproj = m.group(1)
tver = m.group(2)
if tproj.upper() != self.project or tver != self.version:
self.log.debug("Version in CMakeLists does not match the project:\n" + databak )
raise Exception("Version mismatch between project and CMakeLists.txt: " + tproj.upper() + "," + tver + " vs " \
+ self.project + "," + self.version)
# Now check the match for the dependencies
# Splitting the list and grouping into pairs
tmpdeps = m.group(3).split()
deplist = zip(*[tmpdeps[x::2] for x in (0, 1)])
return deplist
return []
return []
@@ -170,7 +135,8 @@ class AppImporter:
@@ -170,7 +135,8 @@ class AppImporter:
else:
else:
return False
return False
def gitlabProcessProjectVersion(self, p, v, alreadyDone = [], recreate=False, alturi=None, saveURIinPV=False):
def gitlabProcessProjectVersion(self, p, v, alreadyDone = [], recreate=False,
 
alturi=None, saveURIinPV=False):
""" Get the dependencies for a single project """
""" Get the dependencies for a single project """
# Cleanup the project name and version and get the SVN URL
# Cleanup the project name and version and get the SVN URL
(proj,ver)=importerTranslateProject(p,v)
(proj,ver)=importerTranslateProject(p,v)
@@ -380,16 +346,12 @@ def getProjectLastRev(project, version):
@@ -380,16 +346,12 @@ def getProjectLastRev(project, version):
(proj,ver)=importerTranslateProject(project, version)
(proj,ver)=importerTranslateProject(project, version)
tagpath = ""
tagpath = ""
# Getting the project.cmt file with dependencies
if proj.upper() == "GAUDI":
if proj.upper() == "GANGA":
tagpath = gaudisvn.url(proj,ver, isProject=True)
projcmt = self.getGangaProjectCMT(ver)
elif proj.upper() == "LHCBDIRAC" or proj.upper() == "DIRAC":
 
tagpath = diracsvn.url(proj,ver, isProject=True)
else:
else:
if proj.upper() == "GAUDI":
tagpath=lbsvn.url(proj,ver, isProject=True)
tagpath = gaudisvn.url(proj,ver, isProject=True)
elif proj.upper() == "LHCBDIRAC" or proj.upper() == "DIRAC":
tagpath = diracsvn.url(proj,ver, isProject=True)
else:
tagpath=lbsvn.url(proj,ver, isProject=True)
return getPathLastRev(tagpath)
return getPathLastRev(tagpath)
Loading