Mercurial > gub
annotate patches/guile-1.9.14-reloc.patch @ 6468:0ea4f16c7d7a
guile: somewhat better relocation patch.
author | Jan Nieuwenhuizen <janneke@gnu.org> |
---|---|
date | Tue, 01 Feb 2011 15:21:20 +0100 |
parents | d0006ae646bd |
children |
rev | line source |
---|---|
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
1 From d93b5bd21e99cda017e1b2d7b459e453113fbfa6 Mon Sep 17 00:00:00 2001 |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
2 From: Jan Nieuwenhuizen <janneke@gnu.org> |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
3 Date: Mon, 31 Jan 2011 21:05:48 +0100 |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
4 Subject: [PATCH] Add dynamic relocation support, default off. |
6443 | 5 |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
6 Set PATH, GUILE_LOAD_PATH, GUILE_LOAD_COMPILED_PATH according to |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
7 location of the guile executable. Using this together with |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
8 -rpath $ORIGIN/../lib and not changing the general installed |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
9 directory layout, this enables relocatable binary packages, |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
10 for use in $HOME or for Windows. |
6443 | 11 |
12 2005-06-08 Jan Nieuwenhuizen <janneke@gnu.org> | |
13 | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
14 * configure.in: Add --enable-relocation option. Default off. |
6443 | 15 |
16 libguile/ ChangeLog | |
17 | |
18 2005-06-09 Jan Nieuwenhuizen <janneke@gnu.org> | |
19 | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
20 Experimental relocation patch. |
6443 | 21 |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
22 * load.c (scm_init_argv0_relocation)[ARGV0_RELOCATION]: New |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
23 function. |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
24 |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
25 (scm_init_load_path)[ARGV0_RELOCATION]: Use it. |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
26 |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
27 * load.c (scm_c_argv0_relocation)[ARGV0_RELOCATION]: |
6443 | 28 |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
29 * guile.c (main)[ARGV0_RELOCATION]: Use it to append from |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
30 executable location derived scm library directory. |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
31 [__MINGW32__|__CYGWIN__]: Append directory of executable to PATH. |
6443 | 32 --- |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
33 configure.ac | 12 +++++++++++ |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
34 libguile/guile.c | 3 ++ |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
35 libguile/load.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
36 libguile/load.h | 5 ++++ |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
37 4 files changed, 75 insertions(+), 0 deletions(-) |
6443 | 38 |
39 diff --git a/configure.ac b/configure.ac | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
40 index 5c70aa8..5fa6cf4 100644 |
6443 | 41 --- a/configure.ac |
42 +++ b/configure.ac | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
43 @@ -1452,6 +1452,18 @@ GUILE_THREAD_LOCAL_STORAGE |
6443 | 44 fi # with_threads=pthreads |
45 | |
46 | |
47 +## Dynamic relocation, based on argv[0]. | |
48 +reloc_p=no | |
49 +AC_ARG_ENABLE(relocation, | |
50 + [ --enable-relocation compile with dynamic relocation. Default: off], | |
51 + [reloc_p=$enableval]) | |
52 + | |
53 +if test "$reloc_p" = "yes"; then | |
54 + AC_DEFINE([ARGV0_RELOCATION], [1], [Dynamic relocation]) | |
55 + AC_DEFINE_UNQUOTED([PATH_SEPARATOR], "$PATH_SEPARATOR", [Path separator]) | |
56 + AC_DEFINE_UNQUOTED([GUILE_EFFECTIVE_VERSION], "$GUILE_EFFECTIVE_VERSION", [GUILE_EFFECTIVE_VERSION]) | |
57 +fi # $reloc_b | |
58 + | |
59 ## Cross building | |
60 if test "$cross_compiling" = "yes"; then | |
61 AC_MSG_CHECKING(cc for build) | |
62 diff --git a/libguile/guile.c b/libguile/guile.c | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
63 index 6da547b..896adc4 100644 |
6443 | 64 --- a/libguile/guile.c |
65 +++ b/libguile/guile.c | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
66 @@ -67,6 +67,9 @@ inner_main (void *closure SCM_UNUSED, int argc, char **argv) |
6443 | 67 int |
68 main (int argc, char **argv) | |
69 { | |
70 +#if ARGV0_RELOCATION | |
71 + scm_c_argv0_relocation (argv[0]); | |
72 +#endif /* ARGV0_RELOCATION */ | |
73 scm_boot_guile (argc, argv, inner_main, 0); | |
74 return 0; /* never reached */ | |
75 } | |
76 diff --git a/libguile/load.c b/libguile/load.c | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
77 index cbf9dc0..9ad1008 100644 |
6443 | 78 --- a/libguile/load.c |
79 +++ b/libguile/load.c | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
80 @@ -234,6 +234,53 @@ SCM_DEFINE (scm_parse_path, "parse-path", 1, 1, 0, |
6443 | 81 } |
82 #undef FUNC_NAME | |
83 | |
84 +#if ARGV0_RELOCATION | |
85 +#include "filesys.h" | |
86 +#if defined (__CYGWIN__) || defined (__MINGW32__) | |
87 +#include "posix.h" | |
88 +#endif | |
89 + | |
90 +char const *global_argv0 = 0; | |
91 + | |
92 +void | |
93 +scm_c_argv0_relocation (char const *argv0) | |
94 +{ | |
95 + global_argv0 = argv0; | |
96 +} | |
97 + | |
98 +SCM | |
99 +scm_init_argv0_relocation (char const* argv0) | |
100 +{ | |
101 + SCM bindir = scm_dirname (scm_from_locale_string (argv0)); | |
102 + SCM prefix = scm_dirname (bindir); | |
103 + SCM datadir = scm_string_append (scm_list_2 (prefix, | |
104 + scm_from_locale_string ("/share/guile/" GUILE_EFFECTIVE_VERSION))); | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
105 + SCM path; |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
106 + char *env = getenv ("PATH"); |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
107 + if (env) |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
108 + path = scm_string_append (scm_list_3 (bindir, |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
109 + scm_from_locale_string (PATH_SEPARATOR), |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
110 + scm_from_locale_string (env))); |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
111 + else |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
112 + path = bindir; |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
113 + scm_putenv (scm_string_append (scm_list_2 (scm_from_locale_string ("PATH="), path))); |
6443 | 114 + |
115 + return scm_list_1 (datadir); | |
116 +} | |
6452
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
117 + |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
118 +SCM |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
119 +scm_init_argv0_compiled_relocation (char const* argv0) |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
120 +{ |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
121 + SCM bindir = scm_dirname (scm_from_locale_string (argv0)); |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
122 + SCM prefix = scm_dirname (bindir); |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
123 + SCM pkglibdir = scm_string_append (scm_list_2 (prefix, |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
124 + scm_from_locale_string ("/lib/guile"))); |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
125 + SCM ccachedir = scm_string_append (scm_list_2 (pkglibdir, |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
126 + scm_from_locale_string ("/" GUILE_EFFECTIVE_VERSION "/ccache"))); |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
127 + |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
128 + return scm_list_1 (ccachedir); |
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
129 +} |
6443 | 130 +#endif /* ARGV0_RELOCATION */ |
131 | |
132 /* Initialize the global variable %load-path, given the value of the | |
133 SCM_SITE_DIR and SCM_LIBRARY_DIR preprocessor symbols and the | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
134 @@ -304,6 +351,14 @@ scm_init_load_path () |
6443 | 135 if (env) |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
136 cpath = scm_parse_path (scm_from_locale_string (env), cpath); |
6443 | 137 |
138 +#if ARGV0_RELOCATION | |
139 + if (global_argv0) | |
6452
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
140 + { |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
141 + path = scm_append (scm_list_2 (scm_init_argv0_relocation (global_argv0), path)); |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
142 + cpath = scm_append (scm_list_2 (scm_init_argv0_compiled_relocation (global_argv0), cpath)); |
6452
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
143 + } |
6443 | 144 +#endif /* __CYGWIN__ || __MINGW32__ */ |
145 + | |
146 *scm_loc_load_path = path; | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
147 *scm_loc_load_compiled_path = cpath; |
6443 | 148 } |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
149 diff --git a/libguile/load.h b/libguile/load.h |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
150 index d1afefb..ea29d3a 100644 |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
151 --- a/libguile/load.h |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
152 +++ b/libguile/load.h |
6452
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
153 @@ -27,6 +27,11 @@ |
6443 | 154 |
155 | |
156 SCM_API SCM scm_parse_path (SCM path, SCM tail); | |
157 +#if ARGV0_RELOCATION | |
158 +SCM_API void scm_c_argv0_relocation (char const *argv0); | |
159 +SCM_API SCM scm_init_argv0_relocation (char const* argv0); | |
6452
d0006ae646bd
guile: mingw and linux fixes. Now also runs on mingw.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6443
diff
changeset
|
160 +SCM_API SCM scm_init_argv0_compiled_relocation (char const* argv0); |
6443 | 161 +#endif |
162 SCM_API SCM scm_primitive_load (SCM filename); | |
163 SCM_API SCM scm_c_primitive_load (const char *filename); | |
164 SCM_API SCM scm_sys_package_data_dir (void); | |
6468
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
165 -- |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
166 1.7.1 |
0ea4f16c7d7a
guile: somewhat better relocation patch.
Jan Nieuwenhuizen <janneke@gnu.org>
parents:
6452
diff
changeset
|
167 |