diff --git a/Makefile.pre.in b/Makefile.pre.in index 751e7ab8b42..db5bad8752e 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -141,6 +141,13 @@ prefix= @prefix@ # Install prefix for architecture-dependent files exec_prefix= @exec_prefix@ +# For cross compilation, we distinguish between "prefix" (where we install the +# files) and "host_prefix" (where getpath.c expects to find the files at +# runtime) +host_prefix= @host_prefix@ +host_exec_prefix= @host_exec_prefix@ + + # Install prefix for data files datarootdir= @datarootdir@ @@ -1740,8 +1747,8 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ Modules/getpath.o: $(srcdir)/Modules/getpath.c Python/frozen_modules/getpath.h Makefile $(PYTHON_HEADERS) $(CC) -c $(PY_CORE_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ - -DPREFIX='"$(prefix)"' \ - -DEXEC_PREFIX='"$(exec_prefix)"' \ + -DPREFIX='"$(host_prefix)"' \ + -DEXEC_PREFIX='"$(host_exec_prefix)"' \ -DVERSION='"$(VERSION)"' \ -DVPATH='"$(VPATH)"' \ -DPLATLIBDIR='"$(PLATLIBDIR)"' \ diff --git a/Misc/NEWS.d/next/Build/2024-10-25-17-20-50.gh-issue-124932.F-aNuS.rst b/Misc/NEWS.d/next/Build/2024-10-25-17-20-50.gh-issue-124932.F-aNuS.rst new file mode 100644 index 00000000000..10c4171dc14 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2024-10-25-17-20-50.gh-issue-124932.F-aNuS.rst @@ -0,0 +1,4 @@ +For cross builds, there is now support for having a different install +``prefix`` than the ``host_prefix`` used by ``getpath.py``. This is set to ``/`` by +default for Emscripten, on other platforms the default behavior is the same +as before. diff --git a/configure b/configure index 13c7d8a734c..7a778b414e9 100755 --- a/configure +++ b/configure @@ -1003,6 +1003,8 @@ LIPO_INTEL64_FLAGS LIPO_32BIT_FLAGS ARCH_RUN_32BIT UNIVERSALSDK +host_exec_prefix +host_prefix MACHDEP PKG_CONFIG_LIBDIR PKG_CONFIG_PATH @@ -4105,6 +4107,29 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$MACHDEP\"" >&5 printf "%s\n" "\"$MACHDEP\"" >&6; } + +if test -z "$host_prefix"; then + case $ac_sys_system in #( + Emscripten) : + host_prefix=/ ;; #( + *) : + host_prefix='${prefix}' + ;; +esac +fi + + +if test -z "$host_exec_prefix"; then + case $ac_sys_system in #( + Emscripten) : + host_exec_prefix=$host_prefix ;; #( + *) : + host_exec_prefix='${exec_prefix}' + ;; +esac +fi + + # On cross-compile builds, configure will look for a host-specific compiler by # prepending the user-provided host triple to the required binary name. # diff --git a/configure.ac b/configure.ac index a470fd42588..42daf1c4c5a 100644 --- a/configure.ac +++ b/configure.ac @@ -379,6 +379,25 @@ then fi AC_MSG_RESULT(["$MACHDEP"]) +dnl For cross compilation, we distinguish between "prefix" (where we install the +dnl files) and "host_prefix" (where we expect to find the files at runtime) + +if test -z "$host_prefix"; then + AS_CASE([$ac_sys_system], + [Emscripten], [host_prefix=/], + [host_prefix='${prefix}'] + ) +fi +AC_SUBST([host_prefix]) + +if test -z "$host_exec_prefix"; then + AS_CASE([$ac_sys_system], + [Emscripten], [host_exec_prefix=$host_prefix], + [host_exec_prefix='${exec_prefix}'] + ) +fi +AC_SUBST([host_exec_prefix]) + # On cross-compile builds, configure will look for a host-specific compiler by # prepending the user-provided host triple to the required binary name. #