# Copyright (c) 2009-2011 Centro Svizzero di Calcolo Scientifico (CSCS)
# Licensed under the GPLv2.
# TARGETS
TARGOBJ	= libalps.a

OBJDIR ?= ./objects
SRCS := $(wildcard *.c)
OBJS := $(addprefix $(OBJDIR)/,$(SRCS:.c=.o))

# PROGRAMS
CC	= gcc
RANLIB	= ar s

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

# the following are used to track Basil version changes
CRAYREF := $(INCDIR)/cray_basil.h
CRAYHDR := /opt/xt-pe/default/include/basil.h

# Conditionally set up an ALPS client
ref_or_def   = $(if $(wildcard $1),$1,$2)
# For testing on non-Cray systems, define the following:
FAKE_APBASIL := ../fake-apbasil.sh
APBASIL      := $(shell which apbasil)
#APBASIL      := /users/nina/apbasil31
#APBASIL = not_defined	# use this to trigger FAKE_APBASIL
ALPS_CLIENT  := $(call ref_or_def,$(APBASIL),$(FAKE_APBASIL))

# FLAGS
CFLAGS := -I$(INCDIR) -g -Wall -Werror
ifdef DEBUG
CFLAGS += -DDEBUG
endif
CFLAGS += $(DEFS)
%basil_request.o: CFLAGS += -DALPS_CLIENT=\"$(strip $(ALPS_CLIENT))\"

# RULES
.PHONY: clean distclean all check

all: check $(TARGOBJ)

check:	# check whether the Basil version has changed
	@if test -f $(CRAYHDR); then			\
	  co -q $(CRAYREF);				\
	  diff -up -I '^/\* ' $(CRAYREF) $(CRAYHDR);	\
	  rcsclean -q $(CRAYREF);			\
	 fi

$(TARGOBJ): $(OBJS)
	@$(AR) $(ARFLAGS) $@ $^
	$(RANLIB) $@

$(OBJDIR)/%.o : %.c $(HEADERS) | $(OBJDIR)/
	$(CC) $(CFLAGS) -c $< -o $@

$(OBJDIR)/:
	mkdir -p $@

tags: $(SRCS) $(HEADERS)
	ctags $^

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

distclean: clean
	@test ! -d $(OBJDIR) || rmdir -v $(OBJDIR)
