# ===========================================================================
# File: "Makefile.in"
#                        Created: 2012-05-10 18:55:47
#              Last modification: 2012-05-11 11:05:51
# Authors: Bernard Desgraupes <bernard.desgraupes@u-paris10.fr>
#          Sylvain Loiseau <sylvain.loiseau@univ-paris13.fr>
# This is part of the R package 'rcqp'.
# ===========================================================================

# Substitutable variables
# =======================

RCQP_STATLIB=libclcqp.a
RCQP_REGISTRY_DEFAULT_PATH="-DREGISTRY_DEFAULT_PATH=\"/usr/local/share/cwb/registry\""

FLEX_PRG=flex
BISON_PRG=bison -y

PKG_CFLAGS=-g -O2 -I/opt/local/include   -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include   ${RCQP_REGISTRY_DEFAULT_PATH}


# "-Dexit(x)=rcqp_receive_error(x)" -D"fprintf(x,y,...)=rcqpPrintf(y,__VA_ARGS__)" -include "makeRCompatible.h"

# "-Dexit(x)=rcqp_receive_error(x)" -D"fprintf(x,y) Rprintf(y)" -include "/Library/Frameworks/R.framework/Resources/include/R_ext/Print.h" -include "makeRCompatible.h"
#
# "-Dfprintf(x, y, ...)=Rprintf(y, __VA_ARGS__)" -include "makeRCompatible.h"
# 

PKG_LIBS= -L/opt/local/lib  -L/opt/local/lib -lpcre   -L/opt/local/lib -lglib-2.0 -lintl  

#  
#  => de toute faon il y a la production de fichier avec dump
# 
#define exit(x) rcqp_receive_error(x)
#define fprintf(x, y) Rprintf(y)


##OBJECTS = ${RCQP_C_OBJ} ${RCQP_STATLIB} 
OBJECTS = ${RCQP_C_OBJ} ${CWB_BISON_OBJ} ${CWB_FLEX_OBJ} ${CWB_C_OBJ}

# Source files
# ============

# src directory
# -------------
RCQP_C_SRC = rcqpCommands.c rcqpUtils.c makeRCompatible.c
RCQP_C_OBJ = $(RCQP_C_SRC:.c=.o)


# cwb/cqp directory
# -----------------
CQP_C_SRC = cwb/cqp/ascii-print.c cwb/cqp/attlist.c cwb/cqp/builtins.c cwb/cqp/concordance.c \
	cwb/cqp/context_descriptor.c cwb/cqp/corpmanag.c cwb/cqp/cqp.c cwb/cqp/eval.c \
	cwb/cqp/groups.c cwb/cqp/hash.c cwb/cqp/html-print.c cwb/cqp/latex-print.c cwb/cqp/macro.c \
	cwb/cqp/matchlist.c cwb/cqp/options.c cwb/cqp/output.c cwb/cqp/parse_actions.c \
	cwb/cqp/print-modes.c cwb/cqp/print_align.c cwb/cqp/ranges.c cwb/cqp/regex2dfa.c \
	cwb/cqp/sgml-print.c cwb/cqp/symtab.c cwb/cqp/table.c cwb/cqp/targets.c cwb/cqp/tree.c \
	cwb/cqp/variables.c
CQP_C_H = $(CQP_C_SRC:.c=.h)
CQP_C_OBJ = $(CQP_C_SRC:.c=.o)

CQP_FLEX_SRC = cwb/cqp/parser.l
CQP_FLEX_C = $(CQP_FLEX_SRC:.l=.yy.c)
CQP_FLEX_H = $(CQP_FLEX_SRC:.l=.yy.h)
CQP_FLEX_OBJ = $(CQP_FLEX_C:.c=.o)

CQP_BISON_SRC = cwb/cqp/parser.y
CQP_BISON_C = $(CQP_BISON_SRC:.y=.tab.c)
CQP_BISON_H = $(CQP_BISON_SRC:.y=.tab.h)
CQP_BISON_OBJ = $(CQP_BISON_C:.c=.o)

CQP_FLEX_FLAGS=
CQP_BISON_FLAGS=


# cwb/CQi directory
# -----------------
CQI_C_SRC = cwb/CQi/server.c cwb/CQi/auth.c 
CQI_C_H = $(CQI_C_SRC:.c=.h) cwb/CQi/cqi.h
CQI_C_OBJ = $(CQI_C_SRC:.c=.o)


# cwb/cl directory
# ----------------

CL_C_SRC = cwb/cl/globals.c cwb/cl/macros.c cwb/cl/list.c cwb/cl/lexhash.c cwb/cl/bitfields.c \
	cwb/cl/storage.c cwb/cl/fileutils.c cwb/cl/special-chars.c cwb/cl/regopt.c cwb/cl/corpus.c \
	cwb/cl/attributes.c cwb/cl/makecomps.c cwb/cl/cdaccess.c cwb/cl/bitio.c cwb/cl/endian.c \
	cwb/cl/compression.c cwb/cl/binsert.c cwb/cl/class-mapping.c
CL_C_H = $(CL_C_SRC:.c=.h)
CL_C_OBJ = $(CL_C_SRC:.c=.o)

CL_FLEX_SRC = cwb/cl/registry.l
CL_FLEX_C = $(CL_FLEX_SRC:.l=.yy.c)
CL_FLEX_H = $(CL_FLEX_SRC:.l=.yy.h)
CL_FLEX_OBJ = $(CL_FLEX_C:.c=.o)

CL_BISON_SRC = cwb/cl/registry.y
CL_BISON_C = $(CL_BISON_SRC:.y=.tab.c)
CL_BISON_H = $(CL_BISON_SRC:.y=.tab.h)
CL_BISON_OBJ = $(CL_BISON_C:.c=.o)

CL_FLEX_FLAGS=-Pcreg
CL_BISON_FLAGS=-p creg -v


CWB_C_OBJ = ${CQP_C_OBJ} ${CQI_C_OBJ} ${CL_C_OBJ}
CWB_FLEX_OBJ = ${CQP_FLEX_OBJ} ${CL_FLEX_OBJ}
CWB_BISON_OBJ = ${CQP_BISON_OBJ} ${CL_BISON_OBJ}
 

# Sweave files
RCQP_VIGNETTE_RNW = rcqp.Rnw
RCQP_VIGNETTE_TEX = $(RCQP_VIGNETTE_RNW:.Rnw=.tex)
RCQP_VIGNETTE_IDX = $(RCQP_VIGNETTE_RNW:.Rnw=.idx)
RCQP_VIGNETTE_PDF = $(RCQP_VIGNETTE_RNW:.Rnw=.pdf)


# Targets
# =======

all: ${RCQP_STATLIB} $(SHLIB)


# The order of the prerequisites is important: bison, then flex, 
# then the C source files
${RCQP_STATLIB}: ${CWB_BISON_OBJ} ${CWB_FLEX_OBJ} ${CWB_C_OBJ}
	rm -f $@
	${AR} cq $@ ${CWB_C_OBJ} ${CWB_FLEX_OBJ} ${CWB_BISON_OBJ} 
	${RANLIB} $@


${CQP_FLEX_C}: ${CQP_FLEX_SRC}
	${FLEX_PRG} ${CQP_FLEX_FLAGS} --header-file=${CQP_FLEX_H} -o ${CQP_FLEX_C} ${CQP_FLEX_SRC}


${CQP_BISON_C}: ${CQP_BISON_SRC}
	${BISON_PRG} ${CQP_BISON_FLAGS} --defines=${CQP_BISON_H} -o ${CQP_BISON_C} ${CQP_BISON_SRC}


${CL_FLEX_C}: ${CL_FLEX_SRC}
	${FLEX_PRG} ${CL_FLEX_FLAGS} --header-file=${CL_FLEX_H} -o ${CL_FLEX_C} ${CL_FLEX_SRC}


${CL_BISON_C}: ${CL_BISON_SRC}
	${BISON_PRG} ${CL_BISON_FLAGS} --defines=${CL_BISON_H} -o ${CL_BISON_C} ${CL_BISON_SRC}


parsers: ${CQP_FLEX_C} ${CQP_BISON_C} ${CL_FLEX_C} ${CL_BISON_C}


.PHONY: clean clean-parsers vignette


clean:
	rm -f *.o *.so src/Makevars
	rm -f ../config.log ../config.status
	if test -e ../autom4te.cache; then \
		rm -rf ../autom4te.cache/*; \
		rmdir ../autom4te.cache; \
	fi
	cd ../inst/doc/; \
	rm -f *.tex *.aux *.log *.toc *.idx *.ind *.ilg *.out rcqp-*.pdf *.synctex.gz
	rm -f ${CWB_C_OBJ} ${CWB_FLEX_OBJ} ${CWB_BISON_OBJ} ${RCQP_STATLIB}


clean-parsers:
	rm -f ${CQP_FLEX_C} ${CQP_FLEX_H} \
	    ${CQP_BISON_C} ${CQP_BISON_H} \
	    ${CL_FLEX_C} ${CL_FLEX_H} \
	    ${CL_BISON_C} ${CL_BISON_H}


vignette:
	cd ../inst/doc; \
	rm -f ${RCQP_VIGNETTE_TEX}; \
	echo "library(\"utils\"); Sweave(\"${RCQP_VIGNETTE_RNW}\")" | R --no-save --no-restore ; \
	pdflatex ${RCQP_VIGNETTE_TEX}; \
	makeindex ${RCQP_VIGNETTE_IDX}; \
	pdflatex ${RCQP_VIGNETTE_TEX};

