
# What the first for loop does: it copies a bunch of files which names
# of the form wurble-arch-os to $prefix/lib/valgrind/arch-os/wurble.
# There is some complexity in the sed mangling because wurble may itself
# contain a dash, which must be ignored.  For example we want
#    exp-omega-x86-linux
# to be installed in 
#    $prefix/lib/valgrind/x86-linux/exp-omega
# and not in
#    $prefix/lib/valgrind/omega-x86-linux/exp
# or similarly mutant place.
#
# Note there is identical sed magic in Makefile.tool-inplace.am.

# What the second for loop does: it copies libcoregrind.a and libvex.a
# into the correct (target-specific) lib dirs at install time.
# $(noinst_LIBRARIES) will look like this:
#    libcoregrind_x86_linux.a libreplacemalloc_toolpreload_x86_linux.a
#    libcoregrind_amd64_linux.a libreplacemalloc_toolpreload_amd64_linux.a
# The 'if expr' filters out all but the libcoregrind_ ones.
# pD and pU are the (arch,os) target pairs separated by a dash (pD) or
# an underscore (pU) respectively, eg amd64-linux (pD) and amd64_linux (pU).
# It then copies libcoregrind.a and libvex.a to the right places.

install-exec-local:
	if [ -n "$(noinst_PROGRAMS)" ] ; then \
	  for f in $(noinst_PROGRAMS); do \
	    name=`echo $$f | sed -e 's/-\([^-]*-[^-.]*\)\(\..*\)\?$$/\2/'`; \
	    plat=`echo $$f | sed -e 's/^.*-\([^-]*-[^-.]*\)\(\..*\)\?$$/\1/'`; \
	    $(mkinstalldirs) $(DESTDIR)$(valdir)/$$plat; \
	    $(INSTALL_PROGRAM) $$f $(DESTDIR)$(valdir)/$$plat/$$name; \
	  done ; \
	fi ; \
	if [ -n "$(noinst_LIBRARIES)" ] ; then \
	  for f in $(noinst_LIBRARIES) expr_wont_match_me; do \
	    if expr match $$f libcoregrind_ > /dev/null ; then \
	      pU=`echo $$f | sed -e 's/libcoregrind_//g' -e 's/\.a//g'` ; \
	      pD=`echo $$pU | sed -e 's/_/-/g'` ; \
	      $(INSTALL_DATA) $$f $(DESTDIR)$(valdir)/$$pD/libcoregrind.a ; \
	      $(INSTALL_DATA) @VEX_DIR@/libvex_$$pU.a \
				$(DESTDIR)$(valdir)/$$pD/libvex.a ; \
	    fi ; \
	  done ; \
	fi
