A. Problems with the python interface on MAC:

1. You are getting the error message "Fatal Python error: PyThreadState_Get: no current thread"
when you do "python call_correlation_functions.py"

This is usually caused by a python library mis-match between linking time and run-time, i.e.,
the python shared extension (_countpairs.so in the python_bindings/ subdir) was built with a
python lib version that is not the first one in your search path. The way I resolved it on
my MAC was by adding the path: "python-config --prefix"/lib to the dynamic library
path environment variable.

Typically, this happens when the output of "otool -L _countpairs.so" does not show
a full path to libpythonX.X.dylib.

In my case, I use the anaconda distribution for python at link-time but I pick
up the macports install at run-time. The exact command to fix the situation is:

Option 1.
----------
Change the rpath in the shared C extension library:

"install_name_tool -change libpythonX.X.dylib `python-config --prefix`/lib/libpythonX.X.dylib _countpairs.so"

"otool -L _countpairs.so" should show the full path to the libpythonX.X.dylib file.

Option 2.
----------
Add to the environment variable - but this is not fool-proof.
"export DYLD_FALLBACK_LIBRARY_PATH=`python-config --prefix`/lib:$DYLD_FALLBACK_LIBRARY_PATH"

Option 3.
----------
If that does not work, try creating a symbolic link in the python_bindings directory:

"ln -s `python-config --prefix`/lib/libpythonX.X.dylib"

(where I have omitted the sym-link name, defaults to the actual filename.)

However, if you go this sym-link route, then the sym-link *has* to be in the directory
where the python code is situated - I do not know of any work-arounds (short of
creating the sym-link in a directory that's in the dynamic library path).


B. Problems compiling with gcc on a MAC:

If you see errors like : "no such instruction: `vmovsd 48(%rsp), %xmm0'"

this is because the gcc assembler does not support AVX yet. clang does --
one way of getting around this problem is to use the clang assembler
instead of the gcc assembler.

Make a backup of the gcc assembler (/opt/local/bin/as) and then create
a new file with this content (taken from here: (http://stackoverflow.com/questions/9840207/how-to-use-avx-pclmulqdq-on-mac-os-x-lion)
and here (https://gist.github.com/xianyi/2957847 as modified here: https://gist.github.com/ancapdev/8059572):

----------------------
#!/bin/sh
HAS_INPUT_FILE=0
ARGS=$@
while [ $# -ne 0 ]; do
        ARG=$1
        # Skip options
        if [ $ARG == "-arch" ] || [ $ARG == "-o" ]; then
                # Skip next token
                shift
                shift
                continue
        fi

        if [ `echo $ARG | head -c1` == "-" ]; then
                shift
                continue
        fi

        HAS_INPUT_FILE=1
        break
done

if [ $HAS_INPUT_FILE -eq 1 ]; then
        clang -Qunused-arguments -c -x assembler $ARGS
else
        clang -Qunused-arguments -c -x assembler $ARGS -
fi
----------------------

Using the clang assembler is now default when compiling with gcc on a MAC.
This is achieved in [common.mk](common.mk) by adding the compiler flag -Wa,-q.
However, if this causes errors and you are confident your gcc version supports
AVX instructions, then you can remove that -Wa,-q flag from common.mk.
Note, that a normal install of XCode command line tools will have clang masquerading
as gcc. You can tell if gcc --version mentions clang.

C. Problems running tests with conda gcc on a MAC:

If you get the following error while running tests,

---------------
cd tests && ./test_nonperiodic
dyld: Library not loaded: @rpath/./libgomp.1.dylib
---------------

then, the fix is, as above, to use `install_name_tool -change @rpath/./libgomp.1.dylib /path/to/anaconda/(envs..)/lib/libgomp.1.dylib test_nonperiodic'
and then rerun "make tests".


D. OpenMP on MAC OSX
----------------------

There are a wide variety of possible compiler options on OSX. The default `clang` compiler supplied by
Apple (residing in `/usr/bin/clang`) is quite old and does not support OpenMP. Somewhat frustratingly,
Apple also has aliased `gcc` to point to `clang` by default; which means we need to access a more recent
compiler to build the `Corrfunc` libraries with OpenMP support. There are a multitude of options for the compiler (`clang/gcc/icc`),
an associated OpenMP runtime library (`libomp/libgomp/libiomp`), and installation sources (`homebrew/macports/conda/OS supplied/binary distro`).
Typically, the choice of the compiler sets the choice of the OpenMP library; however, all possible combinations between the source and
the compiler can be expected. Such a vast array of options makes reliable (automatic) detection and installation of OpenMP
enabled `Corrfunc`. Here we will outline some of the steps to get an OpenMP install of `Corrfunc`, depending on the preferred
package management scheme:

  * Homebrew -- Discussion was here: https://github.com/manodeep/Corrfunc/issues/172
    - `brew install clang`
    - `brew install libomp`
    - Add `CFLAGS ?= -Xpreprocessor -fopenmp` in `common.mk`
    - Add `CLINK ?= -lomp` in `common.mk`
    - If kernel crashes,  add `os.environ['KMP_DUPLICATE_LIB_OK']='True'`

  * Macports -- All you need is a compatible version of `clang` (any version of `clang >= 3.8` will suffice)
    - `sudo port install clang`

  * OS supplied -- If you are unable to upgrade the compiler and are stuck with the OSX supplied `clang`, then chances
    might be slim to get an OpenMP build of `Corrfunc`. If you do solve the issue, then please update this line and
    send in a pull request on GitHub. Such a pull request will be genuinely appreciated.

  * Binary distro -- You will need to add appropriate flags to `CFLAGS` and `CLINK` at the top of `common.mk`. You might
    find it helpful to follow the steps for homebrew
