The new module setup.py handles creation of package distributions in compressed formats, and performs installation of said distributions after decompression. Distribution strategy for PyDTLS is in the form of source distributions only. Building the OpenSSL library on Windows is non-trivial. Requirements include linking against the same version of the C runtime that is used by the Python interpreter, or else Microsoft redistributable installation may also need to be performed. For the convenience of Windows users, the distribution procedure includes creation of prebuilt versions of the OpenSSL library for both 32- and 64-bit versions of Windows. Despite containing binaries, these are still source distributions that are installed with "python setup.py install." A version of OpenSSL compiled with the MinGW toolchain is included. cygcrypto-1.0.0.dll and cygssl-1.0.0.dll contain symbols and can be debugged with gdb. All MinGW OpenSSL dll's link with msvcr90.dll. In order to avoid making installation a requirement after cloning, the package initializer looks for prebuilts of the currently executing platform and copies them into the dtls package directory before continuing module initialization. A distribution containing prebuilts for all platforms as well as those containing no prebuilts (appropriate for Linux) can be generated by issuing "python setup.py sdist --prebuilts."
97 lines
3.3 KiB
Python
97 lines
3.3 KiB
Python
#!/usr/bin/env python
|
|
# PyDTLS setup script. Written by Ray Brown.
|
|
"""PyDTLS setup script
|
|
|
|
Install or create a distribution of the PyDTLS package.
|
|
"""
|
|
|
|
from os import listdir, path, remove, rename
|
|
from sys import argv
|
|
from pickle import dump, load
|
|
from distutils.core 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"
|
|
VERSION = "0.1"
|
|
|
|
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:
|
|
pass
|
|
setup(name=NAME,
|
|
version=VERSION,
|
|
description="Python Datagram Transport Layer Security",
|
|
author="Ray Brown",
|
|
author_email="code@liquibits.com",
|
|
url="http://www.github.com/pydtls",
|
|
packages=["dtls", "dtls.demux", "dtls.test"],
|
|
package_data={"dtls.test": ["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)
|
|
# Finally the distribution without prebuilts
|
|
argv.append("--formats=zip,gztar")
|
|
invoke_setup()
|
|
|
|
if __name__ == "__main__":
|
|
if argv[-1] == "--prebuilts":
|
|
del argv[-1]
|
|
make_dists()
|
|
else:
|
|
invoke_setup()
|