ifdef INSTALL_DIR
$(info Installing visual CNA in $(INSTALL_DIR))
else
$(error INSTALL_DIR not provided on the command line. Exiting...); exit 1
endif

BASE = $(PWD)
CUR_DIR = $(PWD)
PYTHONPATH := ""
LD_LIBRARY_PATH := "${INSTALL_DIR}/lib"


PYTHON_EXE = $(INSTALL_DIR)/ext/bin/python

BLDDIR      = $(INSTALL_DIR)/ext/src/build

swig_dirname = swig-2.0.8
python_dirname = Python-2.7.3
numpy_dirname = numpy-1.6.1
biopython_dirname = biopython-1.58
scipy_dirname = scipy-0.11.0
openbabel_dirname = openbabel-2.3.1
pmw_dirname = pmw_src
matplotlib_dir = matplotlib-1.1.0
setuptools_dir = setuptools-2.2
tkintertable_dir = tkintertable-1.0.2

all: swig python numpy biopy scipy open matplotlib pymol tkintertable
minimal: pmw matplotlib pymol setuptools tkintertable

# all: print_trial
# minimal: print_trial

print_trial:
	$(info $(INSTALL_DIR))
	$(info $(PYTHON_EXE))

swig:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(swig_dirname).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(swig_dirname); ./configure --prefix=$(INSTALL_DIR)/ext --exec_prefix=$(INSTALL_DIR)/ext --without-pcre --without-alllang --with-python=yes
	cd $(BLDDIR)/$(swig_dirname); $(MAKE)
	cd $(BLDDIR)/$(swig_dirname); $(MAKE) install
	cd $(BLDDIR)/$(swig_dirname); $(MAKE) distclean

python:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(python_dirname).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(python_dirname); ./configure --prefix=$(INSTALL_DIR)/ext --with-threads --enable-unicode=ucs4 --libdir=$(INSTALL_DIR)/ext/lib
	cd $(BLDDIR)/$(python_dirname); $(MAKE)
	cd $(BLDDIR)/$(python_dirname); $(MAKE) install
	cd $(BLDDIR)/$(python_dirname); $(MAKE) distclean

numpy:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(numpy_dirname).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(numpy_dirname); $(PYTHON_EXE) setup.py build --fcompiler=gnu95 install
	cd $(BLDDIR)/$(numpy_dirname); $(PYTHON_EXE) setup.py clean -aq


biopy:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(biopython_dirname).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(biopython_dirname); $(PYTHON_EXE) setup.py build install
	cd $(BLDDIR)/$(biopython_dirname); $(PYTHON_EXE) setup.py clean -aq
	# Apply patches
	- cd ${BASE}/lib/python2.7/site-packages/Bio/PDB; patch -N < $(PATDIR)/conserve_atoms_number_pdbio.patch
	- cd ${BASE}/lib/python2.7/site-packages/Bio/PDB; patch -N < $(PATDIR)/DSSP_for_CNA.patch
	- cd ${BASE}/lib/python2.7/site-packages/Bio/PDB; patch -N < $(PATDIR)/biopython_chain_id_identification.patch
	

scipy:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(scipy_dirname).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(scipy_dirname); $(PYTHON_EXE) setup.py build --fcompiler=gnu95 install
	cd $(BLDDIR)/$(scipy_dirname); $(PYTHON_EXE) setup.py clean -aq

open:
	mkdir -p $(BLDDIR)
	cd $(INSTALL_DIR)/ext/lib; gunzip < $(CUR_DIR)/src/tgz/Eigen.tar.gz | tar -xvf -
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(openbabel_dirname).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(openbabel_dirname); mkdir build
	cd $(BLDDIR)/$(openbabel_dirname)/build; cmake .. -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}/ext -DLIB_INSTALL_DIR=${INSTALL_DIR}/ext/lib -DPYTHON_BINDINGS=ON -DPYTHON_PREFIX=${INSTALL_DIR}/ext -DEIGEN2_INCLUDE_DIR=${INSTALL_DIR}/ext/lib -DPYTHON_EXECUTABLE=$(PYTHON_EXE) -DPYTHON_INCLUDE_DIR=$(INSTALL_DIR)/ext/include/python2.7 -DPYTHON_LIBRARY=$(INSTALL_DIR)/ext/lib/python2.7 -DRUN_SWIG=ON -DSWIG_EXECUTABLE=$(INSTALL_DIR)/ext/bin/swig
	cd $(BLDDIR)/$(openbabel_dirname)/build; $(MAKE)
	cd $(BLDDIR)/$(openbabel_dirname)/build; $(MAKE) install

pmw:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/Pmw.1.3.tar.gz | tar -xvf -
	cd $(BLDDIR); mv src $(pmw_dirname)
	cd $(BLDDIR)/$(pmw_dirname)/Pmw; $(PYTHON_EXE) ../setup.py build install
	cd $(BLDDIR)/$(pmw_dirname)/Pmw; $(PYTHON_EXE) ../setup.py clean



matplotlib:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(matplotlib_dir).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(matplotlib_dir); $(PYTHON_EXE) setup.py build install
	cd $(BLDDIR)/$(matplotlib_dir); $(PYTHON_EXE) setup.py clean

setuptools:
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/setuptools-2.2.tar.gz | tar -xvf -
	cd $(BLDDIR)/$(setuptools_dir); $(PYTHON_EXE) setup.py build install
	cd $(BLDDIR)/$(setuptools_dir); $(PYTHON_EXE) setup.py clean


tkintertable: setuptools
	mkdir -p $(BLDDIR)
	cd $(BLDDIR); gunzip < $(CUR_DIR)/src/tgz/$(tkintertable_dir).tar.gz | tar -xvf -
	cd $(BLDDIR)/$(tkintertable_dir); $(PYTHON_EXE) setup.py build install
	cd $(BLDDIR)/$(tkintertable_dir); $(PYTHON_EXE) setup.py clean

pymol: pmw
	cd $(INSTALL_DIR)/ext; bunzip2 < $(CUR_DIR)/src/tgz/pymol-v1.5.0.1.tar.bz2 | tar -xvf -
	cd $(INSTALL_DIR)/ext/pymol; $(PYTHON_EXE) setup.py build install
	cd $(INSTALL_DIR)/ext/pymol; $(PYTHON_EXE) setup2.py build install


clean:
	/bin/rm -rf $(BLDDIR)

distclean:
	/bin/rm -rf $(BLDDIR)
	/bin/rm -rf $(INSTALL_DIR)/ext/include
	/bin/rm -rf $(INSTALL_DIR)/ext/lib
	/bin/rm -rf $(INSTALL_DIR)/ext/python
	/bin/rm -rf $(INSTALL_DIR)/ext/man
	/bin/rm -rf $(INSTALL_DIR)/ext/bin
	/bin/rm -rf $(INSTALL_DIR)/ext/etc
	/bin/rm -rf $(INSTALL_DIR)/ext/info
	/bin/rm -rf $(INSTALL_DIR)/ext/share
	/bin/rm -rf $(INSTALL_DIR)/ext/local
