memalign autodetection
authorNick Kurshev <nickols_k@mail.ru>
Thu, 13 Sep 2001 07:16:59 +0000 (07:16 +0000)
committerNick Kurshev <nickols_k@mail.ru>
Thu, 13 Sep 2001 07:16:59 +0000 (07:16 +0000)
Originally committed as revision 115 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure
libavcodec/utils.c

index 468774d..29628b0 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,26 @@
 #!/bin/sh
 
+TMPC="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
+TMPO="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
+TMPS="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
+
+if [ ! -z "$TMPDIR" ]; then
+       TMPC="${TMPDIR}/${TMPC}"
+       TMPCPP="${TMPDIR}/${TMPCPP}"
+       TMPO="${TMPDIR}/${TMPO}"
+       TMPS="${TMPDIR}/${TMPS}"
+elif [ ! -z "$TEMPDIR" ]; then
+       TMPC="${TEMPDIR}/${TMPC}"
+       TMPCPP="${TEMPDIR}/${TMPCPP}"
+       TMPO="${TEMPDIR}/${TMPO}"
+       TMPS="${TEMPDIR}/${TMPS}"
+else
+       TMPC="/tmp/${TMPC}"
+       TMPCPP="/tmp/${TMPCPP}"
+       TMPO="/tmp/${TMPO}"
+       TMPS="/tmp/${TMPS}"
+fi
+
 # default parameters
 prefix="/usr/local"
 cc="gcc"
@@ -75,6 +96,31 @@ if [ "$win32" = "yes" ] ; then
     grab="no"
 fi
 
+# ---
+# check availability of some header files
+
+cat > $TMPC << EOF
+#include <malloc.h>
+int main( void ) { return 0; }
+EOF
+
+_memalign=no
+_malloc_h=no
+if $cc -o $TMPO $TMPC 2> /dev/null ; then
+_malloc_h=yes
+_memalign=yes
+# check for memalign - atmos
+cat > $TMPC << EOF
+#include <malloc.h>
+int main ( void ) {
+char *string = NULL;
+string = memalign(64, sizeof(char));
+return 0;
+}
+EOF
+$cc -o $TMPO $TMPC 2> /dev/null || _memalign=no
+fi
+
 echo "Install prefix   $prefix"
 echo "C compiler       $cc"
 echo "CPU              $cpu"
@@ -136,3 +182,17 @@ if [ "$win32" = "yes" ] ; then
   echo "#define CONFIG_WIN32 1" >> config.h
   echo "CONFIG_WIN32=yes" >> config.mak
 fi
+
+if [ "$_malloc_h" = "yes" ]; then
+  echo "#define HAVE_MALLOC_H 1" >> config.h
+else
+  echo "#undef  HAVE_MALLOC_H" >> config.h
+fi
+
+if [ "$_memalign" = "yes" ]; then
+  echo "#define HAVE_MEMALIGN 1" >> config.h
+else
+  echo "#undef  HAVE_MEMALIGN" >> config.h
+fi
+
+rm -f $TMPO $TMPC $TMPS
index f1253ab..78e1246 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-#include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
-#include <limits.h> /* __GLIBC__ and __GLIBC_MINOR__ are defined here */
-#if __GLIBC__ >=2 && __GLIBC_MINOR__ >= 1 /* Fixme about glibc-2.0 */
-#define HAVE_MEMALIGN 1
-#include <malloc.h>
-#endif
 #include "common.h"
 #include "dsputil.h"
 #include "avcodec.h"
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#else
+#include <stdlib.h>
+#endif
 
 /* memory alloc */
 void *av_mallocz(int size)
 {
     void *ptr;
 #if defined ( ARCH_X86 ) && defined ( HAVE_MEMALIGN )
-/*
-   From glibc-2.1.x manuals:
-   -------------------------
-   The address of a block returned by `malloc' or `realloc' in the GNU
-system is always a multiple of eight (or sixteen on 64-bit systems).
-If you need a block whose address is a multiple of a higher power of
-two than that, use `memalign' or `valloc'.  These functions are
-declared in `stdlib.h'.
-
-   With the GNU library, you can use `free' to free the blocks that
-`memalign' and `valloc' return.  That does not work in BSD,
-however--BSD does not provide any way to free such blocks.
-*/
     ptr = memalign(64,size);
     /* Why 64? 
        Indeed, we should align it: