Skip to content

Commit

Permalink
Merged sundhaug92's updates to setup.py
Browse files Browse the repository at this point in the history
  • Loading branch information
devttys0 committed Mar 15, 2017
1 parent 639a7d4 commit f1fe110
Showing 1 changed file with 85 additions and 37 deletions.
122 changes: 85 additions & 37 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import os
import sys
import shutil
import tempfile
import subprocess
from distutils.core import setup, Command
from distutils.dir_util import remove_tree
Expand All @@ -17,14 +16,18 @@
raw_input = input

# cd into the src directory, no matter where setup.py was invoked from
#os.chdir(os.path.join(os.path.dirname(os.path.realpath(__file__)), "src"))
# os.chdir(os.path.join(os.path.dirname(os.path.realpath(__file__)), "src"))


def which(command):
# /usr/local/bin is usually the default install path, though it may not be in $PATH
usr_local_bin = os.path.sep.join([os.path.sep, 'usr', 'local', 'bin', command])
usr_local_bin = os.path.sep.join(
[os.path.sep, 'usr', 'local', 'bin', command])

try:
location = subprocess.Popen(["which", command], shell=False, stdout=subprocess.PIPE).communicate()[0].strip()
location = subprocess.Popen(
["which", command],
shell=False, stdout=subprocess.PIPE).communicate()[0].strip()
except KeyboardInterrupt as e:
raise e
except Exception as e:
Expand All @@ -35,6 +38,7 @@ def which(command):

return location


def find_binwalk_module_paths():
paths = []

Expand All @@ -48,6 +52,7 @@ def find_binwalk_module_paths():

return paths


def remove_binwalk_module(pydir=None, pybin=None):
if pydir:
module_paths = [pydir]
Expand All @@ -57,7 +62,7 @@ def remove_binwalk_module(pydir=None, pybin=None):
for path in module_paths:
try:
remove_tree(path)
except OSError as e:
except OSError:
pass

if not pybin:
Expand All @@ -67,27 +72,30 @@ def remove_binwalk_module(pydir=None, pybin=None):
try:
sys.stdout.write("removing '%s'\n" % pybin)
os.remove(pybin)
except KeyboardInterrupt as e:
except KeyboardInterrupt:
pass
except Exception as e:
except Exception:
pass


class IDAUnInstallCommand(Command):
description = "Uninstalls the binwalk IDA plugin module"
user_options = [
('idadir=', None, 'Specify the path to your IDA install directory.'),
('idadir=', None, 'Specify the path to your IDA install directory.'),
]

def initialize_options(self):
self.idadir = None
self.mydir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "src")
self.mydir = os.path.join(os.path.dirname(
os.path.realpath(__file__)), "src")

def finalize_options(self):
pass

def run(self):
if self.idadir is None:
sys.stderr.write("Please specify the path to your IDA install directory with the '--idadir' option!\n")
sys.stderr.write(
"Please specify the path to your IDA install directory with the '--idadir' option!\n")
return

binida_dst_path = os.path.join(self.idadir, 'plugins', 'binida.py')
Expand All @@ -100,42 +108,53 @@ def run(self):
sys.stdout.write("removing %s\n" % binwalk_dst_path)
shutil.rmtree(binwalk_dst_path)


class IDAInstallCommand(Command):
description = "Installs the binwalk IDA plugin module"
user_options = [
('idadir=', None, 'Specify the path to your IDA install directory.'),
('idadir=', None, 'Specify the path to your IDA install directory.'),
]

def initialize_options(self):
self.idadir = None
self.mydir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "src")
self.mydir = os.path.join(os.path.dirname(
os.path.realpath(__file__)), "src")

def finalize_options(self):
pass

def run(self):
if self.idadir is None:
sys.stderr.write("Please specify the path to your IDA install directory with the '--idadir' option!\n")
sys.stderr.write(
"Please specify the path to your IDA install directory with the '--idadir' option!\n")
return

binida_src_path = os.path.join(self.mydir, 'scripts', 'binida.py')
binida_dst_path = os.path.join(self.idadir, 'plugins')

if not os.path.exists(binida_src_path):
sys.stderr.write("ERROR: could not locate IDA plugin file '%s'!\n" % binida_src_path)
sys.stderr.write(
"ERROR: could not locate IDA plugin file '%s'!\n" %
binida_src_path)
return
if not os.path.exists(binida_dst_path):
sys.stderr.write("ERROR: could not locate the IDA plugins directory '%s'! Check your --idadir option.\n" % binida_dst_path)
sys.stderr.write(
"ERROR: could not locate the IDA plugins directory '%s'! Check your --idadir option.\n" %
binida_dst_path)
return

binwalk_src_path = os.path.join(self.mydir, 'binwalk')
binwalk_dst_path = os.path.join(self.idadir, 'python')

if not os.path.exists(binwalk_src_path):
sys.stderr.write("ERROR: could not locate binwalk source directory '%s'!\n" % binwalk_src_path)
sys.stderr.write(
"ERROR: could not locate binwalk source directory '%s'!\n" %
binwalk_src_path)
return
if not os.path.exists(binwalk_dst_path):
sys.stderr.write("ERROR: could not locate the IDA python directory '%s'! Check your --idadir option.\n" % binwalk_dst_path)
sys.stderr.write(
"ERROR: could not locate the IDA python directory '%s'! Check your --idadir option.\n" %
binwalk_dst_path)
return

binida_dst_path = os.path.join(binida_dst_path, 'binida.py')
Expand All @@ -146,17 +165,20 @@ def run(self):
if os.path.exists(binwalk_dst_path):
shutil.rmtree(binwalk_dst_path)

sys.stdout.write("copying %s -> %s\n" % (binida_src_path, binida_dst_path))
sys.stdout.write("copying %s -> %s\n" %
(binida_src_path, binida_dst_path))
shutil.copyfile(binida_src_path, binida_dst_path)

sys.stdout.write("copying %s -> %s\n" % (binwalk_src_path, binwalk_dst_path))
sys.stdout.write("copying %s -> %s\n" %
(binwalk_src_path, binwalk_dst_path))
shutil.copytree(binwalk_src_path, binwalk_dst_path)


class UninstallCommand(Command):
description = "Uninstalls the Python module"
user_options = [
('pydir=', None, 'Specify the path to the binwalk python module to be removed.'),
('pybin=', None, 'Specify the path to the binwalk executable to be removed.'),
('pydir=', None, 'Specify the path to the binwalk python module to be removed.'),
('pybin=', None, 'Specify the path to the binwalk executable to be removed.'),
]

def initialize_options(self):
Expand All @@ -169,6 +191,7 @@ def finalize_options(self):
def run(self):
remove_binwalk_module(self.pydir, self.pybin)


class CleanCommand(Command):
description = "Clean Python build directories"
user_options = []
Expand All @@ -194,24 +217,49 @@ def run(self):
except Exception:
pass


class TestCommand(Command):
description = "Run unit-tests"
user_options = []

def initialize_options(self):
pass

def finalize_options(self):
pass

def run(self):
subprocess.call(
'nosetests --exe --with-coverage --include=src/*', shell=True)


# The data files to install along with the module
install_data_files = []
for data_dir in ["magic", "config", "plugins", "modules", "core"]:
install_data_files.append("%s%s*" % (data_dir, os.path.sep))
install_data_files.append("%s%s*" % (data_dir, os.path.sep))

# Install the module, script, and support files
setup(name = MODULE_NAME,
version = "2.1.2b",
description = "Firmware analysis tool",
author = "Craig Heffner",
url = "https://github.com/devttys0/%s" % MODULE_NAME,

requires = [],
package_dir = {"" : "src"},
packages = [MODULE_NAME],
package_data = {MODULE_NAME : install_data_files},
scripts = [os.path.join("src", "scripts", SCRIPT_NAME)],

cmdclass = {'clean' : CleanCommand, 'uninstall' : UninstallCommand, 'idainstall' : IDAInstallCommand, 'idauninstall' : IDAUnInstallCommand}
)

setup(
name=MODULE_NAME,
version="2.1.2b",
description="Firmware analysis tool",
author="Craig Heffner",
url="https://github.com/devttys0/%s" %
MODULE_NAME,
requires=[],
package_dir={
"": "src"},
packages=[MODULE_NAME],
package_data={
MODULE_NAME: install_data_files},
scripts=[
os.path.join(
"src",
"scripts",
SCRIPT_NAME)],
cmdclass={
'clean': CleanCommand,
'uninstall': UninstallCommand,
'idainstall': IDAInstallCommand,
'idauninstall': IDAUnInstallCommand,
'test': TestCommand})

0 comments on commit f1fe110

Please sign in to comment.