0. This documentation explains how to install Python binding for Capstone
   from source. If you want to install it from PyPi package, see the below
   docs instead:

   - README.pypi-src: How to compile the Capstone core & install binding
     at the same time from PyPi package "capstone"

   - README.pypi-win: How to install binding for Windows from PyPi package
     "capstone-windows". Note that this package already has prebuilt core
     inside, so no compilation is needed.

1. To install pure Python binding on *nix, run the command below:

		$ sudo make install

   To install Python3 binding package, run the command below:
   (Note: this requires python3 installed in your machine)

		$ sudo make install3

2. For better Python performance, install cython-based binding with:

		$ sudo make install_cython

	Note that this requires cython installed in your machine first.
	To install cython, see section 3 below.
	
3. To install cython, you have to ensure that the header files
   and the static library for Python are installed beforehand.

	E.g. on Ubuntu, do:

		$ sudo apt-get install python-dev

	Depending on if you already have pip or easy_install
	installed, install cython with either:

		$ sudo pip install cython
	or:
		$ sudo easy_install cython

	NOTE: Depending on your distribution you might also be able to
	      install the required cython version using your repository.

	E.g. on Ubuntu, do:
	
		$ sudo apt-get install cython

	However, our cython-based binding requires cython version 0.19 or newer,
	but sometimes distributions only provide older version. Make sure to
	verify the current installed version before going into section 2 above.
	
	E.g, on Ubuntu, you can verify the current cython version with:

		$ apt-cache policy cython

	Which should at least print version 0.19


This directory contains some test code to show how to use Capstone API.

- test_basic.py
  This code shows the most simple form of API where we only want to get basic
  information out of disassembled instruction, such as address, mnemonic and
  operand string.

- test_lite.py
  Similarly to test_basic.py, but this code shows how to use disasm_lite(), a lighter
  method to disassemble binary. Unlike disasm() API (used by test_basic.py), which returns
  CsInsn objects, this API just returns tuples of (address, size, mnemonic, op_str).

  The main reason for using this API is better performance: disasm_lite() is at least
  20% faster than disasm(). Memory usage is also less. So if you just need basic
  information out of disassembler, use disasm_lite() instead of disasm().

- test_detail.py:
  This code shows how to access to architecture-neutral information in disassembled
  instructions, such as implicit registers read/written, or groups of instructions
  that this instruction belong to.

- test_<arch>.py
  These code show how to access architecture-specific information for each
  architecture.


2. To install Python binding on Windows:

Recommended method:

	Use the Python module installer for 32/64 bit Windows from:

		http://www.capstone-engine.org/download.html


Manual method:

	If the module installer fails to locate your Python install, or if you have
	additional Python installs (e.g. Anaconda / virtualenv), run the following
	command in command prompt:

		C:\> C:\location_to_python\python.exe setup.py install

	Next, copy capstone.dll from the 'Core engine for Windows' package available
	on the same Capstone download page and paste it in the path:

		C:\location_to_python\Lib\site-packages\capstone\
