#
# Makefile
#   Copyright (C) 1999-2021 Free Software Foundation, Inc.
#
# This file is part of the libiberty library.
# Libiberty is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# Libiberty 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with libiberty; see the file COPYING.LIB.  If not,
# write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#

# This file was written by Tom Tromey <tromey@cygnus.com>.

#
# Makefile for libiberty/testsuite directory
#

srcdir = @srcdir@
VPATH = @srcdir@

SHELL = @SHELL@

CC = @CC@
CFLAGS = @CFLAGS@
LIBCFLAGS = $(CFLAGS) $(LDFLAGS)

# Multilib support variables.
MULTISRCTOP =

INCDIR=$(srcdir)/../$(MULTISRCTOP)../include

all:

# CHECK is set to "really_check" or the empty string by configure.
check: @CHECK@

really-check: check-cplus-dem check-d-demangle check-rust-demangle \
		check-pexecute check-expandargv check-strtol

# Run some tests of the demangler.
check-cplus-dem: test-demangle $(srcdir)/demangle-expected
	./test-demangle < $(srcdir)/demangle-expected

check-d-demangle: test-demangle $(srcdir)/d-demangle-expected
	./test-demangle < $(srcdir)/d-demangle-expected

check-rust-demangle: test-demangle $(srcdir)/rust-demangle-expected
	./test-demangle < $(srcdir)/rust-demangle-expected

# Check the pexecute code.
check-pexecute: test-pexecute
	./test-pexecute

# Check the expandargv functionality
check-expandargv: test-expandargv
	./test-expandargv

# Check the strtol functionality
check-strtol: test-strtol
	./test-strtol

# Run the demangler fuzzer
fuzz-demangler: demangler-fuzzer
	./demangler-fuzzer

TEST_COMPILE = $(CC) @DEFS@ $(LIBCFLAGS) -I.. -I$(INCDIR) $(HDEFINES)
test-demangle: $(srcdir)/test-demangle.c ../libiberty.a
	$(TEST_COMPILE) -o test-demangle \
		$(srcdir)/test-demangle.c ../libiberty.a

test-pexecute: $(srcdir)/test-pexecute.c ../libiberty.a
	$(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-pexecute \
		$(srcdir)/test-pexecute.c ../libiberty.a

test-expandargv: $(srcdir)/test-expandargv.c ../libiberty.a
	$(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-expandargv \
		$(srcdir)/test-expandargv.c ../libiberty.a

test-strtol: $(srcdir)/test-strtol.c ../libiberty.a
	$(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-strtol \
		$(srcdir)/test-strtol.c ../libiberty.a

demangler-fuzzer: $(srcdir)/demangler-fuzzer.c ../libiberty.a
	$(TEST_COMPILE) -o demangler-fuzzer \
		$(srcdir)/demangler-fuzzer.c ../libiberty.a

# Standard (either GNU or Cygnus) rules we don't use.
html install-html info install-info clean-info dvi pdf install-pdf \
install etags tags installcheck:

# The standard clean rules.
mostlyclean:
	rm -f test-demangle
	rm -f test-pexecute
	rm -f test-expandargv
	rm -f test-strtol
	rm -f demangler-fuzzer
	rm -f core
clean: mostlyclean
distclean: clean
	rm -f Makefile
maintainer-clean realclean: distclean

Makefile: $(srcdir)/Makefile.in ../config.status
	CONFIG_FILES=testsuite/Makefile CONFIG_HEADERS= \
	  cd .. && $(SHELL) ./config.status
