--- a/gdb/python/python-config.py (revision fa93e88f754e10dfb60dd4c9bf9cef858d4c7e4a) +++ b/gdb/python/python-config.py (revision 1605cab3f0f578a75778efdc4c380bbb8463ad6f) @@ -1,6 +1,15 @@ # Program to fetch python compilation parameters. # Copied from python-config of the 2.7 release. +# In this script, we should only use the following to retrieve configuration values: +# - `sysconfig.get_config_var` +# - `sysconfig.get_platform` +# This is because certain variables may return invalid data during cross-compilation, for example: +# - sys.prefix -> Use sysconfig.get_config_var("prefix") instead. +# - sysconfig.get_path("include") -> Don't use, it may return paths for native python, not our target python +# - os.name -> Use sysconfig.get_platform() for platform detection. + + import getopt import os import sys @@ -26,7 +35,7 @@ pyver = sysconfig.get_config_var("VERSION") getvar = sysconfig.get_config_var -abiflags = getattr(sys, "abiflags", "") +abiflags = getvar("ABIFLAGS") opt_flags = [flag for (flag, val) in opts] @@ -49,15 +58,14 @@ for opt in opt_flags: if opt == "--prefix": - print(to_unix_path(os.path.normpath(sys.prefix))) + print(to_unix_path(os.path.normpath(getvar("prefix")))) elif opt == "--exec-prefix": - print(to_unix_path(os.path.normpath(sys.exec_prefix))) + print(to_unix_path(os.path.normpath(getvar("exec_prefix")))) elif opt in ("--includes", "--cflags"): flags = [ - "-I" + sysconfig.get_path("include"), - "-I" + sysconfig.get_path("platinclude"), + "-I" + getvar("INCLUDEPY"), ] if opt == "--cflags": flags.extend(getvar("CFLAGS").split()) @@ -76,7 +84,7 @@ if getvar("LIBPL") is not None: libs.insert(0, "-L" + getvar("LIBPL")) elif os.name == "nt": - libs.insert(0, "-L" + os.path.normpath(sys.prefix) + "/libs") + libs.insert(0, "-L" + os.path.normpath(getvar("prefix")) + "/libs") if getvar("LINKFORSHARED") is not None: libs.extend(getvar("LINKFORSHARED").split()) print(to_unix_path(" ".join(libs)))