summaryrefslogtreecommitdiff
path: root/scripts/install_api.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/install_api.py')
-rwxr-xr-xscripts/install_api.py156
1 files changed, 78 insertions, 78 deletions
diff --git a/scripts/install_api.py b/scripts/install_api.py
index 9532f02b..fddf0478 100755
--- a/scripts/install_api.py
+++ b/scripts/install_api.py
@@ -8,119 +8,119 @@ import os
from site import check_enableusersite
# Handle both normal environments and virtualenvs
-try:
- from site import getusersitepackages, getsitepackages
+try:
+ from site import getusersitepackages, getsitepackages
except ImportError:
- from sysconfig import get_path
- getsitepackages = lambda: get_path('purelib')
- getusersitepackages = getsitepackages
+ from sysconfig import get_path
+ getsitepackages = lambda: get_path('purelib')
+ getusersitepackages = getsitepackages
# Hacky command line parsing to accept a silent-install -s flag like linux-setup.sh:
INTERACTIVE = True
if '-s' in sys.argv[1:]:
- INTERACTIVE = False
+ INTERACTIVE = False
INSTALL_VENV = False
if '-v' in sys.argv[1:]:
- if os.environ.get('VIRTUAL_ENV'):
- INSTALL_VENV = True
- else:
- print("Error: venv installation requested without an active python3 venv.")
- sys.exit(1)
-
+ if os.environ.get('VIRTUAL_ENV'):
+ INSTALL_VENV = True
+ else:
+ print("Error: venv installation requested without an active python3 venv.")
+ sys.exit(1)
+
try:
- import binaryninja
- import binaryninjaui #To better detect if migrating from a version without UI plugin support
- if '-u' in sys.argv[1:]:
- #Uninstall mode
- userpth = os.path.join(getusersitepackages(), 'binaryninja.pth')
- if os.path.exists(userpth):
- print(f"Removing {userpth}")
- os.unlink(userpth)
- sitepth = os.path.join(getsitepackages()[0], 'binaryninja.pth')
- if os.path.exists(sitepth):
- print(f"Removing {sitepth}")
- try:
- os.unlink(sitepth)
- except:
- print("Unable to unlink, please re-run with appropriate permissions.")
- sys.exit(0)
- print("Binary Ninja API already in the path")
- sys.exit(1)
+ import binaryninja
+ import binaryninjaui #To better detect if migrating from a version without UI plugin support
+ if '-u' in sys.argv[1:]:
+ #Uninstall mode
+ userpth = os.path.join(getusersitepackages(), 'binaryninja.pth')
+ if os.path.exists(userpth):
+ print(f"Removing {userpth}")
+ os.unlink(userpth)
+ sitepth = os.path.join(getsitepackages()[0], 'binaryninja.pth')
+ if os.path.exists(sitepth):
+ print(f"Removing {sitepth}")
+ try:
+ os.unlink(sitepth)
+ except:
+ print("Unable to unlink, please re-run with appropriate permissions.")
+ sys.exit(0)
+ print("Binary Ninja API already in the path")
+ sys.exit(1)
except ImportError:
- pass
+ pass
if '-u' in sys.argv[1:]:
- print("Uninstall specified, but binaryninja not in the current path")
- sys.exit(1)
+ print("Uninstall specified, but binaryninja not in the current path")
+ sys.exit(1)
dir_name = os.path.dirname(os.path.abspath(__file__))
api_path = os.path.abspath(os.path.join(dir_name, "..", "python"))
if (os.path.isdir(api_path)):
- print(f"Found install folder of {api_path}")
+ print(f"Found install folder of {api_path}")
else:
- print("Failed to find installed python expected at {}".format(api_path))
- sys.exit(1)
+ print("Failed to find installed python expected at {}".format(api_path))
+ sys.exit(1)
def validate_path(path):
- try:
- os.stat(path)
- except OSError:
- return False
+ try:
+ os.stat(path)
+ except OSError:
+ return False
- old_path = sys.path
- sys.path.append(path)
+ old_path = sys.path
+ sys.path.append(path)
- try:
- from binaryninja import core_version
- print("Found Binary Ninja core version: {}".format(core_version()))
- except ImportError:
- sys.path = old_path
- return False
+ try:
+ from binaryninja import core_version
+ print("Found Binary Ninja core version: {}".format(core_version()))
+ except ImportError:
+ sys.path = old_path
+ return False
- return True
+ return True
while not validate_path(api_path):
- print("\nBinary Ninja not found.")
- if not INTERACTIVE:
- print("Non-interactive mode selected, failing.")
- sys.exit(-1)
+ print("\nBinary Ninja not found.")
+ if not INTERACTIVE:
+ print("Non-interactive mode selected, failing.")
+ sys.exit(-1)
- print("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("\nInvalid path")
- continue
+ print("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("\nInvalid path")
+ continue
- if not new_path.endswith('python'):
- new_path = os.path.join(new_path, 'python')
+ if not new_path.endswith('python'):
+ new_path = os.path.join(new_path, 'python')
- api_path = new_path
+ api_path = new_path
-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)
+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)
elif INSTALL_VENV:
- install_path = getsitepackages()[0]
+ install_path = getsitepackages()[0]
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)
+ 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)
binaryninja_pth_path = os.path.join(install_path, 'binaryninja.pth')
with open(binaryninja_pth_path, 'wb') as pth_file:
- pth_file.write((api_path+"\n").encode('charmap'))
- if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 10):
- pth_file.write((api_path+sys.version[0]+"\n").encode('charmap')) #support for python2/3 QT bindings
+ pth_file.write((api_path + "\n").encode('charmap'))
+ if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 10):
+ pth_file.write((api_path + sys.version[0] + "\n").encode('charmap')) #support for python2/3 QT bindings
print("Binary Ninja API installed using {}".format(binaryninja_pth_path))