Installation Fixes and Improvements
Installation as well as distribution generation are now simplified. With the elimination of MinGW support there is now a unique set of platform binaries for 32-bit and 64-bit Windows. Pip will now automatically choose the proper binary wheel or the source distribution, depending under which platform and Python version it is being invoked. * README.md: add installation section * setup.py: rewrite to use bdist_wheel for Windows
This commit is contained in:
		
							parent
							
								
									9bf91c202a
								
							
						
					
					
						commit
						8ec1dfb56c
					
				@ -1,3 +1,12 @@
 | 
				
			|||||||
 | 
					2017-04-06  Ray Brown  <code@liquibits.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Installation Fixes and Improvements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Installation as well as distribution generation are now simplified. With the elimination of MinGW support there is now a unique set of platform binaries for 32-bit and 64-bit Windows. Pip will now automatically choose the proper binary wheel or the source distribution, depending under which platform and Python version it is being invoked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* README.md: add installation section
 | 
				
			||||||
 | 
						* setup.py: rewrite to use bdist_wheel for Windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2017-04-03  Ray Brown  <ray@Virtor10>
 | 
					2017-04-03  Ray Brown  <ray@Virtor10>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Release 1.2.0
 | 
						Release 1.2.0
 | 
				
			||||||
 | 
				
			|||||||
@ -27,6 +27,14 @@ As of version 1.2.0, PyDTLS supports DTLS version 1.2 in addition to
 | 
				
			|||||||
version 1.0. This version also introduces forward secrecy using
 | 
					version 1.0. This version also introduces forward secrecy using
 | 
				
			||||||
elliptic curve cryptography and more fine-grained configuration options.
 | 
					elliptic curve cryptography and more fine-grained configuration options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To install from PyPI, on any supported platform enter:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					pip install Dtls
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Design Goals
 | 
					## Design Goals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The primary design goal of PyDTLS is broad availability. It has therefore
 | 
					The primary design goal of PyDTLS is broad availability. It has therefore
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										179
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										179
									
								
								setup.py
									
									
									
									
									
								
							@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/env python
 | 
					#!/usr/bin/env python
 | 
				
			||||||
# PyDTLS setup script.
 | 
					# PyDTLS setup script.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copyright 2012 Ray Brown
 | 
					# Copyright 2017 Ray Brown
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
					# Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
# you may not use this file except in compliance with the License.
 | 
					# you may not use this file except in compliance with the License.
 | 
				
			||||||
@ -22,102 +22,97 @@
 | 
				
			|||||||
Install or create a distribution of the PyDTLS package.
 | 
					Install or create a distribution of the PyDTLS package.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from os import listdir, path, remove, rename
 | 
					from os import path, remove
 | 
				
			||||||
from sys import argv
 | 
					from shutil import copy2, rmtree
 | 
				
			||||||
 | 
					from argparse import ArgumentParser
 | 
				
			||||||
from pickle import dump, load
 | 
					from pickle import dump, load
 | 
				
			||||||
from distutils.core import setup
 | 
					from setuptools import setup
 | 
				
			||||||
from distutils.command.install import INSTALL_SCHEMES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Make the root for data file installations the same as Python code
 | 
					 | 
				
			||||||
for scheme in INSTALL_SCHEMES.values():
 | 
					 | 
				
			||||||
    scheme['data'] = scheme['purelib']
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME = "Dtls"
 | 
					NAME = "Dtls"
 | 
				
			||||||
VERSION = "1.2.0"
 | 
					VERSION = "1.2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DIST_DIR = "dist"
 | 
					 | 
				
			||||||
FORMAT_TO_SUFFIX = { "zip": ".zip",
 | 
					 | 
				
			||||||
                     "gztar": ".tar.gz",
 | 
					 | 
				
			||||||
                     "bztar": ".tar.bz2",
 | 
					 | 
				
			||||||
                     "ztar": ".tar.Z",
 | 
					 | 
				
			||||||
                     "tar": ".tar" }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def invoke_setup(data_files=None):
 | 
					 | 
				
			||||||
    data_files_file = "data_files"
 | 
					 | 
				
			||||||
    data_files_file_created = False
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        if data_files:
 | 
					 | 
				
			||||||
            # Save the value of data_files with the distribution archive
 | 
					 | 
				
			||||||
            data_files_file_created = True
 | 
					 | 
				
			||||||
            with open(data_files_file, "wb") as fl:
 | 
					 | 
				
			||||||
                dump(data_files, fl)
 | 
					 | 
				
			||||||
            data_files.append(('', [data_files_file]),)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            # Load data_files from the distribution archive, if present
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                with open(data_files_file, "rb") as fl:
 | 
					 | 
				
			||||||
                    data_files = load(fl)
 | 
					 | 
				
			||||||
            except IOError:
 | 
					 | 
				
			||||||
                data_files = []
 | 
					 | 
				
			||||||
        data_files.append(('dtls', ["NOTICE",
 | 
					 | 
				
			||||||
                                    "LICENSE",
 | 
					 | 
				
			||||||
                                    "README.txt",
 | 
					 | 
				
			||||||
                                    "ChangeLog"]),)
 | 
					 | 
				
			||||||
        setup(name=NAME,
 | 
					 | 
				
			||||||
              version=VERSION,
 | 
					 | 
				
			||||||
              description="Python Datagram Transport Layer Security",
 | 
					 | 
				
			||||||
              author="Ray Brown",
 | 
					 | 
				
			||||||
              author_email="code@liquibits.com",
 | 
					 | 
				
			||||||
              url="https://github.com/rbit/pydtls",
 | 
					 | 
				
			||||||
              license="LICENSE",
 | 
					 | 
				
			||||||
              long_description=open("README.txt").read(),
 | 
					 | 
				
			||||||
              packages=["dtls", "dtls.demux", "dtls.test"],
 | 
					 | 
				
			||||||
              package_data={"dtls.test": ["makecerts",
 | 
					 | 
				
			||||||
                                          "openssl_ca.cnf",
 | 
					 | 
				
			||||||
                                          "openssl_server.cnf",
 | 
					 | 
				
			||||||
                                          "certs/*.pem"]},
 | 
					 | 
				
			||||||
              data_files=data_files,
 | 
					 | 
				
			||||||
              )
 | 
					 | 
				
			||||||
    finally:
 | 
					 | 
				
			||||||
        if data_files_file_created:
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                remove(data_files_file)
 | 
					 | 
				
			||||||
            except OSError:
 | 
					 | 
				
			||||||
                pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def make_dists():
 | 
					 | 
				
			||||||
    prebuilt_platform_root = path.join("dtls", "prebuilt")
 | 
					 | 
				
			||||||
    for platform in listdir(prebuilt_platform_root):
 | 
					 | 
				
			||||||
        config = {"MANIFEST_DIR": path.join(prebuilt_platform_root, platform)}
 | 
					 | 
				
			||||||
        execfile(path.join(prebuilt_platform_root, platform, "manifest.pycfg"),
 | 
					 | 
				
			||||||
                 config)
 | 
					 | 
				
			||||||
        files = map(lambda x: "dtls/prebuilt/" + platform + "/" + x,
 | 
					 | 
				
			||||||
                    config["FILES"])
 | 
					 | 
				
			||||||
        argv.append("--formats=" + config["FORMATS"])
 | 
					 | 
				
			||||||
        invoke_setup([('dtls', files)])
 | 
					 | 
				
			||||||
        del argv[-1]
 | 
					 | 
				
			||||||
        for dist_format in config["FORMATS"].split(','):
 | 
					 | 
				
			||||||
            source_name = path.join(DIST_DIR,
 | 
					 | 
				
			||||||
                                    NAME + "-" + VERSION +
 | 
					 | 
				
			||||||
                                    FORMAT_TO_SUFFIX[dist_format])
 | 
					 | 
				
			||||||
            target_name = path.join(DIST_DIR,
 | 
					 | 
				
			||||||
                                    NAME + "-" + VERSION +
 | 
					 | 
				
			||||||
                                    ".sdist_with_openssl." +
 | 
					 | 
				
			||||||
                                    config["ARCHITECTURE"] +
 | 
					 | 
				
			||||||
                                    FORMAT_TO_SUFFIX[dist_format])
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                remove(target_name)
 | 
					 | 
				
			||||||
            except OSError:
 | 
					 | 
				
			||||||
                pass
 | 
					 | 
				
			||||||
            rename(source_name, target_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    # Full upload sequence for new version:
 | 
					    # Full upload sequence for new version:
 | 
				
			||||||
    #    python setup.py sdist --formats=zip,gztar upload
 | 
					    #    1. python setup.py sdist
 | 
				
			||||||
    #    python setup.py sdist --prebuilts
 | 
					    #    2. python setup.py bdist_wheel -p win32
 | 
				
			||||||
    #    Manually add .sdist_with_openssl. archives to repository
 | 
					    #    3. python setup.py bdist_wheel -p win_amd64
 | 
				
			||||||
    if argv[-1] == "--prebuilts":
 | 
					    #    4. twine upload dist/*
 | 
				
			||||||
        del argv[-1]
 | 
					
 | 
				
			||||||
        make_dists()
 | 
					    parser = ArgumentParser(add_help=False)
 | 
				
			||||||
 | 
					    parser.add_argument("-h", "--help", action="store_true")
 | 
				
			||||||
 | 
					    parser.add_argument("command", nargs="*")
 | 
				
			||||||
 | 
					    parser.add_argument("-p", "--plat-name")
 | 
				
			||||||
 | 
					    args = parser.parse_known_args()[0]
 | 
				
			||||||
 | 
					    sdist = "sdist" in args.command and not args.help
 | 
				
			||||||
 | 
					    bdist = "bdist_wheel" in args.command and not args.help
 | 
				
			||||||
 | 
					    if sdist or bdist:
 | 
				
			||||||
 | 
					        from pypandoc import convert
 | 
				
			||||||
 | 
					        long_description = convert("README.md", "rst")\
 | 
				
			||||||
 | 
					                           .translate({ord("\r"): None})
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        invoke_setup()
 | 
					        long_description = open("README.md").read()
 | 
				
			||||||
 | 
					    top_package_plat_files_file = "dtls_package_files"
 | 
				
			||||||
 | 
					    if bdist:
 | 
				
			||||||
 | 
					        prebuilt_platform_root = "dtls/prebuilt"
 | 
				
			||||||
 | 
					        if args.plat_name == "win32":
 | 
				
			||||||
 | 
					            platform = "win32-x86"
 | 
				
			||||||
 | 
					        elif args.plat_name == "win_amd64":
 | 
				
			||||||
 | 
					            platform = "win32-x86_64"
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            raise ValueError("Unknown platform")
 | 
				
			||||||
 | 
					        prebuilt_path = prebuilt_platform_root + "/" + platform
 | 
				
			||||||
 | 
					        config = {"MANIFEST_DIR": prebuilt_path}
 | 
				
			||||||
 | 
					        execfile(prebuilt_path + "/manifest.pycfg", config)
 | 
				
			||||||
 | 
					        top_package_plat_files = map(lambda x: prebuilt_path + "/" + x,
 | 
				
			||||||
 | 
					                                     config["FILES"])
 | 
				
			||||||
 | 
					        # Save top_package_plat_files with the distribution archive
 | 
				
			||||||
 | 
					        with open(top_package_plat_files_file, "wb") as fl:
 | 
				
			||||||
 | 
					            dump(top_package_plat_files, fl)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        # Load top_package_files from the distribution archive, if present
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            with open(top_package_plat_files_file, "rb") as fl:
 | 
				
			||||||
 | 
					                top_package_plat_files = load(fl)
 | 
				
			||||||
 | 
					        except IOError:
 | 
				
			||||||
 | 
					            top_package_plat_files = []
 | 
				
			||||||
 | 
					    top_package_extra_files = ["NOTICE",
 | 
				
			||||||
 | 
					                               "LICENSE",
 | 
				
			||||||
 | 
					                               "README.md",
 | 
				
			||||||
 | 
					                               "ChangeLog"] + top_package_plat_files
 | 
				
			||||||
 | 
					    for extra_file in top_package_extra_files:
 | 
				
			||||||
 | 
					        copy2(extra_file, "dtls")
 | 
				
			||||||
 | 
					    top_package_extra_files = [path.basename(f)
 | 
				
			||||||
 | 
					                               for f in top_package_extra_files]
 | 
				
			||||||
 | 
					    setup(name=NAME,
 | 
				
			||||||
 | 
					          version=VERSION,
 | 
				
			||||||
 | 
					          description="Python Datagram Transport Layer Security",
 | 
				
			||||||
 | 
					          author="Ray Brown",
 | 
				
			||||||
 | 
					          author_email="code@liquibits.com",
 | 
				
			||||||
 | 
					          url="https://github.com/rbit/pydtls",
 | 
				
			||||||
 | 
					          license="Apache-2.0",
 | 
				
			||||||
 | 
					          classifiers=[
 | 
				
			||||||
 | 
					              'Development Status :: 5 - Production/Stable',
 | 
				
			||||||
 | 
					              'Intended Audience :: Developers',
 | 
				
			||||||
 | 
					              'Topic :: Security :: Cryptography',
 | 
				
			||||||
 | 
					              'Topic :: Software Development :: Libraries :: Python Modules',
 | 
				
			||||||
 | 
					              'License :: OSI Approved :: Apache Software License',
 | 
				
			||||||
 | 
					              'Operating System :: POSIX :: Linux',
 | 
				
			||||||
 | 
					              'Operating System :: Microsoft :: Windows',
 | 
				
			||||||
 | 
					              'Programming Language :: Python :: 2.7',
 | 
				
			||||||
 | 
					          ],
 | 
				
			||||||
 | 
					          long_description=long_description,
 | 
				
			||||||
 | 
					          packages=["dtls", "dtls.demux", "dtls.test"],
 | 
				
			||||||
 | 
					          package_data={"dtls": top_package_extra_files,
 | 
				
			||||||
 | 
					                        "dtls.test": ["makecerts",
 | 
				
			||||||
 | 
					                                      "makecerts_ec.bat",
 | 
				
			||||||
 | 
					                                      "openssl_ca.cnf",
 | 
				
			||||||
 | 
					                                      "openssl_server.cnf",
 | 
				
			||||||
 | 
					                                      "certs/*.pem"]},
 | 
				
			||||||
 | 
					          data_files=[('', [top_package_plat_files_file])]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    for extra_file in top_package_extra_files:
 | 
				
			||||||
 | 
					        remove("dtls/" + extra_file)
 | 
				
			||||||
 | 
					    if bdist:
 | 
				
			||||||
 | 
					        remove(top_package_plat_files_file)
 | 
				
			||||||
 | 
					    rmtree("Dtls.egg-info", True)
 | 
				
			||||||
 | 
					    rmtree("build", True)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user