#
# Makefile
#   Copyright (C) 1999, 2002, 2006
#   Free Software Foundation
#
# 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-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 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
