all: 
	@echo This Makefile is not intended to be called directly.
	@echo It is used for running unit tests within the automated testing harness provided with the Berkeley UPC runtime.
	@echo For information on downloading and using Berkeley UPC, see: https://upc.lbl.gov
	@exit 1

# legacy harness support
GASNET_SRCDIR ?= $(TOP_SRCDIR)/gasnet
GASNET_BLDDIR ?= $(TOP_BUILDDIR)/gasnet

PERL ?= perl
LIBGASNET_LOGDIR ?= $(HARNESS_LOGDIR)
LIBGASNET_CONFIGURE ?= configure# can also be cross-configure-*
LIBGASNET_CONFIGURE_ARGS ?=$(shell $(PERL) -ne 'if (m/^\s*CONFIGURE_ARGS\s*=\s*(.*)$$/) { print $$1; }' < $(GASNET_BLDDIR)/Makefile )# configure args
LIBGASNET_CONFIGURE_ARGS_EXTRA ?=# extra configure args to append
LIBGASNET_CONFIGURE_ENV ?=# envvars for configure
SUITE_BUILD_DIR:=$(shell pwd)/bgasnet

do-configure: force
	rm -Rf $(SUITE_BUILD_DIR)$(BUILD_VARIANT)
	mkdir $(SUITE_BUILD_DIR)$(BUILD_VARIANT)
	@logfile=$(LIBGASNET_LOGDIR)/libgasnet-configure$(BUILD_VARIANT).log ; \
	 configure=$(GASNET_SRCDIR)/$(LIBGASNET_CONFIGURE) ; \
	 crossconfig=$(GASNET_SRCDIR)/other/contrib/$(LIBGASNET_CONFIGURE) ; \
	 if ! test -x $$configure && test -x $$crossconfig ; then \
	   ln -s $$crossconfig $$configure ; \
	 fi ; \
	 set -x ; \
	 ( cd $(SUITE_BUILD_DIR)$(BUILD_VARIANT) && \
	   env $(LIBGASNET_CONFIGURE_ENV) \
	   $$configure $(LIBGASNET_CONFIGURE_ARGS) $(LIBGASNET_CONFIGURE_ARGS_EXTRA) ) > $$logfile 2>&1 ; \
	 rc=$$? ; cat $$logfile ; exit $$rc

_configure: force
	@rm -f $@
	$(MAKE) do-configure BUILD_VARIANT=
	@echo '#!/bin/sh' > $@ ; chmod +x $@

_configure_%: force
	@rm -f $@
	$(MAKE) do-configure BUILD_VARIANT=$(patsubst _configure%,%,$@)
	@echo '#!/bin/sh' > $@ ; chmod +x $@

do-preclean-mpi: force
	$(MAKE) -C $(SUITE_BUILD_DIR)/other/ammpi clean

do-preclean-udp: force
	$(MAKE) -C $(SUITE_BUILD_DIR)/other/amudp clean

do-preclean-%: force
	echo $@

do-clean: force
	$(MAKE) do-preclean-$(NETWORK)
	$(MAKE) -C $(SUITE_BUILD_DIR)/$(NETWORK)-conduit clean

do-conduit: force
	$(MAKE) do-clean
	$(MAKE) -C $(SUITE_BUILD_DIR)/$(NETWORK)-conduit $(MAKE_TARGET)
	$(MAKE) do-clean

LIBGASNET_PEDANTIC_WOFF ?=
LIBGASNET_PEDANTIC_WOFF_C ?=
LIBGASNET_PEDANTIC_WOFF_CXX ?=
LIBGASNET_PEDANTIC_FLAGS ?= \
  MANUAL_CFLAGS="-std=c99 -pedantic $(LIBGASNET_PEDANTIC_WOFF) $(LIBGASNET_PEDANTIC_WOFF_C)" \
  MANUAL_CXXFLAGS="-std=c++11 -pedantic $(LIBGASNET_PEDANTIC_WOFF) $(LIBGASNET_PEDANTIC_WOFF_CXX)"

pedantic-%: $(SUITE_BUILD_DIR) force
	@rm -f $@
	@network=`echo $@ | $(PERL) -pe 's/^(.*)-(.*)-(.*)$$/$$2/'`; \
	 target=`echo $@ | $(PERL) -pe 's/^(.*)-(.*)-(.*)$$/$$3/'`; \
	 logfile=$(LIBGASNET_LOGDIR)/libgasnet-$@.log ; \
	 set -x ; \
	 ( $(MAKE) do-conduit NETWORK=$$network MAKE_TARGET=$$target $(LIBGASNET_PEDANTIC_FLAGS) ) > $$logfile 2>&1 ; \
	 rc=$$? ; cat $$logfile ; exit $$rc
	@echo '#!/bin/sh' > $@ ; chmod +x $@

LIBGASNET_ALT_TEST ?= testgasnet

do-alt-test: $(SUITE_BUILD_DIR) force
	@rm -f $(TARGET)
	@network=`echo $(TARGET) | $(PERL) -pe 's/^(.*)-(.*)-(.*)$$/$$2/'`; \
	 parseq=`echo $(TARGET) | $(PERL) -pe 's/^(.*)-(.*)-(.*)$$/$$3/'`; \
	 logfile=$(LIBGASNET_LOGDIR)/libgasnet-$(TARGET).log ; \
	 set -x ; \
	 case $(LIBGASNET_ALT_TEST) in \
	   none) target=$$parseq;; \
	      *) target=$(LIBGASNET_ALT_TEST)-$$parseq;; \
	 esac; \
	 ( $(MAKE) do-conduit NETWORK=$$network MAKE_TARGET=$$target ) > $$logfile 2>&1 ; \
	 rc=$$? ; cat $$logfile ; exit $$rc
	@echo '#!/bin/sh' > $(TARGET) ; chmod +x $(TARGET)

alt_t-%:  force ; $(MAKE) do-alt-test TARGET=$@ SUITE_BUILD_DIR='$(SUITE_BUILD_DIR)_alt_t'
alt_s-%:  force ; $(MAKE) do-alt-test TARGET=$@ SUITE_BUILD_DIR='$(SUITE_BUILD_DIR)_alt_s'
alt_ts-%: force ; $(MAKE) do-alt-test TARGET=$@ SUITE_BUILD_DIR='$(SUITE_BUILD_DIR)_alt_ts'
	 
force:

.PHONY: force

