4242
4343# derived from easyconfig, but not from ._config directly
4444TEMPLATE_NAMES_EASYCONFIG = [
45+ ('nameletter' , "First letter of software name" ),
4546 ('toolchain_name' , "Toolchain name" ),
4647 ('toolchain_version' , "Toolchain version" ),
4748 ('version_major_minor' , "Major.Minor version" ),
4849 ('version_major' , "Major version" ),
4950 ('version_minor' , "Minor version" ),
50- ('nameletter' , "First letter of software name" ),
5151]
5252# derived from EasyConfig._config
5353TEMPLATE_NAMES_CONFIG = [
6767 ('installdir' , "Installation directory" ),
6868 ('builddir' , "Build directory" ),
6969]
70+ # software names for which to define <pref>ver and <pref>shortver templates
71+ TEMPLATE_SOFTWARE_VERSIONS = [
72+ # software name, prefix for *ver and *shortver
73+ ('Perl' , 'perl' ),
74+ ('Python' , 'py' ),
75+ ('R' , 'r' ),
76+ ]
7077# constant templates that can be used in easyconfigs
7178TEMPLATE_CONSTANTS = [
7279 # source url constants
@@ -144,6 +151,11 @@ def template_constant_dict(config, ignore=None, skip_lower=True):
144151 for name in TEMPLATE_NAMES_EASYCONFIG :
145152 if name in ignore :
146153 continue
154+
155+ # check if this template name is already handled
156+ if template_values .get (name [0 ]) is not None :
157+ continue
158+
147159 if name [0 ].startswith ('toolchain_' ):
148160 tc = config .get ('toolchain' )[0 ]
149161 if tc is not None :
@@ -170,6 +182,7 @@ def template_constant_dict(config, ignore=None, skip_lower=True):
170182 pass
171183 # only go through this once
172184 ignore .extend (['version_major' , 'version_minor' , 'version_major_minor' ])
185+
173186 elif name [0 ].endswith ('letter' ):
174187 # parse first letters
175188 if name [0 ].startswith ('name' ):
@@ -179,15 +192,23 @@ def template_constant_dict(config, ignore=None, skip_lower=True):
179192 else :
180193 raise EasyBuildError ("Undefined name %s from TEMPLATE_NAMES_EASYCONFIG" , name )
181194
182- # step 2: add remaining from config
195+ # step 2: define *ver and *shortver templates
196+ for name , pref in TEMPLATE_SOFTWARE_VERSIONS :
197+ for dep in config ['dependencies' ][0 ]:
198+ if isinstance (dep ['name' ], basestring ) and dep ['name' ].lower () == name .lower ():
199+ template_values ['%sver' % pref ] = dep ['version' ]
200+ template_values ['%sshortver' % pref ] = '.' .join (dep ['version' ].split ('.' )[:2 ])
201+ break
202+
203+ # step 3: add remaining from config
183204 for name in TEMPLATE_NAMES_CONFIG :
184205 if name in ignore :
185206 continue
186207 if name in config :
187208 template_values [name ] = config [name ][0 ]
188209 _log .debug ('name: %s, config: %s' , name , config [name ][0 ])
189210
190- # step 3 . make lower variants if not skip_lower
211+ # step 4 . make lower variants if not skip_lower
191212 if not skip_lower :
192213 for name in TEMPLATE_NAMES_LOWER :
193214 if name in ignore :
@@ -237,23 +258,29 @@ def template_documentation():
237258 # step 1: add TEMPLATE_NAMES_EASYCONFIG
238259 doc .append ('Template names/values derived from easyconfig instance' )
239260 for name in TEMPLATE_NAMES_EASYCONFIG :
240- doc .append ("%s%s: %s" % (indent_l1 , name [0 ], name [1 ]))
261+ doc .append ("%s%%(%s)s: %s" % (indent_l1 , name [0 ], name [1 ]))
262+
263+ # step 2: add *ver/*shortver templates for software listed in TEMPLATE_SOFTWARE_VERSIONS
264+ doc .append ("Template names/values for (short) software versions" )
265+ for name , pref in TEMPLATE_SOFTWARE_VERSIONS :
266+ doc .append ("%s%%(%sshortver)s: short version for %s (<major>.<minor>)" % (indent_l1 , pref , name ))
267+ doc .append ("%s%%(%sver)s: full version for %s" % (indent_l1 , pref , name ))
241268
242- # step 2 : add remaining self._config
269+ # step 3 : add remaining self._config
243270 doc .append ('Template names/values as set in easyconfig' )
244271 for name in TEMPLATE_NAMES_CONFIG :
245- doc .append ("%s%s" % (indent_l1 , name ))
272+ doc .append ("%s%%(%s) s" % (indent_l1 , name ))
246273
247- # step 3 . make lower variants
274+ # step 4 . make lower variants
248275 doc .append ('Lowercase values of template values' )
249276 for name in TEMPLATE_NAMES_LOWER :
250- doc .append ("%s%s: lower case of value of %s" % (indent_l1 , TEMPLATE_NAMES_LOWER_TEMPLATE % {'name' : name }, name ))
277+ doc .append ("%s%%(%s) s: lower case of value of %s" % (indent_l1 , TEMPLATE_NAMES_LOWER_TEMPLATE % {'name' : name }, name ))
251278
252- # step 4 . self.template_values can/should be updated from outside easyconfig
279+ # step 5 . self.template_values can/should be updated from outside easyconfig
253280 # (eg the run_setp code in EasyBlock)
254281 doc .append ('Template values set outside EasyBlock runstep' )
255282 for name in TEMPLATE_NAMES_EASYBLOCK_RUN_STEP :
256- doc .append ("%s%s: %s" % (indent_l1 , name [0 ], name [1 ]))
283+ doc .append ("%s%%(%s) s: %s" % (indent_l1 , name [0 ], name [1 ]))
257284
258285 doc .append ('Template constants that can be used in easyconfigs' )
259286 for cst in TEMPLATE_CONSTANTS :
0 commit comments