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
  
70
  
71
  
72
  
73
  
74
  
75
  
76
  
77
  
78
  
79
  
80
  
81
  
82
  
83
  
84
  
85
  
86
  
87
  
88
  
89
  
90
  
91
  
92
  
93
  
94
  
95
  
96
  
 
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; 
  string v = Process.popen(dir+"/bin/java -version 2>&1"); 
  if(2 <= sscanf(v, "java version \"%d.%d.%d", int maj, int min, int bld)) { 
    if(maj < 1) 
      return 0; 
    if(maj > 1 || min > 2) 
      return 1; 
    if(min < 2) 
      return 0; 
    return bld >= 2; 
  } else 
    return 1; 
} 
 
static string findjre() 
{ 
  string dir = combine_path(combine_path(getcwd(), __FILE__), 
                            "../../../java/jre"); 
  if(check_jre_dir(dir)) 
    return dir; 
 
  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); 
 
  array archs = ({  
    (Process.popen("(/usr/bin/uname -p||uname -p) 2>/dev/null | sed -e 's/^i[4-9]86/i386/'")||"")-"\n", 
    (Process.popen("(/usr/bin/uname -m||uname -m) 2>/dev/null | sed -e 's/^i[4-9]86/i386/'")||"")-"\n" 
  }); 
   
  foreach(Array.uniq(archs), string arch) 
  { 
    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/" ); 
 
  //  Only add _JAVA_OPTIONS if user hasn't got it already 
  if (!env->get("_JAVA_OPTIONS")) 
    env->set("_JAVA_OPTIONS", "\"-Xmx256m\""); 
}