@@ -33,6 +33,34 @@ def triplet(self):
3333
3434
3535class StaticBuildHelper :
36+ WINDOWS_LIBS_DOWNLOAD_RELEASE_URL = (
37+ 'https://github.com/mxamin/python-xmlsec-win-binaries/releases/download/2025.07.10/'
38+ )
39+ LIB_VERSION_ENV_VARS = {
40+ 'openssl_version' : 'PYXMLSEC_OPENSSL_VERSION' ,
41+ 'libiconv_version' : 'PYXMLSEC_LIBICONV_VERSION' ,
42+ 'libxml2_version' : 'PYXMLSEC_LIBXML2_VERSION' ,
43+ 'libxslt_version' : 'PYXMLSEC_LIBXSLT_VERSION' ,
44+ 'zlib_version' : 'PYXMLSEC_ZLIB_VERSION' ,
45+ 'xmlsec1_version' : 'PYXMLSEC_XMLSEC1_VERSION' ,
46+ }
47+ UNIX_DEFAULT_LIB_VERSIONS = {
48+ 'openssl_version' : '3.6.0' ,
49+ 'libiconv_version' : '1.18' ,
50+ 'libxml2_version' : '2.14.6' ,
51+ 'libxslt_version' : '1.1.43' ,
52+ 'zlib_version' : '1.3.1' ,
53+ 'xmlsec1_version' : '1.3.9' ,
54+ }
55+ WINDOWS_DEFAULT_LIB_VERSIONS = {
56+ 'openssl_version' : '3.0.16.pl1' ,
57+ 'libiconv_version' : '1.18-1' ,
58+ 'libxml2_version' : '2.11.9-3' ,
59+ 'libxslt_version' : '1.1.39' ,
60+ 'zlib_version' : '1.3.1' ,
61+ 'xmlsec1_version' : '1.3.7' ,
62+ }
63+
3664 def __init__ (self , builder ):
3765 self .builder = builder
3866 self .ext = builder .ext_map ['xmlsec' ]
@@ -69,7 +97,8 @@ def _prepare_directories(self):
6997 self .builder .libs_dir = self .libs_dir
7098
7199 def _prepare_windows_build (self ):
72- release_url = 'https://github.com/mxamin/python-xmlsec-win-binaries/releases/download/2025.07.10/'
100+ self ._set_library_versions (build_platform = 'windows' )
101+
73102 if platform .machine () == 'ARM64' :
74103 suffix = 'win-arm64'
75104 elif sys .maxsize > 2 ** 32 :
@@ -78,16 +107,16 @@ def _prepare_windows_build(self):
78107 suffix = 'win32'
79108
80109 libs = [
81- f'libxml2-2.11.9-3 .{ suffix } .zip' ,
82- f'libxslt-1.1.39 .{ suffix } .zip' ,
83- f'zlib-1.3.1 .{ suffix } .zip' ,
84- f'iconv-1.18-1 .{ suffix } .zip' ,
85- f'openssl-3.0.16.pl1 .{ suffix } .zip' ,
86- f'xmlsec-1.3.7 .{ suffix } .zip' ,
110+ f'libxml2-{ self . builder . libxml2_version } .{ suffix } .zip' ,
111+ f'libxslt-{ self . builder . libxslt_version } .{ suffix } .zip' ,
112+ f'zlib-{ self . builder . zlib_version } .{ suffix } .zip' ,
113+ f'iconv-{ self . builder . libiconv_version } .{ suffix } .zip' ,
114+ f'openssl-{ self . builder . openssl_version } .{ suffix } .zip' ,
115+ f'xmlsec-{ self . builder . xmlsec1_version } .{ suffix } .zip' ,
87116 ]
88117
89118 for libfile in libs :
90- url = urljoin (release_url , libfile )
119+ url = urljoin (self . WINDOWS_LIBS_DOWNLOAD_RELEASE_URL , libfile )
91120 destfile = self .libs_dir / libfile
92121 if destfile .is_file ():
93122 self .info (f'Using local copy of "{ url } "' )
@@ -138,21 +167,21 @@ def _prepare_windows_build(self):
138167 self .ext .include_dirs = [str (path .absolute ()) for path in includes ]
139168
140169 def _prepare_unix_build (self , build_platform ):
141- self ._capture_version_overrides ( )
170+ self ._set_library_versions ( build_platform = build_platform )
142171 archives = self ._ensure_source_archives ()
143172 self ._extract_archives (archives )
144173
145174 env , prefix_arg , ldflags , cross_compile = self ._prepare_build_environment (build_platform )
146175 self ._build_dependencies (env , prefix_arg , ldflags , cross_compile )
147176 self ._configure_extension_for_static (build_platform )
148177
149- def _capture_version_overrides (self ):
150- self . builder . openssl_version = os . environ . get ( 'PYXMLSEC_OPENSSL_VERSION' , '3.6.0' )
151- self . builder . libiconv_version = os . environ . get ( 'PYXMLSEC_LIBICONV_VERSION' , '1.18' )
152- self . builder . libxml2_version = os . environ . get ( 'PYXMLSEC_LIBXML2_VERSION' , '2.14.6' )
153- self . builder . libxslt_version = os . environ . get ( 'PYXMLSEC_LIBXSLT_VERSION' , '1.1.43' )
154- self . builder . zlib_version = os . environ . get ( 'PYXMLSEC_ZLIB_VERSION' , '1.3.1' )
155- self .builder . xmlsec1_version = os .environ .get ('PYXMLSEC_XMLSEC1_VERSION' , '1.3.9' )
178+ def _set_library_versions (self , build_platform ):
179+ defaults = self . UNIX_DEFAULT_LIB_VERSIONS
180+ if build_platform == 'windows' :
181+ defaults = self . WINDOWS_DEFAULT_LIB_VERSIONS
182+
183+ for version_attr , env_var in self . LIB_VERSION_ENV_VARS . items ():
184+ setattr ( self .builder , version_attr , os .environ .get (env_var , defaults [ version_attr ]) )
156185
157186 def _ensure_source_archives (self ):
158187 return [
0 commit comments