# El piloto slex + Bison: dos gramaticas, cada analisis con su lexer.
#
#   make check
#
# Compila slex desde las fuentes (SLEX, por defecto ../../src) para no
# depender de una biblioteca instalada. Necesita bison 3.6 o posterior,
# PCRE2 y mem_util. No esta en el make check de Automake de slex para no
# sumarle bison a lo que hace falta para armar el paquete.
#
# Copyright (C) Diego Saravia <dsa@unsa.edu.ar>
# GPL version 3 o posterior.

CC     ?= gcc
CFLAGS ?= -g -O2
SLEX   ?= ../../src
B      := build
DEPS   := $(shell pkg-config --cflags mem_util libpcre2-8 2>/dev/null)
LIBS   := $(shell pkg-config --libs mem_util libpcre2-8 2>/dev/null || echo -lmem_util -lpcre2-8) -lm

check: $(B)/test_bison
	$(B)/test_bison

$(B)/expr.tab.c: expr.y
	@mkdir -p $(B)
	bison -Wall -d -o $@ $<
$(B)/lista.tab.c: lista.y
	@mkdir -p $(B)
	bison -Wall -d -o $@ $<

$(B)/test_bison: test_bison.c parser.h $(B)/expr.tab.c $(B)/lista.tab.c $(SLEX)/slex.c $(SLEX)/slexfunc.c $(SLEX)/slexlegacy.c $(SLEX)/slex.h
	$(CC) $(CFLAGS) -D_GNU_SOURCE -w -I$(SLEX) $(DEPS) -c $(SLEX)/slex.c -o $(B)/slex.o
	$(CC) $(CFLAGS) -D_GNU_SOURCE -w -I$(SLEX) $(DEPS) -c $(SLEX)/slexfunc.c -o $(B)/slexfunc.o
	$(CC) $(CFLAGS) -D_GNU_SOURCE -w -I$(SLEX) $(DEPS) -c $(SLEX)/slexlegacy.c -o $(B)/slexlegacy.o
	$(CC) $(CFLAGS) -D_GNU_SOURCE -Wall -I$(SLEX) -I. -I$(B) $(DEPS) test_bison.c $(B)/expr.tab.c $(B)/lista.tab.c \
	  $(B)/slex.o $(B)/slexfunc.o $(B)/slexlegacy.o $(LIBS) -o $@

clean:
	rm -rf $(B)

.PHONY: check clean
