3 # WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file
8 from os import sep, readlink
9 from waflib import Logs
10 from waflib.TaskGen import feature, after_method
11 from waflib.Task import Task, always_run
14 grp = opt.add_option_group('Bjam Options')
15 grp.add_option('--bjam_src', default=None, help='You can find it in <boost root>/tools/jam/src')
16 grp.add_option('--bjam_uname', default='linuxx86_64', help='bjam is built in <src>/bin.<uname>/bjam')
17 grp.add_option('--bjam_config', default=None)
18 grp.add_option('--bjam_toolset', default=None)
21 if not cnf.env.BJAM_SRC:
22 cnf.env.BJAM_SRC = cnf.options.bjam_src
23 if not cnf.env.BJAM_UNAME:
24 cnf.env.BJAM_UNAME = cnf.options.bjam_uname
26 cnf.find_program('bjam', path_list=[
27 cnf.env.BJAM_SRC + sep + 'bin.' + cnf.env.BJAM_UNAME
31 if not cnf.env.BJAM_CONFIG:
32 cnf.env.BJAM_CONFIG = cnf.options.bjam_config
33 if not cnf.env.BJAM_TOOLSET:
34 cnf.env.BJAM_TOOLSET = cnf.options.bjam_toolset
37 @after_method('process_rule')
38 def process_bjam(self):
39 if not self.bld.env.BJAM:
40 self.create_task('bjam_creator')
41 self.create_task('bjam_build')
42 self.create_task('bjam_installer')
43 if getattr(self, 'always', False):
44 always_run(bjam_creator)
45 always_run(bjam_build)
46 always_run(bjam_installer)
48 class bjam_creator(Task):
50 vars=['BJAM_SRC', 'BJAM_UNAME']
54 bjam = gen.bld.root.find_dir(env.BJAM_SRC)
56 Logs.error('Can not find bjam source')
58 bjam_exe_relpath = 'bin.' + env.BJAM_UNAME + '/bjam'
59 bjam_exe = bjam.find_resource(bjam_exe_relpath)
61 env.BJAM = bjam_exe.srcpath()
63 bjam_cmd = ['./build.sh']
64 Logs.debug('runner: ' + bjam.srcpath() + '> ' + str(bjam_cmd))
65 result = self.exec_command(bjam_cmd, cwd=bjam.srcpath())
67 Logs.error('bjam failed')
69 bjam_exe = bjam.find_resource(bjam_exe_relpath)
71 env.BJAM = bjam_exe.srcpath()
73 Logs.error('bjam failed')
76 class bjam_build(Task):
79 vars = ['BJAM_TOOLSET']
85 if hasattr(gen, 'root'):
86 build_root = path.find_node(gen.root)
89 jam = bld.srcnode.find_resource(env.BJAM_CONFIG)
91 Logs.debug('bjam: Using jam configuration from ' + jam.srcpath())
92 jam_rel = jam.relpath_gen(build_root)
94 Logs.warn('No build configuration in build_config/user-config.jam. Using default')
96 bjam_exe = bld.srcnode.find_node(env.BJAM)
98 Logs.error('env.BJAM is not set')
100 bjam_exe_rel = bjam_exe.relpath_gen(build_root)
101 cmd = ([bjam_exe_rel] +
102 (['--user-config=' + jam_rel] if jam_rel else []) +
103 ['--stagedir=' + path.get_bld().path_from(build_root)] +
104 ['--debug-configuration'] +
105 ['--with-' + lib for lib in self.generator.target] +
106 (['toolset=' + env.BJAM_TOOLSET] if env.BJAM_TOOLSET else []) +
107 ['link=' + 'shared'] +
108 ['variant=' + 'release']
110 Logs.debug('runner: ' + build_root.srcpath() + '> ' + str(cmd))
111 ret = self.exec_command(cmd, cwd=build_root.srcpath())
114 self.set_outputs(path.get_bld().ant_glob('lib/*') + path.get_bld().ant_glob('bin/*'))
117 class bjam_installer(Task):
122 for idir, pat in (('${LIBDIR}', 'lib/*'), ('${BINDIR}', 'bin/*')):
124 for n in path.get_bld().ant_glob(pat):
126 t = readlink(n.srcpath())
127 gen.bld.symlink_as(sep.join([idir, n.name]), t, postpone=False)
130 gen.bld.install_files(idir, files, postpone=False)