## Makefile for the testsuite subdirectory of the GNU C++ Standard library.
##
## Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009
## Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
## Process this file with automake to produce Makefile.in.

## This file is part of the GNU ISO C++ Library.  This library is free
## software; you can redistribute it and/or modify it under the
## terms of the GNU General Public License as published by the
## Free Software Foundation; either version 3, or (at your option)
## any later version.

## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.

## You should have received a copy of the GNU General Public License along
## with this library; see the file COPYING3.  If not see
## <http://www.gnu.org/licenses/>.

AUTOMAKE_OPTIONS = nostdinc
RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
EXPECT = expect

include $(top_srcdir)/fragment.am

# Generated lists of files to run.  All of these names are valid make
# targets, if you wish to generate a list manually.
lists_of_files = \
   testsuite_files \
   testsuite_files_interactive \
   testsuite_files_performance

# This rule generates all of the testsuite_files* lists at once.
${lists_of_files}:
	${glibcxx_srcdir}/scripts/create_testsuite_files \
	  ${glibcxx_srcdir}/testsuite `${PWD_COMMAND}`

# We need more things in site.exp, but automake completely controls the
# creation of that file; there's no way to append to it without messing up
# the dependancy chains.  So we overrule automake.  This rule is exactly
# what it would have generated, plus our own additions.
site.exp: Makefile
	@echo 'Making a new site.exp file...'
	@echo '## these variables are automatically generated by make ##' >site.tmp
	@echo '# Do not edit here.  If you wish to override these values' >>site.tmp
	@echo '# edit the last section' >>site.tmp
	@echo 'set srcdir $(srcdir)' >>site.tmp
	@echo "set objdir `pwd`" >>site.tmp
	@echo 'set build_alias "$(build_alias)"' >>site.tmp
	@echo 'set build_triplet $(build_triplet)' >>site.tmp
	@echo 'set host_alias "$(host_alias)"' >>site.tmp
	@echo 'set host_triplet $(host_triplet)' >>site.tmp
	@echo 'set target_alias "$(target_alias)"' >>site.tmp
	@echo 'set target_triplet $(target_triplet)' >>site.tmp
	@echo 'set target_triplet $(target_triplet)' >>site.tmp
	@echo 'set libiconv "$(LIBICONV)"' >>site.tmp
	@echo 'set baseline_dir "$(baseline_dir)"' >> site.tmp
	@echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
	@test ! -f site.exp || \
	  sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
	@-rm -f site.bak
	@test ! -f site.exp || mv site.exp site.bak
	@mv site.tmp site.exp


extract_symvers = $(glibcxx_srcdir)/scripts/extract_symvers

baseline_symbols:
	-@(output=${baseline_file}; \
	  if test ! -f $${output}; then \
	    echo "Baseline file doesn't exist."; \
	    echo "Try 'make new-abi-baseline' to create it."; \
	    exit 1; \
	  fi; true)

new-abi-baseline:
	-@$(mkinstalldirs) ${baseline_dir}
	-@(output=${baseline_file}; \
	  if test -f $${output}; then \
	    output=$${output}.new; \
	    t=`echo $${output} | sed 's=.*config/abi/=='`; \
	    echo "Baseline file already exists, writing to $${t} instead."; \
	  fi; \
	  ${extract_symvers} ../src/.libs/libstdc++.so $${output})

%/site.exp: site.exp
	-test -d $* || mkdir $*
	@srcdir=`cd $(srcdir); ${PWD_COMMAND}`;
	objdir=`${PWD_COMMAND}`/$*; \
	sed -e "s|^set srcdir .*$$|set srcdir $$srcdir|" \
	    -e "s|^set objdir .*$$|set objdir $$objdir|" \
	    site.exp > $*/site.exp.tmp
	@-rm -f $*/site.bak
	@test ! -f $*/site.exp || mv $*/site.exp $*/site.bak
	@mv $*/site.exp.tmp $*/site.exp

check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
$(check_DEJAGNU_normal_targets): check-DEJAGNUnormal%: normal%/site.exp

# Run the testsuite in normal mode.
check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
	if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
	    && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
	  $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
		  check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
	  for idx in 0 1 2 3; do \
	    mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
	    mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
	  done; \
	  mv -f libstdc++.sum libstdc++.sum.sep; \
	  mv -f libstdc++.log libstdc++.log.sep; \
	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
	    libstdc++.sum.sep normal0/libstdc++.sum.sep \
	    normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
	    normal3/libstdc++.sum.sep > libstdc++.sum; \
	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
	    libstdc++.log.sep normal0/libstdc++.log.sep \
	    normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
	    normal3/libstdc++.log.sep > libstdc++.log; \
	  exit 0; \
	fi; \
	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
	EXPECT=$(EXPECT); export EXPECT; \
	runtest=$(RUNTEST); \
	if [ -z "$$runtest" ]; then runtest=runtest; fi; \
	tool=libstdc++; \
	dirs=; \
	case "$*" in \
	  normal0) \
	    if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
	      $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
			$(RUNTESTFLAGS) abi.exp; \
	    else echo "WARNING: could not find \`runtest'" 1>&2; :;\
	    fi; \
	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [abep]*/*`";; \
	  normal1) \
	    dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
	  normal2) \
	    dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
	  normal3) \
	    dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
	esac; \
	if [ -n "$*" ]; then cd "$*"; fi; \
	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
	  if [ -n "$$dirs" ]; then \
	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
		    $(RUNTESTFLAGS) \
		    "conformance.exp=`echo $$dirs | sed 's/ /* /g;s/$$/*/'`"; \
	  else \
	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
		    $(RUNTESTFLAGS); \
	  fi; \
	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
	fi

check-am:
	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
.PHONY: check-DEJAGNU

# Use 'new-abi-baseline' to create an initial symbol file.  Then run
# 'check-abi' to test for changes against that file.
check-abi: site.exp baseline_symbols 
	-@runtest $(AM_RUNTESTFLAGS) --tool libstdc++ $(RUNTESTFLAGS) abi.exp

# Runs the testsuite, but in compile only mode.
# Can be used to test sources with non-GNU FE's at various warning
# levels and for checking compile time across releases.
# See script.
compile_script=${glibcxx_srcdir}/scripts/check_compile
check-compile: testsuite_files ${compile_script}
	-@(chmod + ${compile_script}; \
	  ${compile_script} ${glibcxx_srcdir} ${glibcxx_builddir})


# Runs the testsuite/performance tests.
# Some of these tests create large (~75MB) files, allocate huge
# ammounts of memory, or otherwise tie up machine resources. Thus,
# running this is off by default.
# XXX Need to add dependency on libtestc++.a
check_performance_script=${glibcxx_srcdir}/scripts/check_performance
check-performance: testsuite_files_performance ${performance_script}
	-@(chmod + ${check_performance_script}; \
	  ${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir})


# Runs the testsuite in parallel mode.
libgomp_dir=${glibcxx_builddir}/../libgomp
libgomp_flags=-B${glibcxx_builddir}/../libgomp \
              -I${glibcxx_builddir}/../libgomp \
	      -L${glibcxx_builddir}/../libgomp/.libs -lgomp

atomic_flags=$(ATOMIC_FLAGS)
parallel_flags="unix/-D_GLIBCXX_PARALLEL/-fopenmp"

check-parallel: site.exp
	-@(if test ! -d $${libgomp_dir}; then \
	  echo "Testing parallel mode failed as libgomp not present."; \
	  exit 1; \
	fi; \
	outputdir=parallel; export outputdir; \
	if test ! -d $${outputdir}; then \
	  mkdir $${outputdir}; \
	fi; \
	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
	EXPECT=$(EXPECT); export EXPECT; \
	$(MAKE) CXXFLAGS="$(atomic_flags) $(libgomp_flags)" RUNTESTFLAGS="$(RUNTESTFLAGS) conformance.exp --outdir $${outputdir} --objdir $${outputdir} --target_board=$(parallel_flags)" check-DEJAGNU; )

check-performance-parallel: testsuite_files_performance ${performance_script}
	-@(chmod + ${check_performance_script}; \
	CXXFLAGS="-D_GLIBCXX_PARALLEL -fopenmp $(atomic_flags) $(libgomp_flags)"; export CXXFLAGS; \
	${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir})

.PHONY: baseline_symbols new-abi-baseline \
	check-abi check-compile check-performance check-parallel

# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
	     testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
	     *.s *.o *.cc *.a *.so *.xml 

# To remove directories.
clean-local:
	rm -rf parallel
