Mercurial > pidgin.yaz
view src/prefix.h @ 10245:c143a3fac58d
[gaim-migrate @ 11385]
Binary relocation, step one.
I had a fairly long commit message, and cvs ate it and said
Read from remote host cvs.sourceforge.net: Connection reset by peer
I'm displeased.
This is just method one, method two to follow tomorrow after I add a
way to register a fallback and try to push it upstream. That way
I don't have to put method 2 inside prefix.c.
As for as core/ui split goes, they can either each have their own copy
after the divorce is final, or the UI can use the core's. It'll work
either way, since #1 finds location of the caller, and #2 doesn't work
on libraries anyway. That's one advantage I forgot to mention, btw,
that #1 will let a library find its own location.
So, I'm sure something isn't quite right and someone will want to fix
it. So they can fix it while i implement phase two. Which won't take
long at all, but the autopackage guy is in bed, and I should be too.
committer: Tailor Script <tailor@pidgin.im>
author | Tim Ringenbach <marv@pidgin.im> |
---|---|
date | Tue, 23 Nov 2004 05:53:59 +0000 |
parents | |
children | 645eb9804040 |
line wrap: on
line source
/* * I made the following modifications, be sure to readd these when * upgrading these files. * * Added this comment. * Added "gaim_ ## " to the namespace * Changed the lib macro to use /lib/gaim instead of just /lib * (why does gaim do that in the -DLIBDIR autoconf thing anyway?) * */ /* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn <mike@theoretic.com> * Hongli Lai <h.lai@chello.nl> * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. * * NOTE: if you're using C++ and are getting "undefined reference * to br_*", try renaming prefix.c to prefix.cpp */ #ifndef _PREFIX_H_ #define _PREFIX_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* WARNING, BEFORE YOU MODIFY PREFIX.C: * * If you make changes to any of the functions in prefix.c, you MUST * change the BR_NAMESPACE macro. * This way you can avoid symbol table conflicts with other libraries * that also happen to use BinReloc. * * Example: * #define BR_NAMESPACE(funcName) foobar_ ## funcName * --> expands br_locate to foobar_br_locate */ #undef BR_NAMESPACE #define BR_NAMESPACE(funcName) gaim_ ## funcName #ifdef ENABLE_BINRELOC #define br_thread_local_store BR_NAMESPACE(br_thread_local_store) #define br_locate BR_NAMESPACE(br_locate) #define br_locate_prefix BR_NAMESPACE(br_locate_prefix) #define br_prepend_prefix BR_NAMESPACE(br_prepend_prefix) #ifndef BR_NO_MACROS /* These are convience macros that replace the ones usually used in Autoconf/Automake projects */ #undef SELFPATH #undef PREFIX #undef PREFIXDIR #undef BINDIR #undef SBINDIR #undef DATADIR #undef LIBDIR #undef LIBEXECDIR #undef ETCDIR #undef SYSCONFDIR #undef CONFDIR #undef LOCALEDIR #define SELFPATH (br_thread_local_store (br_locate ((void *) ""))) #define PREFIX (br_thread_local_store (br_locate_prefix ((void *) ""))) #define PREFIXDIR (br_thread_local_store (br_locate_prefix ((void *) ""))) #define BINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/bin"))) #define SBINDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/sbin"))) #define DATADIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share"))) #define LIBDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/lib/gaim"))) #define LIBEXECDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/libexec"))) #define ETCDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define SYSCONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define CONFDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/etc"))) #define LOCALEDIR (br_thread_local_store (br_prepend_prefix ((void *) "", "/share/locale"))) #endif /* BR_NO_MACROS */ /* The following functions are used internally by BinReloc and shouldn't be used directly in applications. */ const char *br_thread_local_store (char *str); char *br_locate (void *symbol); char *br_locate_prefix (void *symbol); char *br_prepend_prefix (void *symbol, char *path); #endif /* ENABLE_BINRELOC */ /* These macros and functions are not guarded by the ENABLE_BINRELOC * macro because they are portable. You can use these functions. */ #define br_strcat BR_NAMESPACE(br_strcat) #define br_extract_dir BR_NAMESPACE(br_extract_dir) #define br_extract_prefix BR_NAMESPACE(br_extract_prefix) #ifndef BR_NO_MACROS /* Convenience functions for concatenating paths */ #define BR_SELFPATH(suffix) (br_thread_local_store (br_strcat (SELFPATH, suffix))) #define BR_PREFIX(suffix) (br_thread_local_store (br_strcat (PREFIX, suffix))) #define BR_PREFIXDIR(suffix) (br_thread_local_store (br_strcat (BR_PREFIX, suffix))) #define BR_BINDIR(suffix) (br_thread_local_store (br_strcat (BINDIR, suffix))) #define BR_SBINDIR(suffix) (br_thread_local_store (br_strcat (SBINDIR, suffix))) #define BR_DATADIR(suffix) (br_thread_local_store (br_strcat (DATADIR, suffix))) #define BR_LIBDIR(suffix) (br_thread_local_store (br_strcat (LIBDIR, suffix))) #define BR_LIBEXECDIR(suffix) (br_thread_local_store (br_strcat (LIBEXECDIR, suffix))) #define BR_ETCDIR(suffix) (br_thread_local_store (br_strcat (ETCDIR, suffix))) #define BR_SYSCONFDIR(suffix) (br_thread_local_store (br_strcat (SYSCONFDIR, suffix))) #define BR_CONFDIR(suffix) (br_thread_local_store (br_strcat (CONFDIR, suffix))) #define BR_LOCALEDIR(suffix) (br_thread_local_store (br_strcat (LOCALEDIR, suffix))) #endif char *br_strcat (const char *str1, const char *str2); char *br_extract_dir (const char *path); char *br_extract_prefix(const char *path); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _PREFIX_H_ */