#
# 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)

# 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-pexecute check-expandargv

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

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

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

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

# 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 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
