diff options
Diffstat (limited to 'gl/m4/build-to-host.m4')
| -rw-r--r-- | gl/m4/build-to-host.m4 | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/gl/m4/build-to-host.m4 b/gl/m4/build-to-host.m4 new file mode 100644 index 00000000..01bff8f3 --- /dev/null +++ b/gl/m4/build-to-host.m4 | |||
| @@ -0,0 +1,274 @@ | |||
| 1 | # build-to-host.m4 | ||
| 2 | # serial 5 | ||
| 3 | dnl Copyright (C) 2023-2025 Free Software Foundation, Inc. | ||
| 4 | dnl This file is free software; the Free Software Foundation | ||
| 5 | dnl gives unlimited permission to copy and/or distribute it, | ||
| 6 | dnl with or without modifications, as long as this notice is preserved. | ||
| 7 | dnl This file is offered as-is, without any warranty. | ||
| 8 | |||
| 9 | dnl Written by Bruno Haible. | ||
| 10 | |||
| 11 | dnl When the build environment ($build_os) is different from the target runtime | ||
| 12 | dnl environment ($host_os), file names may need to be converted from the build | ||
| 13 | dnl environment syntax to the target runtime environment syntax. This is | ||
| 14 | dnl because the Makefiles are executed (mostly) by build environment tools and | ||
| 15 | dnl therefore expect file names in build environment syntax, whereas the runtime | ||
| 16 | dnl expects file names in target runtime environment syntax. | ||
| 17 | dnl | ||
| 18 | dnl For example, if $build_os = cygwin and $host_os = mingw32, filenames need | ||
| 19 | dnl be converted from Cygwin syntax to native Windows syntax: | ||
| 20 | dnl /cygdrive/c/foo/bar -> C:\foo\bar | ||
| 21 | dnl /usr/local/share -> C:\cygwin64\usr\local\share | ||
| 22 | dnl | ||
| 23 | dnl gl_BUILD_TO_HOST([somedir]) | ||
| 24 | dnl This macro takes as input an AC_SUBSTed variable 'somedir', which must | ||
| 25 | dnl already have its final value assigned, and produces two additional | ||
| 26 | dnl AC_SUBSTed variables 'somedir_c' and 'somedir_c_make', that designate the | ||
| 27 | dnl same file name value, just in different syntax: | ||
| 28 | dnl - somedir_c is the file name in target runtime environment syntax, | ||
| 29 | dnl as a C string (starting and ending with a double-quote, | ||
| 30 | dnl and with escaped backslashes and double-quotes in | ||
| 31 | dnl between). | ||
| 32 | dnl - somedir_c_make is the same thing, escaped for use in a Makefile. | ||
| 33 | |||
| 34 | AC_DEFUN([gl_BUILD_TO_HOST], | ||
| 35 | [ | ||
| 36 | AC_REQUIRE([AC_CANONICAL_BUILD]) | ||
| 37 | AC_REQUIRE([AC_CANONICAL_HOST]) | ||
| 38 | AC_REQUIRE([gl_BUILD_TO_HOST_INIT]) | ||
| 39 | |||
| 40 | dnl Define somedir_c. | ||
| 41 | gl_final_[$1]="$[$1]" | ||
| 42 | dnl Translate it from build syntax to host syntax. | ||
| 43 | case "$build_os" in | ||
| 44 | cygwin*) | ||
| 45 | case "$host_os" in | ||
| 46 | mingw* | windows*) | ||
| 47 | gl_final_[$1]=`cygpath -w "$gl_final_[$1]"` ;; | ||
| 48 | esac | ||
| 49 | ;; | ||
| 50 | esac | ||
| 51 | dnl Convert it to C string syntax. | ||
| 52 | [$1]_c=`printf '%s\n' "$gl_final_[$1]" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes" | tr -d "$gl_tr_cr"` | ||
| 53 | [$1]_c='"'"$[$1]_c"'"' | ||
| 54 | AC_SUBST([$1_c]) | ||
| 55 | |||
| 56 | dnl Define somedir_c_make. | ||
| 57 | [$1]_c_make=`printf '%s\n' "$[$1]_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2" | tr -d "$gl_tr_cr"` | ||
| 58 | dnl Use the substituted somedir variable, when possible, so that the user | ||
| 59 | dnl may adjust somedir a posteriori when there are no special characters. | ||
| 60 | if test "$[$1]_c_make" = '\"'"${gl_final_[$1]}"'\"'; then | ||
| 61 | [$1]_c_make='\"$([$1])\"' | ||
| 62 | fi | ||
| 63 | AC_SUBST([$1_c_make]) | ||
| 64 | ]) | ||
| 65 | |||
| 66 | dnl Some initializations for gl_BUILD_TO_HOST. | ||
| 67 | AC_DEFUN([gl_BUILD_TO_HOST_INIT], | ||
| 68 | [ | ||
| 69 | gl_sed_double_backslashes='s/\\/\\\\/g' | ||
| 70 | gl_sed_escape_doublequotes='s/"/\\"/g' | ||
| 71 | changequote(,)dnl | ||
| 72 | gl_sed_escape_for_make_1="s,\\([ \"&'();<>\\\\\`|]\\),\\\\\\1,g" | ||
| 73 | changequote([,])dnl | ||
| 74 | gl_sed_escape_for_make_2='s,\$,\\$$,g' | ||
| 75 | dnl Find out how to remove carriage returns from output. Solaris /usr/ucb/tr | ||
| 76 | dnl does not understand '\r'. | ||
| 77 | case `echo r | tr -d '\r'` in | ||
| 78 | '') gl_tr_cr='\015' ;; | ||
| 79 | *) gl_tr_cr='\r' ;; | ||
| 80 | esac | ||
| 81 | ]) | ||
| 82 | |||
| 83 | |||
| 84 | dnl The following macros are convenience invocations of gl_BUILD_TO_HOST | ||
| 85 | dnl for some of the variables that are defined by Autoconf. | ||
| 86 | dnl To do so for _all_ the possible variables, use the module 'configmake'. | ||
| 87 | |||
| 88 | dnl Defines bindir_c and bindir_c_make. | ||
| 89 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_BINDIR], | ||
| 90 | [ | ||
| 91 | dnl Find the final value of bindir. | ||
| 92 | gl_saved_prefix="${prefix}" | ||
| 93 | gl_saved_exec_prefix="${exec_prefix}" | ||
| 94 | gl_saved_bindir="${bindir}" | ||
| 95 | dnl Unfortunately, prefix and exec_prefix get only finally determined | ||
| 96 | dnl at the end of configure. | ||
| 97 | if test "X$prefix" = "XNONE"; then | ||
| 98 | prefix="$ac_default_prefix" | ||
| 99 | fi | ||
| 100 | if test "X$exec_prefix" = "XNONE"; then | ||
| 101 | exec_prefix='${prefix}' | ||
| 102 | fi | ||
| 103 | eval exec_prefix="$exec_prefix" | ||
| 104 | eval bindir="$bindir" | ||
| 105 | gl_BUILD_TO_HOST([bindir]) | ||
| 106 | bindir="${gl_saved_bindir}" | ||
| 107 | exec_prefix="${gl_saved_exec_prefix}" | ||
| 108 | prefix="${gl_saved_prefix}" | ||
| 109 | ]) | ||
| 110 | |||
| 111 | dnl Defines datadir_c and datadir_c_make, | ||
| 112 | dnl where datadir = $(datarootdir) | ||
| 113 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_DATADIR], | ||
| 114 | [ | ||
| 115 | dnl Find the final value of datadir. | ||
| 116 | gl_saved_prefix="${prefix}" | ||
| 117 | gl_saved_datarootdir="${datarootdir}" | ||
| 118 | gl_saved_datadir="${datadir}" | ||
| 119 | dnl Unfortunately, prefix gets only finally determined at the end of | ||
| 120 | dnl configure. | ||
| 121 | if test "X$prefix" = "XNONE"; then | ||
| 122 | prefix="$ac_default_prefix" | ||
| 123 | fi | ||
| 124 | eval datarootdir="$datarootdir" | ||
| 125 | eval datadir="$datadir" | ||
| 126 | gl_BUILD_TO_HOST([datadir]) | ||
| 127 | datadir="${gl_saved_datadir}" | ||
| 128 | datarootdir="${gl_saved_datarootdir}" | ||
| 129 | prefix="${gl_saved_prefix}" | ||
| 130 | ]) | ||
| 131 | |||
| 132 | dnl Defines libdir_c and libdir_c_make. | ||
| 133 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_LIBDIR], | ||
| 134 | [ | ||
| 135 | dnl Find the final value of libdir. | ||
| 136 | gl_saved_prefix="${prefix}" | ||
| 137 | gl_saved_exec_prefix="${exec_prefix}" | ||
| 138 | gl_saved_libdir="${libdir}" | ||
| 139 | dnl Unfortunately, prefix and exec_prefix get only finally determined | ||
| 140 | dnl at the end of configure. | ||
| 141 | if test "X$prefix" = "XNONE"; then | ||
| 142 | prefix="$ac_default_prefix" | ||
| 143 | fi | ||
| 144 | if test "X$exec_prefix" = "XNONE"; then | ||
| 145 | exec_prefix='${prefix}' | ||
| 146 | fi | ||
| 147 | eval exec_prefix="$exec_prefix" | ||
| 148 | eval libdir="$libdir" | ||
| 149 | gl_BUILD_TO_HOST([libdir]) | ||
| 150 | libdir="${gl_saved_libdir}" | ||
| 151 | exec_prefix="${gl_saved_exec_prefix}" | ||
| 152 | prefix="${gl_saved_prefix}" | ||
| 153 | ]) | ||
| 154 | |||
| 155 | dnl Defines libexecdir_c and libexecdir_c_make. | ||
| 156 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_LIBEXECDIR], | ||
| 157 | [ | ||
| 158 | dnl Find the final value of libexecdir. | ||
| 159 | gl_saved_prefix="${prefix}" | ||
| 160 | gl_saved_exec_prefix="${exec_prefix}" | ||
| 161 | gl_saved_libexecdir="${libexecdir}" | ||
| 162 | dnl Unfortunately, prefix and exec_prefix get only finally determined | ||
| 163 | dnl at the end of configure. | ||
| 164 | if test "X$prefix" = "XNONE"; then | ||
| 165 | prefix="$ac_default_prefix" | ||
| 166 | fi | ||
| 167 | if test "X$exec_prefix" = "XNONE"; then | ||
| 168 | exec_prefix='${prefix}' | ||
| 169 | fi | ||
| 170 | eval exec_prefix="$exec_prefix" | ||
| 171 | eval libexecdir="$libexecdir" | ||
| 172 | gl_BUILD_TO_HOST([libexecdir]) | ||
| 173 | libexecdir="${gl_saved_libexecdir}" | ||
| 174 | exec_prefix="${gl_saved_exec_prefix}" | ||
| 175 | prefix="${gl_saved_prefix}" | ||
| 176 | ]) | ||
| 177 | |||
| 178 | dnl Defines localedir_c and localedir_c_make. | ||
| 179 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_LOCALEDIR], | ||
| 180 | [ | ||
| 181 | dnl Find the final value of localedir. | ||
| 182 | gl_saved_prefix="${prefix}" | ||
| 183 | gl_saved_datarootdir="${datarootdir}" | ||
| 184 | gl_saved_localedir="${localedir}" | ||
| 185 | dnl Unfortunately, prefix gets only finally determined at the end of | ||
| 186 | dnl configure. | ||
| 187 | if test "X$prefix" = "XNONE"; then | ||
| 188 | prefix="$ac_default_prefix" | ||
| 189 | fi | ||
| 190 | eval datarootdir="$datarootdir" | ||
| 191 | eval localedir="$localedir" | ||
| 192 | gl_BUILD_TO_HOST([localedir]) | ||
| 193 | localedir="${gl_saved_localedir}" | ||
| 194 | datarootdir="${gl_saved_datarootdir}" | ||
| 195 | prefix="${gl_saved_prefix}" | ||
| 196 | ]) | ||
| 197 | |||
| 198 | dnl Defines pkgdatadir_c and pkgdatadir_c_make, | ||
| 199 | dnl where pkgdatadir = $(datadir)/$(PACKAGE) | ||
| 200 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_PKGDATADIR], | ||
| 201 | [ | ||
| 202 | dnl Find the final value of pkgdatadir. | ||
| 203 | gl_saved_prefix="${prefix}" | ||
| 204 | gl_saved_datarootdir="${datarootdir}" | ||
| 205 | gl_saved_datadir="${datadir}" | ||
| 206 | gl_saved_pkgdatadir="${pkgdatadir}" | ||
| 207 | dnl Unfortunately, prefix gets only finally determined at the end of | ||
| 208 | dnl configure. | ||
| 209 | if test "X$prefix" = "XNONE"; then | ||
| 210 | prefix="$ac_default_prefix" | ||
| 211 | fi | ||
| 212 | eval datarootdir="$datarootdir" | ||
| 213 | eval datadir="$datadir" | ||
| 214 | eval pkgdatadir="$pkgdatadir" | ||
| 215 | gl_BUILD_TO_HOST([pkgdatadir]) | ||
| 216 | pkgdatadir="${gl_saved_pkgdatadir}" | ||
| 217 | datadir="${gl_saved_datadir}" | ||
| 218 | datarootdir="${gl_saved_datarootdir}" | ||
| 219 | prefix="${gl_saved_prefix}" | ||
| 220 | ]) | ||
| 221 | |||
| 222 | dnl Defines pkglibdir_c and pkglibdir_c_make, | ||
| 223 | dnl where pkglibdir = $(libdir)/$(PACKAGE) | ||
| 224 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_PKGLIBDIR], | ||
| 225 | [ | ||
| 226 | dnl Find the final value of pkglibdir. | ||
| 227 | gl_saved_prefix="${prefix}" | ||
| 228 | gl_saved_exec_prefix="${exec_prefix}" | ||
| 229 | gl_saved_libdir="${libdir}" | ||
| 230 | gl_saved_pkglibdir="${pkglibdir}" | ||
| 231 | dnl Unfortunately, prefix and exec_prefix get only finally determined | ||
| 232 | dnl at the end of configure. | ||
| 233 | if test "X$prefix" = "XNONE"; then | ||
| 234 | prefix="$ac_default_prefix" | ||
| 235 | fi | ||
| 236 | if test "X$exec_prefix" = "XNONE"; then | ||
| 237 | exec_prefix='${prefix}' | ||
| 238 | fi | ||
| 239 | eval exec_prefix="$exec_prefix" | ||
| 240 | eval libdir="$libdir" | ||
| 241 | eval pkglibdir="$pkglibdir" | ||
| 242 | gl_BUILD_TO_HOST([pkglibdir]) | ||
| 243 | pkglibdir="${gl_saved_pkglibdir}" | ||
| 244 | libdir="${gl_saved_libdir}" | ||
| 245 | exec_prefix="${gl_saved_exec_prefix}" | ||
| 246 | prefix="${gl_saved_prefix}" | ||
| 247 | ]) | ||
| 248 | |||
| 249 | dnl Defines pkglibexecdir_c and pkglibexecdir_c_make, | ||
| 250 | dnl where pkglibexecdir = $(libexecdir)/$(PACKAGE) | ||
| 251 | AC_DEFUN_ONCE([gl_BUILD_TO_HOST_PKGLIBEXECDIR], | ||
| 252 | [ | ||
| 253 | dnl Find the final value of pkglibexecdir. | ||
| 254 | gl_saved_prefix="${prefix}" | ||
| 255 | gl_saved_exec_prefix="${exec_prefix}" | ||
| 256 | gl_saved_libexecdir="${libexecdir}" | ||
| 257 | gl_saved_pkglibexecdir="${pkglibexecdir}" | ||
| 258 | dnl Unfortunately, prefix and exec_prefix get only finally determined | ||
| 259 | dnl at the end of configure. | ||
| 260 | if test "X$prefix" = "XNONE"; then | ||
| 261 | prefix="$ac_default_prefix" | ||
| 262 | fi | ||
| 263 | if test "X$exec_prefix" = "XNONE"; then | ||
| 264 | exec_prefix='${prefix}' | ||
| 265 | fi | ||
| 266 | eval exec_prefix="$exec_prefix" | ||
| 267 | eval libexecdir="$libexecdir" | ||
| 268 | eval pkglibexecdir="$pkglibexecdir" | ||
| 269 | gl_BUILD_TO_HOST([pkglibexecdir]) | ||
| 270 | pkglibexecdir="${gl_saved_pkglibexecdir}" | ||
| 271 | libexecdir="${gl_saved_libexecdir}" | ||
| 272 | exec_prefix="${gl_saved_exec_prefix}" | ||
| 273 | prefix="${gl_saved_prefix}" | ||
| 274 | ]) | ||
