1
1
import os
2
2
import os .path
3
- import re
4
3
import shlex
5
4
import shutil
6
5
import subprocess
6
+ import sysconfig
7
+ from test import support
7
8
8
9
9
10
TESTS_DIR = os .path .dirname (__file__ )
10
11
TOOL_ROOT = os .path .dirname (TESTS_DIR )
11
- SRCDIR = os .path .dirname ( os . path . dirname ( TOOL_ROOT ))
12
+ SRCDIR = os .path .abspath ( sysconfig . get_config_var ( 'srcdir' ))
12
13
13
14
MAKE = shutil .which ('make' )
14
15
FREEZE = os .path .join (TOOL_ROOT , 'freeze.py' )
@@ -75,56 +76,17 @@ def ensure_opt(args, name, value):
75
76
76
77
77
78
def copy_source_tree (newroot , oldroot ):
78
- print (f'copying the source tree into { newroot } ...' )
79
+ print (f'copying the source tree from { oldroot } to { newroot } ...' )
79
80
if os .path .exists (newroot ):
80
81
if newroot == SRCDIR :
81
82
raise Exception ('this probably isn\' t what you wanted' )
82
83
shutil .rmtree (newroot )
83
84
84
- def ignore_non_src (src , names ):
85
- """Turns what could be a 1000M copy into a 100M copy."""
86
- # Don't copy the ~600M+ of needless git repo metadata.
87
- # source only, ignore cached .pyc files.
88
- subdirs_to_skip = {'.git' , '__pycache__' }
89
- if os .path .basename (src ) == 'Doc' :
90
- # Another potential ~250M+ of non test related data.
91
- subdirs_to_skip .add ('build' )
92
- subdirs_to_skip .add ('venv' )
93
- return subdirs_to_skip
94
-
95
- shutil .copytree (oldroot , newroot , ignore = ignore_non_src )
85
+ shutil .copytree (oldroot , newroot , ignore = support .copy_python_src_ignore )
96
86
if os .path .exists (os .path .join (newroot , 'Makefile' )):
97
87
_run_quiet ([MAKE , 'clean' ], newroot )
98
88
99
89
100
- def get_makefile_var (builddir , name ):
101
- regex = re .compile (rf'^{ name } *=\s*(.*?)\s*$' )
102
- filename = os .path .join (builddir , 'Makefile' )
103
- try :
104
- infile = open (filename , encoding = 'utf-8' )
105
- except FileNotFoundError :
106
- return None
107
- with infile :
108
- for line in infile :
109
- m = regex .match (line )
110
- if m :
111
- value , = m .groups ()
112
- return value or ''
113
- return None
114
-
115
-
116
- def get_config_var (builddir , name ):
117
- python = os .path .join (builddir , 'python' )
118
- if os .path .isfile (python ):
119
- cmd = [python , '-c' ,
120
- f'import sysconfig; print(sysconfig.get_config_var("{ name } "))' ]
121
- try :
122
- return _run_stdout (cmd )
123
- except subprocess .CalledProcessError :
124
- pass
125
- return get_makefile_var (builddir , name )
126
-
127
-
128
90
##################################
129
91
# freezing
130
92
@@ -151,10 +113,8 @@ def prepare(script=None, outdir=None):
151
113
152
114
# Run configure.
153
115
print (f'configuring python in { builddir } ...' )
154
- cmd = [
155
- os .path .join (srcdir , 'configure' ),
156
- * shlex .split (get_config_var (srcdir , 'CONFIG_ARGS' ) or '' ),
157
- ]
116
+ config_args = shlex .split (sysconfig .get_config_var ('CONFIG_ARGS' ) or '' )
117
+ cmd = [os .path .join (srcdir , 'configure' ), * config_args ]
158
118
ensure_opt (cmd , 'cache-file' , os .path .join (outdir , 'python-config.cache' ))
159
119
prefix = os .path .join (outdir , 'python-installation' )
160
120
ensure_opt (cmd , 'prefix' , prefix )
0 commit comments