MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
have_java.inc
1 --perl
2 use strict;
3 use File::Basename;
4 use IO::File;
5 use lib "lib/";
6 use My::Platform;
7 use My::Find;
8 
9 require "lib/mtr_misc.pl";
10 
11 
12 #
13 # Looks for java executable (/bin/java) in several locations:
14 # - MTR_JAVA environment variable
15 # - JAVA_HOME/bin/java
16 # - Other hard-coded locations (see below)
17 # - $PATH
18 #
19 # If java executable is found, MTR_JAVA will be set to reflect this location
20 #
21 my $java_args = "";
22 my @arch_paths = ();
23 
24 sub getRegValue
25 {
26  my ($key, $valuename) = @_;
27  my $cmd = "reg query \"$key\" /v $valuename";
28 
29  my $res = "";
30 
31  my @ares = `$cmd`;
32  if($? == 0)
33  {
34  foreach my $row (@ares)
35  {
36  if($row =~ m/.*$valuename\s*REG_SZ\s*(.*)/)
37  {
38  $row = $1;
39  $row =~ s/^\s*//;
40  $row =~ s/\s*$//;
41  $res = $row;
42  last;
43  }
44  }
45  }
46  return $res;
47 }
48 
49 sub getJavaPath
50 {
51  my $key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit";
52  my $version = getRegValue($key, "CurrentVersion");
53 
54  if(length($version) < 1)
55  {
56  return "";
57  }
58 
59  $key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\$version";
60  my $path = getRegValue($key, "JavaHome");
61 
62  return $path;
63 }
64 
65 my $pathsep = "/";
66 
67 if(!IS_WINDOWS)
68 {
69  push(@arch_paths, ('/usr/lib/jvm/java', '/usr/lib64/jvm/java'));
70 
71  $java_args = "-d32";
72 
73  # Architecture dependent paths, will be expanded with -64 if we are running on 64 bit build
74  my $bits = $ENV{MYSQL_SYSTEM_ARCHITECTURE};
75  if ($bits == 64) {
76  map { $_ . "-64" } @arch_paths;
77  $java_args = "-d64";
78  push(@arch_paths, ('/usr/local/jdk', '/usr/local/java', '/usr/local/java/jdk'));
79  push(@arch_paths, ('/usr/java-local/jdk-64/', '/usr/local/jdk-64', '/usr/local/java/jdk-64'));
80  } else {
81  push(@arch_paths, ('/usr/local/jdk', '/usr/local/java', '/usr/local/java/jdk'));
82  }
83 }
84 else
85 {
86  my $win_path = getJavaPath();
87  if(length($win_path) > 0)
88  {
89  push(@arch_paths, $win_path);
90  }
91  $pathsep = "\\";
92 }
93 
94 
95 my @java_paths = ($ENV{MTR_JAVA}, $ENV{JAVA_HOME}, $ENV{JDK_HOME});
96 
97 push(@java_paths, @arch_paths);
98 push(@java_paths, "*"); # empty path for "java on PATH variable"
99 
100 my $java_loc = "";
101 our $java_version = "";
102 
103 sub java_exists {
104  my ($path, $exe) = @_;
105 
106  $exe .= ".exe" if IS_WINDOWS;
107  $path .= $pathsep if length($path) > 0;
108  my $exists = $path . $exe;
109  my $devnull = "/dev/null";
110  $devnull = "NUL" if IS_WINDOWS;
111 
112  system($exists . " " . $java_args . " -version > " . $devnull);
113 
114  my $ret = $exists if ($? == 0);
115  if($? == 0) {
116  my $ret = $exists;
117  open(VER, "$exists -version 2>&1 |");
118  $java_version = <VER>;
119  close(VER);
120  }
121 
122  return $ret;
123 }
124 
125 foreach my $path (@java_paths)
126 {
127  if (!defined $path || $path eq '') {
128  next;
129  }
130  if ($path eq "*" ) {
131  # java on PATH env case
132  $path = "";
133  } else {
134  # std case
135  $path .= $pathsep . "bin";
136  }
137 
138  my $tmp = java_exists($path, "java");
139 
140  if ($tmp ne "")
141  {
142  $java_loc = $tmp;
143  last;
144  }
145 }
146 
147 my $vardir = $ENV{MYSQLTEST_VARDIR} or die "Need MYSQLTEST_VARDIR";
148 my $F = IO::File->new("$vardir/tmp/have_java_result.inc", "w") or die;
149 if ($java_loc eq '') {
150  print $F "--skip Could not find Java executable;\n";
151 } else {
152  print $F "--let \MTR_JAVA= $java_loc\n";
153  print $F "--let \MTR_JAVA_ARGS= $java_args\n";
154  print $F "--let \MTR_JAVA_VERSION= $java_version\n";
155  print $F "--echo Found Java: '\$MTR_JAVA'\n";
156  print $F "--echo Java version: '\$MTR_JAVA_VERSION'\n";
157 }
158 $F->close();
159 
160 EOF
161 
162 --source $MYSQLTEST_VARDIR/tmp/have_java_result.inc