CPP=g++
SWIG=swig
SWIGOPTS_LANG=-c++ -python 

PYTHONDIR=/usr/include/python2.6
WCCLDIR=/usr/local/include/libwccl/
CORPUS2DIR=/usr/local/include/libcorpus2/
PWRUTILDIR=

CORPUS2BIN=/usr/local/lib/libcorpus2.so
PWRUTILBIN=/usr/local/lib/libpwrutils.so
CCLBIN=/usr/local/lib/libwccl.so
ANTLRLIB=/usr/lib/libantlr-pic.a 

# CPPFLAGS=-fPIC -Wall -O2
CPPFLAGS=-fPIC -O2

# CBIN=libcorpustag.o libcorpustagset.o libcorpustagsetmanager.o libcclparser.o
# CBIN=libcclvalue.o libcclbool.o libcclmatch.o libcclposition.o libccltset.o libcclstrset.o
# CBIN=libcclexpression.o libcclparsedexpression.o
CBIN=libcclvariables.o libcclparsedexpression.o 

#CBIN=boost_shared_ptr.o \
	libcorpustag.o libcorpustagset.o libcorpustagsetmanager.o \
	libcclvalue.o libcclstrset.o libcclbool.o libcclmatch.o libcclposition.o \
	libccltset.o libcclexpression.o libcclparsedexpression.o \
	libcclfunctionaloperator.o libcclvariables.o 

CBINOUT=_libcorpustag.so _libcorpustagset.so _libcorpustagsetmanager.so \
	_libcclvalue.so _libcclstrset.so _libcclbool.so _libcclposition.so \
	_libccltset.so _libcclexpression.so _libcclparsedexpression.so \
	_libcclfunctionaloperator.so _libcclvariables.so _libcclmatch.so \
	_boost_shared_ptr.so

CWRAP=libcorpustag_wrap.cxx libcorpustagset_wrap.cxx libcorpustagsetmanager_wrap.cxx \
	libcclvalue_wrap.cxx libcclstrset_wrap.cxx libcclbool_wrap.cxx \
	libcclparser_wrap.cxx libcclposition_wrap.cxx libccltset_wrap.cxx \
	libcclexpression_wrap.cxx libcclparsedexpression_wrap.cxx \
	libcclfunctionaloperator_wrap.cxx libcclvariables_wrap.cxx libcclmatch_wrap.cxx \
	boost_shared_ptr_wrap.cxx

CWRAPBIN=libcorpustag_wrap.o libcorpustagset_wrap.o libcorpustagsetmanager_wrap.o \
				 libcclvalue_wrap.o libcclstrset_wrap.o libcclbool_wrap.o \
				 libcclposition_wrap.o libccltset_wrap.o \
				 libcclexpression_wrap.o libcclparsedexpression_wrap.o \
				 libcclfunctionaloperator_wrap.o libcclvariables_wrap.o \
				 libcclmatch_wrap.o boost_shared_ptr_wrap.o

PYMODULES=libcorpustag.py libcorpustagset.py libcorpustagsetmanager.py \
	libcclvalue.py libcclstrset.py libcclbool.py \
	libcclparser.py libcclposition.py libccltset.py \
	libcclexpression.py libcclparsedexpression.py libcclvariables.py \
	boost_shared_ptr.py

PYCBIN=libcorpustag.pyc libcorpustagset.pyc libcorpustagsetmanager.pyc \
	 libcclvalue.pyc libcclstrset.pyc libcclbool.pyc \
	 libcclposition.pyc libccltset.pyc libcclexpression.pyc libcclparsedexpression.pyc \
	 libcclvariables.pyc boost_shared_ptr.pyc

all:boost_shared_ptr.o $(CBIN)
	# Nothing to do

# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
#  boost::shared_ptr wrappers
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# shared_ptr
boost_shared_ptr.o:
	$(SWIG) $(SWIGOPTS_LANG) boost_shared_ptr.i
	$(CPP) -c boost_shared_ptr_wrap.cxx -I$(PYTHONDIR) $(CPPFLAGS)
	$(CPP) -shared boost_shared_ptr_wrap.o -o _boost_shared_ptr.so


# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
#  Corpus2 Wrappers
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Tag
libcorpustag.o:
	$(SWIG) $(SWIGOPTS_LANG) libcorpustag.i
	$(CPP) -c libcorpustag_wrap.cxx -I$(PYTHONDIR) $(CPPFLAGS)
	$(CPP) -shared libcorpustag_wrap.o \
		$(PWRUTILBIN) $(CORPUS2BIN) -o _libcorpustag.so

# Tagset
libcorpustagset.o:
	$(SWIG) $(SWIGOPTS_LANG) libcorpustagset.i
	$(CPP) -c libcorpustagset_wrap.cxx -I$(PYTHONDIR) $(CPPFLAGS)
	$(CPP) -fPIC -shared libcorpustagset_wrap.o \
		$(PWRUTILBIN) $(CORPUS2BIN) -o _libcorpustagset.so

# Tagsetmanager
libcorpustagsetmanager.o:
	$(SWIG) $(SWIGOPTS_LANG) libcorpustagsetmanager.i
	$(CPP) -c libcorpustagsetmanager_wrap.cxx -I$(PYTHONDIR) $(CPPFLAGS)
	$(CPP) -shared libcorpustagsetmanager_wrap.o \
		$(CCLBIN) $(PWRUTILBIN) $(CORPUS2BIN) -o _libcorpustagsetmanager.so

# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
#  CCL Wrappers
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Value
libcclvalue.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclvalue.i
	$(CPP) -c libcclvalue_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclvalue_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclvalue.so

# Bool
libcclbool.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclbool.i
	$(CPP) -c libcclbool_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclbool_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclbool.so

# Position
libcclposition.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclposition.i
	$(CPP) -c libcclposition_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclposition_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclposition.so

# TSet
libccltset.o:
	$(SWIG) $(SWIGOPTS_LANG) libccltset.i
	$(CPP) -c libccltset_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libccltset_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libccltset.so

# StrSet
libcclstrset.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclstrset.i
	$(CPP) -c libcclstrset_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclstrset_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclstrset.so

# match
libcclmatch.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclmatch.i
	$(CPP) -c libcclmatch_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclmatch_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclmatch.so

# Expression
libcclexpression.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclexpression.i
	$(CPP) -c libcclexpression_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclexpression_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclexpression.so

# ParsedExpression
libcclparsedexpression.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclparsedexpression.i
	$(CPP) -c libcclparsedexpression_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclparsedexpression_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclparsedexpression.so

# FunctionalOperator
libcclfunctionaloperator.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclfunctionaloperator.i
	$(CPP) -c libcclfunctionaloperator_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclfunctionaloperator_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclfunctionaloperator.so

# Variables
libcclvariables.o:
	$(SWIG) $(SWIGOPTS_LANG) libcclvariables.i
	$(CPP) -c libcclvariables_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
	$(CPP) -shared libcclvariables_wrap.o \
		$(CCLBIN) $(ANTLRLIB) -o _libcclvariables.so


# -----------------------------------------------------------------------------
clean:
	rm -f $(CBIN) $(CBINOUT) $(CWRAP) $(CWRAPBIN) $(PYMODULES) $(PYCBIN)