comparison setup.py @ 51161:f816ca29a285

setup: try a non-pure version of the local Mercurial if the pure fails Things like `zstd` can make the pure version fails.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 11 Apr 2023 21:56:16 +0200
parents 3c5b66d03c37
children ee132657647d
comparison
equal deleted inserted replaced
51160:3c5b66d03c37 51161:f816ca29a285
296 296
297 if os.name != 'nt' or not os.path.exists("hg.exe"): 297 if os.name != 'nt' or not os.path.exists("hg.exe"):
298 if attempt(hgcmd + check_cmd, hgenv): 298 if attempt(hgcmd + check_cmd, hgenv):
299 return hgcommand(hgcmd, hgenv) 299 return hgcommand(hgcmd, hgenv)
300 300
301 # Fall back to trying the local hg installation. 301 # Fall back to trying the local hg installation (pure python)
302 repo_hg = os.path.join(os.path.dirname(__file__), 'hg')
302 hgenv = localhgenv() 303 hgenv = localhgenv()
303 hgcmd = [sys.executable, 'hg'] 304 hgcmd = [sys.executable, repo_hg]
305 if attempt(hgcmd + check_cmd, hgenv):
306 return hgcommand(hgcmd, hgenv)
307 # Fall back to trying the local hg installation (whatever we can)
308 hgenv = localhgenv(pure_python=False)
309 hgcmd = [sys.executable, repo_hg]
304 if attempt(hgcmd + check_cmd, hgenv): 310 if attempt(hgcmd + check_cmd, hgenv):
305 return hgcommand(hgcmd, hgenv) 311 return hgcommand(hgcmd, hgenv)
306 312
307 eprint("/!\\") 313 eprint("/!\\")
308 eprint(r"/!\ Unable to find a working hg binary") 314 eprint(r"/!\ Unable to find a working hg binary")
320 else: 326 else:
321 eprint(r"/!\ exception: ", res[1]) 327 eprint(r"/!\ exception: ", res[1])
322 return None 328 return None
323 329
324 330
325 def localhgenv(): 331 def localhgenv(pure_python=True):
326 """Get an environment dictionary to use for invoking or importing 332 """Get an environment dictionary to use for invoking or importing
327 mercurial from the local repository.""" 333 mercurial from the local repository."""
328 # Execute hg out of this directory with a custom environment which takes 334 # Execute hg out of this directory with a custom environment which takes
329 # care to not use any hgrc files and do no localization. 335 # care to not use any hgrc files and do no localization.
330 env = { 336 env = {
331 'HGMODULEPOLICY': 'py',
332 'HGRCPATH': '', 337 'HGRCPATH': '',
333 'LANGUAGE': 'C', 338 'LANGUAGE': 'C',
334 'PATH': '', 339 'PATH': '',
335 } # make pypi modules that use os.environ['PATH'] happy 340 } # make pypi modules that use os.environ['PATH'] happy
341 if pure_python:
342 env['HGMODULEPOLICY'] = 'py'
336 if 'LD_LIBRARY_PATH' in os.environ: 343 if 'LD_LIBRARY_PATH' in os.environ:
337 env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH'] 344 env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH']
338 if 'SystemRoot' in os.environ: 345 if 'SystemRoot' in os.environ:
339 # SystemRoot is required by Windows to load various DLLs. See: 346 # SystemRoot is required by Windows to load various DLLs. See:
340 # https://bugs.python.org/issue13524#msg148850 347 # https://bugs.python.org/issue13524#msg148850