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