# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

#
#   /**-------------------------------------------------------------------**
#    **                              CLooG                                **
#    **-------------------------------------------------------------------**
#    **                            makefile                               **
#    **-------------------------------------------------------------------**
#    **                   First version: march 6th 2003                   **
#    **-------------------------------------------------------------------**/
#
# makefile for checking.

#/*****************************************************************************
# *               CLooG : the Chunky Loop Generator (experimental)            *
# *****************************************************************************
# *                                                                           *
# * Copyright (C) 2003 Cedric Bastoul                                         *
# *                                                                           *
# * This library is free software; you can redistribute it and/or             *
# * modify it under the terms of the GNU Lesser General Public                *
# * License as published by the Free Software Foundation; either              *
# * version 2.1 of the License, 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         *
# * Lesser General Public License for more details.                           *
# *                                                                           *
# * You should have received a copy of the GNU Lesser General Public          *
# * License along with this library; if not, write to the Free Software       *
# * Foundation, Inc., 51 Franklin Street, Fifth Floor,                        *
# * Boston, MA  02110-1301  USA                                               *
# *                                                                           *
# * CLooG, the Chunky Loop Generator                                          *
# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr                        *
# * This file has been written with the help of the Bart Kienhuis's checking  *
# * makefile for PipLib.                                                      *
# *                                                                           *
# *****************************************************************************/

VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = $(am__EXEEXT_1)
subdir = test
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \
	$(top_srcdir)/m4/ax_cflags_warn_all.m4 \
	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
	$(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \
	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
	$(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@NO_ISL_FALSE@am__EXEEXT_1 = generate_test$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am_generate_test_OBJECTS = generate_test.$(OBJEXT)
generate_test_OBJECTS = $(am_generate_test_OBJECTS)
generate_test_LDADD = $(LDADD)
generate_test_DEPENDENCIES = ../libcloog-isl.la
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
am__v_lt_0 = --silent
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
	$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo "  CC    " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
	$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo "  CCLD  " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo "  GEN   " $@;
SOURCES = $(generate_test_SOURCES)
DIST_SOURCES = $(generate_test_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BITS = @BITS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CD = @CD@
CFLAGS = @CFLAGS@
CFLAGS_WARN = @CFLAGS_WARN@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GIT_INDEX = @GIT_INDEX@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
ISL_CPPFLAGS = @ISL_CPPFLAGS@
ISL_LDFLAGS = @ISL_LDFLAGS@
ISL_LIBS = @ISL_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PRTDIAG = @PRTDIAG@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
VERSION_MAJOR = @VERSION_MAJOR@
VERSION_MINOR = @VERSION_MINOR@
VERSION_REVISION = @VERSION_REVISION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pkgconfig_libdir = @pkgconfig_libdir@
pkgconfig_libfile = @pkgconfig_libfile@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
versioninfo = @versioninfo@
@NO_ISL_FALSE@GENERATE_TEST = generate_test
@NO_ISL_TRUE@GENERATE_TEST = 
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
LDADD = ../libcloog-isl.la
generate_test_SOURCES = generate_test.c
ROOT = ..
FINITE_CLOOGTEST_C = \
	0D-1                           \
	0D-2                           \
	0D-3                           \
	1point-1                       \
	1point-2                       \
	4-param                        \
	basic-bounds-1                 \
	basic-bounds-2                 \
	basic-bounds-3                 \
	basic-bounds-4                 \
	basic-bounds-5                 \
	basic-bounds-6                 \
	block                          \
	block2                         \
	block3                         \
	byu98-1-2-3                    \
	cholesky                       \
	cholesky2                      \
	christian                      \
	classen                        \
	classen2                       \
	constant                       \
	constbound                     \
	darte                          \
	dealII                         \
	donotsimp                      \
	dot                            \
	dot2                           \
	double                         \
	durbin_e_s                     \
	emploi                         \
	esced                          \
	ex1                            \
	forwardsub-1-1-2               \
	forwardsub-2-1-2-3             \
	forwardsub-3-1-2               \
	gauss                          \
	gesced                         \
	gesced2                        \
	gesced3                        \
	guide                          \
	iftest                         \
	iftest2                        \
	largeur                        \
	levenshtein-1-2-3              \
	lex                            \
	lineality-1-2                  \
	lineality-2-1-2                \
	logo                           \
	logopar                        \
	lu                             \
	lu2                            \
	lub                            \
	lux                            \
	min-1-1                        \
	min-2-1                        \
	min-3-1                        \
	min-4-1                        \
	mode                           \
	multi-mm-1                     \
	no_lindep                      \
	orc                            \
	rectangle                      \
	singleton                      \
	square+triangle-1-1-2-3        \
	swim                           \
	test                           \
	thomasset                      \
	tiling                         \
	uday_scalars		       \
	union			       \
	vivien                         \
	vivien2                        \
	walters                        \
	walters2                       \
	walters3                       \
	wavefront                      \
	yosr                           \
	yosr2                          \
	./non_optimal/nul_complex1     \
	./non_optimal/usvd_e_t         \
	./non_optimal/youcef           \
	./reservoir/cholesky2          \
	./reservoir/fusion1            \
	./reservoir/fusion2            \
	./reservoir/jacobi2            \
	./reservoir/jacobi3            \
	./reservoir/lim-lam1           \
	./reservoir/lim-lam2           \
	./reservoir/lim-lam3           \
	./reservoir/lim-lam4           \
	./reservoir/lim-lam5           \
	./reservoir/lim-lam6           \
	./reservoir/liu-zhuge1         \
	./reservoir/loechner3          \
	./reservoir/loechner4          \
	./reservoir/loechner5          \
	./reservoir/mg-interp2         \
	./reservoir/mg-interp          \
	./reservoir/mg-psinv           \
	./reservoir/mg-resid           \
	./reservoir/mg-rprj3           \
	./reservoir/pingali1           \
	./reservoir/pingali2           \
	./reservoir/pingali3           \
	./reservoir/pingali4           \
	./reservoir/pingali5           \
	./reservoir/pingali6           \
	./reservoir/QR                 \
	./reservoir/tang-xue1          \
	./reservoir/two   

CLOOG_ISL_TEST_C = \
	isl/mod				\
	isl/mod2			\
	isl/mod3			\
	isl/mod4

CLOOGTEST_C = \
	infinite                       \
	infinite2                      \
	infinite3                      \
	infinite4                      \
	$(FINITE_CLOOGTEST_C)          \
	$(CLOOG_ISL_TEST_C)


#	./reservoir/long               \
#	faber
CLOOGTEST_FORTRAN = \
	dartef                         \
	iftestf                        \
	levenshtein-1-2-3f             \
	yosrf

CLOOG_ISL_TEST_STRIDED = \
	isl/mxm-shared

CLOOGTEST_STRIDED = \
	basic-bounds-2                 \
	mod4                           \
	nul_basic1                     \
	nul_basic2                     \
	nul_lcpc		       \
	multi-stride		       \
	multi-stride2		       \
	stride3                        \
	stride4                        \
	reservoir/bastoul3	       \
	reservoir/stride	       \
	reservoir/stride2              \
	$(CLOOG_ISL_TEST_STRIDED)

SPECIAL_TESTS = \
	isl/jacobi-shared \
	backtrack \
	vasilache \
	merge \
	equality \
	equality2 \
	otl \
	param-split \
	pouchet \
	stride \
	stride2 \
	sor1d

SPECIAL_OPTIONS = \
	'isl/jacobi-shared -f 4 -l -1 -override -strides 1 -sh 1' \
	'backtrack -f 1 -backtrack' \
	'vasilache -f 8 -l 9' \
	'merge -f -1' \
	'equality -f -1 -l 2 -override' \
	'equality2 -f -1 -l 4 -esp 1 -override' \
	'otl -block 1 -esp 0 -otl 0' \
	'param-split -f -1' \
	'pouchet -f 3 -l 7' \
	'stride -f -1 -strides 1' \
	'stride2 -f -1 -strides 1' \
	'sor1d -f -1'

EXTRA_DIST = \
	$(CLOOGTEST_C:%=%.cloog) \
	$(CLOOGTEST_C:%=%.c) \
	$(FINITE_CLOOGTEST_C:%=%.good.c) \
	$(CLOOGTEST_FORTRAN:%=%.cloog) \
	$(CLOOGTEST_FORTRAN:%=%.f) \
	$(CLOOGTEST_STRIDED:%=%.cloog) \
	$(CLOOGTEST_STRIDED:%=%.c) \
	$(SPECIAL_TESTS:%=%.cloog) \
	$(SPECIAL_TESTS:%=%.c) \
	$(SPECIAL_TESTS:%=%.good.c)

all: all-am

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --foreign test/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-noinstPROGRAMS:
	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
generate_test$(EXEEXT): $(generate_test_OBJECTS) $(generate_test_DEPENDENCIES) 
	@rm -f generate_test$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(generate_test_OBJECTS) $(generate_test_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_test.Po@am__quote@

.c.o:
@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c $<

.c.obj:
@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
	mostlyclean-am

distclean: distclean-am
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
	clean-libtool clean-noinstPROGRAMS ctags distclean \
	distclean-compile distclean-generic distclean-libtool \
	distclean-tags distdir dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-pdf install-pdf-am install-ps install-ps-am \
	install-strip installcheck installcheck-am installdirs \
	maintainer-clean maintainer-clean-generic mostlyclean \
	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
	pdf pdf-am ps ps-am tags uninstall uninstall-am


FORCE:
../libcloog-isl.la: FORCE
	cd ..; $(MAKE) $(AM_MAKEFLAGS) libcloog-isl.la

generate:
	@echo "             /*-----------------------------------------------*"
	@echo "              *                 Generate files                *"
	@echo "              *-----------------------------------------------*/"
	@for x in $(CLOOGTEST_C) ; do \
		echo "Generate $$x.c" ; \
		$(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.c ; \
	done ; \
	for x in $(CLOOGTEST_FORTRAN) ; do \
		echo "Generate $$x.f" ; \
		$(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.f ; \
	done ; \
	for x in $(CLOOGTEST_STRIDED) ; do \
		echo "Generate $$x.c" ; \
		$(top_builddir)/cloog $(srcdir)/$$x.cloog \
			-strides 1 -o $(srcdir)/$$x.c ; \
	done ; \
	for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \
		echo "Generate file $$x ($$options)" ; \
		$(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \
		    $$options > $(srcdir)/$$x.c ; \
	done; done

generate_good:
	@for x in $(FINITE_CLOOGTEST_C) ; do \
		echo "Generate $$x.good.c" ; \
		$(top_builddir)/cloog$(EXEEXT) -callable 1 $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \
	done; \
	for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \
		echo "Generate $$x.good.c ($$options)" ; \
		$(top_builddir)/cloog$(EXEEXT) -callable 1 $$options $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \
	done; done

valgrind:
	@echo "             /*-----------------------------------------------*"
	@echo "              *            Checking files by Valgrind         *"
	@echo "              *-----------------------------------------------*/"
	for x in $(CLOOGTEST_C) ; do \
		echo "Valgrinding $$x.c" ; \
		valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \
	done ; \
	for x in $(CLOOGTEST_FORTRAN) ; do \
		echo "Valgrinding $$x.f" ; \
		valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \
	done

test_run: generate_test$(EXEEXT)
	@echo "             /*-----------------------------------------------*"
	@echo "              *                 Testing CLooG                 *"
	@echo "              *-----------------------------------------------*/"
	@failedtest=0 ; \
	echo "--- Testing C files... (correct output)" ; \
	for x in $(FINITE_CLOOGTEST_C) ; do \
		echo -n "Verify file $$x... " ; \
		echo -n "generating... " ; \
		$(top_builddir)/cloog$(EXEEXT) -q -callable 1 $(srcdir)/$$x.cloog > test_test.c ; \
		./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \
		echo -n "compiling... " ; \
		$(COMPILE) -c test_test.c; \
		$(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \
		$(LINK) test_main.c test_test.o test_good.o > /dev/null; \
		echo -n "comparing... " ; \
		./test_run$(EXEEXT); \
		result=$$?; \
		if test "$$result" -ne "0" ; then \
			failedtest=`expr $$failedtest + 1` ; \
		fi; \
		$(RM) $@; \
		echo; \
	done; \
	for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \
		echo -n "Verify file $$x ($$options)... " ; \
		echo -n "generating... " ; \
		$(top_builddir)/cloog$(EXEEXT) -q -callable 1 $$options $(srcdir)/$$x.cloog > test_test.c ; \
		./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \
		echo -n "compiling... " ; \
		$(COMPILE) -c test_test.c; \
		$(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \
		$(LINK) test_main.c test_test.o test_good.o > /dev/null; \
		echo -n "comparing... " ; \
		./test_run$(EXEEXT); \
		result=$$?; \
		if test "$$result" -ne "0" ; then \
			failedtest=`expr $$failedtest + 1` ; \
		fi; \
		$(RM) $@; \
		echo; \
	done; done; \
	for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \
		echo -n "Verify file $$x ($$options -sh 1)... " ; \
		echo -n "generating... " ; \
		$(top_builddir)/cloog$(EXEEXT) -q -callable 1 $$options -sh 1 $(srcdir)/$$x.cloog > test_test.c ; \
		./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \
		echo -n "compiling... " ; \
		$(COMPILE) -c test_test.c; \
		$(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \
		$(LINK) test_main.c test_test.o test_good.o > /dev/null; \
		echo -n "comparing... " ; \
		./test_run$(EXEEXT); \
		result=$$?; \
		if test "$$result" -ne "0" ; then \
			failedtest=`expr $$failedtest + 1` ; \
		fi; \
		$(RM) $@; \
		echo; \
	done; done; \
	if [ $$failedtest != 0 ] ; then \
		echo "$$failedtest tests failed" ; \
	else \
	        echo "CLooG works correctly :-) !" ; \
        fi
test:
	@echo "             /*-----------------------------------------------*"
	@echo "              *                 Testing CLooG                 *"
	@echo "              *-----------------------------------------------*/"
	@failedtest=0 ; \
	echo "--- Testing C files... (expected output)" ; \
	for x in $(CLOOGTEST_C) ; do \
		echo "Verify file $$x" ; \
		$(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog > ttemp ; \
		diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \
		result=$$?; \
		if [ "$$result" -ne "0" ] ; then \
			echo "!!! Error: $$x is not the same" ; \
			failedtest=`expr $$failedtest + 1` ; \
		else \
			echo "$$x passed" ; \
	        fi ; \
	done ; \
	echo "--- Testing FORTRAN files..." ; \
	for x in $(CLOOGTEST_FORTRAN) ; do \
		echo "Verify file $$x" ; \
		$(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog > ttemp ; \
		diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.f ; \
		result=$$?; \
		if [ "$$result" -ne "0" ] ; then \
			echo "!!! Error: $$x is not the same" ; \
			failedtest=`expr $$failedtest + 1` ; \
		else \
			echo "$$x passed" ; \
	        fi ; \
	done ; \
	echo "--- Testing STRIDED files..." ; \
	for x in $(CLOOGTEST_STRIDED) ; do \
		echo "Verify file $$x" ; \
		$(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \
		-strides 1 > ttemp ; \
		diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \
		result=$$?; \
		if [ "$$result" -ne "0" ] ; then \
			echo "!!! Error: $$x is not the same" ; \
			failedtest=`expr $$failedtest + 1` ; \
		else \
			echo "$$x passed" ; \
	        fi ; \
	done ; \
	echo "--- Testing SPECIAL OPTIONS files..." ; \
	for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \
	        echo "Verify file $$x ($$options)" ; \
		$(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \
			$$options > ttemp ; \
		diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \
		result=$$?; \
		if [ "$$result" -ne "0" ] ; then \
			echo "!!! Error: $$x is not the same" ; \
			failedtest=`expr $$failedtest + 1` ; \
		else \
			echo "$$x passed" ; \
	        fi ; \
	done; done; \
	rm ttemp ; \
	if [ $$failedtest != 0 ] ; then \
		echo "$$failedtest tests failed" ; \
	else \
	        echo "CLooG works correctly :-) !" ; \
        fi

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
