@@ -193,6 +193,19 @@ def deps_files():
193193 )
194194
195195
196+ def openssl_compat (version = None ):
197+ if version is None :
198+ import ssl
199+
200+ version = ssl .OPENSSL_VERSION_INFO
201+
202+ major , minor , patch = version [:3 ]
203+ if major >= 3 :
204+ return f"{ major } - { major } .{ minor } "
205+ else :
206+ return f"{ major } .{ minor } - { major } .{ minor } .{ patch } "
207+
208+
196209def find_requirements ():
197210 # read all dependencies into a dict: name -> key -> file -> value
198211 # read all julia compats into a dict: file -> compat
@@ -213,6 +226,13 @@ def find_requirements():
213226 os .path .normpath (os .path .join (os .path .dirname (fn ), v ))
214227 )
215228 dep .setdefault (k , {})[fn ] = v
229+ # special handling of `verion = "<=python"` for `OpenSSL_jll
230+ if (
231+ name == "OpenSSL_jll"
232+ and dep .get ("uuid" ).get (fn ) == "458c3c95-2e84-50aa-8efc-19380b2a3a95"
233+ and dep .get ("version" ).get (fn ) == "<=python"
234+ ):
235+ dep ["version" ][fn ] = openssl_compat ()
216236 c = deps .get ("julia" )
217237 if c is not None :
218238 compats [fn ] = Compat .parse (c )
@@ -331,33 +351,42 @@ def resolve(force=False, dry_run=False):
331351 if not STATE ["offline" ]:
332352 # write a Project.toml specifying UUIDs and compatibility of required
333353 # packages
354+ projtoml = []
355+ projtoml .append ("[deps]" )
356+ projtoml .extend (f'{ pkg .name } = "{ pkg .uuid } "' for pkg in pkgs )
357+ projtoml .append ("[compat]" )
358+ projtoml .extend (
359+ f'{ pkg .name } = "{ pkg .version } "' for pkg in pkgs if pkg .version
360+ )
361+ log ("Writing Project.toml:" )
362+ for line in projtoml :
363+ log (" " , line , cont = True )
334364 with open (os .path .join (project , "Project.toml" ), "wt" ) as fp :
335- print ("[deps]" , file = fp )
336- for pkg in pkgs :
337- print (f'{ pkg .name } = "{ pkg .uuid } "' , file = fp )
338- print (file = fp )
339- print ("[compat]" , file = fp )
340- for pkg in pkgs :
341- if pkg .version :
342- print (f'{ pkg .name } = "{ pkg .version } "' , file = fp )
343- print (file = fp )
365+ for line in projtoml :
366+ print (line , file = fp )
344367 # remove Manifest.toml
345368 manifest_path = os .path .join (project , "Manifest.toml" )
346369 if os .path .exists (manifest_path ):
347370 os .remove (manifest_path )
348371 # install the packages
349- dev_pkgs = ", " . join ( [pkg . jlstr () for pkg in pkgs if pkg .dev ])
350- add_pkgs = ", " . join ( [pkg . jlstr () for pkg in pkgs if not pkg .dev ])
372+ dev_pkgs = [pkg for pkg in pkgs if pkg .dev ]
373+ add_pkgs = [pkg for pkg in pkgs if not pkg .dev ]
351374 script = ["import Pkg" , "Pkg.Registry.update()" ]
352375 if dev_pkgs :
353- script .append (f"Pkg.develop([{ dev_pkgs } ])" )
376+ script .append ("Pkg.develop([" )
377+ for pkg in dev_pkgs :
378+ script .append (f" { pkg .jlstr ()} ," )
379+ script .append ("])" )
354380 if add_pkgs :
355- script .append (f"Pkg.add([{ add_pkgs } ])" )
381+ script .append ("Pkg.add([" )
382+ for pkg in add_pkgs :
383+ script .append (f" { pkg .jlstr ()} ," )
384+ script .append ("])" )
356385 script .append ("Pkg.resolve()" )
357386 script .append ("Pkg.precompile()" )
358387 log ("Installing packages:" )
359388 for line in script :
360- log ("julia> " , line , cont = True )
389+ log (" " , line , cont = True )
361390 env = os .environ .copy ()
362391 if sys .executable :
363392 # prefer PythonCall to use the current Python executable
@@ -370,7 +399,7 @@ def resolve(force=False, dry_run=False):
370399 "--project=" + project ,
371400 "--startup-file=no" ,
372401 "-e" ,
373- "; " .join (script ),
402+ "\n " .join (script ),
374403 ],
375404 check = True ,
376405 env = env ,
0 commit comments