## Makefile for the testsuite subdirectory of the GNU C++ Standard library.
##
## Copyright (C) 2001-2021 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 \
   testsuite_files_simd

# 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 tool libstdc++' >>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 libiconv "$(LIBICONV)"' >>site.tmp
	@echo 'set baseline_dir "$(baseline_dir)"' >> site.tmp
	@echo 'set baseline_subdir_switch "$(baseline_subdir_switch)"' >> site.tmp
	@echo 'set TEST_GCC_EXEC_PREFIX "$(libdir)/gcc/"' >> 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_builddir)/scripts/extract_symvers

baseline_subdir := $(shell $(CXX) $(baseline_subdir_switch))

baseline_symbols:
	-@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
	  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}/${baseline_subdir}
	-@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
	  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_p_numbers0:=1 2 3 4 5 6 7 8 9
check_p_numbers1:=0 $(check_p_numbers0)
check_p_numbers2:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers1)))
check_p_numbers3:=$(addprefix 0,$(check_p_numbers1)) $(check_p_numbers2)
check_p_numbers4:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers3)))
check_p_numbers5:=$(addprefix 0,$(check_p_numbers3)) $(check_p_numbers4)
check_p_numbers6:=$(foreach i,$(check_p_numbers0),$(addprefix $(i),$(check_p_numbers5)))
check_p_numbers:=$(check_p_numbers0) $(check_p_numbers2) $(check_p_numbers4) $(check_p_numbers6)
check_p_subdirs=$(wordlist 1,$(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128),$(check_p_numbers))
check_DEJAGNU_normal_targets = $(addprefix check-DEJAGNUnormal,$(check_p_subdirs))
$(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 $*,@)AR="$(AR)"; export AR; \
	RANLIB="$(RANLIB)"; export RANLIB; \
	if [ -z "$*" ] && [ -n "$(filter -j%, $(MFLAGS))" ]; then \
	  rm -rf normal-parallel || true; \
	  mkdir normal-parallel; \
	  $(MAKE) $(AM_MAKEFLAGS) $(check_DEJAGNU_normal_targets); \
	  rm -rf normal-parallel || true; \
	  for idx in $(check_p_subdirs); do \
	    if [ -d normal$$idx ]; then \
	      mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
	      mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
	    fi; \
	  done; \
	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
	    normal[0-9]*/libstdc++.sum.sep > libstdc++.sum; \
	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
	    normal[0-9]*/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++; \
	if [ -n "$*" ]; then \
	  if [ -f normal-parallel/finished ]; then rm -rf "$*"; exit 0; fi; \
	  GCC_RUNTEST_PARALLELIZE_DIR=`${PWD_COMMAND}`/normal-parallel; \
	  export GCC_RUNTEST_PARALLELIZE_DIR; \
	  cd "$*"; \
	fi; \
	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
	  $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
		    $(RUNTESTFLAGS); \
	  if [ -n "$*" ]; then \
	    touch $$GCC_RUNTEST_PARALLELIZE_DIR/finished; \
	  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}; \
	  CXXFLAGS='$(CXXFLAGS)'; export CXXFLAGS; \
	  ${check_performance_script} ${glibcxx_srcdir} ${glibcxx_builddir})

# Runs the simd tests.
check-simd: $(srcdir)/experimental/simd/generate_makefile.sh \
	    ${glibcxx_srcdir}/scripts/check_simd \
	    testsuite_files_simd \
	    ${glibcxx_builddir}/scripts/testsuite_flags
	@rm -f .simd.summary
	@echo "Generating simd testsuite subdirs and Makefiles ..."
	@${glibcxx_srcdir}/scripts/check_simd "${glibcxx_srcdir}" "${glibcxx_builddir}" "$(CXXFLAGS)" | \
	  while read subdir; do \
	    $(MAKE) -C "$${subdir}"; \
	    tail -n20 $${subdir}/simd_testsuite.sum | \
	      grep -A20 -B1 'Summary ===' >> .simd.summary; \
	  done; \
	  cat .simd.summary && rm .simd.summary

# Runs the testsuite in debug mode.
debug_flags = "unix/-D_GLIBCXX_DEBUG"

# 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-debug: site.exp
	outputdir=debug; export outputdir; \
	if test ! -d $${outputdir}; then \
	  mkdir $${outputdir}; \
	fi; \
	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
	EXPECT=$(EXPECT); export EXPECT; \
	$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) conformance.exp --outdir $${outputdir} --objdir $${outputdir} --target_board=$(debug_flags)" check-DEJAGNU;

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 \
	     *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb

# To remove directories.
clean-local:
	rm -rf de fr debug parallel binaries normal* simd
