From 9129a6536ddf99cd11dcc6738010770492f542d8 Mon Sep 17 00:00:00 2001 From: Jordan Wiens Date: Fri, 19 May 2017 17:35:31 -0400 Subject: add install_api script based on @withzombies script --- scripts/install_api.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 scripts/install_api.py (limited to 'scripts/install_api.py') diff --git a/scripts/install_api.py b/scripts/install_api.py new file mode 100755 index 00000000..cba53e71 --- /dev/null +++ b/scripts/install_api.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# +# Thanks to @withzombies for letting us adapt his script +# + +import sys +from os import path +from os import stat +from site import getsitepackages + +try: + import binaryninja + print "Binary Ninja API Installed" + sys.exit(0) +except ImportError: + pass + +if sys.platform == "linux": + userpath = path.expanduser("~/.binaryninja") + lastrun = path.join(userpath, "lastrun") + if path.isfile(lastrun): + lastrunpath = open(lastrun).read().strip() + api_path = path.join(path.dirname(lastrun), "python") + else: + print "Running on linux, but ~/.binaryninja/lastrun does not exist" + sys.exit(0) +elif sys.platform == "darwin": + api_path = "/Applications/Binary Ninja.app/Contents/Resources/python" +else: + # Windows + api_path = "r'C:\Program Files\Vector35\BinaryNinja\python'" + + +def validate_path(path): + try: + stat(path) + except OSError: + return False + + old_path = sys.path + sys.path.append(path) + + try: + from binaryninja import core_version + except ImportError: + sys.path = old_path + return False + + return True + + +while not validate_path(api_path): + print "Binary Ninja not found. Please provide the path to Binary " + \ + "Ninja's install directory" + sys.stdout.write("[{}] ".format(api_path)) + + new_path = sys.stdin.readline().strip() + if len(new_path) == 0: + print "Invalid path" + continue + + if not new_path.endswith('python'): + new_path = path.join(new_path, 'python') + + api_path = new_path + +from binaryninja import core_version +print "Found Binary Ninja core version: {}".format(core_version) + +install_path = getsitepackages()[0] +binaryninja_pth_path = path.join(install_path, 'binaryninja.pth') +open(binaryninja_pth_path, 'wb').write(api_path) + +print "Binary Ninja API installed using {}".format(binaryninja_pth_path) -- cgit v1.3.1 From 0d0564bbfb0e7cd6be095ec28469b7facb107bdf Mon Sep 17 00:00:00 2001 From: Jordan Wiens Date: Tue, 23 May 2017 19:58:43 -0400 Subject: update install_api to use user directories by default --- scripts/install_api.py | 55 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 22 deletions(-) (limited to 'scripts/install_api.py') diff --git a/scripts/install_api.py b/scripts/install_api.py index cba53e71..53679ba5 100755 --- a/scripts/install_api.py +++ b/scripts/install_api.py @@ -4,25 +4,25 @@ # import sys -from os import path -from os import stat -from site import getsitepackages +import os +from site import getsitepackages, getusersitepackages, check_enableusersite try: import binaryninja - print "Binary Ninja API Installed" - sys.exit(0) + print("Binary Ninja API already Installed") + sys.exit(1) except ImportError: pass -if sys.platform == "linux": - userpath = path.expanduser("~/.binaryninja") - lastrun = path.join(userpath, "lastrun") - if path.isfile(lastrun): +if sys.platform.startswith("linux"): + userpath = os.path.expanduser("~/.binaryninja") + lastrun = os.path.join(userpath, "lastrun") + if os.path.isfile(lastrun): lastrunpath = open(lastrun).read().strip() - api_path = path.join(path.dirname(lastrun), "python") + api_path = os.path.join(lastrunpath, "python") + print("Found install folder of {}".format(api_path)) else: - print "Running on linux, but ~/.binaryninja/lastrun does not exist" + print("Running on linux, but ~/.binaryninja/lastrun does not exist") sys.exit(0) elif sys.platform == "darwin": api_path = "/Applications/Binary Ninja.app/Contents/Resources/python" @@ -33,7 +33,7 @@ else: def validate_path(path): try: - stat(path) + os.stat(path) except OSError: return False @@ -42,6 +42,7 @@ def validate_path(path): try: from binaryninja import core_version + print("Found Binary Ninja core version: {}".format(core_version)) except ImportError: sys.path = old_path return False @@ -50,25 +51,35 @@ def validate_path(path): while not validate_path(api_path): - print "Binary Ninja not found. Please provide the path to Binary " + \ - "Ninja's install directory" - sys.stdout.write("[{}] ".format(api_path)) + print("\nBinary Ninja not found. Please provide the path to Binary " + \ + "Ninja's install directory: \n [{}] : ".format(api_path)) new_path = sys.stdin.readline().strip() if len(new_path) == 0: - print "Invalid path" + print("\nInvalid path") continue if not new_path.endswith('python'): - new_path = path.join(new_path, 'python') + new_path = os.path.join(new_path, 'python') api_path = new_path -from binaryninja import core_version -print "Found Binary Ninja core version: {}".format(core_version) +if ( len(sys.argv) > 1 and sys.argv[1].lower() == "root" ): + #write to root site + install_path = getsitepackages()[0] + if not os.access(install_path, os.W_OK): + print("Root install specified but cannot write to {}".format(install_path)) + sys.exit(1) +else: + if check_enableusersite(): + install_path = getusersitepackages() + if not os.path.exists(install_path): + os.makedirs(install_path) + else: + print("Warning, trying to write to user site packages, but check_enableusersite fails.") + sys.exit(1) -install_path = getsitepackages()[0] -binaryninja_pth_path = path.join(install_path, 'binaryninja.pth') +binaryninja_pth_path = os.path.join(install_path, 'binaryninja.pth') open(binaryninja_pth_path, 'wb').write(api_path) -print "Binary Ninja API installed using {}".format(binaryninja_pth_path) +print("Binary Ninja API installed using {}".format(binaryninja_pth_path)) -- cgit v1.3.1