Mercurial > octave-dspies
view src/octave-config.in.cc @ 18357:159ddd7ce1b3 stable
octave-config: Rebase dir variables to OCTAVE_HOME only when it is defined
* octave-config.in.cc (initialize): Only substitute OCTAVE_HOME for
PREFIX when it is in the environment. This restores constistency with
the removed shell script version.
author | Mike Miller <mtmiller@ieee.org> |
---|---|
date | Fri, 24 Jan 2014 00:52:07 -0500 |
parents | 50505bf88b82 |
children | f1ee47866e6b |
line wrap: on
line source
/* Copyright (C) 2008-2013 Michael Goffioul This file is part of Octave. Octave is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see <http://www.gnu.org/licenses/>. */ #if defined (HAVE_CONFIG_H) #include <config.h> #endif #include <string> #include <map> #include <iostream> #include <algorithm> #include <cstdlib> #if defined (__WIN32__) && ! defined (_POSIX_VERSION) #include <windows.h> #endif static bool initialized = false; 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" "\n" " -h, -?, --help Print this message.\n" "\n" " --m-site-dir Print the name of the directory where Octave\n" " expects to find locally installed .m files.\n" "\n" " --oct-site-dir Print the name of the directory where Octave\n" " expects to find locally installed .oct files.\n" "\n" " -p VAR, --print VAR Print the value of the given configuration\n" " variable VAR. Recognized variables are:\n" "\n" " API_VERSION LOCALAPIOCTFILEDIR\n" " ARCHLIBDIR LOCALARCHLIBDIR\n" " BINDIR LOCALFCNFILEDIR\n" " CANONICAL_HOST_TYPE LOCALOCTFILEDIR\n" " DATADIR LOCALSTARTUPFILEDIR\n" " DATAROOTDIR LOCALVERARCHLIBDIR\n" " DEFAULT_PAGER LOCALVERFCNFILEDIR\n" " EXEC_PREFIX LOCALVEROCTFILEDIR\n" " FCNFILEDIR MAN1DIR\n" " IMAGEDIR MAN1EXT\n" " INCLUDEDIR MANDIR\n" " INFODIR OCTFILEDIR\n" " INFOFILE OCTINCLUDEDIR\n" " LIBDIR OCTLIBDIR\n" " LIBEXECDIR PREFIX\n" " LOCALAPIARCHLIBDIR STARTUPFILEDIR\n" " LOCALAPIFCNFILEDIR VERSION\n" "\n" " -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["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; } } int main (int argc, char **argv) { initialize (); if (argc == 1) { std::cout << usage_msg << std::endl; return 1; } for (int i = 1; i < argc; i++) { std::string arg (argv[i]); if (arg == "-h" || arg == "-?" || arg == "--help") { std::cout << usage_msg << std::endl; std::cout << help_msg; return 0; } else if (arg == "--m-site-dir") std::cout << vars["LOCALVERFCNFILEDIR"] << std::endl; else if (arg == "--oct-site-dir") std::cout << vars["LOCALVEROCTFILEDIR"] << std::endl; else if (arg == "-v" || arg == "--version") std::cout << vars["VERSION"] << std::endl; else if (arg == "-p" || arg == "--print") { if (i < argc-1) { arg = argv[++i]; std::cout << vars[arg] << std::endl; } else { std::cerr << "octave-config: " << arg << " options requires argument" << std::endl; return 1; } } else { std::cerr << "octave-config: unrecognized argument " << arg << std::endl; return 1; } } return 0; }