Salome HOME
add options-help get from launcher
[modules/kernel.git] / src / Basics / KernelBasis.cxx
1 // Copyright (C) 2021-2024  CEA, EDF
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "KernelBasis.hxx"
21
22 static bool DEFAULT_SSL_MODE = true;
23 static bool GUI_MODE = false;
24
25 // IOR of SALOME_Embedded_NamingService servant
26 static std::string IOR_OF_EMBEDDED_NS;
27
28 bool getSSLMode()
29 {
30   return DEFAULT_SSL_MODE;
31 }
32
33 void setSSLMode(bool sslMode)
34 {
35   DEFAULT_SSL_MODE = sslMode;
36 }
37
38 bool getGUIMode()
39 {
40   return GUI_MODE;
41 }
42
43 void setGUIMode(bool guiMode)
44 {
45   GUI_MODE = guiMode;
46 }
47
48 std::string getIOROfEmbeddedNS()
49 {
50   return IOR_OF_EMBEDDED_NS;
51 }
52
53 void setIOROfEmbeddedNS(const std::string& ior)
54 {
55   IOR_OF_EMBEDDED_NS = ior;
56 }
57
58 #include <iostream>
59
60 /*!
61  * Callable from Python in case if sys.stdout is not connected to tty
62  */
63 void WriteInStdout(const std::string& msg)
64 {
65   std::cout << msg << std::endl << std::flush;
66 }
67
68 /*!
69  * Callable from Python in case if sys.stdout is not connected to tty
70  */
71 void WriteInStderr(const std::string& msg)
72 {
73   std::cerr << msg << std::endl << std::flush;
74 }
75
76 namespace SALOME
77 {
78   static constexpr char IN_PROCESS_VALUE = 0;
79   static constexpr char IN_PROCESS_VALUE_STR[] = "InProcess";
80   static constexpr char OUT_OF_PROCESS_NO_REPLAY_VALUE = 1;
81   static constexpr char OUT_OF_PROCESS_NO_REPLAY_VALUE_STR[] = "OutOfProcessNoReplay";
82   static constexpr char OUT_OF_PROCESS_WITH_REPLAY_VALUE = 2;
83   static constexpr char OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR[] = "OutOfProcessWithReplay";
84
85   static PyExecutionMode FromIntToPyExecutionMode(char value)
86   {
87     switch(value)
88     {
89       case IN_PROCESS_VALUE:
90         return PyExecutionMode::InProcess;
91       case OUT_OF_PROCESS_NO_REPLAY_VALUE:
92         return PyExecutionMode::OutOfProcessNoReplay;
93       case OUT_OF_PROCESS_WITH_REPLAY_VALUE:
94         return PyExecutionMode::OutOfProcessWithReplay;
95     }
96     throw std::range_error("FromIntToPyExecutionMode : Invalid value for Py Execution Mode ! Must be in 0 (InProcess), 1 (OutOfProcessNoReplay) or 2 (OutOfProcessWithReplay) !");
97   }
98   
99   static PyExecutionMode FromStrToPyExecutionMode(const std::string& value)
100   {
101     if(value == IN_PROCESS_VALUE_STR)
102       return PyExecutionMode::InProcess;
103     if(value == OUT_OF_PROCESS_NO_REPLAY_VALUE_STR)
104       return PyExecutionMode::OutOfProcessNoReplay;
105     if(value == OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR)
106       return PyExecutionMode::OutOfProcessWithReplay;
107     throw std::range_error("FromStrToPyExecutionMode : Invalid str value for py execution mode !");
108   }
109
110   static std::string FromExecutionModeToStr(PyExecutionMode execMode)
111   {
112     switch(execMode)
113     {
114       case PyExecutionMode::InProcess:
115         return IN_PROCESS_VALUE_STR;
116       case PyExecutionMode::OutOfProcessNoReplay:
117         return OUT_OF_PROCESS_NO_REPLAY_VALUE_STR;
118       case PyExecutionMode::OutOfProcessWithReplay:
119         return OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR;
120       default:
121         throw std::range_error("FromExecutionModeToStr : Invalid str value for py execution mode !");
122     }
123   }
124 }
125
126 constexpr int SALOME_BIG_OBJ_ON_DISK_THRES_DFT = 50000000;
127
128 static int SALOME_BIG_OBJ_ON_DISK_THRES = SALOME_BIG_OBJ_ON_DISK_THRES_DFT;
129
130 int SALOME::GetBigObjOnDiskThreshold()
131 {
132   return SALOME_BIG_OBJ_ON_DISK_THRES;
133 }
134
135 void SALOME::SetBigObjOnDiskThreshold(int newThresholdInByte)
136 {
137   SALOME_BIG_OBJ_ON_DISK_THRES = newThresholdInByte;
138 }
139
140 static std::string SALOME_FILE_BIG_OBJ_DIR;
141
142 std::string SALOME::GetBigObjOnDiskDirectory()
143 {
144   return SALOME_FILE_BIG_OBJ_DIR;
145 }
146
147 void SALOME::SetBigObjOnDiskDirectory(const std::string& directory)
148 {
149   SALOME_FILE_BIG_OBJ_DIR = directory;
150 }
151
152 bool SALOME::BigObjOnDiskDirectoryDefined()
153 {
154   return ! SALOME_FILE_BIG_OBJ_DIR.empty();
155 }
156
157 static SALOME::PyExecutionMode DefaultPyExecMode = SALOME::PyExecutionMode::NotSet;
158
159 void SALOME::SetPyExecutionMode(PyExecutionMode mode)
160 {
161   DefaultPyExecMode = mode;
162 }
163
164 void SALOME::SetPyExecutionModeStr(const std::string& mode)
165 {
166   SALOME::SetPyExecutionMode( SALOME::FromStrToPyExecutionMode(mode) );
167 }
168
169 std::vector<std::string> SALOME::GetAllPyExecutionModes()
170 {
171   return {IN_PROCESS_VALUE_STR,OUT_OF_PROCESS_NO_REPLAY_VALUE_STR,OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR};
172 }
173
174 std::string SALOME::GetPyExecutionModeStr()
175 {
176   return SALOME::FromExecutionModeToStr( SALOME::GetPyExecutionMode() );
177 }
178
179 SALOME::PyExecutionMode SALOME::GetPyExecutionMode()
180 {
181   auto isEnvVarSet = []() -> SALOME::PyExecutionMode
182   {
183     const char *envVar = std::getenv("SALOME_PY_EXECUTION_MODE");
184     if (envVar && (envVar[0] != '\0'))
185     {
186       const int numValue = std::stoi(envVar);
187       return SALOME::FromIntToPyExecutionMode( static_cast<char>(numValue) );
188     }
189     return SALOME::PyExecutionMode::InProcess;
190   };
191   if(DefaultPyExecMode == SALOME::PyExecutionMode::NotSet)
192     DefaultPyExecMode = isEnvVarSet();
193   return DefaultPyExecMode;
194 }