##// END OF EJS Templates
packaging: support building WiX installers with PyOxidizer...
packaging: support building WiX installers with PyOxidizer We initially implemented PyOxidizer support for Inno installers. That did most of the heavy work of integrating PyOxidizer into the packaging system. Implementing WiX installer support was pretty straightforward. Aspects of this patch look very similar to Inno's. The main difference is the handling of the Visual C++ Redistributable Runtime files. The WiX installer was formerly using merge modules to install the VC++ 9.0 runtime because this feature is supported by the WiX installer (it isn't easily available to Inno installers). Our strategy for the runtime files is to install the vcruntime140.dll file next to hg.exe just like any other file. While we could leverage WiX's functionality for invoking a VCRedist installer, I don't want to deal with the complexity at this juncture. So, we let run_pyoxidizer() copy vcruntime140.dll into the staging directory (like it does for Inno) and our dynamic WiX XML generator picks it up as a regular file and installs it. We did, however, have to teach mercurial.wxs how to conditionally use the merge modules. But this was rather straightforward. Comparing the file layout of the WiX installers before and after: * Various lib/*.{pyd, dll} files no longer exist * python27.dll was replaced by python37.dll * vcruntime140.dll was added All these changes are expected due to the transition to Python 3 and to PyOxidizer, which embeded the .pyd and .dll files in hg.exe. Differential Revision: https://phab.mercurial-scm.org/D8477

File last commit:

r44446:de783805 default
r45260:c9517d9d default
Show More
__init__.py
75 lines | 2.4 KiB | text/x-python | PythonLexer
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 # Copyright (c) 2017-present, Gregory Szorc
# All rights reserved.
#
# This software may be modified and distributed under the terms
# of the BSD license. See the LICENSE file for details.
"""Python interface to the Zstandard (zstd) compression library."""
from __future__ import absolute_import, unicode_literals
# This module serves 2 roles:
#
# 1) Export the C or CFFI "backend" through a central module.
# 2) Implement additional functionality built on top of C or CFFI backend.
import os
import platform
# Some Python implementations don't support C extensions. That's why we have
# a CFFI implementation in the first place. The code here import one of our
# "backends" then re-exports the symbols from this module. For convenience,
# we support falling back to the CFFI backend if the C extension can't be
# imported. But for performance reasons, we only do this on unknown Python
# implementation. Notably, for CPython we require the C extension by default.
# Because someone will inevitably want special behavior, the behavior is
# configurable via an environment variable. A potentially better way to handle
# this is to import a special ``__importpolicy__`` module or something
# defining a variable and `setup.py` could write the file with whatever
# policy was specified at build time. Until someone needs it, we go with
# the hacky but simple environment variable approach.
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 _module_policy = os.environ.get("PYTHON_ZSTANDARD_IMPORT_POLICY", "default")
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if _module_policy == "default":
if platform.python_implementation() in ("CPython",):
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
elif platform.python_implementation() in ("PyPy",):
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 else:
try:
from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 except ImportError:
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
elif _module_policy == "cffi_fallback":
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 try:
from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 except ImportError:
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
elif _module_policy == "cext":
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
elif _module_policy == "cffi":
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 else:
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 raise ImportError(
"unknown module import policy: %s; use default, cffi_fallback, "
"cext, or cffi" % _module_policy
)
Gregory Szorc
zstandard: vendor python-zstandard 0.10.1...
r40157
# Keep this in sync with python-zstandard.h.
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 __version__ = "0.13.0"