1 2 #include "Config.hh" 3 #include "InstallPrefix.hh" 4 #if !defined(__OpenBSD__) && !defined(__FreeBSD__) 5 #include "whereami.h" 6 #endif 7 #include <stdexcept> 8 install_prefix()9std::string cadabra::install_prefix() 10 { 11 #if defined(__FreeBSD__) || defined(__OpenBSD__) 12 std::string ret(CMAKE_INSTALL_PREFIX); 13 return ret; 14 #else 15 std::string ret; 16 int dirname_length; 17 auto length = wai_getExecutablePath(NULL, 0, &dirname_length); 18 if(length > 0) { 19 char *path = (char*)malloc(length + 1); 20 if (!path) 21 throw std::logic_error("Cannot determine installation path."); 22 wai_getExecutablePath(path, length, &dirname_length); 23 path[length] = '\0'; 24 path[dirname_length] = '\0'; 25 ret=std::string(path); 26 free(path); 27 ret=ret.substr(0, ret.size()-4); // strip '/bin' 28 } 29 return ret; 30 #endif 31 } 32 cmake_install_prefix()33const char *cadabra::cmake_install_prefix() 34 { 35 static const char prefix[]=CMAKE_INSTALL_PREFIX; 36 37 return prefix; 38 } 39