3 # WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file
7 # Thomas Nagy, 2010 (ita)
12 scalac outputs files a bit where it wants to
16 from waflib import Task, Utils, Node
17 from waflib.TaskGen import feature, before_method, after_method
19 from waflib.Tools import ccroot
20 ccroot.USELIB_VARS['scalac'] = set(['CLASSPATH', 'SCALACFLAGS'])
22 from waflib.Tools import javaw
25 @before_method('process_source')
26 def apply_scalac(self):
28 Utils.def_attrs(self, jarname='', classpath='',
29 sourcepath='.', srcdir='.',
30 jar_mf_attributes={}, jar_mf_classpath=[])
32 outdir = getattr(self, 'outdir', None)
34 if not isinstance(outdir, Node.Node):
35 outdir = self.path.get_bld().make_node(self.outdir)
37 outdir = self.path.get_bld()
39 self.env['OUTDIR'] = outdir.abspath()
41 self.scalac_task = tsk = self.create_task('scalac')
44 srcdir = getattr(self, 'srcdir', '')
45 if isinstance(srcdir, Node.Node):
47 for x in Utils.to_list(srcdir):
48 if isinstance(x, Node.Node):
51 y = self.path.find_dir(x)
53 self.bld.fatal('Could not find the folder %s from %s' % (x, self.path))
58 feature('scalac')(javaw.use_javac_files)
59 after_method('apply_scalac')(javaw.use_javac_files)
61 feature('scalac')(javaw.set_classpath)
62 after_method('apply_scalac', 'use_scalac_files')(javaw.set_classpath)
65 SOURCE_RE = '**/*.scala'
66 class scalac(javaw.javac):
68 vars = ['CLASSPATH', 'SCALACFLAGS', 'SCALAC', 'OUTDIR']
70 def runnable_status(self):
72 Wait for dependent tasks to be complete, then read the file system to find the input nodes.
74 for t in self.run_after:
82 self.inputs.extend(x.ant_glob(SOURCE_RE, remove=False))
83 return super(javaw.javac, self).runnable_status()
87 Execute the scalac compiler
92 wd = bld.bldnode.abspath()
94 if isinstance(xx, str):
97 self.last_cmd = lst = []
98 lst.extend(to_list(env['SCALAC']))
99 lst.extend(['-classpath'])
100 lst.extend(to_list(env['CLASSPATH']))
102 lst.extend(to_list(env['OUTDIR']))
103 lst.extend(to_list(env['SCALACFLAGS']))
104 lst.extend([a.abspath() for a in self.inputs])
105 lst = [x for x in lst if x]
107 self.out = self.generator.bld.cmd_and_log(lst, cwd=wd, env=env.env or None, output=0, quiet=0)[1]
109 self.generator.bld.cmd_and_log(lst, cwd=wd, env=env.env or None)
113 Detect the scalac program
115 # If SCALA_HOME is set, we prepend it to the path list
116 java_path = self.environ['PATH'].split(os.pathsep)
119 if 'SCALA_HOME' in self.environ:
120 java_path = [os.path.join(self.environ['SCALA_HOME'], 'bin')] + java_path
121 self.env['SCALA_HOME'] = [self.environ['SCALA_HOME']]
123 for x in 'scalac scala'.split():
124 self.find_program(x, var=x.upper(), path_list=java_path)
126 if 'CLASSPATH' in self.environ:
127 v['CLASSPATH'] = self.environ['CLASSPATH']
129 v.SCALACFLAGS = ['-verbose']
131 self.fatal('scalac is required for compiling scala classes')