PLaSK library
Loading...
Searching...
No Matches
system.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of PLaSK (https://plask.app) by Photonics Group at TUL
3
* Copyright (c) 2022 Lodz University of Technology
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, version 3.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*/
14
#include "
system.hpp
"
15
#include <cstdlib>
16
17
#if defined(_MSC_VER) || defined(__MINGW32__)
18
# define PLASK_SYSTEM_WINDOWS
19
# include <
plask/utils/minimal_windows.h
>
20
//# include <windows.h>
21
//# define BOOST_USE_WINDOWS_H
22
#elif defined(__APPLE__)
23
# define PLASK_SYSTEM_MACOS
24
# include <mach-o/dyld.h>
25
# include <limits.h>
26
#else
27
# include <string>
28
# include <limits.h>
29
# include <unistd.h>
30
#endif
31
32
namespace
plask
{
33
34
//comes from: http://www.cplusplus.com/forum/general/11104/
35
std::string
exePathAndName
() {
36
#ifdef PLASK_SYSTEM_WINDOWS
37
char
result
[
MAX_PATH
];
38
return
std::string(
result
,
GetModuleFileName
(
NULL
,
result
,
MAX_PATH
));
39
#elif defined(PLASK_SYSTEM_MACOS)
40
char
result
[
PATH_MAX
];
41
uint32_t
size =
sizeof
(
result
);
42
if
(
_NSGetExecutablePath
(
result
, &size) == 0) {
43
return
std::string(
result
);
44
}
else
{
45
return
std::string();
46
}
47
#else
48
char
path[
PATH_MAX
];
49
ssize_t
count =
readlink
(
"/proc/self/exe"
, path,
PATH_MAX
);
50
return
std::string(path, (count > 0) ? count : 0);
51
#endif
52
}
53
59
static
std::string dirUp(
const
std::string&
dir
) {
60
std::string::size_type
last_sep
=
dir
.find_last_of(
FILE_PATH_SEPARATOR
);
61
return
last_sep
== std::string::npos ?
dir
:
dir
.substr(0,
last_sep
);
62
//boost::filesystem::absolute(dir).parent_path().string()
63
}
64
65
std::string
exePath
() {
66
return
dirUp(
exePathAndName
());
67
}
68
69
std::string
prefixPath
() {
70
static
std::string
prefixPath
;
71
if
(!
prefixPath
.empty())
return
prefixPath
;
72
if
(
const
char
*
envPath
=
getenv
(
"PLASK_PREFIX_PATH"
)) {
73
return
prefixPath
=
envPath
;
74
}
else
{
75
return
prefixPath
= dirUp(
exePath
());
76
}
77
}
78
79
std::string
plaskLibPath
() {
80
std::string
result
=
prefixPath
();
81
result
+=
FILE_PATH_SEPARATOR
;
82
result
+=
"lib"
;
83
result
+=
FILE_PATH_SEPARATOR
;
84
result
+=
"plask"
;
85
result
+=
FILE_PATH_SEPARATOR
;
86
return
result
;
87
}
88
89
std::string
plaskSolversPath
(
const
std::string &category) {
90
std::string
result
=
plaskLibPath
();
91
result
+=
"solvers"
;
92
result
+=
FILE_PATH_SEPARATOR
;
93
result
+= category;
94
result
+=
FILE_PATH_SEPARATOR
;
95
return
result
;
96
}
97
98
std::string
plaskMaterialsPath
() {
99
std::string
result
=
plaskLibPath
();
100
result
+=
"materials"
;
101
result
+=
FILE_PATH_SEPARATOR
;
102
return
result
;
103
}
104
105
}
//namespace plask
plask
utils
system.cpp
Generated by
1.9.8