17 #define COUT std::cout
19 #define COUT LogDebug("ExpressionEvaluator")
46 : m_name(
"VI_" + generateName()) {
48 pch +=
"/src/precompile.h";
63 std::ifstream
ss(
file.c_str());
64 COUT <<
"local file: " <<
file << std::endl;
66 std::getline(
ss, cxxf);
71 COUT <<
"file in release area: " <<
file << std::endl;
72 std::ifstream
ss(
file.c_str());
74 std::getline(
ss, cxxf);
75 incDir = relDir + incDir;
82 COUT <<
"file in base release area: " <<
file << std::endl;
83 std::ifstream
ss(
file.c_str());
86 "ExpressionEvaluator",
87 pch +
" file not found neither in " +
baseDir +
" nor in " + relDir +
" nor in " + paDir);
88 std::getline(
ss, cxxf);
89 incDir = paDir + incDir;
94 std::regex rq(
"-I[^ ]+");
95 cxxf = std::regex_replace(cxxf, rq,
std::string(
""));
99 cxxf = std::regex_replace(cxxf, rq,
std::string(
"='\""));
102 std::regex rq(
"\" ");
103 cxxf = std::regex_replace(cxxf, rq,
std::string(
"\"' "));
105 COUT <<
'|' << cxxf <<
"|\n" << std::endl;
108 std::string cpp =
"c++ -H -Wall -shared -Winvalid-pch ";
110 cpp +=
" -I" + incDir;
111 cpp +=
" -o " +
ofile +
' ' + sfile +
" 2>&1\n";
113 COUT << cpp << std::endl;
119 source +=
"struct " +
m_name +
" final : public " + iname +
"{\n";
123 source +=
"extern " + quote +
'C' + quote +
' ' +
std::string(iname) +
"* " + factory +
"() {\n";
125 source +=
"return &local;\n}\n";
130 std::ofstream
tmp(sfile.c_str());
138 void* dl = dlopen(
ofile.c_str(), RTLD_LAZY);
142 std::string(
"compilation/linking failed\n") + cpp +
ss +
"dlerror " + dlerror());
146 m_expr = dlsym(dl, factory.c_str());