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
+
8
+
9
+ def get_source_dir ():
10
+ src_dir = sysconfig .get_config_var ('abs_builddir' )
11
+ if src_dir is None :
12
+ # gh-74470: On Windows, only srcdir is available.
13
+ src_dir = sysconfig .get_config_var ('srcdir' )
14
+ return os .path .abspath (src_dir )
7
15
8
16
9
17
TESTS_DIR = os .path .dirname (__file__ )
10
18
TOOL_ROOT = os .path .dirname (TESTS_DIR )
11
- SRCDIR = os . path . dirname ( os . path . dirname ( TOOL_ROOT ) )
19
+ SRCDIR = get_source_dir ( )
12
20
13
21
MAKE = shutil .which ('make' )
14
22
FREEZE = os .path .join (TOOL_ROOT , 'freeze.py' )
@@ -75,7 +83,7 @@ def ensure_opt(args, name, value):
75
83
76
84
77
85
def copy_source_tree (newroot , oldroot ):
78
- print (f'copying the source tree into { newroot } ...' )
86
+ print (f'copying the source tree { oldroot } into { newroot } ...' )
79
87
if os .path .exists (newroot ):
80
88
if newroot == SRCDIR :
81
89
raise Exception ('this probably isn\' t what you wanted' )
@@ -97,34 +105,6 @@ def ignore_non_src(src, names):
97
105
_run_quiet ([MAKE , 'clean' ], newroot )
98
106
99
107
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
108
##################################
129
109
# freezing
130
110
@@ -151,10 +131,8 @@ def prepare(script=None, outdir=None):
151
131
152
132
# Run configure.
153
133
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
- ]
134
+ config_args = shlex .split (sysconfig .get_config_var (SRCDIR , 'CONFIG_ARGS' ) or '' )
135
+ cmd = [os .path .join (srcdir , 'configure' ), * config_args ]
158
136
ensure_opt (cmd , 'cache-file' , os .path .join (outdir , 'python-config.cache' ))
159
137
prefix = os .path .join (outdir , 'python-installation' )
160
138
ensure_opt (cmd , 'prefix' , prefix )
0 commit comments