File: defaults.cc

package info (click to toggle)
octave 6.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 124,192 kB
  • sloc: cpp: 322,665; ansic: 68,088; fortran: 20,980; objc: 8,121; sh: 7,719; yacc: 4,266; lex: 4,123; perl: 1,530; java: 1,366; awk: 1,257; makefile: 424; xml: 147
file content (509 lines) | stat: -rw-r--r-- 12,536 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 1996-2021 The Octave Project Developers
//
// See the file COPYRIGHT.md in the top-level directory of this
// distribution or <https://octave.org/copyright/>.
//
// 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
// <https://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////////////

#if defined (HAVE_CONFIG_H)
#  include "config.h"
#endif

#include <cstdlib>

#include <algorithm>
#include <string>

#include "dir-ops.h"
#include "file-ops.h"
#include "oct-env.h"

#include "defaults.h"
#include "defun.h"
#include "error.h"
#include "file-ops.h"
#include "ovl.h"
#include "ov.h"
#include "variables.h"
#include "version.h"

#include "default-defs.h"

namespace octave
{
  namespace config
  {
    // Variables that name directories or files are substituted into source
    // files with "${prefix}/" stripped from the beginning of the string.

    // All configure variables of this form should be specified as absolute
    // directory names.  The only ones that should not be absolute here are
    // ones that have had "${prefix}/" or "${exec_prefix} stripped.

    static std::string
    prepend_home_dir (const std::string& hd, const std::string& s)
    {
      std::string retval = s;

      char dir_sep_char = sys::file_ops::dir_sep_char ();

      if (! sys::env::absolute_pathname (retval))
        retval = hd + dir_sep_char + s;

      if (dir_sep_char != '/')
        std::replace (retval.begin (), retval.end (), '/', dir_sep_char);

      return retval;
    }

    static std::string get_octave_home (void)
    {
      std::string op = OCTAVE_PREFIX;

      std::string oh = sys::env::getenv ("OCTAVE_HOME");

      // If OCTAVE_HOME is set in the environment, use that.  Otherwise,
      // default to ${prefix} from configure.

      return oh.empty () ? op : oh;
    }

    static std::string get_octave_exec_home (void)
    {
      std::string op = OCTAVE_PREFIX;
      std::string oep = OCTAVE_EXEC_PREFIX;

      std::string oh = sys::env::getenv ("OCTAVE_HOME");
      std::string oeh = sys::env::getenv ("OCTAVE_EXEC_HOME");

      // If OCTAVE_EXEC_HOME is set in the environment, use that.
      // Otherwise, if ${prefix} and ${exec_prefix} from configure are set
      // to the same value, use OCTAVE_HOME from the environment if it is set.
      // Otherwise, default to ${exec_prefix} from configure.

      if (! oeh.empty ())
        return oeh;

      if (op == oep && ! oh.empty ())
        return oh;

      return oep;
    }

    static std::string get_local_site_defaults_file (void)
    {
      std::string lsf = sys::env::getenv ("OCTAVE_SITE_INITFILE");

      return lsf.empty () ? local_startupfile_dir () + "/octaverc" : lsf;
    }

    static std::string get_site_defaults_file (void)
    {
      std::string sf = sys::env::getenv ("OCTAVE_VERSION_INITFILE");

      return sf.empty () ? startupfile_dir () + "/octaverc" : sf;
    }

    std::string prepend_octave_home (const std::string& s)
    {
      return prepend_home_dir (octave_home (), s);
    }

    std::string prepend_octave_exec_home (const std::string& s)
    {
      return prepend_home_dir (octave_exec_home (), s);
    }

    std::string canonical_host_type (void)
    {
      static const std::string s_canonical_host_type
        = OCTAVE_CANONICAL_HOST_TYPE;

      return s_canonical_host_type;
    }

    std::string release (void)
    {
      static const std::string s_octave_release = OCTAVE_RELEASE;

      return s_octave_release;
    }

    std::string default_pager (void)
    {
      static const std::string s_default_pager = OCTAVE_DEFAULT_PAGER;

      return s_default_pager;
    }

    std::string octave_home (void)
    {
      static const std::string s_octave_home = get_octave_home ();

      return s_octave_home;
    }

    std::string octave_exec_home (void)
    {
      static const std::string s_octave_exec_home = get_octave_exec_home ();

      return s_octave_exec_home;
    }

    std::string bin_dir (void)
    {
      static const std::string s_bin_dir
        = prepend_octave_exec_home (OCTAVE_BINDIR);

      return s_bin_dir;
    }

    std::string data_dir (void)
    {
      static const std::string s_data_dir
        = prepend_octave_home (OCTAVE_DATADIR);

      return s_data_dir;
    }

    std::string dataroot_dir (void)
    {
      static const std::string s_dataroot_dir
        = prepend_octave_home (OCTAVE_DATAROOTDIR);

      return s_dataroot_dir;
    }

    std::string include_dir (void)
    {
      static const std::string s_include_dir
        = prepend_octave_home (OCTAVE_INCLUDEDIR);

      return s_include_dir;
    }

    std::string lib_dir (void)
    {
      static const std::string s_lib_dir
        = prepend_octave_exec_home (OCTAVE_LIBDIR);

      return s_lib_dir;
    }

    std::string libexec_dir (void)
    {
      static const std::string s_libexec_dir
        = prepend_octave_exec_home (OCTAVE_LIBEXECDIR);

      return s_libexec_dir;
    }

    std::string arch_lib_dir (void)
    {
      static const std::string s_arch_lib_dir
        = prepend_octave_exec_home (OCTAVE_ARCHLIBDIR);

      return s_arch_lib_dir;
    }

    std::string info_dir (void)
    {
      static const std::string s_info_dir
        = prepend_octave_exec_home (OCTAVE_INFODIR);

      return s_info_dir;
    }

    std::string local_ver_arch_lib_dir (void)
    {
      static const std::string s_local_ver_arch_lib_dir
        = prepend_octave_exec_home (OCTAVE_LOCALVERARCHLIBDIR);

      return s_local_ver_arch_lib_dir;
    }

    std::string local_api_arch_lib_dir (void)
    {
      static const std::string s_local_api_arch_lib_dir
        = prepend_octave_exec_home (OCTAVE_LOCALAPIARCHLIBDIR);

      return s_local_api_arch_lib_dir;
    }

    std::string local_arch_lib_dir (void)
    {
      static const std::string s_local_arch_lib_dir
        = prepend_octave_exec_home (OCTAVE_LOCALARCHLIBDIR);

      return s_local_arch_lib_dir;
    }

    std::string local_ver_oct_file_dir (void)
    {
      static const std::string s_local_ver_oct_file_dir
        = prepend_octave_exec_home (OCTAVE_LOCALVEROCTFILEDIR);

      return s_local_ver_oct_file_dir;
    }

    std::string local_api_oct_file_dir (void)
    {
      static const std::string s_local_api_oct_file_dir
        = prepend_octave_exec_home (OCTAVE_LOCALAPIOCTFILEDIR);

      return s_local_api_oct_file_dir;
    }

    std::string local_oct_file_dir (void)
    {
      static const std::string s_local_oct_file_dir
        = prepend_octave_exec_home (OCTAVE_LOCALOCTFILEDIR);

      return s_local_oct_file_dir;
    }

    std::string oct_file_dir (void)
    {
      static const std::string s_oct_file_dir
        = prepend_octave_exec_home (OCTAVE_OCTFILEDIR);

      return s_oct_file_dir;
    }

    std::string local_ver_fcn_file_dir (void)
    {
      static const std::string s_local_ver_fcn_file_dir
        = prepend_octave_home (OCTAVE_LOCALVERFCNFILEDIR);

      return s_local_ver_fcn_file_dir;
    }

    std::string local_api_fcn_file_dir (void)
    {
      static const std::string s_local_api_fcn_file_dir
        = prepend_octave_home (OCTAVE_LOCALAPIFCNFILEDIR);

      return s_local_api_fcn_file_dir;
    }

    std::string local_fcn_file_dir (void)
    {
      static const std::string s_local_fcn_file_dir
        = prepend_octave_home (OCTAVE_LOCALFCNFILEDIR);

      return s_local_fcn_file_dir;
    }

    std::string fcn_file_dir (void)
    {
      static const std::string s_fcn_file_dir
        = prepend_octave_home (OCTAVE_FCNFILEDIR);

      return s_fcn_file_dir;
    }

    std::string oct_data_dir (void)
    {
      static const std::string s_oct_data_dir
        = prepend_octave_home (OCTAVE_OCTDATADIR);

      return s_oct_data_dir;
    }

    std::string oct_doc_dir (void)
    {
      static const std::string s_oct_doc_dir
        = prepend_octave_home (OCTAVE_OCTDOCDIR);

      return s_oct_doc_dir;
    }

    std::string oct_etc_dir (void)
    {
      static const std::string s_oct_etc_dir
        = prepend_octave_home (OCTAVE_OCTETCDIR);

      return s_oct_etc_dir;
    }

    std::string oct_fonts_dir (void)
    {
      static const std::string s_oct_fonts_dir
        = prepend_octave_home (OCTAVE_OCTFONTSDIR);

      return s_oct_fonts_dir;
    }

    std::string oct_include_dir (void)
    {
      static const std::string s_oct_include_dir
        = prepend_octave_home (OCTAVE_OCTINCLUDEDIR);

      return s_oct_include_dir;
    }

    std::string oct_lib_dir (void)
    {
      static const std::string s_oct_lib_dir
        = prepend_octave_exec_home (OCTAVE_OCTLIBDIR);

      return s_oct_lib_dir;
    }

    std::string oct_locale_dir (void)
    {
      static const std::string s_oct_locale_dir
        = prepend_octave_home (OCTAVE_OCTLOCALEDIR);

      return s_oct_locale_dir;
    }

    std::string oct_tests_dir (void)
    {
      static const std::string s_oct_tests_dir
        = prepend_octave_home (OCTAVE_OCTTESTSDIR);

      return s_oct_tests_dir;
    }

    std::string man_dir (void)
    {
      static const std::string s_man_dir
        = prepend_octave_home (OCTAVE_MANDIR);

      return s_man_dir;
    }

    std::string man1_dir (void)
    {
      static const std::string s_man1_dir
        = prepend_octave_home (OCTAVE_MAN1DIR);

      return s_man1_dir;
    }

    std::string man1_ext (void)
    {
      static const std::string s_man1_ext = OCTAVE_MAN1EXT;

      return s_man1_ext;
    }

    std::string image_dir (void)
    {
      static const std::string s_image_dir
        = prepend_octave_home (OCTAVE_IMAGEDIR);

      return s_image_dir;
    }

    std::string local_startupfile_dir (void)
    {
      static const std::string s_local_startupfile_dir
        = prepend_octave_home (OCTAVE_LOCALSTARTUPFILEDIR);

      return s_local_startupfile_dir;
    }

    std::string startupfile_dir (void)
    {
      static const std::string s_startupfile_dir
        = prepend_octave_home (OCTAVE_STARTUPFILEDIR);

      return s_startupfile_dir;
    }

    std::string local_site_defaults_file (void)
    {
      static const std::string s_local_site_defaults_file
        = get_local_site_defaults_file ();

      return s_local_site_defaults_file;
    }

    std::string site_defaults_file (void)
    {
      static const std::string s_site_defaults_file
        = get_site_defaults_file ();

      return s_site_defaults_file;
    }
  }
}


DEFUN (OCTAVE_HOME, args, ,
       doc: /* -*- texinfo -*-
@deftypefn {} {} OCTAVE_HOME ()
Return the name of the top-level Octave installation directory.
OCTAVE_HOME corresponds to the configuration variable @var{prefix}.
@seealso{EXEC_PATH, IMAGE_PATH, OCTAVE_EXEC_HOME}
@end deftypefn */)
{
  if (args.length () != 0)
    print_usage ();

  return ovl (octave::config::octave_home ());
}

/*
%!assert (ischar (OCTAVE_HOME ()))
%!error OCTAVE_HOME (1)
*/

DEFUN (OCTAVE_EXEC_HOME, args, ,
       doc: /* -*- texinfo -*-
@deftypefn {} {} OCTAVE_EXEC_HOME ()
Return the name of the top-level Octave installation directory for
architecture-dependent files.  If not specified separately, the value
is the same as OCTAVE_HOME@.  OCTAVE_EXEC_HOME corresponds to the
configuration variable @var{exec_prefix}.
@seealso{EXEC_PATH, IMAGE_PATH, OCTAVE_HOME}
@end deftypefn */)
{
  if (args.length () != 0)
    print_usage ();

  return ovl (octave::config::octave_exec_home ());
}

/*
%!assert (ischar (OCTAVE_EXEC_HOME ()))
%!error OCTAVE_EXEC_HOME (1)
*/

DEFUNX ("OCTAVE_VERSION", FOCTAVE_VERSION, args, ,
        doc: /* -*- texinfo -*-
@deftypefn {} {} OCTAVE_VERSION ()
Return the version number of Octave as a string.
@seealso{ver, version}
@end deftypefn */)
{
  if (args.length () != 0)
    print_usage ();

  return ovl (OCTAVE_VERSION);
}

/*
%!assert (ischar (OCTAVE_VERSION ()))
%!error OCTAVE_VERSION (1)
*/