#!/bin/sh
# Construct makefile for libgcc.
#   Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
#
# This file is part of GCC.

# Arguments, taken from the environment, since there are a lot
# of them, and positional args becomes quite ugly.
#
# objext
# LIB1ASMFUNCS
# LIB2FUNCS_1
# LIB2FUNCS_2
# LIB2FUNCS_ST
# LIB2ADD
# LIB2ADD_ST 
# LIB2ADDEH
# LIB2ADDEHDEP
# FPBIT
# FPBIT_FUNCS
# LIB2_DIVMOD_FUNCS
# DPBIT
# DPBIT_FUNCS
# TPBIT
# TPBIT_FUNCS
# LIBGCC
# MULTILIBS
# EXTRA_MULTILIB_PARTS
# SHLIB_EXT
# SHLIB_LINK
# SHLIB_MULTILIB
# SHLIB_MKMAP
# SHLIB_MKMAP_OPTS
# SHLIB_MAPFILES
# SHLIB_NM_FLAGS
# SHLIB_INSTALL
# MULTILIB_OSDIRNAMES

# Make needs VPATH to be literal.
echo 'srcdir = @srcdir@'
echo 'VPATH = @srcdir@'
echo 'EQ = ='
echo
echo 'force:'
echo

# Disable SHLIB_LINK if shared libgcc not enabled.
if [ "@enable_shared@" = "no" ]; then
  SHLIB_LINK=""
fi

# Build lines.

gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
	  AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
	  CC="$(CC)" CFLAGS="$(CFLAGS)" \
	  BUILD_PREFIX="$(BUILD_PREFIX)" \
	  BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
	  LANGUAGES="$(LANGUAGES)"'

# Dependencies for libgcc2.c
libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'" $LIB2ADDEHDEP"

# Dependencies for fp-bit.c
fpbit_c_dep='stmp-dirs config.status tsystem.h'

#
# Build libgcc1 components.
#

libgcc1_objs=""

for name in $LIB1ASMFUNCS; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${name}${objext}"

    echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
    echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out

    # Remove any objects from LIB2FUNCS and LIB2_DIVMOD_FUNCS that are
    # defined as optimized assembly code in LIB1ASMFUNCS.
    LIB2FUNCS_1=`echo $LIB2FUNCS_1 | sed -e 's/^'$name' //' \
				         -e 's/ '$name' / /' \
				         -e 's/ '$name'$//'`
    LIB2FUNCS_2=`echo $LIB2FUNCS_2 | sed -e 's/^'$name' //' \
				         -e 's/ '$name' / /' \
				         -e 's/ '$name'$//'`
    LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
				                     -e 's/ '$name' / /' \
				                     -e 's/ '$name'$//'`
  done
  libgcc1_objs="$libgcc1_objs ${name}${objext}"
done

#
# Build libgcc2 components.
#

libgcc2_objs=""
libgcc2_st_objs=""
libgcc2_eh_objs=""

for name in $LIB2FUNCS_1 $LIB2FUNCS_2; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${name}${objext}"

    echo $out: $libgcc2_c_dep
    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
      -c '$(srcdir)/libgcc2.c' -o $out
  done
  libgcc2_objs="$libgcc2_objs ${name}${objext}"
done

for name in $LIB2FUNCS_ST; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${name}${objext}"

    echo $out: $libgcc2_c_dep
    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
      -c '$(srcdir)/libgcc2.c' -o $out
  done
  libgcc2_st_objs="$libgcc2_st_objs ${name}${objext}"
done

for name in $LIB2_DIVMOD_FUNCS; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${name}${objext}"

    echo $out: $libgcc2_c_dep
    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
      -c '$(srcdir)/libgcc2.c' -fexceptions -fnon-call-exceptions -o $out
  done
  libgcc2_objs="$libgcc2_objs ${name}${objext}"
done

if [ "$FPBIT" ]; then
  for name in $FPBIT_FUNCS; do
    for ml in $MULTILIBS; do
      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"

      echo $out: $FPBIT $fpbit_c_dep
      echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	-c $FPBIT -o $out
    done
    libgcc2_objs="$libgcc2_objs ${name}${objext}"
  done
fi

if [ "$DPBIT" ]; then
  for name in $DPBIT_FUNCS; do
    for ml in $MULTILIBS; do
      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"

      echo $out: $DPBIT $fpbit_c_dep
      echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	-c $DPBIT -o $out
    done
    libgcc2_objs="$libgcc2_objs ${name}${objext}"
  done
fi

if [ "$TPBIT" ]; then
  for name in $TPBIT_FUNCS; do
    for ml in $MULTILIBS; do
      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"

      echo $out: $TPBIT $fpbit_c_dep
      echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	-c $TPBIT -o $out
    done
    libgcc2_objs="$libgcc2_objs ${name}${objext}"
  done
fi

for file in $LIB2ADD; do
  name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
  oname=`echo $name | sed -e 's,.*/,,'`

  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${oname}${objext}"
    if [ ${name}.asm = ${file} ]; then
      flags="$flags -xassembler-with-cpp"
    fi

    echo $out: stmp-dirs $file
    echo "	$gcc_compile" $flags -c $file -o $out
  done
  libgcc2_objs="$libgcc2_objs ${oname}${objext}"
done

for file in $LIB2ADDEH; do
  name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
  oname=`echo $name | sed -e 's,.*/,,'`

  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${oname}${objext}"
    if [ ${name}.asm = ${file} ]; then
      flags="$flags -xassembler-with-cpp"
    fi

    echo $out: stmp-dirs $file
    echo "	$gcc_compile" $flags -fexceptions -c $file -o $out
  done
  if [ "$SHLIB_LINK" ]; then
    libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}"
  else
    libgcc2_objs="$libgcc2_objs ${oname}${objext}"
  fi
done

for file in $LIB2ADD_ST; do
  name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
  oname=`echo $name | sed -e 's,.*/,,'`

  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${oname}${objext}"
    if [ ${name}.asm = ${file} ]; then
      flags="$flags -xassembler-with-cpp"
    fi

    echo $out: stmp-dirs $file
    echo "	$gcc_compile" $flags -c $file -o $out
  done
  libgcc2_st_objs="$libgcc2_st_objs ${oname}${objext}"
done

# SHLIB_MKMAP
# SHLIB_MKMAP_OPTS
# SHLIB_MAPFILES
for ml in $MULTILIBS; do
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;

  libgcc_objs=""
  libgcc_eh_objs=""
  for o in $libgcc1_objs; do
    libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
  done
  for o in $libgcc2_objs; do
    libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
  done
  for o in $libgcc2_eh_objs; do
    libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o"
  done
  libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs"
  shlib_deps="$libgcc_sh_objs"

  libgcc_st_objs=""
  for o in $libgcc2_st_objs; do
    libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o"
  done

  if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
    mapfile="libgcc/${dir}/libgcc.map"
    tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
    echo ""
    echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs"
    echo '	{ $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; \\"
    echo "	  cat $SHLIB_MAPFILES | sed -e "'"/^[ 	]*#/d" -e '\''s/^%\(if\|else\|elif\|endif\|define\)/#\1/'\'" \\"
    echo "	  | $gcc_compile $flags -E -xassembler-with-cpp -; \\"
    echo '	} | $(AWK)'" -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}"
    echo '	mv '"$tmpmapfile"' $@'
  fi
  shlib_deps="$shlib_deps $mapfile"

  # Depend on EXTRA_MULTILIB_PARTS, since that's where crtbegin/end
  # usually are put in a true multilib situation.
  for f in $EXTRA_MULTILIB_PARTS; do
    shlib_deps="$shlib_deps $dir/$f"
  done

  libgcc_a_objs="$libgcc_objs $libgcc_st_objs"

  if [ "@libgcc_visibility@" = yes -a "$SHLIB_LINK" ]; then
    libgcc_a_objs=
    echo ""
    echo "libgcc/${dir}/stacknote.s: stmp-dirs"
    echo '	@( echo | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -S -o - -xc - | grep .note.GNU-stack || : ) > $@.tmp'
    echo '	@mv -f $@.tmp $@'
    echo ""
    for o in $libgcc_objs $libgcc_st_objs; do
      # .oS objects will have all non-local symbol definitions .hidden
      oS=`echo ${o} | sed s~${objext}'$~.oS~g'`
      echo "${oS}: stmp-dirs libgcc/${dir}/stacknote.s ${o}"
      echo '	@( $(NM_FOR_TARGET) '${SHLIB_NM_FLAGS} ${o}' | $(AWK) '\''NF == 3 { print "\t.hidden", $$3 }'\''; cat libgcc/${dir}/stacknote.s ) | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -r -nostdinc -nostdlib -o $@ '${o}' -xassembler -'
      libgcc_a_objs="${libgcc_a_objs} ${oS}"
    done
  fi

  # Each of these .a files depends on stmp-dirs.  It would seem that
  # this dependency is redundant, since each of the object files
  # itself depends on stmp-dirs.  However, it is possible that there
  # are in fact no object files.  In that case, the stmp-dirs
  # dependency is required; the directory containing the archive must
  # exist before the archive itself can be created.
  echo ""
  echo "${dir}/libgcc.a: stmp-dirs $libgcc_a_objs"
  echo "	-rm -rf ${dir}/libgcc.a"
  echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs
  echo '	if $(RANLIB_TEST_FOR_TARGET) ; then' \\
  echo '	  $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a ';' \\
  echo '	else true; fi;'

  if [ "$SHLIB_LINK" ]; then

    echo ""
    echo "${dir}/libgcc_eh.a: stmp-dirs $libgcc_eh_objs"
    echo "	-rm -rf ${dir}/libgcc_eh.a"
    echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs
    echo '	if $(RANLIB_TEST_FOR_TARGET) ; then' \\
    echo '	  $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a ';' \\
    echo '	else true; fi;'

    if [ -z "$SHLIB_MULTILIB" ]; then
      if [ "$dir" = . ]; then
	shlib_base_name=libgcc_s
      else
	shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
      fi
      shlib_so_name="$shlib_base_name"
      shlib_dir=
      if [ -n "$MULTILIB_OSDIRNAMES" ]; then
	if [ "$dir" != . ]; then
	  gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
	  os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
	  shlib_dir="$dir"/
	  gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
	  os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
	  if [ -z "$os_multilib_base" ]; then
	    shlib_so_name=libgcc_s
	  else
	    shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
	  fi
	fi
      fi
      echo ""
      echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
      echo "	$SHLIB_LINK" \
	 | sed -e "s%@multilib_flags@%$flags%g" \
	       -e "s%@multilib_dir@%$dir%g" \
	       -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
	       -e "s%@shlib_base_name@%$shlib_base_name%g" \
	       -e "s%@shlib_map_file@%$mapfile%g" \
	       -e "s%@shlib_so_name@%$shlib_so_name%g" \
	       -e "s%@shlib_dir@%$shlib_dir%g"
    elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
      shlib_base_name="libgcc_s";
      echo ""
      echo "${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
      echo "	$SHLIB_LINK" \
	 | sed -e "s%@multilib_flags@%$flags%g" \
	       -e "s%@multilib_dir@%$dir%g" \
	       -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
	       -e "s%@shlib_base_name@%$shlib_base_name%g" \
	       -e "s%@shlib_map_file@%$mapfile%g" \
	       -e "s%@shlib_so_name@%$shlib_base_name%g" \
	       -e "s%@shlib_dir@%%g"
    fi
  fi
done

dirs=libgcc
for ml in $MULTILIBS; do
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  if [ $dir != . ]; then
    dirs="$dirs libgcc/${dir}"
  fi
done
echo ''
echo 'libgcc-stage-start:'
echo '	for dir in '"${dirs}"'; do \'
echo '	  if [ -d $(stage)/$$dir ]; then true; else '$mkinstalldirs' $(stage)/$$dir; fi; \'
echo '	done'
echo '	-for dir in '"${dirs}"'; do \'
echo '	  mv $$dir/*'"${objext}"' $(stage)/$$dir; \'
echo '	  test ! -f $$dir/stacknote.s || mv $$dir/stacknote.s $(stage)/$$dir; \'
echo '	done'

echo ""
all=stmp-dirs
dirs=libgcc

for ml in $MULTILIBS; do
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  if [ $dir != . ]; then
    dirs="$dirs ${dir} libgcc/${dir}"
  fi
  all="$all ${dir}/libgcc.a"
  if [ "$SHLIB_LINK" ]; then
    all="$all ${dir}/libgcc_eh.a"
    if [ -z "$SHLIB_MULTILIB" ]; then
      if [ "$dir" = "." ]; then
	suff="";
      else
	suff=_`echo $dir | sed s,/,_,g`
      fi
      all="$all ${dir}/libgcc_s${suff}${SHLIB_EXT}"
    elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
      all="$all libgcc_s${SHLIB_EXT}"
    fi
  fi
done

echo 'stmp-dirs: force'
echo '	for d in '"$dirs"'; do \'
echo '	  if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \'
echo '	done'
echo '	if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi'

for f in $EXTRA_MULTILIB_PARTS; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    case $dir in
    .) out=$f ; t= ;;
    *) out=$dir/$f ; t=$dir/ ;;
    esac
    case $out in
    # Prevent `make' from interpreting $out as a macro assignment
    *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
    *) targ=$out ;;
    esac

    echo $out: stmp-dirs
    echo "	$make_compile" \\
    echo '	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
    echo '	  MULTILIB_CFLAGS="'$flags'"' T=$t $targ

    all="$all $out"
  done
done

echo ""
echo "all: $all"

echo ""
echo "install: $all"
for ml in $MULTILIBS; do
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
  if [ $dir != . ]; then
    ldir='$(DESTDIR)$(libsubdir)'/$dir
    echo "	if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
  else
    ldir='$(DESTDIR)$(libsubdir)'
  fi
  echo '	$(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a

  if [ "$SHLIB_LINK" ]; then
    echo '	$(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
    echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a

    if [ -z "$SHLIB_MULTILIB" ]; then
      if [ "$dir" = . ]; then
	shlib_base_name=libgcc_s
      else
	shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
      fi
      shlib_so_name="$shlib_base_name"
      shlib_dir=
      shlib_slibdir_qual=
      if [ -n "$MULTILIB_OSDIRNAMES" ]; then
	gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
	os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
	if [ "$dir" != . ]; then
	  shlib_dir="$dir"/
	fi
	gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
	os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
	if [ -z "$os_multilib_base" ]; then
	  shlib_so_name=libgcc_s
	  if [ "$os_multilib_dir" != "." ]; then
	    shlib_slibdir_qual="/$os_multilib_dir"
	  fi
	else
	  shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
	  shlib_slibdir_qual="/$os_multilib_base"
	fi
      fi
      echo "	$SHLIB_INSTALL" \
	| sed -e "s%@shlib_base_name@%$shlib_base_name%g" \
	      -e "s%@shlib_so_name@%$shlib_so_name%g" \
	      -e "s%@shlib_dir@%$shlib_dir%g" \
	      -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
    elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
      shlib_base_name="libgcc_s";
      echo "	$SHLIB_INSTALL" \
	| sed -e "s%@shlib_base_name@%$shlib_base_name%g" \
	      -e "s%@shlib_so_name@%$shlib_base_name%g" \
	      -e "s%@shlib_dir@%%g" \
	      -e "s%@shlib_slibdir_qual@%%g"
    fi
  fi
done
for f in $EXTRA_MULTILIB_PARTS; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    if [ $dir != . ]; then
      out=${dir}/$f
      ldir='$(DESTDIR)$(libsubdir)'/$dir
    else
      out=$f
      ldir='$(DESTDIR)$(libsubdir)'
    fi
    echo '	$(INSTALL_DATA)' $out $ldir/
  done
done
