diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 563c47e90815f4302b7214e6532fc8921c3e47e0..f941b07e91b5823ef262a45c19c090c79b29f790 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -643,7 +643,7 @@ sub command_line_setup () {
 
   $glob_hostname=  mtr_short_hostname();
 
-  # 'basedir' is always above "mysql-test" directory ...
+  # Find the absolute path to the test directory
   $glob_mysql_test_dir=  cwd();
   if ( $glob_cygwin_perl )
   {
@@ -651,12 +651,20 @@ sub command_line_setup () {
     $glob_mysql_test_dir= `cygpath -m "$glob_mysql_test_dir"`;
     chomp($glob_mysql_test_dir);
   }
-  # ... direct parent for "tar.gz" installations, ...
-  $glob_basedir=         dirname($glob_mysql_test_dir);
-  # ... or one more level up, for RPM installations.
-  if ( ! -d "$glob_basedir/bin" )
+
+  # In most cases, the base directory we find everything relative to,
+  # is the parent directory of the "mysql-test" directory. For source
+  # distributions, TAR binary distributions and some other packages.
+  $glob_basedir= dirname($glob_mysql_test_dir);
+
+  # In the RPM case, binaries and libraries are installed in the
+  # default system locations, instead of having our own private base
+  # directory. And we install "/usr/share/mysql-test". Moving up one
+  # more directory relative to "mysql-test" gives us a usable base
+  # directory for RPM installs.
+  if ( ! $opt_source_dist and ! -d "$glob_basedir/bin" )
   {
-    $glob_basedir=       dirname($glob_basedir);
+    $glob_basedir= dirname($glob_basedir);
   }
 
   # Expect mysql-bench to be located adjacent to the source tree, by default