Skip to content

Commit

Permalink
[3.12] gh-103053: Fix test_tools.test_freeze on FreeBSD (GH-110451) (#…
Browse files Browse the repository at this point in the history
…110456)

gh-103053: Fix test_tools.test_freeze on FreeBSD (GH-110451)

Fix test_tools.test_freeze on FreeBSD: run "make distclean" instead
of "make clean" in the copied source directory to remove also the
"python" program.

Other test_freeze changes:

* Log executed commands and directories, and the current directory.
* No longer uses make -C option to change the directory, instead use
  subprocess cwd parameter.
(cherry picked from commit a4baa9e)

Co-authored-by: Victor Stinner <[email protected]>
  • Loading branch information
miss-islington and vstinner authored Oct 6, 2023
1 parent e188534 commit eed92e4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix test_tools.test_freeze on FreeBSD: run "make distclean" instead of "make
clean" in the copied source directory to remove also the "python" program.
Patch by Victor Stinner.
33 changes: 19 additions & 14 deletions Tools/freeze/test/freeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ class UnsupportedError(Exception):
"""The operation isn't supported."""


def _run_quiet(cmd, cwd=None):
#print(f'# {" ".join(shlex.quote(a) for a in cmd)}')
def _run_quiet(cmd, *, cwd=None):
if cwd:
print('+', 'cd', cwd, flush=True)
print('+', shlex.join(cmd), flush=True)
try:
return subprocess.run(
cmd,
Expand All @@ -48,8 +50,8 @@ def _run_quiet(cmd, cwd=None):
raise


def _run_stdout(cmd, cwd=None):
proc = _run_quiet(cmd, cwd)
def _run_stdout(cmd):
proc = _run_quiet(cmd)
return proc.stdout.strip()


Expand Down Expand Up @@ -91,13 +93,18 @@ def copy_source_tree(newroot, oldroot):

shutil.copytree(oldroot, newroot, ignore=support.copy_python_src_ignore)
if os.path.exists(os.path.join(newroot, 'Makefile')):
_run_quiet([MAKE, 'clean'], newroot)
# Out-of-tree builds require a clean srcdir. "make clean" keeps
# the "python" program, so use "make distclean" instead.
_run_quiet([MAKE, 'distclean'], cwd=newroot)


##################################
# freezing

def prepare(script=None, outdir=None):
print()
print("cwd:", os.getcwd())

if not outdir:
outdir = OUTDIR
os.makedirs(outdir, exist_ok=True)
Expand Down Expand Up @@ -125,7 +132,7 @@ def prepare(script=None, outdir=None):
ensure_opt(cmd, 'cache-file', os.path.join(outdir, 'python-config.cache'))
prefix = os.path.join(outdir, 'python-installation')
ensure_opt(cmd, 'prefix', prefix)
_run_quiet(cmd, builddir)
_run_quiet(cmd, cwd=builddir)

if not MAKE:
raise UnsupportedError('make')
Expand All @@ -135,20 +142,18 @@ def prepare(script=None, outdir=None):
# this test is most often run as part of the whole suite with a lot
# of other tests running in parallel, from 1-2 vCPU systems up to
# people's NNN core beasts. Don't attempt to use it all.
parallel = f'-j{cores*2//3}'
jobs = cores * 2 // 3
parallel = f'-j{jobs}'
else:
parallel = '-j2'

# Build python.
print(f'building python {parallel=} in {builddir}...')
if os.path.exists(os.path.join(srcdir, 'Makefile')):
# Out-of-tree builds require a clean srcdir.
_run_quiet([MAKE, '-C', srcdir, 'clean'])
_run_quiet([MAKE, '-C', builddir, parallel])
_run_quiet([MAKE, parallel], cwd=builddir)

# Install the build.
print(f'installing python into {prefix}...')
_run_quiet([MAKE, '-C', builddir, 'install'])
_run_quiet([MAKE, 'install'], cwd=builddir)
python = os.path.join(prefix, 'bin', 'python3')

return outdir, scriptfile, python
Expand All @@ -161,8 +166,8 @@ def freeze(python, scriptfile, outdir):
print(f'freezing {scriptfile}...')
os.makedirs(outdir, exist_ok=True)
# Use -E to ignore PYTHONSAFEPATH
_run_quiet([python, '-E', FREEZE, '-o', outdir, scriptfile], outdir)
_run_quiet([MAKE, '-C', os.path.dirname(scriptfile)])
_run_quiet([python, '-E', FREEZE, '-o', outdir, scriptfile], cwd=outdir)
_run_quiet([MAKE], cwd=os.path.dirname(scriptfile))

name = os.path.basename(scriptfile).rpartition('.')[0]
executable = os.path.join(outdir, name)
Expand Down

0 comments on commit eed92e4

Please sign in to comment.