github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/py-hwaftools/orch/worch/modulesfile.py (about) 1 #!/usr/bin/env python 2 ''' 3 A waf tool to supply the modulesfile worch feature. 4 ''' 5 6 from waflib.TaskGen import feature 7 import waflib.Logs as msg 8 9 import orch.features 10 11 12 def configure(cfg): 13 orch.features.register_defaults( 14 'modulesfile', 15 modulesfile_dir = '{PREFIX}/modules', 16 modulesfile = 'modulefile', # singular 17 modulesfile_path = '{modulesfile_dir}/{package}/{version}/{modulesfile}', 18 ) 19 return 20 21 22 def build(bld): 23 24 @feature('modulesfile') 25 def feature_modulesfile(tgen): 26 27 def gen_modulefile(task): 28 mfname = tgen.worch.modulesfile_path 29 with open(mfname, 'w') as fp: 30 fp.write('#%Module1.0 #-*-tcl-*-#\n') 31 32 for mystep, deppkg, deppkgstep in tgen.worch.dependencies(): 33 load = 'module load %s/{%s_version}' % (deppkg, deppkg) 34 load = tgen.worch.format(load) 35 fp.write(load + '\n') 36 37 for var, val, oper in tgen.worch.exports(): 38 if oper == 'set': 39 fp.write('setenv %s %s\n' % (var, val)) 40 if oper == 'prepend': 41 fp.write('prepend-path %s %s\n' % (var, val)) 42 if oper == 'append': 43 fp.write('append-path %s %s\n' % (var, val)) 44 45 return 0 46 47 tgen.step('modulesfile', 48 rule = gen_modulefile, 49 source = tgen.control_node('install'), 50 target = tgen.make_node(tgen.worch.modulesfile_path)) 51 52 return