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

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@
subdir = src/include
DIST_COMMON = $(am__nobase_include_HEADERS_DIST) $(srcdir)/Makefile.am \
	$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_icu.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_HEADER = $(top_builddir)/config.h \
	$(top_builddir)/src/include/fst/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__nobase_include_HEADERS_DIST = fst/arc.h fst/determinize.h \
	fst/intersect.h fst/queue.h fst/statesort.h fst/arcfilter.h \
	fst/dfs-visit.h fst/invert.h fst/randequivalent.h \
	fst/string-weight.h fst/difference.h \
	fst/lexicographic-weight.h fst/randgen.h fst/symbol-table.h \
	fst/arcsort.h fst/encode.h fst/lock.h fst/random-weight.h \
	fst/synchronize.h fst/epsnormalize.h fst/log.h fst/rational.h \
	fst/test-properties.h fst/cache.h fst/equal.h fst/arc-map.h \
	fst/map.h fst/register.h fst/topsort.h fst/closure.h \
	fst/equivalent.h fst/matcher.h fst/matcher-fst.h fst/relabel.h \
	fst/union-find.h fst/compact-fst.h fst/expanded-fst.h \
	fst/minimize.h fst/replace.h fst/union.h fst/compat.h \
	fst/factor-weight.h fst/state-map.h fst/mutable-fst.h \
	fst/reverse.h fst/util.h fst/complement.h fst/flags.h \
	fst/partition.h fst/reweight.h fst/vector-fst.h \
	fst/compose-filter.h fst/float-weight.h fst/product-weight.h \
	fst/rmepsilon.h fst/verify.h fst/compose.h fst/fst-decl.h \
	fst/project.h fst/rmfinalepsilon.h fst/visit.h fst/concat.h \
	fst/fst.h fst/properties.h fst/shortest-distance.h \
	fst/weight.h fst/connect.h fst/fstlib.h fst/prune.h \
	fst/shortest-path.h fst/const-fst.h fst/heap.h fst/push.h \
	fst/state-table.h fst/slist.h fst/pair-weight.h fst/config.h \
	fst/tuple-weight.h fst/power-weight.h fst/lookahead-matcher.h \
	fst/types.h fst/add-on.h fst/label-reachable.h \
	fst/accumulator.h fst/interval-set.h fst/state-reachable.h \
	fst/lookahead-filter.h fst/generic-register.h fst/edit-fst.h \
	fst/replace-util.h fst/icu.h fst/string.h \
	fst/signed-log-weight.h fst/sparse-tuple-weight.h \
	fst/sparse-power-weight.h fst/expectation-weight.h \
	fst/symbol-table-ops.h fst/bi-table.h \
	fst/extensions/far/compile-strings.h \
	fst/extensions/far/create.h fst/extensions/far/extract.h \
	fst/extensions/far/far.h fst/extensions/far/farlib.h \
	fst/extensions/far/farscript.h fst/extensions/far/info.h \
	fst/extensions/far/main.h fst/extensions/far/print-strings.h \
	fst/extensions/far/stlist.h fst/extensions/far/sttable.h \
	fst/extensions/pdt/collection.h fst/extensions/pdt/compose.h \
	fst/extensions/pdt/expand.h fst/extensions/pdt/info.h \
	fst/extensions/pdt/paren.h fst/extensions/pdt/pdt.h \
	fst/extensions/pdt/pdtlib.h fst/extensions/pdt/pdtscript.h \
	fst/extensions/pdt/replace.h fst/extensions/pdt/reverse.h \
	fst/extensions/pdt/shortest-path.h fst/script/arcsort.h \
	fst/script/arg-packs.h fst/script/closure.h \
	fst/script/compile-impl.h fst/script/compile.h \
	fst/script/compose.h fst/script/concat.h fst/script/connect.h \
	fst/script/convert.h fst/script/decode.h \
	fst/script/determinize.h fst/script/difference.h \
	fst/script/draw-impl.h fst/script/draw.h fst/script/encode.h \
	fst/script/epsnormalize.h fst/script/equal.h \
	fst/script/equivalent.h fst/script/fst-class.h \
	fst/script/fstscript.h fst/script/info-impl.h \
	fst/script/info.h fst/script/intersect.h fst/script/invert.h \
	fst/script/map.h fst/script/minimize.h fst/script/print-impl.h \
	fst/script/print.h fst/script/project.h fst/script/prune.h \
	fst/script/push.h fst/script/randequivalent.h \
	fst/script/randgen.h fst/script/register.h \
	fst/script/relabel.h fst/script/replace.h fst/script/reverse.h \
	fst/script/reweight.h fst/script/rmepsilon.h \
	fst/script/script-impl.h fst/script/shortest-distance.h \
	fst/script/shortest-path.h fst/script/symbols.h \
	fst/script/synchronize.h fst/script/text-io.h \
	fst/script/topsort.h fst/script/union.h \
	fst/script/weight-class.h fst/script/fstscript-decl.h \
	fst/script/verify.h
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(includedir)"
HEADERS = $(nobase_include_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
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@
GREP = @GREP@
ICU_CFLAGS = @ICU_CFLAGS@
ICU_CONFIG = @ICU_CONFIG@
ICU_CPPFLAGS = @ICU_CPPFLAGS@
ICU_CXXFLAGS = @ICU_CXXFLAGS@
ICU_LIBS = @ICU_LIBS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
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@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
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_CXX = @ac_ct_CXX@
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@
libfstdir = @libfstdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
@HAVE_FAR_TRUE@far_include_headers = fst/extensions/far/compile-strings.h \
@HAVE_FAR_TRUE@fst/extensions/far/create.h fst/extensions/far/extract.h \
@HAVE_FAR_TRUE@fst/extensions/far/far.h fst/extensions/far/farlib.h \
@HAVE_FAR_TRUE@fst/extensions/far/farscript.h fst/extensions/far/info.h \
@HAVE_FAR_TRUE@fst/extensions/far/main.h fst/extensions/far/print-strings.h \
@HAVE_FAR_TRUE@fst/extensions/far/stlist.h fst/extensions/far/sttable.h

@HAVE_PDT_TRUE@pdt_include_headers = fst/extensions/pdt/collection.h \
@HAVE_PDT_TRUE@fst/extensions/pdt/compose.h fst/extensions/pdt/expand.h \
@HAVE_PDT_TRUE@fst/extensions/pdt/info.h fst/extensions/pdt/paren.h \
@HAVE_PDT_TRUE@fst/extensions/pdt/pdt.h fst/extensions/pdt/pdtlib.h \
@HAVE_PDT_TRUE@fst/extensions/pdt/pdtscript.h fst/extensions/pdt/replace.h \
@HAVE_PDT_TRUE@fst/extensions/pdt/reverse.h fst/extensions/pdt/shortest-path.h

script_include_headers = fst/script/arcsort.h fst/script/arg-packs.h \
fst/script/closure.h fst/script/compile-impl.h fst/script/compile.h \
fst/script/compose.h fst/script/concat.h fst/script/connect.h \
fst/script/convert.h fst/script/decode.h fst/script/determinize.h \
fst/script/difference.h fst/script/draw-impl.h fst/script/draw.h \
fst/script/encode.h fst/script/epsnormalize.h fst/script/equal.h \
fst/script/equivalent.h fst/script/fst-class.h fst/script/fstscript.h \
fst/script/info-impl.h fst/script/info.h fst/script/intersect.h \
fst/script/invert.h fst/script/map.h fst/script/minimize.h \
fst/script/print-impl.h fst/script/print.h fst/script/project.h \
fst/script/prune.h fst/script/push.h fst/script/randequivalent.h \
fst/script/randgen.h fst/script/register.h fst/script/relabel.h \
fst/script/replace.h fst/script/reverse.h fst/script/reweight.h \
fst/script/rmepsilon.h fst/script/script-impl.h \
fst/script/shortest-distance.h fst/script/shortest-path.h \
fst/script/symbols.h fst/script/synchronize.h fst/script/text-io.h \
fst/script/topsort.h fst/script/union.h fst/script/weight-class.h \
fst/script/fstscript-decl.h fst/script/verify.h

nobase_include_HEADERS = fst/arc.h fst/determinize.h fst/intersect.h \
fst/queue.h fst/statesort.h fst/arcfilter.h fst/dfs-visit.h \
fst/invert.h fst/randequivalent.h fst/string-weight.h \
fst/difference.h fst/lexicographic-weight.h fst/randgen.h \
fst/symbol-table.h fst/arcsort.h fst/encode.h fst/lock.h \
fst/random-weight.h fst/synchronize.h \
fst/epsnormalize.h fst/log.h fst/rational.h fst/test-properties.h \
fst/cache.h fst/equal.h fst/arc-map.h fst/map.h fst/register.h fst/topsort.h \
fst/closure.h fst/equivalent.h fst/matcher.h fst/matcher-fst.h fst/relabel.h \
fst/union-find.h fst/compact-fst.h fst/expanded-fst.h fst/minimize.h \
fst/replace.h fst/union.h fst/compat.h fst/factor-weight.h fst/state-map.h \
fst/mutable-fst.h fst/reverse.h fst/util.h fst/complement.h \
fst/flags.h fst/partition.h fst/reweight.h fst/vector-fst.h \
fst/compose-filter.h fst/float-weight.h fst/product-weight.h \
fst/rmepsilon.h fst/verify.h fst/compose.h fst/fst-decl.h \
fst/project.h fst/rmfinalepsilon.h fst/visit.h fst/concat.h \
fst/fst.h fst/properties.h fst/shortest-distance.h fst/weight.h \
fst/connect.h fst/fstlib.h fst/prune.h fst/shortest-path.h \
fst/const-fst.h fst/heap.h fst/push.h fst/state-table.h fst/slist.h \
fst/pair-weight.h fst/config.h fst/tuple-weight.h fst/power-weight.h \
fst/lookahead-matcher.h fst/types.h fst/add-on.h fst/label-reachable.h \
fst/accumulator.h fst/interval-set.h fst/state-reachable.h \
fst/lookahead-filter.h fst/generic-register.h fst/edit-fst.h \
fst/replace-util.h fst/icu.h fst/string.h fst/signed-log-weight.h \
fst/sparse-tuple-weight.h fst/sparse-power-weight.h fst/expectation-weight.h \
fst/symbol-table-ops.h fst/bi-table.h \
$(far_include_headers) \
$(pdt_include_headers) \
$(script_include_headers)

all: all-am

.SUFFIXES:
$(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 src/include/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --foreign src/include/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):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
install-nobase_includeHEADERS: $(nobase_include_HEADERS)
	@$(NORMAL_INSTALL)
	test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
	$(am__nobase_list) | while read dir files; do \
	  xfiles=; for file in $$files; do \
	    if test -f "$$file"; then xfiles="$$xfiles $$file"; \
	    else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
	  test -z "$$xfiles" || { \
	    test "x$$dir" = x. || { \
	      echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
	      $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
	    echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
	    $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
	done

uninstall-nobase_includeHEADERS:
	@$(NORMAL_UNINSTALL)
	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
	$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
	test -n "$$files" || exit 0; \
	echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
	cd "$(DESTDIR)$(includedir)" && rm -f $$files

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 $(HEADERS)
installdirs:
	for dir in "$(DESTDIR)$(includedir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
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 mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am: install-nobase_includeHEADERS

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 -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am: uninstall-nobase_includeHEADERS

.MAKE: install-am install-strip

.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
	clean-libtool ctags distclean 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-nobase_includeHEADERS \
	install-pdf install-pdf-am install-ps install-ps-am \
	install-strip installcheck installcheck-am installdirs \
	maintainer-clean maintainer-clean-generic mostlyclean \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags uninstall uninstall-am uninstall-nobase_includeHEADERS


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