diff --git a/CommonTools/Utils/src/ExpressionEvaluator.cc b/CommonTools/Utils/src/ExpressionEvaluator.cc index 58f2dc1f040c2..cced24c508ee3 100644 --- a/CommonTools/Utils/src/ExpressionEvaluator.cc +++ b/CommonTools/Utils/src/ExpressionEvaluator.cc @@ -28,9 +28,9 @@ namespace { return n1; } - void remove(std::string const& name) { - std::string sfile = "/tmp/" + name + ".cc"; - std::string ofile = "/tmp/" + name + ".so"; + void remove(std::string const& name, std::string const& tmpDir = "/tmp") { + std::string sfile = tmpDir + "/" + name + ".cc"; + std::string ofile = tmpDir + "/" + name + ".so"; std::string rm = "rm -f "; rm += sfile + ' ' + ofile; @@ -55,13 +55,13 @@ namespace reco { pch += "/src/precompile.h"; std::string quote("\""); - std::string sfile = "/tmp/" + m_name + ".cc"; - std::string ofile = "/tmp/" + m_name + ".so"; - auto arch = edm::getEnvironmentVariable("SCRAM_ARCH"); auto baseDir = edm::getEnvironmentVariable("CMSSW_BASE"); auto relDir = edm::getEnvironmentVariable("CMSSW_RELEASE_BASE"); + std::string sfile = baseDir + "/tmp/" + m_name + ".cc"; + std::string ofile = baseDir + "/tmp/" + m_name + ".so"; + std::string incDir = "/include/" + arch + "/"; std::string cxxf; { @@ -144,16 +144,16 @@ namespace reco { void* dl = dlopen(ofile.c_str(), RTLD_LAZY); if (!dl) { - remove(m_name); + remove(m_name, baseDir + "/tmp"); throw cms::Exception("ExpressionEvaluator", std::string("compilation/linking failed\n") + cpp + ss + "dlerror " + dlerror()); return; } m_expr = dlsym(dl, factory.c_str()); - remove(m_name); + remove(m_name, baseDir + "/tmp"); } - ExpressionEvaluator::~ExpressionEvaluator() { remove(m_name); } + ExpressionEvaluator::~ExpressionEvaluator() { remove(m_name, edm::getEnvironmentVariable("CMSSW_BASE") + "/tmp"); } } // namespace reco diff --git a/CommonTools/Utils/test/ExpressionEvaluatorUnitTest.cpp b/CommonTools/Utils/test/ExpressionEvaluatorUnitTest.cpp index 62b220e91de51..eedb3820a9fc3 100644 --- a/CommonTools/Utils/test/ExpressionEvaluatorUnitTest.cpp +++ b/CommonTools/Utils/test/ExpressionEvaluatorUnitTest.cpp @@ -61,7 +61,7 @@ int main() { } try { - std::string cut = "bool operator()(int i, int j) override { return i<10&& j<5; }"; + std::string cut = "bool operator()(int i, int j) const override { return i<10&& j<5; }"; auto const& mcut = *reco_expressionEvaluator("CommonTools/Utils", SINGLE_ARG(reco::genericExpression), cut); std::cout << mcut(2, 7) << ' ' << mcut(3, 4) << std::endl;