# Copyright (c) 2009-2011 Centro Svizzero di Calcolo Scientifico (CSCS)
# Licensed under the GPLv2.
# NAMES
TARGET = parse-nodelist
MAIN   = main.c

# PROGRAMS
CC = gcc
RM = rm -vf

# PATHS
INCDIR = ../../include
LIBDIR = ../../libalps
HEADERS	= $(wildcard $(INCDIR)/*.h)

# FLAGS
CFLAGS = -I$(INCDIR) -Wall -Werror #-pedantic
ALPSLIB= $(LIBDIR)/libalps.a
LDLIBS = -lexpat
CFLAGS += -g

# suffix rules
%.o : %.c $(INCDIR)/nodespec.h
	$(CC) $(CFLAGS) -c $< -o $@

test-demonstration: list-tests prefix-tests
test-all: whitespace-tests list-tests

whitespace-tests: $(TARGET)
	./$< "" ' ' '	'
	./$< ',' '	,	' ',,,,,'
	./$< '  1' '1 , 2	, 3' '1 - 2' '1 -2' '1- 2' '1-2 ,'
	./$< a1 1a -1 1--2 1-a 1-2a 3-4-5
	./$< ',,, 123 , 12-13,14-12, ,'
	./$< 4294967295 4294967296 4294967297

list-tests: $(TARGET)
	./$< 2-4,7-9,1-5
	./$< 3-4,6-8,1-8
	./$< 3-4,6-8,12-15,1-10
	./$< 3-4,6-8,11-21,1-15

prefix-tests: $(TARGET)
	./$< nid00012-nid00018,nid00033
	./$< nid00012-18,33
	./$< nid00001-100

$(TARGET): $(MAIN) $(ALPSLIB)
	$(CC) $(CFLAGS) $^ $(LDLIBS) -o $@

$(ALPSLIB): $(wildcard $(LIBDIR)/*.c) $(HEADERS)
	$(MAKE) -C $(dir $(ALPSLIB))

.PHONY: clean all

tags: $(wildcard *.c $(LIBDIR)/*.c $(INCDIR)/*.h)
	ctags $^ > $@

clean:
	@$(RM) *.o *~ ? core a.out tags *.orig *.rej
	@$(RM) $(TARGET)

distclean: clean
