Mercurial > hg > octave-nkf
diff src/main.in.cc @ 18428: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 +++ b/src/main.in.cc @@ -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) {