# -*- coding: utf-8 -*-
""" install mythril and deploy source-dist and wheel to pypi.python.org.
deps ( requires up2date version ) :
* ) pip install - - upgrade pip wheel setuptools twine
publish to pypi w / o having to convert Readme . md to RST :
1 ) #> python setup.py sdist bdist_wheel
2 ) #> twine upload dist/* #<specify bdist_wheel version to upload>; #optional --repository <testpypi> or --repository-url <testpypi-url>
"""
from setuptools import setup , find_packages
from setuptools . command . install import install
from pathlib import Path
import sys
import os
# To make lint checkers happy we set VERSION here, but
# it is redefined by the exec below
VERSION = None
# Package version (vX.Y.Z). It must match git tag being used for CircleCI
# deployment; otherwise the build will failed.
version_path = ( Path ( __file__ ) . parent / " mythril " / " version.py " ) . absolute ( )
exec ( open ( str ( version_path ) , " r " ) . read ( ) )
class VerifyVersionCommand ( install ) :
""" Custom command to verify that the git tag matches our version. """
description = " verify that the git tag matches our version "
def run ( self ) :
""" """
tag = os . getenv ( " CIRCLE_TAG " )
if tag != VERSION :
info = " Git tag: {0} does not match the version of this app: {1} " . format (
tag , VERSION
)
sys . exit ( info )
def read_file ( fname ) :
""" return file contents.
: param fname : path relative to setup . py
: return : file contents
"""
with open ( os . path . join ( os . path . dirname ( __file__ ) , fname ) , " r " ) as fd :
return fd . read ( )
setup (
name = " mythril " ,
version = VERSION [ 1 : ] ,
description = " Security analysis tool for Ethereum smart contracts " ,
long_description = read_file ( " README.md " ) if os . path . isfile ( " README.md " ) else " " ,
long_description_content_type = " text/markdown " , # requires twine and recent setuptools
url = " https://github.com/b-mueller/mythril " ,
author = " Bernhard Mueller " ,
author_email = " bernhard.mueller11@gmail.com " ,
license = " MIT " ,
classifiers = [
" Development Status :: 3 - Alpha " ,
" Intended Audience :: Science/Research " ,
" Topic :: Software Development :: Disassemblers " ,
" License :: OSI Approved :: MIT License " ,
" Programming Language :: Python :: 3.5 " ,
" Programming Language :: Python :: 3.6 " ,
" Programming Language :: Python :: 3.7 " ,
] ,
keywords = " hacking disassembler security ethereum " ,
packages = find_packages ( exclude = [ " contrib " , " docs " , " tests " ] ) ,
install_requires = [
" coloredlogs>=10.0 " ,
" py_ecc==1.4.2 " ,
" ethereum>=2.3.2 " ,
" z3-solver-mythril>=4.8.4.1 " ,
" requests " ,
" py-solc " ,
" plyvel " ,
" eth_abi==1.3.0 " ,
" eth-utils>=1.0.1 " ,
" eth-account>=0.1.0a2,<=0.3.0 " ,
" eth-hash>=0.1.0 " ,
" eth-keyfile>=0.5.1 " ,
" eth-keys>=0.2.0b3 " ,
" eth-rlp>=0.1.0 " ,
" eth-tester==0.1.0b32 " ,
" eth-typing>=2.0.0 " ,
" coverage " ,
" jinja2>=2.9 " ,
" rlp>=1.0.1 " ,
" transaction>=2.2.1 " ,
" py-flags " ,
" mock " ,
" configparser>=3.5.0 " ,
" persistent>=4.2.0 " ,
" ethereum-input-decoder>=0.2.2 " ,
" matplotlib " ,
] ,
tests_require = [ " mypy " , " pytest>=3.6.0 " , " pytest_mock " , " pytest-cov " ] ,
python_requires = " >=3.5 " ,
extras_require = { } ,
package_data = { " mythril.analysis.templates " : [ " * " ] , " mythril.support.assets " : [ " * " ] } ,
include_package_data = True ,
entry_points = { " console_scripts " : [ " myth=mythril.interfaces.cli:main " ] } ,
cmdclass = { " verify " : VerifyVersionCommand } ,
)