javaw

Java support

Javac is one of the few compilers that behaves very badly:

  1. it outputs files where it wants to (-d is only for the package root)
  2. it recompiles files silently behind your back
  3. it outputs an undefined amount of files (inner classes)

Remember that the compilation can be performed using Jython[1] rather than regular Python. Instead of running one of the following commands:

./waf configure
python waf configure

You would have to run:

java -jar /path/to/jython.jar waf configure

[1] http://www.jython.org/

waflib.Tools.javaw.apply_java(self)[source]

Task generator method

Create a javac task for compiling .java files. There can be only one javac task by task generator.

Feature:javac
waflib.Tools.javaw.use_javac_files(self)[source]

Task generator method

Processes the use attribute referring to other java compilations

Feature:javac
waflib.Tools.javaw.set_classpath(self)[source]

Task generator method

Sets the CLASSPATH value on the javac task previously created.

Feature:javac
waflib.Tools.javaw.jar_files(self)[source]

Task generator method

Creates a jar task (one maximum per task generator)

Feature:jar
waflib.Tools.javaw.use_jar_files(self)[source]

Task generator method

Processes the use attribute to set the build order on the tasks created by another task generator.

Feature:jar
class waflib.Tools.javaw.JTask(*k, **kw)[source]

Bases: waflib.Task.Task

Base class for java and jar tasks; provides functionality to run long commands

split_argfile(cmd)[source]

Splits a list of process commands into the executable part and its list of arguments

Returns:a tuple containing the executable first and then the rest of arguments
Return type:tuple
class waflib.Tools.javaw.jar_create(*k, **kw)[source]

Bases: waflib.Tools.javaw.JTask

Creates a jar file

color = 'GREEN'
runnable_status()[source]

Wait for dependent tasks to be executed, then read the files to update the list of inputs.

hcode = '${JAR} ${JARCREATE} ${TGT} ${JAROPTS}'
orig_run_str = '${JAR} ${JARCREATE} ${TGT} ${JAROPTS}'
vars = ['JAR', 'JARCREATE', 'JAROPTS']
class waflib.Tools.javaw.javac(*k, **kw)[source]

Bases: waflib.Tools.javaw.JTask

Compiles java files

color = 'BLUE'
vars = ['CLASSPATH', 'JAVAC', 'JAVACFLAGS', 'OUTDIR']

The javac task will be executed again if the variables CLASSPATH, JAVACFLAGS, JAVAC or OUTDIR change.

uid()[source]

Identify java tasks by input&output folder

runnable_status()[source]

Waits for dependent tasks to be complete, then read the file system to find the input nodes.

post_run()[source]

List class files created

hcode = '${JAVAC} -classpath ${CLASSPATH} -d ${OUTDIR} ${JAVACFLAGS} ${SRC}'
orig_run_str = '${JAVAC} -classpath ${CLASSPATH} -d ${OUTDIR} ${JAVACFLAGS} ${SRC}'
waflib.Tools.javaw.create_javadoc(self)[source]

Task generator method

Creates a javadoc task (feature ‘javadoc’)

Feature:javadoc
class waflib.Tools.javaw.javadoc(*k, **kw)[source]

Bases: waflib.Task.Task

Builds java documentation

color = 'BLUE'
post_run()[source]

Update the cache files (executed by threads). Override in subclasses.

hcode = '\tdef run(self):\n\t\tenv = self.env\n\t\tbld = self.generator.bld\n\t\twd = bld.bldnode\n\n\t\t#add src node + bld node (for generated java code)\n\t\tsrcpath = self.generator.path.abspath() + os.sep + self.generator.srcdir\n\t\tsrcpath += os.pathsep\n\t\tsrcpath += self.generator.path.get_bld().abspath() + os.sep + self.generator.srcdir\n\n\t\tclasspath = env.CLASSPATH\n\t\tclasspath += os.pathsep\n\t\tclasspath += os.pathsep.join(self.classpath)\n\t\tclasspath = "".join(classpath)\n\n\t\tself.last_cmd = lst = []\n\t\tlst.extend(Utils.to_list(env.JAVADOC))\n\t\tlst.extend([\'-d\', self.generator.javadoc_output.abspath()])\n\t\tlst.extend([\'-sourcepath\', srcpath])\n\t\tlst.extend([\'-classpath\', classpath])\n\t\tlst.extend([\'-subpackages\'])\n\t\tlst.extend(self.generator.javadoc_package)\n\t\tlst = [x for x in lst if x]\n\n\t\tself.generator.bld.cmd_and_log(lst, cwd=wd, env=env.env or None, quiet=0)\n'
waflib.Tools.javaw.configure(self)[source]

Detects the javac, java and jar programs

waflib.Tools.javaw.check_java_class(self, classname, with_classpath=None)[source]

Configuration Method bound to waflib.Configure.ConfigurationContext

Checks if the specified java class exists

Parameters:
  • classname (string) – class to check, like java.util.HashMap
  • with_classpath (string) – additional classpath to give
waflib.Tools.javaw.conf(f)

Decorator: attach new configuration functions to waflib.Build.BuildContext and waflib.Configure.ConfigurationContext. The methods bound will accept a parameter named ‘mandatory’ to disable the configuration errors:

def configure(conf):
        conf.find_program('abc', mandatory=False)
Parameters:f (function) – method to bind
waflib.Tools.javaw.feature(*k)

Decorator that registers a task generator method that will be executed when the object attribute feature contains the corresponding key(s):

from waflib.Task import feature
@feature('myfeature')
def myfunction(self):
        print('that is my feature!')
def build(bld):
        bld(features='myfeature')
Parameters:k (list of string) – feature names
waflib.Tools.javaw.before_method(*k)[source]

Decorator that registera task generator method which will be executed before the functions of given name(s):

from waflib.TaskGen import feature, before
@feature('myfeature')
@before_method('fun2')
def fun1(self):
        print('feature 1!')
@feature('myfeature')
def fun2(self):
        print('feature 2!')
def build(bld):
        bld(features='myfeature')
Parameters:k (list of string) – method names
waflib.Tools.javaw.after_method(*k)[source]

Decorator that registers a task generator method which will be executed after the functions of given name(s):

from waflib.TaskGen import feature, after
@feature('myfeature')
@after_method('fun2')
def fun1(self):
        print('feature 1!')
@feature('myfeature')
def fun2(self):
        print('feature 2!')
def build(bld):
        bld(features='myfeature')
Parameters:k (list of string) – method names
waflib.Tools.javaw.check_jni_headers(conf)[source]

Configuration Method bound to waflib.Configure.ConfigurationContext

Checks for jni headers and libraries. On success the conf.env variables xxx_JAVA are added for use in C/C++ targets:

def options(opt):
        opt.load('compiler_c')

def configure(conf):
        conf.load('compiler_c java')
        conf.check_jni_headers()

def build(bld):
        bld.shlib(source='a.c', target='app', use='JAVA')

Features defined in this module: