GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — cross: wrong interpreter returned when no python available · Issue #88228 · python/cpython

cross: wrong interpreter returned when no python available #88228

New issue
Copy link
New issue
Copy link
Open
Open
cross: wrong interpreter returned when no python available#88228
Copy link
Labels
3.10 (EOL)end of lifeend of life3.11only security fixesonly security fixes3.9 (EOL)end of lifeend of lifebuildThe build process and cross-buildThe build process and cross-build

Description

vfazio
mannequin
opened on May 6, 2021
Issue body actions
BPO 44062
Nosy @moreati, @vfazio
PRs
  • bpo-44062: Fix PYTHON_FOR_BUILD interpreter lookup for cross-compile … #25951
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2021-05-06.18:23:43.293>
    labels = ['build', '3.9', '3.10', '3.11']
    title = 'cross: wrong interpreter returned when no python available'
    updated_at = <Date 2021-05-06.19:06:58.698>
    user = 'https://github.com/vfazio'

    bugs.python.org fields:

    activity = <Date 2021-05-06.19:06:58.698>
    actor = 'vfazio'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Cross-Build']
    creation = <Date 2021-05-06.18:23:43.293>
    creator = 'vfazio'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 44062
    keywords = ['patch']
    message_count = 1.0
    messages = ['393125']
    nosy_count = 2.0
    nosy_names = ['Alex.Willmer', 'vfazio']
    pr_nums = ['25951']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'compile error'
    url = 'https://bugs.python.org/issue44062'
    versions = ['Python 3.9', 'Python 3.10', 'Python 3.11']

    Activity

    1. vfazio commented on May 6, 2021

      @vfazio
      vfaziomannequin
      on May 6, 2021
      MannequinAuthor
      More actions

      When trying to cross compile python3.9, configure attempts to find a strict python 3.9 version match, however if it fails it still attempts to use python in PYTHON_FOR_BUILD instead of failing outright like the code implies it should

      $/python3/targetbuild# which python3.9 python3 python
      /usr/bin/python3

      $/python3/targetbuild# python3 --version
      Python 3.7.3

      $/python3/targetbuild# PYTHON_FOR_REGEN=/python3/hostbuild/python \
      ac_cv_file__dev_ptmx=yes \
      ac_cv_file__dev_ptc=no \
      ac_cv_buggy_getaddrinfo=no \
      ../configure --build=x86-linux-gnu \
      --host=aarch64-linux-gnu \
      --enable-loadable-sqlite-extensions \
      --enable-option-checking=fatal \
      --enable-shared \
      --with-system-expat \
      --with-system-ffi \
      --without-ensurepip
      checking build system type... x86-unknown-linux-gnu
      checking host system type... aarch64-unknown-linux-gnu
      checking for python3.9... /python3/hostbuild/python
      checking for python interpreter for cross build... python
      ...

      $/python3/targetbuild# grep PYTHON_FOR_BUILD config.log
      PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/cat pybuilddir.txt:)$(srcdir)/Lib PYTHON_SYSCONFIGDATA_NAME=sysconfigdata$(ABIFLAGS)$(MACHDEP)$(MULTIARCH) python'

      in configure

      if test "$cross_compiling" = yes; then
      AC_MSG_CHECKING([for python interpreter for cross build])
      if test -z "$PYTHON_FOR_BUILD"; then
      for interp in python$PACKAGE_VERSION python3 python; do
      which $interp >/dev/null 2>&1 || continue
      if $interp -c "import sys;sys.exit(not '.'.join(str(n) for n in sys.version_info@<:@:2@:>@) == '$PACKAGE_VERSION')"; then
      break
      fi
      interp=
      done
      if test x$interp = x; then
      AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
      fi
      AC_MSG_RESULT($interp)
      PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/cat pybuilddir.txt:)$(srcdir)/Lib PYTHON_SYSCONFIGDATA_NAME=sysconfigdata$(ABIFLAGS)$(MACHDEP)$(MULTIARCH) '$interp
      fi
      elif test "$cross_compiling" = maybe; then
      AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
      else
      PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E'
      fi
      AC_SUBST(PYTHON_FOR_BUILD)

      The issue is a failing edge case here:

          for interp in python$PACKAGE_VERSION python3 python; do
              which $interp >/dev/null 2>&1 || continue
      

      where interp keeps it's last value doesn't trigger the empty check here:

          if test x$interp = x; then
              AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
          fi
      

      Note that there's an explicit clearing of interp when the python version isn't a match:

                  if $interp -c "import sys;sys.exit(not '.'.join(str(n) for n in sys.version_info@<:@:2@:>@) == '$PACKAGE_VERSION')"; then
                      break
                  fi
                  interp=

      The fix should be pretty straightforward:

          for interp in python$PACKAGE_VERSION python3 python ''; do
      

      adding '' as the last possible interpreter means one hasn't been found up to that point and allows configure to properly fail

      $/python3/targetbuild# PYTHON_FOR_REGEN=/python3/hostbuild/python ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no ac_cv_buggy_getaddrinfo=no ../configure --build=x86-linux-gnu --host=aarch64-linux-gnu --enable-loadable-sqlite-extensions --enable-option-checking=fatal --enable-shared --with-system-expat --with-system-ffi --without-ensurepip
      checking build system type... x86-unknown-linux-gnu
      checking host system type... aarch64-unknown-linux-gnu
      checking for python3.9... /python3/hostbuild/python
      checking for python interpreter for cross build... configure: error: python3.9 interpreter not found

      It will continue to work when a proper interpreter is found

      $/python3/targetbuild# PATH=/python3/hostbuild:$PATH PYTHON_FOR_REGEN=/python3/hostbuild/python ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no ac_cv_buggy_getaddrinfo=no ../configure --build=x86-linux-gnu --host=aarch64-linux-gnu --enable-loadable-sqlite-extensions --enable-option-checking=fatal --enable-shared --with-system-expat --with-system-ffi --without-ensurepip
      checking build system type... x86-unknown-linux-gnu
      checking host system type... aarch64-unknown-linux-gnu
      checking for python3.9... /python3/hostbuild/python
      checking for python interpreter for cross build... Could not find platform dependent libraries <exec_prefix>
      Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
      python

      This should help highlight any inconsistent environment between configuring and building.

    2. vfazio
      added
      3.9 (EOL)end of lifeend of life
      3.10 (EOL)end of lifeend of life
      3.11only security fixesonly security fixes
      buildThe build process and cross-buildThe build process and cross-build
      on May 6, 2021
    3. ezio-melotti
      transferred this issue fromon Apr 10, 2022
    4. vfazio commented on Apr 11, 2022

      @vfazio
      vfazio
      on Apr 11, 2022
      ContributorAuthor
      More actions

      This should probably be closed in favor of #90039 which was merged in #29835.

      It's still an issue for versions prior to 3.11

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.10 (EOL)end of lifeend of life3.11only security fixesonly security fixes3.9 (EOL)end of lifeend of lifebuildThe build process and cross-buildThe build process and cross-build

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        You are visitor 01402503 — GeezerVison does not store the pages you look up.
        Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.