Skip to content

Commit 6e1baf2

Browse files
authored
Use lib with version as a name for caching (#420)
1 parent bd327f9 commit 6e1baf2

2 files changed

Lines changed: 31 additions & 19 deletions

File tree

build_support/build_ext.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,21 @@
88
from .static_build import CrossCompileInfo, StaticBuildHelper
99

1010

11+
def _env_flag(name: str, default: bool) -> bool:
12+
value = os.environ.get(name)
13+
if value is None:
14+
return default
15+
16+
return value.strip().lower() not in {'', '0', 'false', 'no', 'off'}
17+
18+
1119
class build_ext(build_ext_orig):
1220
def __init__(self, *args, **kwargs) -> None:
1321
super().__init__(*args, **kwargs)
1422

15-
self.debug = os.environ.get('PYXMLSEC_ENABLE_DEBUG', False)
16-
self.static = os.environ.get('PYXMLSEC_STATIC_DEPS', False)
17-
self.size_opt = os.environ.get('PYXMLSEC_OPTIMIZE_SIZE', True)
23+
self.debug = _env_flag('PYXMLSEC_ENABLE_DEBUG', False)
24+
self.static = _env_flag('PYXMLSEC_STATIC_DEPS', False)
25+
self.size_opt = _env_flag('PYXMLSEC_OPTIMIZE_SIZE', True)
1826

1927
def info(self, message) -> None:
2028
self.announce(message, level=log.INFO)

build_support/lib_xmlsec_dependency_builder.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import multiprocessing
22
import os
33
import platform
4+
import shutil
45
import subprocess
56
import sys
67
import tarfile
@@ -138,6 +139,7 @@ def _prepare_windows_build(self, download_only=False):
138139
if download_only:
139140
return
140141

142+
self._reset_directory(self.build_libs_dir)
141143
for package in self.libs_dir.glob('*.zip'):
142144
with zipfile.ZipFile(str(package)) as archive:
143145
archive.extractall(path=str(self.build_libs_dir))
@@ -156,67 +158,60 @@ def _ensure_source_archives(self):
156158
return [
157159
self._ensure_source(
158160
name='OpenSSL',
159-
glob='openssl*.tar.gz',
160-
filename='openssl.tar.gz',
161+
filename=f'openssl-{self.openssl_version}.tar.gz',
161162
version=self.openssl_version,
162163
env_label='PYXMLSEC_OPENSSL_VERSION',
163164
default_url=latest_openssl_release,
164165
version_url=lambda v: f'https://api.github.com/repos/openssl/openssl/tarball/openssl-{v}',
165166
),
166167
self._ensure_source(
167168
name='zlib',
168-
glob='zlib*.tar.gz',
169-
filename='zlib.tar.gz',
169+
filename=f'zlib-{self.zlib_version}.tar.gz',
170170
version=self.zlib_version,
171171
env_label='PYXMLSEC_ZLIB_VERSION',
172172
default_url=latest_zlib_release,
173173
version_url=lambda v: f'https://zlib.net/fossils/zlib-{v}.tar.gz',
174174
),
175175
self._ensure_source(
176176
name='libiconv',
177-
glob='libiconv*.tar.gz',
178-
filename='libiconv.tar.gz',
177+
filename=f'libiconv-{self.libiconv_version}.tar.gz',
179178
version=self.libiconv_version,
180179
env_label='PYXMLSEC_LIBICONV_VERSION',
181180
default_url=latest_libiconv_release,
182181
version_url=lambda v: f'https://ftpmirror.gnu.org/libiconv/libiconv-{v}.tar.gz',
183182
),
184183
self._ensure_source(
185184
name='libxml2',
186-
glob='libxml2*.tar.xz',
187-
filename='libxml2.tar.xz',
185+
filename=f'libxml2-{self.libxml2_version}.tar.xz',
188186
version=self.libxml2_version,
189187
env_label='PYXMLSEC_LIBXML2_VERSION',
190188
default_url=latest_libxml2_release,
191189
version_url=lambda v: self._libxml_related_url('libxml2', v),
192190
),
193191
self._ensure_source(
194192
name='libxslt',
195-
glob='libxslt*.tar.xz',
196-
filename='libxslt.tar.xz',
193+
filename=f'libxslt-{self.libxslt_version}.tar.xz',
197194
version=self.libxslt_version,
198195
env_label='PYXMLSEC_LIBXSLT_VERSION',
199196
default_url=latest_libxslt_release,
200197
version_url=lambda v: self._libxml_related_url('libxslt', v),
201198
),
202199
self._ensure_source(
203200
name='xmlsec1',
204-
glob='xmlsec1*.tar.gz',
205-
filename='xmlsec1.tar.gz',
201+
filename=f'xmlsec1-{self.xmlsec1_version}.tar.gz',
206202
version=self.xmlsec1_version,
207203
env_label='PYXMLSEC_XMLSEC1_VERSION',
208204
default_url=latest_xmlsec_release,
209205
version_url=lambda v: f'https://github.com/lsh123/xmlsec/releases/download/{v}/xmlsec1-{v}.tar.gz',
210206
),
211207
]
212208

213-
def _ensure_source(self, name, glob, filename, version, env_label, default_url, version_url):
214-
archive = next(self.libs_dir.glob(glob), None)
215-
if archive is not None:
209+
def _ensure_source(self, name, filename, version, env_label, default_url, version_url):
210+
archive = self.libs_dir / filename
211+
if archive.is_file():
216212
return archive
217213

218214
self.info('{:10}: {}'.format(name, 'source tar not found, downloading ...'))
219-
archive = self.libs_dir / filename
220215
if version is None:
221216
url = default_url()
222217
self.info('{:10}: {}'.format(name, f'{env_label} unset, downloading latest from {url}'))
@@ -231,6 +226,8 @@ def _libxml_related_url(self, lib_name, version):
231226
return f'https://download.gnome.org/sources/{lib_name}/{version_prefix}/{lib_name}-{version}.tar.xz'
232227

233228
def _extract_archives(self, archives):
229+
self._reset_directory(self.build_libs_dir)
230+
self._reset_directory(self.prefix_dir)
234231
for archive in archives:
235232
self.info(f'Unpacking {archive.name}')
236233
try:
@@ -242,6 +239,13 @@ def _extract_archives(self, archives):
242239
except EOFError as error:
243240
raise DistutilsError(f'Bad {archive.name} downloaded; remove it and try again.') from error
244241

242+
def _reset_directory(self, path: Path) -> None:
243+
for entry in path.iterdir():
244+
if entry.is_dir():
245+
shutil.rmtree(entry)
246+
else:
247+
entry.unlink()
248+
245249
def _prepare_build_environment(self, build_platform):
246250
prefix_arg = f'--prefix={self.prefix_dir}'
247251
env = os.environ.copy()

0 commit comments

Comments
 (0)