~ubuntu-branches/ubuntu/trusty/xiphos/trusty

« back to all changes in this revision

Viewing changes to wafadmin/Tools/javaw.py

  • Committer: Package Import Robot
  • Author(s): Dmitrijs Ledkovs, Dmitrijs Ledkovs
  • Date: 2012-03-11 18:43:32 UTC
  • mfrom: (17.1.2 sid)
  • Revision ID: package-import@ubuntu.com-20120311184332-splq3ecpx7tyi87d
Tags: 3.1.5+dfsg-1
[ Dmitrijs Ledkovs <dmitrij.ledkov@ubuntu.com> ]  
* New upstream release.
* Build using webkit backend
* Contains unpacked source for waf binary (Closes: #654511)
* Update debian/copyright to latest specification

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/env python
 
2
# encoding: utf-8
 
3
import sys
 
4
if sys.hexversion < 0x020400f0: from sets import Set as set
 
5
import os,re
 
6
from Configure import conf
 
7
import TaskGen,Task,Utils,Options,Build
 
8
from TaskGen import feature,before,taskgen
 
9
class_check_source='''
 
10
public class Test {
 
11
        public static void main(String[] argv) {
 
12
                Class lib;
 
13
                if (argv.length < 1) {
 
14
                        System.err.println("Missing argument");
 
15
                        System.exit(77);
 
16
                }
 
17
                try {
 
18
                        lib = Class.forName(argv[0]);
 
19
                } catch (ClassNotFoundException e) {
 
20
                        System.err.println("ClassNotFoundException");
 
21
                        System.exit(1);
 
22
                }
 
23
                lib = null;
 
24
                System.exit(0);
 
25
        }
 
26
}
 
27
'''
 
28
def jar_files(self):
 
29
        basedir=getattr(self,'basedir','.')
 
30
        destfile=getattr(self,'destfile','test.jar')
 
31
        jaropts=getattr(self,'jaropts',[])
 
32
        jarcreate=getattr(self,'jarcreate','cf')
 
33
        dir=self.path.find_dir(basedir)
 
34
        if not dir:raise
 
35
        jaropts.append('-C')
 
36
        jaropts.append(dir.abspath(self.env))
 
37
        jaropts.append('.')
 
38
        out=self.path.find_or_declare(destfile)
 
39
        tsk=self.create_task('jar_create')
 
40
        tsk.set_outputs(out)
 
41
        tsk.inputs=[x for x in dir.find_iter(src=0,bld=1)if x.id!=out.id]
 
42
        tsk.env['JAROPTS']=jaropts
 
43
        tsk.env['JARCREATE']=jarcreate
 
44
def apply_java(self):
 
45
        Utils.def_attrs(self,jarname='',jaropts='',classpath='',sourcepath='.',srcdir='.',source_re='**/*.java',jar_mf_attributes={},jar_mf_classpath=[])
 
46
        if getattr(self,'source_root',None):
 
47
                self.srcdir=self.source_root
 
48
        nodes_lst=[]
 
49
        if not self.classpath:
 
50
                if not self.env['CLASSPATH']:
 
51
                        self.env['CLASSPATH']='..'+os.pathsep+'.'
 
52
        else:
 
53
                self.env['CLASSPATH']=self.classpath
 
54
        srcdir_node=self.path.find_dir(self.srcdir)
 
55
        if not srcdir_node:
 
56
                raise Utils.WafError('could not find srcdir %r'%self.srcdir)
 
57
        src_nodes=[x for x in srcdir_node.ant_glob(self.source_re,flat=False)]
 
58
        bld_nodes=[x.change_ext('.class')for x in src_nodes]
 
59
        self.env['OUTDIR']=[srcdir_node.abspath(self.env)]
 
60
        tsk=self.create_task('javac')
 
61
        tsk.set_inputs(src_nodes)
 
62
        tsk.set_outputs(bld_nodes)
 
63
        if getattr(self,'compat',None):
 
64
                tsk.env.append_value('JAVACFLAGS',['-source',self.compat])
 
65
        if hasattr(self,'sourcepath'):
 
66
                fold=[self.path.find_dir(x)for x in self.to_list(self.sourcepath)]
 
67
                names=os.pathsep.join([x.srcpath()for x in fold])
 
68
        else:
 
69
                names=srcdir_node.srcpath()
 
70
        if names:
 
71
                tsk.env.append_value('JAVACFLAGS',['-sourcepath',names])
 
72
        if self.jarname:
 
73
                jtsk=self.create_task('jar_create',bld_nodes,self.path.find_or_declare(self.jarname))
 
74
                jtsk.set_run_after(tsk)
 
75
                if not self.env.JAROPTS:
 
76
                        if self.jaropts:
 
77
                                self.env.JAROPTS=self.jaropts
 
78
                        else:
 
79
                                dirs='.'
 
80
                                self.env.JAROPTS=['-C',''.join(self.env['OUTDIR']),dirs]
 
81
Task.simple_task_type('jar_create','${JAR} ${JARCREATE} ${TGT} ${JAROPTS}',color='GREEN')
 
82
cls=Task.simple_task_type('javac','${JAVAC} -classpath ${CLASSPATH} -d ${OUTDIR} ${JAVACFLAGS} ${SRC}')
 
83
cls.color='BLUE'
 
84
def post_run_javac(self):
 
85
        par={}
 
86
        for x in self.inputs:
 
87
                par[x.parent.id]=x.parent
 
88
        inner={}
 
89
        for k in par.values():
 
90
                path=k.abspath(self.env)
 
91
                lst=os.listdir(path)
 
92
                for u in lst:
 
93
                        if u.find('$')>=0:
 
94
                                inner_class_node=k.find_or_declare(u)
 
95
                                inner[inner_class_node.id]=inner_class_node
 
96
        to_add=set(inner.keys())-set([x.id for x in self.outputs])
 
97
        for x in to_add:
 
98
                self.outputs.append(inner[x])
 
99
        return Task.Task.post_run(self)
 
100
cls.post_run=post_run_javac
 
101
def detect(conf):
 
102
        java_path=conf.environ['PATH'].split(os.pathsep)
 
103
        v=conf.env
 
104
        if'JAVA_HOME'in conf.environ:
 
105
                java_path=[os.path.join(conf.environ['JAVA_HOME'],'bin')]+java_path
 
106
                conf.env['JAVA_HOME']=[conf.environ['JAVA_HOME']]
 
107
        for x in'javac java jar'.split():
 
108
                conf.find_program(x,var=x.upper(),path_list=java_path)
 
109
                conf.env[x.upper()]=conf.cmd_to_list(conf.env[x.upper()])
 
110
        v['JAVA_EXT']=['.java']
 
111
        if'CLASSPATH'in conf.environ:
 
112
                v['CLASSPATH']=conf.environ['CLASSPATH']
 
113
        if not v['JAR']:conf.fatal('jar is required for making java packages')
 
114
        if not v['JAVAC']:conf.fatal('javac is required for compiling java classes')
 
115
        v['JARCREATE']='cf'
 
116
def check_java_class(self,classname,with_classpath=None):
 
117
        import shutil
 
118
        javatestdir='.waf-javatest'
 
119
        classpath=javatestdir
 
120
        if self.env['CLASSPATH']:
 
121
                classpath+=os.pathsep+self.env['CLASSPATH']
 
122
        if isinstance(with_classpath,str):
 
123
                classpath+=os.pathsep+with_classpath
 
124
        shutil.rmtree(javatestdir,True)
 
125
        os.mkdir(javatestdir)
 
126
        java_file=open(os.path.join(javatestdir,'Test.java'),'w')
 
127
        java_file.write(class_check_source)
 
128
        java_file.close()
 
129
        Utils.exec_command(self.env['JAVAC']+[os.path.join(javatestdir,'Test.java')],shell=False)
 
130
        cmd=self.env['JAVA']+['-cp',classpath,'Test',classname]
 
131
        self.log.write("%s\n"%str(cmd))
 
132
        found=Utils.exec_command(cmd,shell=False,log=self.log)
 
133
        self.check_message('Java class %s'%classname,"",not found)
 
134
        shutil.rmtree(javatestdir,True)
 
135
        return found
 
136
def check_jni_headers(conf):
 
137
        if not conf.env.CC_NAME and not conf.env.CXX_NAME:
 
138
                conf.fatal('load a compiler first (gcc, g++, ..)')
 
139
        if not conf.env.JAVA_HOME:
 
140
                conf.fatal('set JAVA_HOME in the system environment')
 
141
        javaHome=conf.env['JAVA_HOME'][0]
 
142
        b=Build.BuildContext()
 
143
        b.load_dirs(conf.srcdir,conf.blddir)
 
144
        dir=b.root.find_dir(conf.env.JAVA_HOME[0]+'/include')
 
145
        f=dir.ant_glob('**/(jni|jni_md).h',flat=False)
 
146
        incDirs=[x.parent.abspath()for x in f]
 
147
        dir=b.root.find_dir(conf.env.JAVA_HOME[0])
 
148
        f=dir.ant_glob('**/*jvm.(so|dll)',flat=False)
 
149
        libDirs=[x.parent.abspath()for x in f]or[javaHome]
 
150
        for i,d in enumerate(libDirs):
 
151
                if conf.check(header_name='jni.h',define_name='HAVE_JNI_H',lib='jvm',libpath=d,includes=incDirs,uselib_store='JAVA',uselib='JAVA'):
 
152
                        break
 
153
        else:
 
154
                conf.fatal('could not find lib jvm in %r (see config.log)'%libDirs)
 
155
 
 
156
feature('jar')(jar_files)
 
157
before('apply_core')(jar_files)
 
158
feature('javac')(apply_java)
 
159
before('apply_core')(apply_java)
 
160
conf(check_java_class)
 
161
conf(check_jni_headers)