This patch makes configure use the cross ld and ar rather than the native tools.

It was build up by Yann E. MORIN <yann.morin.1998@anciens.enib.fr> from some
bits gathered from buildroot, which is LGPL v2.1
License for dmalloc is:
 * Permission to use, copy, modify, and distribute this software for
 * any purpose and without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies, and that the name of Gray Watson not be used in advertising
 * or publicity pertaining to distribution of the document or software
 * without specific, written prior permission.
 *
 * Gray Watson makes no representations about the suitability of the
 * software described herein for any purpose.  It is provided "as is"
 * without express or implied warranty.

I personnaly believe that the resulting code should therefore be
LGPL v2.1, but don't believe me, ask your lawyers!

Index: dmalloc-5.5.2/configure.ac
===================================================================
--- dmalloc-5.5.2.orig/configure.ac
+++ dmalloc-5.5.2/configure.ac
@@ -69,6 +69,15 @@ if test "$ac_cv_prog_cc_stdc" = "no" ; t
 fi
 AC_PROG_INSTALL
 AC_PROG_RANLIB
+AN_MAKEVAR([AR], [AC_PROG_AR])
+AN_PROGRAM([ar], [AC_PROG_AR])
+AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
+AC_PROG_AR
+AN_MAKEVAR([LD], [AC_PROG_LD])
+AN_PROGRAM([ld], [AC_PROG_LD])
+AC_DEFUN([AC_PROG_LD], [AC_CHECK_TOOL(LD, ld, :)])
+AC_PROG_LD
+
 AC_C_CONST
 
 # we need this for various settings
@@ -131,14 +140,14 @@ AC_SUBST(shlibdir)
 AC_MSG_CHECKING([shared library link args])
 AC_COMPILE_IFELSE([ int foo(int val) { return val + 1; } ],[
 	# so now we try to create an archive from the compiled .o file
-	(ar cr conftest.a conftest.o) 2>&5
+	(${ac_cv_prog_AR} cr conftest.a conftest.o) 2>&5
 	# see which shared-library ld commands work
 	#
 	# Darwin/Mac OS X - Terry Teague
 	# username terry_teague at domain users.sourceforge.net
 	ac_cv_shared_lib_link_objs=no
 	if test `uname` = "Darwin"; then
-          if (ld -dylib -o conftest.so.t -lc conftest.a) 2>&5; then
+          if (${ac_cv_prog_LD} -dylib -o conftest.so.t -lc conftest.a) 2>&5; then
             # By convention on some platforms
             # libLLL.so, libLLL.X.so are symlinks to libLLL.X.Y.Z.so
             # where X.Y.Z is version # (major.minor.increment) of the library
@@ -156,12 +165,12 @@ AC_COMPILE_IFELSE([ int foo(int val) { r
             ac_cv_shared_link_args='# Could not configure shlib linking'
             enable_shlib=no
           fi
-       elif (ld -shared --whole-archive -soname conftest.so -o conftest.so.t conftest.a) 2>&5; then
-		ac_cv_shared_link_args='ld -shared --whole-archive -soname $@ -o $@.t'
-	elif (ld -shared -o conftest.so.t -all -soname conftest.so.t -none -lc -all conftest.a) 2>&5; then
-		ac_cv_shared_link_args='ld -shared -o $@.t -all -soname $@ -none -lc -all'
-	elif (ld -G -o conftest.so.t conftest.a) 2>&5; then
-		ac_cv_shared_link_args='ld -G -o $@.t'
+        elif (${ac_cv_prog_LD} -shared --whole-archive -soname conftest.so -o conftest.so.t conftest.a) 2>&5; then
+		ac_cv_shared_link_args='${CC} -Wl,-shared -Wl,--whole-archive -Wl,-soname,$@ -o $@.t -Wl,--no-whole-archive'
+	elif (${ac_cv_prog_LD} -shared -o conftest.so.t -all -soname conftest.so.t -none -lc -all conftest.a) 2>&5; then
+		ac_cv_shared_link_args='${CC} -Wl,-shared -o $@.t -Wl,-all -Wl,-soname,$@ -Wl,-none -lc -Wl,-all'
+	elif (${ac_cv_prog_LD} -G -o conftest.so.t conftest.a) 2>&5; then
+		ac_cv_shared_link_args='${CC} -Wl,-G -o $@.t'
 	else
 		# oh well, toss an error
 		ac_cv_shared_link_args='# Could not configure shlib linking'
Index: dmalloc-5.5.2/Makefile.in
===================================================================
--- dmalloc-5.5.2.orig/Makefile.in
+++ dmalloc-5.5.2/Makefile.in
@@ -263,25 +263,25 @@ $(LIB_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL)
 	$(CC) $(LDFLAGS) -shared -Wl,-soname,libdmalloc.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL)
 
 $(LIBRARY) : $(OBJS) $(NORMAL_OBJS)
-	ar cr $@ $?
+	@AR@ cr $@ $?
 	@RANLIB@ $@
 
 $(LIB_TH) : $(OBJS) $(THREAD_OBJS)
-	ar cr $@ $?
+	@AR@ cr $@ $?
 	@RANLIB@ $@
 
 $(LIB_TH_SL) : $(OBJS_SL) $(THREAD_OBJS_SL)
 	$(CC) $(LDFLAGS) -shared -Wl,-soname,libdmallocth.so.5 -o $@ $(OBJS_SL) $(THREAD_OBJS_SL)
 
 $(LIB_CXX) : $(OBJS) $(NORMAL_OBJS) $(CXX_OBJS)
-	ar cr $@ $?
+	@AR@ cr $@ $?
 	@RANLIB@ $@
 
 $(LIB_CXX_SL) : $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
 	$(CC) $(LDFLAGS) -shared -Wl,-soname,libdmalloccxx.so.5 -o $@ $(OBJS_SL) $(NORMAL_OBJS_SL) $(CXX_OBJS_SL)
 
 $(LIB_TH_CXX) : $(OBJS) $(THREAD_OBJS) $(CXX_OBJS)
-	ar cr $@ $?
+	@AR@ cr $@ $?
 	@RANLIB@ $@
 
 $(LIB_TH_CXX_SL) : $(OBJS_SL) $(THREAD_OBJS_SL) $(CXX_OBJS_SL)
