GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
octave-config.in.cc
Go to the documentation of this file.
1 // %NO_EDIT_WARNING%
2 /*
3 
4 Copyright (C) 2008-2018 Michael Goffioul
5 
6 This file is part of Octave.
7 
8 Octave is free software: you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12 
13 Octave is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, see
20 <https://www.gnu.org/licenses/>.
21 
22 */
23 
24 #if defined (HAVE_CONFIG_H)
25 # include "config.h"
26 #endif
27 
28 #include <string>
29 #include <map>
30 #include <iostream>
31 #include <algorithm>
32 #include <cstdlib>
33 
34 #if ! defined (OCTAVE_PREFIX)
35 # define OCTAVE_PREFIX %OCTAVE_PREFIX%
36 #endif
37 
38 #if ! defined (OCTAVE_EXEC_PREFIX)
39 # define OCTAVE_EXEC_PREFIX %OCTAVE_EXEC_PREFIX%
40 #endif
41 
42 #ifndef OCTAVE_UNUSED
43 # define OCTAVE_UNUSED
44 #endif
45 
46 #include "shared-fcns.h"
47 
48 static std::map<std::string,std::string> vars;
49 
50 static std::string usage_msg = "usage: octave-config [options]";
51 
53 "\n"
54 "Options:\n"
55 "\n"
56 " -h, -?, --help Print this message.\n"
57 "\n"
58 " --m-site-dir Print the name of the directory where Octave\n"
59 " expects to find locally installed .m files.\n"
60 "\n"
61 " --oct-site-dir Print the name of the directory where Octave\n"
62 " expects to find locally installed .oct files.\n"
63 "\n"
64 " -p VAR, --print VAR Print the value of the given configuration\n"
65 " variable VAR. Recognized variables are:\n"
66 "\n"
67 " API_VERSION LOCALFCNFILEDIR\n"
68 " ARCHLIBDIR LOCALOCTFILEDIR\n"
69 " BINDIR LOCALSTARTUPFILEDIR\n"
70 " CANONICAL_HOST_TYPE LOCALVERARCHLIBDIR\n"
71 " DATADIR LOCALVERFCNFILEDIR\n"
72 " DATAROOTDIR LOCALVEROCTFILEDIR\n"
73 " DEFAULT_PAGER MAN1DIR\n"
74 " EXEC_PREFIX MAN1EXT\n"
75 " EXEEXT MANDIR\n"
76 " FCNFILEDIR OCTAVE_EXEC_HOME\n"
77 " IMAGEDIR OCTAVE_HOME\n"
78 " INCLUDEDIR OCTDATADIR\n"
79 " INFODIR OCTDOCDIR\n"
80 " INFOFILE OCTFILEDIR\n"
81 " LIBDIR OCTFONTSDIR\n"
82 " LIBEXECDIR OCTINCLUDEDIR\n"
83 " LOCALAPIARCHLIBDIR OCTLIBDIR\n"
84 " LOCALAPIFCNFILEDIR STARTUPFILEDIR\n"
85 " LOCALAPIOCTFILEDIR VERSION\n"
86 " LOCALARCHLIBDIR\n"
87 "\n"
88 " -v, --version Print the Octave version number.\n"
89 "\n";
90 
91 static void
92 initialize (void)
93 {
94  set_octave_home ();
95 
96  vars["OCTAVE_HOME"] = Voctave_home;
97  vars["OCTAVE_EXEC_HOME"] = Voctave_exec_home;
98 
99  vars["API_VERSION"] = %OCTAVE_API_VERSION%;
100  vars["CANONICAL_HOST_TYPE"] = %OCTAVE_CANONICAL_HOST_TYPE%;
101  vars["DEFAULT_PAGER"] = %OCTAVE_DEFAULT_PAGER%;
102  vars["EXEEXT"] = %OCTAVE_EXEEXT%;
103  vars["MAN1EXT"] = %OCTAVE_MAN1EXT%;
104  vars["VERSION"] = %OCTAVE_VERSION%;
105 
106  vars["ARCHLIBDIR"] = prepend_octave_exec_home (%OCTAVE_ARCHLIBDIR%);
108  vars["DATADIR"] = prepend_octave_home (%OCTAVE_DATADIR%);
109  vars["DATAROOTDIR"] = prepend_octave_home (%OCTAVE_DATAROOTDIR%);
110  vars["FCNFILEDIR"] = prepend_octave_home (%OCTAVE_FCNFILEDIR%);
111  vars["IMAGEDIR"] = prepend_octave_home (%OCTAVE_IMAGEDIR%);
112  vars["INCLUDEDIR"] = prepend_octave_home (%OCTAVE_INCLUDEDIR%);
113  vars["INFODIR"] = prepend_octave_home (%OCTAVE_INFODIR%);
114  vars["INFOFILE"] = prepend_octave_home (%OCTAVE_INFOFILE%);
116  vars["LIBEXECDIR"] = prepend_octave_exec_home (%OCTAVE_LIBEXECDIR%);
117  vars["LOCALAPIARCHLIBDIR"] = prepend_octave_exec_home (%OCTAVE_LOCALAPIARCHLIBDIR%);
118  vars["LOCALAPIFCNFILEDIR"] = prepend_octave_home (%OCTAVE_LOCALAPIFCNFILEDIR%);
119  vars["LOCALAPIOCTFILEDIR"] = prepend_octave_exec_home (%OCTAVE_LOCALAPIOCTFILEDIR%);
120  vars["LOCALARCHLIBDIR"] = prepend_octave_exec_home (%OCTAVE_LOCALARCHLIBDIR%);
121  vars["LOCALFCNFILEDIR"] = prepend_octave_home (%OCTAVE_LOCALFCNFILEDIR%);
122  vars["LOCALOCTFILEDIR"] = prepend_octave_exec_home (%OCTAVE_LOCALOCTFILEDIR%);
123  vars["LOCALSTARTUPFILEDIR"] = prepend_octave_home (%OCTAVE_LOCALSTARTUPFILEDIR%);
124  vars["LOCALVERARCHLIBDIR"] = prepend_octave_exec_home (%OCTAVE_LOCALVERARCHLIBDIR%);
125  vars["LOCALVERFCNFILEDIR"] = prepend_octave_home (%OCTAVE_LOCALVERFCNFILEDIR%);
126  vars["LOCALVEROCTFILEDIR"] = prepend_octave_exec_home (%OCTAVE_LOCALVEROCTFILEDIR%);
127  vars["MAN1DIR"] = prepend_octave_home (%OCTAVE_MAN1DIR%);
128  vars["MANDIR"] = prepend_octave_home (%OCTAVE_MANDIR%);
129  vars["OCTDATADIR"] = prepend_octave_home (%OCTAVE_OCTDATADIR%);
130  vars["OCTDOCDIR"] = prepend_octave_home (%OCTAVE_OCTDOCDIR%);
131  vars["OCTFILEDIR"] = prepend_octave_exec_home (%OCTAVE_OCTFILEDIR%);
132  vars["OCTFONTSDIR"] = prepend_octave_home (%OCTAVE_OCTFONTSDIR%);
133  vars["OCTINCLUDEDIR"] = prepend_octave_home (%OCTAVE_OCTINCLUDEDIR%);
135  vars["STARTUPFILEDIR"] = prepend_octave_home (%OCTAVE_STARTUPFILEDIR%);
136 }
137 
138 int
139 main (int argc, char **argv)
140 {
141  initialize ();
142 
143  if (argc == 1)
144  {
145  std::cout << usage_msg << std::endl;
146  return 1;
147  }
148 
149  for (int i = 1; i < argc; i++)
150  {
151  std::string arg (argv[i]);
152 
153  if (arg == "-h" || arg == "-?" || arg == "--help")
154  {
155  std::cout << usage_msg << std::endl;
156  std::cout << help_msg;
157  return 0;
158  }
159  else if (arg == "--m-site-dir")
160  std::cout << vars["LOCALVERFCNFILEDIR"] << std::endl;
161  else if (arg == "--oct-site-dir")
162  std::cout << vars["LOCALVEROCTFILEDIR"] << std::endl;
163  else if (arg == "-v" || arg == "--version")
164  std::cout << vars["VERSION"] << std::endl;
165  else if (arg == "-p" || arg == "--print")
166  {
167  if (i < argc-1)
168  {
169  arg = argv[++i];
170  std::cout << vars[arg] << std::endl;
171  }
172  else
173  {
174  std::cerr << "octave-config: " << arg
175  << " options requires argument" << std::endl;
176  return 1;
177  }
178  }
179  else
180  {
181  std::cerr << "octave-config: unrecognized argument " << arg
182  << std::endl;
183  return 1;
184  }
185  }
186 
187  return 0;
188 }
static void set_octave_home(void)
Definition: shared-fcns.h:102
#define OCTAVE_OCTINCLUDEDIR
static std::string prepend_octave_exec_home(const std::string &s)
Definition: shared-fcns.h:186
#define OCTAVE_ARCHLIBDIR
Definition: main.in.cc:52
static std::string Voctave_exec_home
Definition: shared-fcns.h:99
#define OCTAVE_LOCALAPIOCTFILEDIR
#define OCTAVE_MANDIR
#define OCTAVE_LOCALAPIARCHLIBDIR
#define OCTAVE_OCTFONTSDIR
#define OCTAVE_OCTLIBDIR
int argc
Definition: load-save.cc:646
static void initialize(void)
#define OCTAVE_INFOFILE
#define OCTAVE_STARTUPFILEDIR
#define OCTAVE_INFODIR
#define OCTAVE_LIBDIR
#define OCTAVE_LOCALSTARTUPFILEDIR
int main(int argc, char **argv)
#define OCTAVE_API_VERSION
Definition: version.in.h:45
octave_value arg
Definition: pr-output.cc:3244
string_vector argv
Definition: load-save.cc:648
#define OCTAVE_DATADIR
#define OCTAVE_VERSION
Definition: main.in.cc:48
#define OCTAVE_BINDIR
Definition: main.in.cc:56
static std::map< std::string, std::string > vars
#define OCTAVE_OCTDOCDIR
#define OCTAVE_LOCALFCNFILEDIR
#define OCTAVE_LOCALAPIFCNFILEDIR
#define OCTAVE_OCTFILEDIR
#define OCTAVE_DATAROOTDIR
#define OCTAVE_FCNFILEDIR
static std::string Voctave_home
Definition: shared-fcns.h:98
#define OCTAVE_DEFAULT_PAGER
static std::string usage_msg
#define OCTAVE_LOCALVERARCHLIBDIR
#define OCTAVE_LOCALVERFCNFILEDIR
#define OCTAVE_MAN1DIR
static std::string help_msg
#define OCTAVE_LOCALOCTFILEDIR
static OCTAVE_UNUSED std::string prepend_octave_home(const std::string &s)
Definition: shared-fcns.h:180
#define OCTAVE_CANONICAL_HOST_TYPE
#define OCTAVE_LOCALARCHLIBDIR
#define OCTAVE_OCTDATADIR
for i
Definition: data.cc:5264
#define OCTAVE_MAN1EXT
#define OCTAVE_INCLUDEDIR
#define OCTAVE_LOCALVEROCTFILEDIR
#define OCTAVE_LIBEXECDIR
#define OCTAVE_IMAGEDIR
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:888