summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHood Chatham <roberthoodchatham@gmail.com>2024-10-29 21:45:49 (GMT)
committerGitHub <noreply@github.com>2024-10-29 21:45:49 (GMT)
commitb1f13bce62ff666f59286e8325011d8e9e0ddca7 (patch)
tree6d5752201a8fa93b483ab6958e7a1b525782728b
parent6742f14dfd3fa8ba8a245efa21a4f723160d93d4 (diff)
downloadcpython-b1f13bce62ff666f59286e8325011d8e9e0ddca7.zip
cpython-b1f13bce62ff666f59286e8325011d8e9e0ddca7.tar.gz
cpython-b1f13bce62ff666f59286e8325011d8e9e0ddca7.tar.bz2
gh-124932: Distinguish build prefix from host prefix in cross builds (#124933)
In Emscripten and other cross builds, the build file system and the host file system look different. For instance, we may want to install into `cross-build/$TARGET/lib`, and then mount that as `/lib` in the host file system. This change adds a distinction between: * `prefix` -- the path in the build file system where we want to install the files * `host_prefix` -- the path in the host file system where getpath.c will look for the files And similarly for `exec_prefix` and `host_exec_prefix`. At present, this is only used for Emscripten.
-rw-r--r--Makefile.pre.in11
-rw-r--r--Misc/NEWS.d/next/Build/2024-10-25-17-20-50.gh-issue-124932.F-aNuS.rst4
-rwxr-xr-xconfigure25
-rw-r--r--configure.ac19
4 files changed, 57 insertions, 2 deletions
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 751e7ab..db5bad8 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 0000000..10c4171
--- /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 13c7d8a..7a778b4 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 a470fd4..42daf1c 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.
#