2 * BinReloc - a library for creating relocatable executables
3 * Written by: Mike Hearn <mike@theoretic.com>
4 * Hongli Lai <h.lai@chello.nl>
5 * http://autopackage.org/
7 * This source code is public domain. You can relicense this code
8 * under whatever license you want.
10 * See http://autopackage.org/docs/binreloc/ for
11 * more information and how to use this.
13 * NOTE: if you're using C++ and are getting "undefined reference
14 * to br_*", try renaming prefix.c to prefix.cpp
22 * enrico - all the code below is only compiled and used if ENABLE_BINRELOC is set in config.h,
23 * this only happens if configure option --enable-binreloc was used
25 #ifdef ENABLE_BINRELOC
28 /* WARNING, BEFORE YOU MODIFY PREFIX.C:
30 * If you make changes to any of the functions in prefix.c, you MUST
31 * change the BR_NAMESPACE macro.
32 * This way you can avoid symbol table conflicts with other libraries
33 * that also happen to use BinReloc.
36 * #define BR_NAMESPACE(funcName) foobar_ ## funcName
37 * --> expands br_locate to foobar_br_locate
40 #define BR_NAMESPACE(funcName) geany_ ## funcName
43 #define br_thread_local_store BR_NAMESPACE(br_thread_local_store)
44 #define br_locate BR_NAMESPACE(br_locate)
45 #define br_locate_prefix BR_NAMESPACE(br_locate_prefix)
46 #define br_prepend_prefix BR_NAMESPACE(br_prepend_prefix)
49 /* These are convience macros that replace the ones usually used
50 in Autoconf/Automake projects */
67 #undef GEANY_LOCALEDIR
69 #define SELFPATH (br_thread_local_store (br_locate ((void *) "")))
70 #define PREFIXDIR (br_thread_local_store (br_locate_prefix ((void *) "")))
71 #define BINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/bin")))
72 #define SBINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/sbin")))
73 #define LIBEXECDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/libexec")))
74 #define ETCDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc")))
75 #define SYSCONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc")))
76 #define CONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc")))
77 #define GEANY_PREFIX (br_thread_local_store (br_locate_prefix ((void *) "")))
78 #define GEANY_DATADIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share")))
79 #define GEANY_LIBDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/lib")))
80 #define GEANY_DOCDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share/doc/geany")))
81 #define GEANY_LOCALEDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share/locale")))
82 #endif /* BR_NO_MACROS */
85 /* The following functions are used internally by BinReloc
86 and shouldn't be used directly in applications. */
88 const char *br_thread_local_store (char *str
);
89 char *br_locate (void *symbol
);
90 char *br_locate_prefix (void *symbol
);
91 char *br_prepend_prefix (void *symbol
, char *path
);
94 #endif /* ENABLE_BINRELOC */
96 #endif /* _PREFIX_H_ */