diff src/main.in.cc @ 18360:f1ee47866e6b stable

use common code to get OCTAVE_HOME in main, octave-config and mkoctfile * src/shared-fcns.h: New file. * src/Makefile.in: Include it in the list of headers to distribute. * main.in.cc, mkoctfile.in.cc, octave-config.in.cc: Use functions from shared-fcns.h to find and substitute OCTAVE_HOME.
author John W. Eaton <jwe@octave.org>
date Fri, 24 Jan 2014 03:40:55 -0500
parents 65e4e0569ed4
children 87d96a7d50e0
line wrap: on
line diff
--- a/src/main.in.cc	Fri Jan 24 03:24:46 2014 -0500
+++ b/src/main.in.cc	Fri Jan 24 03:40:55 2014 -0500
@@ -58,65 +58,7 @@
 #define OCTAVE_PREFIX %OCTAVE_PREFIX%
 #endif
 
-#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
-
-#define WIN32_LEAN_AND_MEAN
-#include <tlhelp32.h>
-
-static std::string
-w32_get_octave_home (void)
-{
-  std::string retval;
-
-  std::string bin_dir;
-
-  HANDLE h = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE
-#ifdef TH32CS_SNAPMODULE32
-                                       | TH32CS_SNAPMODULE32
-#endif
-                                       , 0);
-
-  if (h != INVALID_HANDLE_VALUE)
-    {
-      MODULEENTRY32 mod_info;
-
-      ZeroMemory (&mod_info, sizeof (mod_info));
-      mod_info.dwSize = sizeof (mod_info);
-
-      if (Module32First (h, &mod_info))
-        {
-          do
-            {
-              std::string mod_name (mod_info.szModule);
-
-              if (mod_name.find ("octave") != std::string::npos)
-                {
-                  bin_dir = mod_info.szExePath;
-
-                  if (bin_dir[bin_dir.length () - 1] != '\\')
-                    bin_dir.append (1, '\\');
-
-                  break;
-                }
-            }
-          while (Module32Next (h, &mod_info));
-        }
-
-      CloseHandle (h);
-    }
-
-  if (! bin_dir.empty ())
-    {
-      size_t pos = bin_dir.rfind ("\\bin\\");
-
-      if (pos != std::string::npos)
-        retval = bin_dir.substr (0, pos);
-    }
-
-  return retval;
-}
-
-#endif
+#include "shared-fcns.h"
 
 #include <cstdlib>
 
@@ -374,62 +316,6 @@
 
 #endif
 
-// Find the directory where the octave binary is supposed to be
-// installed.
-
-#if (defined (OCTAVE_HAVE_WINDOWS_FILESYSTEM) \
-     && ! defined (OCTAVE_HAVE_POSIX_FILESYSTEM))
-static const char dir_sep_char = '\\';
-#else
-static const char dir_sep_char = '/';
-#endif
-
-static std::string
-octave_getenv (const std::string& name)
-{
-  char *value = ::getenv (name.c_str ());
-
-  return value ? value : "";
-}
-
-static std::string
-get_octave_home (void)
-{
-  std::string oh = octave_getenv ("OCTAVE_HOME");
-
-#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
-  if (oh.empty ())
-    oh = w32_get_octave_home ();
-#endif
-
-  return oh.empty () ? std::string (OCTAVE_PREFIX) : oh;
-}
-
-static std::string
-subst_octave_home (const std::string& s)
-{
-  std::string retval;
-
-  std::string octave_home = get_octave_home ();
-
-  std::string prefix = OCTAVE_PREFIX;
-
-  retval = s;
-
-  if (octave_home != prefix)
-    {
-      octave_idx_type len = prefix.length ();
-
-      if (s.substr (0, len) == prefix)
-        retval.replace (0, len, octave_home);
-    }
-
-  if (dir_sep_char != '/')
-    std::replace (retval.begin (), retval.end (), '/', dir_sep_char);
-
-  return retval;
-}
-
 static std::string
 get_octave_bindir (void)
 {