diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp index 44fd93a77e738bae745d9ee62d6d84cc955ee64d..39358b4759ac82ed8dce8d0e5ef7031d5c4f028a 100644 --- a/Fltk/onelabGroup.cpp +++ b/Fltk/onelabGroup.cpp @@ -1810,12 +1810,26 @@ void onelabGroup::rebuildSolverList() rebuildTree(); } +static bool needToChooseExe(const std::string &exe) +{ + // no exe given + if(exe.empty()) return true; + + // exe is given with absolute path to non-existing file + if(exe[0] == '/' || exe[0] == '\\' || (exe.size() > 2 && exe[1] == ':')){ + if(StatFile(exe)) return true; + } + + return false; +} + void onelabGroup::addSolver(const std::string &name, const std::string &executable, const std::string &remoteLogin, int index) { onelab::server::citer it = onelab::server::instance()->findClient(name); if(it != onelab::server::instance()->lastClient()){ - if(executable.empty()) onelab_choose_executable_cb(0, (void *)it->second); + if(needToChooseExe(executable)) + onelab_choose_executable_cb(0, (void *)it->second); return; // solver already exists } @@ -1834,7 +1848,8 @@ void onelabGroup::addSolver(const std::string &name, const std::string &executab remoteLogin); c->setIndex(index); opt_solver_name(index, GMSH_SET, name); - if(executable.empty()) onelab_choose_executable_cb(0, (void *)c); + if(needToChooseExe(executable)) + onelab_choose_executable_cb(0, (void *)c); opt_solver_remote_login(index, GMSH_SET, remoteLogin); FlGui::instance()->onelab->rebuildSolverList();