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()9 std::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()33 const char *cadabra::cmake_install_prefix()
34 	{
35 	static const char prefix[]=CMAKE_INSTALL_PREFIX;
36 
37 	return prefix;
38 	}
39