diff src/octave-config.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 159ddd7ce1b3
children d902542221c8
line wrap: on
line diff
--- a/src/octave-config.in.cc
+++ b/src/octave-config.in.cc
@@ -1,3 +1,4 @@
+// %NO_EDIT_WARNING%
 /*
 
 Copyright (C) 2008-2013 Michael Goffioul
@@ -30,14 +31,16 @@
 #include <algorithm>
 #include <cstdlib>
 
-#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
-#include <windows.h>
+#ifndef OCTAVE_PREFIX
+#define OCTAVE_PREFIX %OCTAVE_PREFIX%
 #endif
 
-static bool initialized = false;
+#include "shared-fcns.h"
+
 static std::map<std::string,std::string> vars;
-static std::string OCTAVE_HOME, PREFIX;
+
 static std::string usage_msg = "usage: octave-config [options]";
+
 static std::string help_msg =
 "\n"
 "Options:\n"
@@ -74,156 +77,46 @@
 "  -v, --version         Print the Octave version number.\n"
 "\n";
 
-static std::string
-substitute_prefix (const std::string& s, const std::string& prefix,
-                   const std::string new_prefix)
-{
-  std::string retval = s;
-
-  if (!prefix.empty () && new_prefix != prefix)
-    {
-      int len = prefix.length ();
-      if (retval.find (prefix) == 0)
-        retval.replace (0, len, new_prefix);
-    }
-
-#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
-  std::replace (retval.begin (), retval.end (), '/', '\\');
-#endif
-
-  return retval;
-}
-
 static void
 initialize (void)
 {
-  if (initialized)
-    return;
-
-  initialized = true;
-
-  const char *homestr = getenv ("OCTAVE_HOME");
-  OCTAVE_HOME = (homestr ? homestr : "");
-  PREFIX = %OCTAVE_PREFIX%;
-
-#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
-  int n = 1024;
-
-  std::string bin_dir (n, '\0');
-
-  while (true)
-    {
-      int status = GetModuleFileName (0, &bin_dir[0], n);
-
-      if (status < n)
-        {
-          bin_dir.resize (status);
-          break;
-        }
-      else
-        {
-          n *= 2;
-          bin_dir.resize (n);
-        }
-    }
-
-  if (! bin_dir.empty ())
-    {
-      size_t pos = bin_dir.rfind ("\\bin\\");
-
-      if (pos != std::string::npos)
-        OCTAVE_HOME = bin_dir.substr (0, pos);
-    }
-#endif
+  vars["OCTAVE_HOME"] = get_octave_home ();
+  vars["PREFIX"] = OCTAVE_PREFIX;
 
   vars["API_VERSION"] = %OCTAVE_API_VERSION%;
   vars["CANONICAL_HOST_TYPE"] = %OCTAVE_CANONICAL_HOST_TYPE%;
   vars["DEFAULT_PAGER"] = %OCTAVE_DEFAULT_PAGER%;
-  vars["ARCHLIBDIR"] = %OCTAVE_ARCHLIBDIR%;
-  vars["BINDIR"] = %OCTAVE_BINDIR%;
-  vars["DATADIR"] = %OCTAVE_DATADIR%;
-  vars["DATAROOTDIR"] = %OCTAVE_DATAROOTDIR%;
-  vars["EXEC_PREFIX"] = %OCTAVE_EXEC_PREFIX%;
-  vars["FCNFILEDIR"] = %OCTAVE_FCNFILEDIR%;
-  vars["IMAGEDIR"] = %OCTAVE_IMAGEDIR%;
-  vars["INCLUDEDIR"] = %OCTAVE_INCLUDEDIR%;
-  vars["INFODIR"] = %OCTAVE_INFODIR%;
-  vars["INFOFILE"] = %OCTAVE_INFOFILE%;
-  vars["LIBDIR"] = %OCTAVE_LIBDIR%;
-  vars["LIBEXECDIR"] = %OCTAVE_LIBEXECDIR%;
-  vars["LOCALAPIARCHLIBDIR"] = %OCTAVE_LOCALAPIARCHLIBDIR%;
-  vars["LOCALAPIFCNFILEDIR"] = %OCTAVE_LOCALAPIFCNFILEDIR%;
-  vars["LOCALAPIOCTFILEDIR"] = %OCTAVE_LOCALAPIOCTFILEDIR%;
-  vars["LOCALARCHLIBDIR"] = %OCTAVE_LOCALARCHLIBDIR%;
-  vars["LOCALFCNFILEDIR"] = %OCTAVE_LOCALFCNFILEDIR%;
-  vars["LOCALOCTFILEDIR"] = %OCTAVE_LOCALOCTFILEDIR%;
-  vars["LOCALSTARTUPFILEDIR"] = %OCTAVE_LOCALSTARTUPFILEDIR%;
-  vars["LOCALVERARCHLIBDIR"] = %OCTAVE_LOCALVERARCHLIBDIR%;
-  vars["LOCALVERFCNFILEDIR"] = %OCTAVE_LOCALVERFCNFILEDIR%;
-  vars["LOCALVEROCTFILEDIR"] = %OCTAVE_LOCALVEROCTFILEDIR%;
-  vars["MAN1DIR"] = %OCTAVE_MAN1DIR%;
   vars["MAN1EXT"] = %OCTAVE_MAN1EXT%;
-  vars["MANDIR"] = %OCTAVE_MANDIR%;
-  vars["OCTFILEDIR"] = %OCTAVE_OCTFILEDIR%;
-  vars["OCTINCLUDEDIR"] = %OCTAVE_OCTINCLUDEDIR%;
-  vars["OCTLIBDIR"] = %OCTAVE_OCTLIBDIR%;
-  vars["PREFIX"] = %OCTAVE_PREFIX%;
-  vars["STARTUPFILEDIR"] = %OCTAVE_STARTUPFILEDIR%;
   vars["VERSION"] = %OCTAVE_VERSION%;
 
-  if (! OCTAVE_HOME.empty ())
-    {
-      vars["ARCHLIBDIR"] = substitute_prefix (vars["ARCHLIBDIR"],
-                                              PREFIX, OCTAVE_HOME);
-      vars["BINDIR"] = substitute_prefix (vars["BINDIR"], PREFIX, OCTAVE_HOME);
-      vars["DATADIR"] = substitute_prefix (vars["DATADIR"], PREFIX, OCTAVE_HOME);
-      vars["DATAROOTDIR"] = substitute_prefix (vars["DATAROOTDIR"],
-                                               PREFIX, OCTAVE_HOME);
-      vars["EXEC_PREFIX"] = substitute_prefix (vars["EXEC_PREFIX"],
-                                               PREFIX, OCTAVE_HOME);
-      vars["FCNFILEDIR"] = substitute_prefix (vars["FCNFILEDIR"],
-                                              PREFIX, OCTAVE_HOME);
-      vars["IMAGEDIR"] = substitute_prefix (vars["IMAGEDIR"], PREFIX, OCTAVE_HOME);
-      vars["INCLUDEDIR"] = substitute_prefix (vars["INCLUDEDIR"],
-                                              PREFIX, OCTAVE_HOME);
-      vars["INFODIR"] = substitute_prefix (vars["INFODIR"], PREFIX, OCTAVE_HOME);
-      vars["INFOFILE"] = substitute_prefix (vars["INFOFILE"], PREFIX, OCTAVE_HOME);
-      vars["LIBDIR"] = substitute_prefix (vars["LIBDIR"], PREFIX, OCTAVE_HOME);
-      vars["LIBEXECDIR"] = substitute_prefix (vars["LIBEXECDIR"],
-                                              PREFIX, OCTAVE_HOME);
-      vars["LOCALAPIARCHLIBDIR"] = substitute_prefix (vars["LOCALAPIARCHLIBDIR"],
-                                                      PREFIX, OCTAVE_HOME);
-      vars["LOCALAPIFCNFILEDIR"] = substitute_prefix (vars["LOCALAPIFCNFILEDIR"],
-                                                      PREFIX, OCTAVE_HOME);
-      vars["LOCALAPIOCTFILEDIR"] = substitute_prefix (vars["LOCALAPIOCTFILEDIR"],
-                                                      PREFIX, OCTAVE_HOME);
-      vars["LOCALARCHLIBDIR"] = substitute_prefix (vars["LOCALARCHLIBDIR"],
-                                                   PREFIX, OCTAVE_HOME);
-      vars["LOCALFCNFILEDIR"] = substitute_prefix (vars["LOCALFCNFILEDIR"],
-                                                   PREFIX, OCTAVE_HOME);
-      vars["LOCALOCTFILEDIR"] = substitute_prefix (vars["LOCALOCTFILEDIR"],
-                                                   PREFIX, OCTAVE_HOME);
-      vars["LOCALSTARTUPFILEDIR"] = substitute_prefix (vars["LOCALSTARTUPFILEDIR"],
-                                                       PREFIX, OCTAVE_HOME);
-      vars["LOCALVERARCHLIBDIR"] = substitute_prefix (vars["LOCALVERARCHLIBDIR"],
-                                                      PREFIX, OCTAVE_HOME);
-      vars["LOCALVERFCNFILEDIR"] = substitute_prefix (vars["LOCALVERFCNFILEDIR"],
-                                                      PREFIX, OCTAVE_HOME);
-      vars["LOCALVEROCTFILEDIR"] = substitute_prefix (vars["LOCALVEROCTFILEDIR"],
-                                                      PREFIX, OCTAVE_HOME);
-      vars["MAN1DIR"] = substitute_prefix (vars["MAN1DIR"], PREFIX, OCTAVE_HOME);
-      vars["MANDIR"] = substitute_prefix (vars["MANDIR"], PREFIX, OCTAVE_HOME);
-      vars["OCTFILEDIR"] = substitute_prefix (vars["OCTFILEDIR"],
-                                              PREFIX, OCTAVE_HOME);
-      vars["OCTINCLUDEDIR"] = substitute_prefix (vars["OCTINCLUDEDIR"],
-                                                 PREFIX, OCTAVE_HOME);
-      vars["OCTLIBDIR"] = substitute_prefix (vars["OCTLIBDIR"],
-                                             PREFIX, OCTAVE_HOME);
-      vars["STARTUPFILEDIR"] = substitute_prefix (vars["STARTUPFILEDIR"],
-                                                  PREFIX, OCTAVE_HOME);
-
-      vars["PREFIX"] = OCTAVE_HOME;
-    }
+  vars["ARCHLIBDIR"] = subst_octave_home (%OCTAVE_ARCHLIBDIR%);
+  vars["BINDIR"] = subst_octave_home (%OCTAVE_BINDIR%);
+  vars["DATADIR"] = subst_octave_home (%OCTAVE_DATADIR%);
+  vars["DATAROOTDIR"] = subst_octave_home (%OCTAVE_DATAROOTDIR%);
+  vars["EXEC_PREFIX"] = subst_octave_home (%OCTAVE_EXEC_PREFIX%);
+  vars["FCNFILEDIR"] = subst_octave_home (%OCTAVE_FCNFILEDIR%);
+  vars["IMAGEDIR"] = subst_octave_home (%OCTAVE_IMAGEDIR%);
+  vars["INCLUDEDIR"] = subst_octave_home (%OCTAVE_INCLUDEDIR%);
+  vars["INFODIR"] = subst_octave_home (%OCTAVE_INFODIR%);
+  vars["INFOFILE"] = subst_octave_home (%OCTAVE_INFOFILE%);
+  vars["LIBDIR"] = subst_octave_home (%OCTAVE_LIBDIR%);
+  vars["LIBEXECDIR"] = subst_octave_home (%OCTAVE_LIBEXECDIR%);
+  vars["LOCALAPIARCHLIBDIR"] = subst_octave_home (%OCTAVE_LOCALAPIARCHLIBDIR%);
+  vars["LOCALAPIFCNFILEDIR"] = subst_octave_home (%OCTAVE_LOCALAPIFCNFILEDIR%);
+  vars["LOCALAPIOCTFILEDIR"] = subst_octave_home (%OCTAVE_LOCALAPIOCTFILEDIR%);
+  vars["LOCALARCHLIBDIR"] = subst_octave_home (%OCTAVE_LOCALARCHLIBDIR%);
+  vars["LOCALFCNFILEDIR"] = subst_octave_home (%OCTAVE_LOCALFCNFILEDIR%);
+  vars["LOCALOCTFILEDIR"] = subst_octave_home (%OCTAVE_LOCALOCTFILEDIR%);
+  vars["LOCALSTARTUPFILEDIR"] = subst_octave_home (%OCTAVE_LOCALSTARTUPFILEDIR%);
+  vars["LOCALVERARCHLIBDIR"] = subst_octave_home (%OCTAVE_LOCALVERARCHLIBDIR%);
+  vars["LOCALVERFCNFILEDIR"] = subst_octave_home (%OCTAVE_LOCALVERFCNFILEDIR%);
+  vars["LOCALVEROCTFILEDIR"] = subst_octave_home (%OCTAVE_LOCALVEROCTFILEDIR%);
+  vars["MAN1DIR"] = subst_octave_home (%OCTAVE_MAN1DIR%);
+  vars["MANDIR"] = subst_octave_home (%OCTAVE_MANDIR%);
+  vars["OCTFILEDIR"] = subst_octave_home (%OCTAVE_OCTFILEDIR%);
+  vars["OCTINCLUDEDIR"] = subst_octave_home (%OCTAVE_OCTINCLUDEDIR%);
+  vars["OCTLIBDIR"] = subst_octave_home (%OCTAVE_OCTLIBDIR%);
+  vars["STARTUPFILEDIR"] = subst_octave_home (%OCTAVE_STARTUPFILEDIR%);
 }
 
 int