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

# 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
