autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why is malloc being defined as rpl_malloc ??


From: Dr. David Kirkby
Subject: Re: Why is malloc being defined as rpl_malloc ??
Date: Mon, 05 May 2003 15:49:00 +0100

Jim Meyering wrote:
> 
> "Dr. David Kirkby" <address@hidden> wrote:
> ...
> > I'm now trying to run the script on a 64-bit Dec Alpha (Digital
> > Personal Workstation 600a to be precise) running HP/Compaq's Tru64
> > operating system. The build process fails with:
> >
> > ld:
> > Unresolved:
> > rpl_malloc
> 
> That happens when you use AC_FUNC_MALLOC (and it finds it needs to use
> rpl_malloc), and a later configure-time link-test (or run-test) uses
> malloc without preceding that use with `#undef malloc'.
> 
> Please let us know which macro contains the offending use of malloc.

It could be the macro gsl.m4, which checks for the GNU scientific
library (gsl) and is distributed with gsl. I've put a copy of it
below. That does call malloc directly. Please note, I did *NOT* write
the macro.

For my case, it was easiest to remove the AC_FUNC_MALLOC macro from
configure.ac. 

David Kirkby.


% cat gsl.m4
# Configure path for the GNU Scientific Library
# Christopher R. Gabriel <address@hidden>, April 2000


AC_DEFUN(AM_PATH_GSL,
[
AC_ARG_WITH(gsl-prefix,[  --with-gsl-prefix=PFX   Prefix where GSL is
installed (optional)],
            gsl_prefix="$withval", gsl_prefix="")
AC_ARG_WITH(gsl-exec-prefix,[  --with-gsl-exec-prefix=PFX Exec prefix
where GSL is installed (optional)],
            gsl_exec_prefix="$withval", gsl_exec_prefix="")
AC_ARG_ENABLE(gsltest, [  --disable-gsltest       Do not try to
compile and run a test GSL program],
                    , enable_gsltest=yes)

  if test "x${GSL_CONFIG+set}" != xset ; then
     if test "x$gsl_prefix" != x ; then
         GSL_CONFIG="$gsl_prefix/bin/gsl-config"
     fi
     if test "x$gsl_exec_prefix" != x ; then
        GSL_CONFIG="$gsl_exec_prefix/bin/gsl-config"
     fi
  fi

  AC_PATH_PROG(GSL_CONFIG, gsl-config, no)
  min_gsl_version=ifelse([$1], ,0.2.5,$1)
  AC_MSG_CHECKING(for GSL - version >= $min_gsl_version)
  no_gsl=""
  if test "$GSL_CONFIG" = "no" ; then
    no_gsl=yes
  else
    GSL_CFLAGS=`$GSL_CONFIG --cflags`
    GSL_LIBS=`$GSL_CONFIG --libs`

    gsl_major_version=`$GSL_CONFIG --version | \
           sed 's/^\([[0-9]]*\).*/\1/'`
    if test "x${gsl_major_version}" = "x" ; then
       gsl_major_version=0
    fi

    gsl_minor_version=`$GSL_CONFIG --version | \
           sed 's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\2/'`
    if test "x${gsl_minor_version}" = "x" ; then
       gsl_minor_version=0
    fi

    gsl_micro_version=`$GSL_CONFIG --version | \
           sed
's/^\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\)\.\{0,1\}\([[0-9]]*\).*/\3/'`
    if test "x${gsl_micro_version}" = "x" ; then
       gsl_micro_version=0
    fi

    if test "x$enable_gsltest" = "xyes" ; then
      ac_save_CFLAGS="$CFLAGS"
      ac_save_LIBS="$LIBS"
      CFLAGS="$CFLAGS $GSL_CFLAGS"
      LIBS="$LIBS $GSL_LIBS"

      rm -f conf.gsltest
      AC_TRY_RUN([
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* my_strdup (const char *str);

char*
my_strdup (const char *str)
{
  char *new_str;
  
  if (str)
    {
      new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
      strcpy (new_str, str);
    }
  else
    new_str = NULL;
  
  return new_str;
}

int main (void)
{
  int major = 0, minor = 0, micro = 0;
  int n;
  char *tmp_version;

  system ("touch conf.gsltest");

  /* HP/UX 9 (address@hidden) writes to sscanf strings */
  tmp_version = my_strdup("$min_gsl_version");

  n = sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) ;

  if (n != 2 && n != 3) {
     printf("%s, bad version string\n", "$min_gsl_version");
     exit(1);
   }

   if (($gsl_major_version > major) ||
      (($gsl_major_version == major) && ($gsl_minor_version > minor))
||
      (($gsl_major_version == major) && ($gsl_minor_version == minor)
&& ($gsl_micro_version >= micro)))
    {
      exit(0);
    }
  else
    {
      printf("\n*** 'gsl-config --version' returned %d.%d.%d, but the
minimum version\n", $gsl_major_version, $gsl_minor_version,
$gsl_micro_version);
      printf("*** of GSL required is %d.%d.%d. If gsl-config is
correct, then it is\n", major, minor, micro);
      printf("*** best to upgrade to the required version.\n");
      printf("*** If gsl-config was wrong, set the environment
variable GSL_CONFIG\n");
      printf("*** to point to the correct copy of gsl-config, and
remove the file\n");
      printf("*** config.cache before re-running configure\n");
      exit(1);
    }
}

],, no_gsl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
       CFLAGS="$ac_save_CFLAGS"
       LIBS="$ac_save_LIBS"
     fi
  fi
  if test "x$no_gsl" = x ; then
     AC_MSG_RESULT(yes)
     ifelse([$2], , :, [$2])     
  else
     AC_MSG_RESULT(no)
     if test "$GSL_CONFIG" = "no" ; then
       echo "*** The gsl-config script installed by GSL could not be
found"
       echo "*** If GSL was installed in PREFIX, make sure PREFIX/bin
is in"
       echo "*** your path, or set the GSL_CONFIG environment variable
to the"
       echo "*** full path to gsl-config."
     else
       if test -f conf.gsltest ; then
        :
       else
          echo "*** Could not run GSL test program, checking why..."
          CFLAGS="$CFLAGS $GSL_CFLAGS"
          LIBS="$LIBS $GSL_LIBS"
          AC_TRY_LINK([
#include <stdio.h>
],      [ return 0; ],
        [ echo "*** The test program compiled, but did not run. This
usually means"
          echo "*** that the run-time linker is not finding GSL or
finding the wrong"
          echo "*** version of GSL. If it is not finding GSL, you'll
need to set your"
          echo "*** LD_LIBRARY_PATH environment variable, or edit
/etc/ld.so.conf to point"
          echo "*** to the installed location  Also, make sure you
have run ldconfig if that"
          echo "*** is required on your system"
          echo "***"
          echo "*** If you have an old version installed, it is best
to remove it, although"
          echo "*** you may also be able to get things to work by
modifying LD_LIBRARY_PATH"],
        [ echo "*** The test program failed to compile or link. See
the file config.log for the"
          echo "*** exact error that occured. This usually means GSL
was incorrectly installed"
          echo "*** or that you have moved GSL since it was installed.
In the latter case, you"
          echo "*** may want to edit the gsl-config script:
$GSL_CONFIG" ])
          CFLAGS="$ac_save_CFLAGS"
          LIBS="$ac_save_LIBS"
       fi
     fi
#     GSL_CFLAGS=""
#     GSL_LIBS=""
     ifelse([$3], , :, [$3])
  fi
  AC_SUBST(GSL_CFLAGS)
  AC_SUBST(GSL_LIBS)
  rm -f conf.gsltest
])


-- 
Dr. David Kirkby,
Senior Research Fellow,
Department of Medical Physics,
University College London,
11-20 Capper St, London, WC1E 6JA.
Tel: 020 7679 6408 Fax: 020 7679 6269
Internal telephone: ext 46408
e-mail address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]