# This file contains things shared by coregrind/Makefile.am and tool
# Makefile.am files.

# This is used by coregrind/Makefile.am and Makefile.tool.am for doing
# "in-place" installs.  It copies $(noinst_PROGRAMS) into $inplacedir.
# It needs to be depended on by an 'all-local' rule.
inplace-noinst_PROGRAMS:
	if [ -n "$(noinst_PROGRAMS)" ] ; then \
	  mkdir -p $(inplacedir); \
	  for f in $(noinst_PROGRAMS) ; do \
	    rm -f $(inplacedir)/$$f; \
	    ln -f -s ../$(subdir)/$$f $(inplacedir); \
	  done ; \
	fi

# This is used by coregrind/Makefile.am and by <tool>/Makefile.am for doing
# "make install".  It copies $(noinst_PROGRAMS) into $prefix/lib/valgrind/.
# It needs to be depended on by an 'install-exec-local' rule.
install-noinst_PROGRAMS:
	if [ -n "$(noinst_PROGRAMS)" ] ; then \
	  $(mkinstalldirs) $(DESTDIR)$(valdir); \
	  for f in $(noinst_PROGRAMS); do \
	    $(INSTALL_PROGRAM) $$f $(DESTDIR)$(valdir); \
	  done ; \
	fi

