1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
61
  
62
  
63
  
64
  
65
  
66
  
67
  
68
  
69
  
 
static int check_jre_dir(string dir) 
{ 
  if(!dir || dir=="" || dir[0]!='/') 
    return 0; 
  if(!file_stat(dir+"/lib/rt.jar")) 
    return 0; 
  if(!file_stat(dir+"/lib/flavormap.properties")) 
    return 0; 
  return 1; 
} 
 
static string findjre() 
{ 
  string dir = 
    (Process.popen("java -verbose 2>&1 | sed -n -e 's/^[^/]*//' -e " 
                   "'s:/lib/rt.jar .*$::' -e p -e q")||"")-"\n";   
  if(check_jre_dir(dir)) 
    return dir; 
  foreach(`+(@Array.map(({"/usr/local", "/usr", "/usr/java"}), 
                        lambda(string s) { 
                          return Array.map(Array.map(({"jre*","jdk*","java*"}), 
                                                     glob, 
                                                     reverse(sort(get_dir(s)|| 
                                                                  ({""}))))* 
                                           ({}), 
                                           lambda(string sb) { 
                                             return s+"/"+sb; 
                                           }); 
                        })), string d) { 
    if(d && d!="") 
      if(check_jre_dir(d+"/jre")) 
        return d+"/jre"; 
      else if(check_jre_dir(d)) 
        return d; 
  } 
  return 0; 
} 
 
void run(object env) 
{ 
  string jrehome, arch, threads_type="native_threads"; 
  write("   Checking for Java 2 (TM)..."); 
  if(!(jrehome=getenv("JREHOME"))) 
    jrehome=findjre(); 
  if(!jrehome) 
    jrehome = env->get("JREHOME"); 
  if(!jrehome) { 
    write(" not found\n"); 
    return; 
  } 
  write(" JREHOME="+jrehome+"\n"); 
  env->set("JREHOME", jrehome); 
  arch = (Process.popen("(/usr/bin/uname -p||uname -p) 2>/dev/null")||"")-"\n"; 
  if(arch=="unknown") 
    arch = (Process.popen("uname -m | sed -e 's/^i[4-9]86/i386/'")||"")-"\n"; 
  if(arch == "") 
    arch = "_"; 
  foreach(({arch+"/"+threads_type, arch+"/classic", arch}), string dir) { 
    mixed s = file_stat(jrehome+"/lib/"+dir); 
    if(s && s[1]==-2) 
      env->append("LD_LIBRARY_PATH", jrehome+"/lib/"+dir); 
  } 
  /* AIX */ 
  if(file_stat(jrehome+"/bin/libjava.a")) 
    env->append("LIBPATH", jrehome+"/bin/:"+jrehome+"/bin/classic/" ); 
}