##// 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:

r44605:5e84a96d default
r45260:c9517d9d default
Show More
setup.py
120 lines | 3.3 KiB | text/x-python | PythonLexer
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 #!/usr/bin/env python
# Copyright (c) 2016-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.
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from __future__ import print_function
from distutils.version import LooseVersion
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 import os
Gregory Szorc
zstd: vendor python-zstandard 0.6.0...
r30822 import sys
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 from setuptools import setup
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 # Need change in 1.10 for ffi.from_buffer() to handle all buffer types
# (like memoryview).
# Need feature in 1.11 for ffi.gc() to declare size of objects so we avoid
# garbage collection pitfalls.
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 MINIMUM_CFFI_VERSION = "1.11"
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 try:
import cffi
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237
# PyPy (and possibly other distros) have CFFI distributed as part of
# them. The install_requires for CFFI below won't work. We need to sniff
# out the CFFI version here and reject CFFI if it is too old.
cffi_version = LooseVersion(cffi.__version__)
if cffi_version < LooseVersion(MINIMUM_CFFI_VERSION):
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 print(
"CFFI 1.11 or newer required (%s found); "
"not building CFFI backend" % cffi_version,
file=sys.stderr,
)
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 cffi = None
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 except ImportError:
cffi = None
import setup_zstd
Gregory Szorc
zstd: vendor python-zstandard 0.6.0...
r30822 SUPPORT_LEGACY = False
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 SYSTEM_ZSTD = False
WARNINGS_AS_ERRORS = False
Gregory Szorc
zstd: vendor python-zstandard 0.6.0...
r30822
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if os.environ.get("ZSTD_WARNINGS_AS_ERRORS", ""):
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 WARNINGS_AS_ERRORS = True
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if "--legacy" in sys.argv:
Gregory Szorc
zstd: vendor python-zstandard 0.6.0...
r30822 SUPPORT_LEGACY = True
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 sys.argv.remove("--legacy")
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if "--system-zstd" in sys.argv:
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 SYSTEM_ZSTD = True
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 sys.argv.remove("--system-zstd")
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if "--warnings-as-errors" in sys.argv:
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 WARNINGS_AS_ERRORS = True
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 sys.argv.remove("--warning-as-errors")
Gregory Szorc
zstd: vendor python-zstandard 0.6.0...
r30822
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 # Code for obtaining the Extension instance is in its own module to
# facilitate reuse in other projects.
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 extensions = [
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 setup_zstd.get_c_extension(
name="zstd",
support_legacy=SUPPORT_LEGACY,
system_zstd=SYSTEM_ZSTD,
warnings_as_errors=WARNINGS_AS_ERRORS,
),
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 ]
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435
Gregory Szorc
zstd: vendor python-zstandard 0.8.0...
r31796 install_requires = []
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 if cffi:
import make_cffi
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 extensions.append(make_cffi.ffi.distutils_extension())
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 install_requires.append("cffi>=%s" % MINIMUM_CFFI_VERSION)
Gregory Szorc
zstd: vendor python-zstandard 0.8.0...
r31796
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 version = None
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 with open("c-ext/python-zstandard.h", "r") as fh:
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 for line in fh:
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if not line.startswith("#define PYTHON_ZSTANDARD_VERSION"):
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 continue
version = line.split()[2][1:-1]
break
if not version:
Gregory Szorc
python-zstandard: blacken at 80 characters...
r44605 raise Exception(
"could not resolve package version; " "this should never happen"
)
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435
setup(
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 name="zstandard",
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 version=version,
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 description="Zstandard bindings for Python",
long_description=open("README.rst", "r").read(),
url="https://github.com/indygreg/python-zstandard",
author="Gregory Szorc",
author_email="gregory.szorc@gmail.com",
license="BSD",
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 classifiers=[
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 "Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Programming Language :: C",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 ],
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 keywords="zstandard zstd compression",
packages=["zstandard"],
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 ext_modules=extensions,
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 test_suite="tests",
Gregory Szorc
zstd: vendor python-zstandard 0.8.0...
r31796 install_requires=install_requires,
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 tests_require=["hypothesis"],
Gregory Szorc
zstd: vendor python-zstandard 0.5.0...
r30435 )