*** empty log message ***
This commit is contained in:
parent
5122fdb3e0
commit
ec2b508f60
@ -1,4 +1,4 @@
|
||||
/* $Id: tif_aux.c,v 1.25 2010-03-10 18:56:48 bfriesen Exp $ */
|
||||
/* $Id: tif_aux.c,v 1.26 2010-07-01 15:33:28 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991-1997 Sam Leffler
|
||||
@ -33,6 +33,32 @@
|
||||
#include "tif_predict.h"
|
||||
#include <math.h>
|
||||
|
||||
uint32
|
||||
_TIFFMultiply32(TIFF* tif, uint32 first, uint32 second, const char* where)
|
||||
{
|
||||
uint32 bytes = first * second;
|
||||
|
||||
if (second && bytes / second != first) {
|
||||
TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where);
|
||||
bytes = 0;
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
uint64
|
||||
_TIFFMultiply64(TIFF* tif, uint64 first, uint64 second, const char* where)
|
||||
{
|
||||
uint64 bytes = first * second;
|
||||
|
||||
if (second && bytes / second != first) {
|
||||
TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where);
|
||||
bytes = 0;
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
void*
|
||||
_TIFFCheckRealloc(TIFF* tif, void* buffer,
|
||||
tmsize_t nmemb, tmsize_t elem_size, const char* what)
|
||||
@ -46,11 +72,12 @@ _TIFFCheckRealloc(TIFF* tif, void* buffer,
|
||||
if (nmemb && elem_size && bytes / elem_size == nmemb)
|
||||
cp = _TIFFrealloc(buffer, bytes);
|
||||
|
||||
if (cp == NULL)
|
||||
if (cp == NULL) {
|
||||
TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
|
||||
"Failed to allocate memory for %s "
|
||||
"(%ld elements of %ld bytes each)",
|
||||
what,(long) nmemb, (long) elem_size);
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: tif_strip.c,v 1.32 2010-03-10 18:56:49 bfriesen Exp $ */
|
||||
/* $Id: tif_strip.c,v 1.33 2010-07-01 15:33:28 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991-1997 Sam Leffler
|
||||
@ -31,32 +31,6 @@
|
||||
*/
|
||||
#include "tiffiop.h"
|
||||
|
||||
static uint32
|
||||
multiply_32(TIFF* tif, uint32 nmemb, uint32 elem_size, const char* where)
|
||||
{
|
||||
uint32 bytes = nmemb * elem_size;
|
||||
|
||||
if (elem_size && bytes / elem_size != nmemb) {
|
||||
TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where);
|
||||
bytes = 0;
|
||||
}
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
static uint64
|
||||
multiply_64(TIFF* tif, uint64 nmemb, uint64 elem_size, const char* where)
|
||||
{
|
||||
uint64 bytes = nmemb * elem_size;
|
||||
|
||||
if (elem_size && bytes / elem_size != nmemb) {
|
||||
TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where);
|
||||
bytes = 0;
|
||||
}
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute which strip a (row,sample) value is in.
|
||||
*/
|
||||
@ -92,7 +66,7 @@ TIFFNumberOfStrips(TIFF* tif)
|
||||
nstrips = (td->td_rowsperstrip == (uint32) -1 ? 1 :
|
||||
TIFFhowmany_32(td->td_imagelength, td->td_rowsperstrip));
|
||||
if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
|
||||
nstrips = multiply_32(tif, nstrips, (uint32)td->td_samplesperpixel,
|
||||
nstrips = _TIFFMultiply32(tif, nstrips, (uint32)td->td_samplesperpixel,
|
||||
"TIFFNumberOfStrips");
|
||||
return (nstrips);
|
||||
}
|
||||
@ -143,12 +117,12 @@ TIFFVStripSize64(TIFF* tif, uint32 nrows)
|
||||
samplingblock_samples=ycbcrsubsampling[0]*ycbcrsubsampling[1]+2;
|
||||
samplingblocks_hor=TIFFhowmany_32(td->td_imagewidth,ycbcrsubsampling[0]);
|
||||
samplingblocks_ver=TIFFhowmany_32(nrows,ycbcrsubsampling[1]);
|
||||
samplingrow_samples=multiply_64(tif,samplingblocks_hor,samplingblock_samples,module);
|
||||
samplingrow_size=TIFFhowmany8_64(multiply_64(tif,samplingrow_samples,td->td_bitspersample,module));
|
||||
return(multiply_64(tif,samplingrow_size,samplingblocks_ver,module));
|
||||
samplingrow_samples=_TIFFMultiply64(tif,samplingblocks_hor,samplingblock_samples,module);
|
||||
samplingrow_size=TIFFhowmany8_64(_TIFFMultiply64(tif,samplingrow_samples,td->td_bitspersample,module));
|
||||
return(_TIFFMultiply64(tif,samplingrow_size,samplingblocks_ver,module));
|
||||
}
|
||||
else
|
||||
return(multiply_64(tif,nrows,TIFFScanlineSize64(tif),module));
|
||||
return(_TIFFMultiply64(tif,nrows,TIFFScanlineSize64(tif),module));
|
||||
}
|
||||
tmsize_t
|
||||
TIFFVStripSize(TIFF* tif, uint32 nrows)
|
||||
@ -329,19 +303,19 @@ TIFFScanlineSize64(TIFF* tif)
|
||||
}
|
||||
samplingblock_samples = ycbcrsubsampling[0]*ycbcrsubsampling[1]+2;
|
||||
samplingblocks_hor = TIFFhowmany_32(td->td_imagewidth,ycbcrsubsampling[0]);
|
||||
samplingrow_samples = multiply_64(tif,samplingblocks_hor,samplingblock_samples,module);
|
||||
samplingrow_size = TIFFhowmany_64(multiply_64(tif,samplingrow_samples,td->td_bitspersample,module),8);
|
||||
samplingrow_samples = _TIFFMultiply64(tif,samplingblocks_hor,samplingblock_samples,module);
|
||||
samplingrow_size = TIFFhowmany_64(_TIFFMultiply64(tif,samplingrow_samples,td->td_bitspersample,module),8);
|
||||
scanline_size = (samplingrow_size/ycbcrsubsampling[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint64 scanline_samples;
|
||||
scanline_samples=multiply_64(tif,td->td_imagewidth,td->td_samplesperpixel,module);
|
||||
scanline_size=TIFFhowmany_64(multiply_64(tif,scanline_samples,td->td_bitspersample,module),8);
|
||||
scanline_samples=_TIFFMultiply64(tif,td->td_imagewidth,td->td_samplesperpixel,module);
|
||||
scanline_size=TIFFhowmany_64(_TIFFMultiply64(tif,scanline_samples,td->td_bitspersample,module),8);
|
||||
}
|
||||
}
|
||||
else
|
||||
scanline_size=TIFFhowmany_64(multiply_64(tif,td->td_imagewidth,td->td_bitspersample,module),8);
|
||||
scanline_size=TIFFhowmany_64(_TIFFMultiply64(tif,td->td_imagewidth,td->td_bitspersample,module),8);
|
||||
return(scanline_size);
|
||||
}
|
||||
tmsize_t
|
||||
@ -373,12 +347,12 @@ TIFFRasterScanlineSize64(TIFF* tif)
|
||||
TIFFDirectory *td = &tif->tif_dir;
|
||||
uint64 scanline;
|
||||
|
||||
scanline = multiply_64 (tif, td->td_bitspersample, td->td_imagewidth, module);
|
||||
scanline = _TIFFMultiply64(tif, td->td_bitspersample, td->td_imagewidth, module);
|
||||
if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
|
||||
scanline = multiply_64 (tif, scanline, td->td_samplesperpixel, module);
|
||||
scanline = _TIFFMultiply64(tif, scanline, td->td_samplesperpixel, module);
|
||||
return (TIFFhowmany8_64(scanline));
|
||||
} else
|
||||
return (multiply_64 (tif, TIFFhowmany8_64(scanline),
|
||||
return (_TIFFMultiply64(tif, TIFFhowmany8_64(scanline),
|
||||
td->td_samplesperpixel, module));
|
||||
}
|
||||
tmsize_t
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: tif_tile.c,v 1.21 2010-03-10 18:56:49 bfriesen Exp $ */
|
||||
/* $Id: tif_tile.c,v 1.22 2010-07-01 15:33:28 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991-1997 Sam Leffler
|
||||
@ -31,32 +31,6 @@
|
||||
*/
|
||||
#include "tiffiop.h"
|
||||
|
||||
static uint32
|
||||
multiply_32(TIFF* tif, uint32 nmemb, uint32 elem_size, const char* where)
|
||||
{
|
||||
uint32 bytes = nmemb * elem_size;
|
||||
|
||||
if (elem_size && bytes / elem_size != nmemb) {
|
||||
TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where);
|
||||
bytes = 0;
|
||||
}
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
static uint64
|
||||
multiply_64(TIFF* tif, uint64 nmemb, uint64 elem_size, const char* where)
|
||||
{
|
||||
uint64 bytes = nmemb * elem_size;
|
||||
|
||||
if (elem_size && bytes / elem_size != nmemb) {
|
||||
TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where);
|
||||
bytes = 0;
|
||||
}
|
||||
|
||||
return (bytes);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute which tile an (x,y,z,s) value is in.
|
||||
*/
|
||||
@ -153,12 +127,12 @@ TIFFNumberOfTiles(TIFF* tif)
|
||||
if (dz == (uint32) -1)
|
||||
dz = td->td_imagedepth;
|
||||
ntiles = (dx == 0 || dy == 0 || dz == 0) ? 0 :
|
||||
multiply_32(tif, multiply_32(tif, TIFFhowmany_32(td->td_imagewidth, dx),
|
||||
_TIFFMultiply32(tif, _TIFFMultiply32(tif, TIFFhowmany_32(td->td_imagewidth, dx),
|
||||
TIFFhowmany_32(td->td_imagelength, dy),
|
||||
"TIFFNumberOfTiles"),
|
||||
TIFFhowmany_32(td->td_imagedepth, dz), "TIFFNumberOfTiles");
|
||||
if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
|
||||
ntiles = multiply_32(tif, ntiles, td->td_samplesperpixel,
|
||||
ntiles = _TIFFMultiply32(tif, ntiles, td->td_samplesperpixel,
|
||||
"TIFFNumberOfTiles");
|
||||
return (ntiles);
|
||||
}
|
||||
@ -174,10 +148,10 @@ TIFFTileRowSize64(TIFF* tif)
|
||||
|
||||
if (td->td_tilelength == 0 || td->td_tilewidth == 0)
|
||||
return (0);
|
||||
rowsize = multiply_64(tif, td->td_bitspersample, td->td_tilewidth,
|
||||
rowsize = _TIFFMultiply64(tif, td->td_bitspersample, td->td_tilewidth,
|
||||
"TIFFTileRowSize");
|
||||
if (td->td_planarconfig == PLANARCONFIG_CONTIG)
|
||||
rowsize = multiply_64(tif, rowsize, td->td_samplesperpixel,
|
||||
rowsize = _TIFFMultiply64(tif, rowsize, td->td_samplesperpixel,
|
||||
"TIFFTileRowSize");
|
||||
return (TIFFhowmany8_64(rowsize));
|
||||
}
|
||||
@ -240,12 +214,12 @@ TIFFVTileSize64(TIFF* tif, uint32 nrows)
|
||||
samplingblock_samples=ycbcrsubsampling[0]*ycbcrsubsampling[1]+2;
|
||||
samplingblocks_hor=TIFFhowmany_32(td->td_tilewidth,ycbcrsubsampling[0]);
|
||||
samplingblocks_ver=TIFFhowmany_32(nrows,ycbcrsubsampling[1]);
|
||||
samplingrow_samples=multiply_64(tif,samplingblocks_hor,samplingblock_samples,module);
|
||||
samplingrow_size=TIFFhowmany8_64(multiply_64(tif,samplingrow_samples,td->td_bitspersample,module));
|
||||
return(multiply_64(tif,samplingrow_size,samplingblocks_ver,module));
|
||||
samplingrow_samples=_TIFFMultiply64(tif,samplingblocks_hor,samplingblock_samples,module);
|
||||
samplingrow_size=TIFFhowmany8_64(_TIFFMultiply64(tif,samplingrow_samples,td->td_bitspersample,module));
|
||||
return(_TIFFMultiply64(tif,samplingrow_size,samplingblocks_ver,module));
|
||||
}
|
||||
else
|
||||
return(multiply_64(tif,nrows,TIFFTileRowSize64(tif),module));
|
||||
return(_TIFFMultiply64(tif,nrows,TIFFTileRowSize64(tif),module));
|
||||
}
|
||||
tmsize_t
|
||||
TIFFVTileSize(TIFF* tif, uint32 nrows)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: tiffiop.h,v 1.79 2010-06-12 02:55:30 bfriesen Exp $ */
|
||||
/* $Id: tiffiop.h,v 1.80 2010-07-01 15:33:28 dron Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988-1997 Sam Leffler
|
||||
@ -319,8 +319,10 @@ extern TIFFErrorHandler _TIFFerrorHandler;
|
||||
extern TIFFErrorHandlerExt _TIFFwarningHandlerExt;
|
||||
extern TIFFErrorHandlerExt _TIFFerrorHandlerExt;
|
||||
|
||||
extern void* _TIFFCheckMalloc(TIFF* tif, tmsize_t nmemb, tmsize_t elem_size, const char* what);
|
||||
extern void* _TIFFCheckRealloc(TIFF* tif, void* buffer, tmsize_t nmemb, tmsize_t elem_size, const char* what);
|
||||
extern uint32 _TIFFMultiply32(TIFF*, uint32, uint32, const char*);
|
||||
extern uint64 _TIFFMultiply64(TIFF*, uint64, uint64, const char*);
|
||||
extern void* _TIFFCheckMalloc(TIFF*, tmsize_t, tmsize_t, const char*);
|
||||
extern void* _TIFFCheckRealloc(TIFF*, void*, tmsize_t, tmsize_t, const char*);
|
||||
|
||||
extern double _TIFFUInt64ToDouble(uint64);
|
||||
extern float _TIFFUInt64ToFloat(uint64);
|
||||
@ -360,6 +362,9 @@ extern int TIFFInitPixarLog(TIFF*, int);
|
||||
#ifdef LOGLUV_SUPPORT
|
||||
extern int TIFFInitSGILog(TIFF*, int);
|
||||
#endif
|
||||
#ifdef LZMA_SUPPORT
|
||||
extern int TIFFInitLZMA(TIFF*, int);
|
||||
#endif
|
||||
#ifdef VMS
|
||||
extern const TIFFCodec _TIFFBuiltinCODECS[];
|
||||
#else
|
||||
|
740
m4/acinclude.m4
740
m4/acinclude.m4
@ -170,97 +170,130 @@ dnl Available from the GNU Autoconf Macro Archive at:
|
||||
dnl http://www.gnu.org/software/ac-archive/ax_check_gl.html
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
dnl @synopsis AX_CHECK_GL
|
||||
dnl SYNOPSIS
|
||||
dnl
|
||||
dnl AX_CHECK_GL
|
||||
dnl
|
||||
dnl DESCRIPTION
|
||||
dnl
|
||||
dnl Check for an OpenGL implementation. If GL is found, the required
|
||||
dnl compiler and linker flags are included in the output variables
|
||||
dnl "GL_CFLAGS" and "GL_LIBS", respectively. This macro adds the
|
||||
dnl configure option "--with-apple-opengl-framework", which users can
|
||||
dnl use to indicate that Apple's OpenGL framework should be used on Mac
|
||||
dnl OS X. If Apple's OpenGL framework is used, the symbol
|
||||
dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If no GL implementation
|
||||
dnl "GL_CFLAGS" and "GL_LIBS", respectively. If no usable GL implementation
|
||||
dnl is found, "no_gl" is set to "yes".
|
||||
dnl
|
||||
dnl @category InstalledPackages
|
||||
dnl @author Braden McDaniel <braden@endoframe.com>
|
||||
dnl @version 2004-11-15
|
||||
dnl @license AllPermissive
|
||||
dnl If the header "GL/gl.h" is found, "HAVE_GL_GL_H" is defined. If the
|
||||
dnl header "OpenGL/gl.h" is found, HAVE_OPENGL_GL_H is defined. These
|
||||
dnl preprocessor definitions may not be mutually exclusive.
|
||||
dnl
|
||||
dnl LICENSE
|
||||
dnl
|
||||
dnl Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or modify it
|
||||
dnl under the terms of the GNU General Public License as published by the
|
||||
dnl Free Software Foundation; either version 2 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
dnl Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License along
|
||||
dnl with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
dnl As a special exception, the respective Autoconf Macro's copyright owner
|
||||
dnl gives unlimited permission to copy, distribute and modify the configure
|
||||
dnl scripts that are the output of Autoconf when processing the Macro. You
|
||||
dnl need not follow the terms of the GNU General Public License when using
|
||||
dnl or distributing such scripts, even though portions of the text of the
|
||||
dnl Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
dnl all other use of the material that constitutes the Autoconf Macro.
|
||||
dnl
|
||||
dnl This special exception to the GPL applies to versions of the Autoconf
|
||||
dnl Macro released by the Autoconf Archive. When you make and distribute a
|
||||
dnl modified version of the Autoconf Macro, you may extend this special
|
||||
dnl exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AC_DEFUN([AX_CHECK_GL],
|
||||
[AC_REQUIRE([AC_PATH_X])dnl
|
||||
AC_REQUIRE([ACX_PTHREAD])dnl
|
||||
|
||||
#
|
||||
# There isn't a reliable way to know we should use the Apple OpenGL framework
|
||||
# without a configure option. A Mac OS X user may have installed an
|
||||
# alternative GL implementation (e.g., Mesa), which may or may not depend on X.
|
||||
#
|
||||
AC_ARG_WITH([apple-opengl-framework],
|
||||
[AC_HELP_STRING([--with-apple-opengl-framework],
|
||||
[use Apple OpenGL framework (Mac OS X only)])])
|
||||
if test "X$with_apple_opengl_framework" = "Xyes"; then
|
||||
AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1],
|
||||
[Use the Apple OpenGL framework.])
|
||||
GL_LIBS="-framework OpenGL"
|
||||
else
|
||||
AC_LANG_PUSH(C)
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_REQUIRE([AC_PATH_X])dnl
|
||||
AC_REQUIRE([AX_PTHREAD])dnl
|
||||
|
||||
AC_LANG_PUSH([C])
|
||||
AX_LANG_COMPILER_MS
|
||||
if test X$ax_compiler_ms = Xno; then
|
||||
GL_CFLAGS="${PTHREAD_CFLAGS}"
|
||||
GL_LIBS="${PTHREAD_LIBS} -lm"
|
||||
fi
|
||||
AS_IF([test X$ax_compiler_ms = Xno],
|
||||
[GL_CFLAGS="${PTHREAD_CFLAGS}"; GL_LIBS="${PTHREAD_LIBS} -lm"])
|
||||
|
||||
#
|
||||
# Use x_includes and x_libraries if they have been set (presumably by
|
||||
# AC_PATH_X).
|
||||
#
|
||||
if test "X$no_x" != "Xyes"; then
|
||||
if test -n "$x_includes"; then
|
||||
GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}"
|
||||
fi
|
||||
if test -n "$x_libraries"; then
|
||||
GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}"
|
||||
fi
|
||||
fi
|
||||
dnl
|
||||
dnl Use x_includes and x_libraries if they have been set (presumably by
|
||||
dnl AC_PATH_X).
|
||||
dnl
|
||||
AS_IF([test "X$no_x" != "Xyes"],
|
||||
[AS_IF([test -n "$x_includes"],
|
||||
[GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}"])]
|
||||
AS_IF([test -n "$x_libraries"],
|
||||
[GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}"]))
|
||||
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
|
||||
AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h])
|
||||
CPPFLAGS="${ax_save_CPPFLAGS}"
|
||||
|
||||
AC_CHECK_HEADERS([windows.h])
|
||||
|
||||
m4_define([AX_CHECK_GL_PROGRAM],
|
||||
[AC_LANG_PROGRAM([[
|
||||
# if defined(HAVE_WINDOWS_H) && defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# endif
|
||||
# ifdef HAVE_GL_GL_H
|
||||
# include <GL/gl.h>
|
||||
# elif defined(HAVE_OPENGL_GL_H)
|
||||
# include <OpenGL/gl.h>
|
||||
# else
|
||||
# error no gl.h
|
||||
# endif]],
|
||||
[[glBegin(0)]])])
|
||||
|
||||
AC_CACHE_CHECK([for OpenGL library], [ax_cv_check_gl_libgl],
|
||||
[ax_cv_check_gl_libgl="no"
|
||||
case $host_cpu in
|
||||
x86_64) ax_check_gl_libdir=lib64 ;;
|
||||
*) ax_check_gl_libdir=lib ;;
|
||||
esac
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
|
||||
ax_save_LIBS="${LIBS}"
|
||||
LIBS=""
|
||||
ax_check_libs="-lopengl32 -lGL"
|
||||
for ax_lib in ${ax_check_libs}; do
|
||||
if test X$ax_compiler_ms = Xyes; then
|
||||
ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
|
||||
else
|
||||
ax_try_lib="${ax_lib}"
|
||||
fi
|
||||
AS_IF([test X$ax_compiler_ms = Xyes],
|
||||
[ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`],
|
||||
[ax_try_lib="${ax_lib}"])
|
||||
LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
# if HAVE_WINDOWS_H && defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# endif
|
||||
# include <GL/gl.h>]],
|
||||
[[glBegin(0)]])],
|
||||
[ax_cv_check_gl_libgl="${ax_try_lib}"; break])
|
||||
AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
|
||||
[ax_cv_check_gl_libgl="${ax_try_lib}"; break],
|
||||
[ax_check_gl_nvidia_flags="-L/usr/${ax_check_gl_libdir}/nvidia" LIBS="${ax_try_lib} ${ax_check_gl_nvidia_flags} ${GL_LIBS} ${ax_save_LIBS}"
|
||||
AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
|
||||
[ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_nvidia_flags}"; break],
|
||||
[ax_check_gl_dylib_flag='-dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib' LIBS="${ax_try_lib} ${ax_check_gl_dylib_flag} ${GL_LIBS} ${ax_save_LIBS}"
|
||||
AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
|
||||
[ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_dylib_flag}"; break])])])
|
||||
done
|
||||
|
||||
AS_IF([test "X$ax_cv_check_gl_libgl" = Xno -a "X$no_x" = Xyes],
|
||||
[LIBS='-framework OpenGL'
|
||||
AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM],
|
||||
[ax_cv_check_gl_libgl="$LIBS"])])
|
||||
|
||||
LIBS=${ax_save_LIBS}
|
||||
CPPFLAGS=${ax_save_CPPFLAGS}])
|
||||
|
||||
if test "X${ax_cv_check_gl_libgl}" = "Xno"; then
|
||||
no_gl="yes"
|
||||
GL_CFLAGS=""
|
||||
GL_LIBS=""
|
||||
else
|
||||
GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}"
|
||||
fi
|
||||
AC_LANG_POP(C)
|
||||
fi
|
||||
AS_IF([test "X$ax_cv_check_gl_libgl" = Xno],
|
||||
[no_gl=yes; GL_CFLAGS=""; GL_LIBS=""],
|
||||
[GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}"])
|
||||
AC_LANG_POP([C])
|
||||
|
||||
AC_SUBST([GL_CFLAGS])
|
||||
AC_SUBST([GL_LIBS])
|
||||
@ -271,76 +304,151 @@ dnl Available from the GNU Autoconf Macro Archive at:
|
||||
dnl http://www.gnu.org/software/ac-archive/ax_check_glu.html
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
dnl @synopsis AX_CHECK_GLU
|
||||
dnl SYNOPSIS
|
||||
dnl
|
||||
dnl Check for GLU. If GLU is found, the required preprocessor and
|
||||
dnl linker flags are included in the output variables "GLU_CFLAGS" and
|
||||
dnl "GLU_LIBS", respectively. This macro adds the configure option
|
||||
dnl "--with-apple-opengl-framework", which users can use to indicate
|
||||
dnl that Apple's OpenGL framework should be used on Mac OS X. If
|
||||
dnl Apple's OpenGL framework is used, the symbol
|
||||
dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If no GLU implementation
|
||||
dnl is found, "no_glu" is set to "yes".
|
||||
dnl AX_CHECK_GLU
|
||||
dnl
|
||||
dnl @category InstalledPackages
|
||||
dnl @author Braden McDaniel <braden@endoframe.com>
|
||||
dnl @version 2004-11-15
|
||||
dnl @license AllPermissive
|
||||
dnl DESCRIPTION
|
||||
dnl
|
||||
dnl Check for GLU. If GLU is found, the required preprocessor and linker
|
||||
dnl flags are included in the output variables "GLU_CFLAGS" and "GLU_LIBS",
|
||||
dnl respectively. If no GLU implementation is found, "no_glu" is set to
|
||||
dnl "yes".
|
||||
dnl
|
||||
dnl If the header "GL/glu.h" is found, "HAVE_GL_GLU_H" is defined. If the
|
||||
dnl header "OpenGL/glu.h" is found, HAVE_OPENGL_GLU_H is defined. These
|
||||
dnl preprocessor definitions may not be mutually exclusive.
|
||||
dnl
|
||||
dnl Some implementations (in particular, some versions of Mac OS X) are
|
||||
dnl known to treat the GLU tesselator callback function type as "GLvoid
|
||||
dnl (*)(...)" rather than the standard "GLvoid (*)()". If the former
|
||||
dnl condition is detected, this macro defines "HAVE_VARARGS_GLU_TESSCB".
|
||||
dnl
|
||||
dnl LICENSE
|
||||
dnl
|
||||
dnl Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or modify it
|
||||
dnl under the terms of the GNU General Public License as published by the
|
||||
dnl Free Software Foundation; either version 2 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
dnl Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License along
|
||||
dnl with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
dnl As a special exception, the respective Autoconf Macro's copyright owner
|
||||
dnl gives unlimited permission to copy, distribute and modify the configure
|
||||
dnl scripts that are the output of Autoconf when processing the Macro. You
|
||||
dnl need not follow the terms of the GNU General Public License when using
|
||||
dnl or distributing such scripts, even though portions of the text of the
|
||||
dnl Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
dnl all other use of the material that constitutes the Autoconf Macro.
|
||||
dnl
|
||||
dnl This special exception to the GPL applies to versions of the Autoconf
|
||||
dnl Macro released by the Autoconf Archive. When you make and distribute a
|
||||
dnl modified version of the Autoconf Macro, you may extend this special
|
||||
dnl exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AC_DEFUN([AX_CHECK_GLU],
|
||||
[AC_REQUIRE([AX_CHECK_GL])dnl
|
||||
AC_REQUIRE([AC_PROG_CXX])dnl
|
||||
GLU_CFLAGS="${GL_CFLAGS}"
|
||||
if test "X${with_apple_opengl_framework}" != "Xyes"; then
|
||||
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
|
||||
AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h])
|
||||
CPPFLAGS="${ax_save_CPPFLAGS}"
|
||||
|
||||
m4_define([AX_CHECK_GLU_PROGRAM],
|
||||
[AC_LANG_PROGRAM([[
|
||||
# if defined(HAVE_WINDOWS_H) && defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# endif
|
||||
# ifdef HAVE_GL_GLU_H
|
||||
# include <GL/glu.h>
|
||||
# elif defined(HAVE_OPENGL_GLU_H)
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# error no glu.h
|
||||
# endif]],
|
||||
[[gluBeginCurve(0)]])])
|
||||
|
||||
AC_CACHE_CHECK([for OpenGL Utility library], [ax_cv_check_glu_libglu],
|
||||
[ax_cv_check_glu_libglu="no"
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}"
|
||||
ax_save_LIBS="${LIBS}"
|
||||
LIBS=""
|
||||
|
||||
dnl
|
||||
dnl First, check for the possibility that everything we need is already in
|
||||
dnl GL_LIBS.
|
||||
dnl
|
||||
LIBS="${GL_LIBS} ${ax_save_LIBS}"
|
||||
dnl
|
||||
dnl libGLU typically links with libstdc++ on POSIX platforms.
|
||||
dnl However, setting the language to C++ means that test program
|
||||
dnl source is named "conftest.cc"; and Microsoft cl doesn't know what
|
||||
dnl to do with such a file.
|
||||
dnl
|
||||
AC_LANG_PUSH([C++])
|
||||
AS_IF([test X$ax_compiler_ms = Xyes],
|
||||
[AC_LANG_PUSH([C])])
|
||||
AC_LINK_IFELSE(
|
||||
[AX_CHECK_GLU_PROGRAM],
|
||||
[ax_cv_check_glu_libglu=yes],
|
||||
[LIBS=""
|
||||
ax_check_libs="-lglu32 -lGLU"
|
||||
for ax_lib in ${ax_check_libs}; do
|
||||
if test X$ax_compiler_ms = Xyes; then
|
||||
ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
|
||||
else
|
||||
ax_try_lib="${ax_lib}"
|
||||
fi
|
||||
AS_IF([test X$ax_compiler_ms = Xyes],
|
||||
[ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`],
|
||||
[ax_try_lib="${ax_lib}"])
|
||||
LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}"
|
||||
#
|
||||
# libGLU typically links with libstdc++ on POSIX platforms. However,
|
||||
# setting the language to C++ means that test program source is named
|
||||
# "conftest.cc"; and Microsoft cl doesn't know what to do with such a
|
||||
# file.
|
||||
#
|
||||
AC_LANG_PUSH([C++])
|
||||
if test X$ax_compiler_ms = Xyes; then
|
||||
AC_LANG_PUSH([C])
|
||||
fi
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
# if HAVE_WINDOWS_H && defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# endif
|
||||
# include <GL/glu.h>]],
|
||||
[[gluBeginCurve(0)]])],
|
||||
AC_LINK_IFELSE([AX_CHECK_GLU_PROGRAM],
|
||||
[ax_cv_check_glu_libglu="${ax_try_lib}"; break])
|
||||
if test X$ax_compiler_ms = Xyes; then
|
||||
AC_LANG_POP([C])
|
||||
fi
|
||||
AC_LANG_POP([C++])
|
||||
done
|
||||
])
|
||||
AS_IF([test X$ax_compiler_ms = Xyes],
|
||||
[AC_LANG_POP([C])])
|
||||
AC_LANG_POP([C++])
|
||||
|
||||
LIBS=${ax_save_LIBS}
|
||||
CPPFLAGS=${ax_save_CPPFLAGS}])
|
||||
if test "X${ax_cv_check_glu_libglu}" = "Xno"; then
|
||||
no_glu="yes"
|
||||
GLU_CFLAGS=""
|
||||
GLU_LIBS=""
|
||||
else
|
||||
GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}"
|
||||
fi
|
||||
fi
|
||||
AS_IF([test "X$ax_cv_check_glu_libglu" = Xno],
|
||||
[no_glu=yes; GLU_CFLAGS=""; GLU_LIBS=""],
|
||||
[AS_IF([test "X$ax_cv_check_glu_libglu" = Xyes],
|
||||
[GLU_LIBS="$GL_LIBS"],
|
||||
[GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}"])])
|
||||
AC_SUBST([GLU_CFLAGS])
|
||||
AC_SUBST([GLU_LIBS])
|
||||
|
||||
dnl
|
||||
dnl Some versions of Mac OS X include a broken interpretation of the GLU
|
||||
dnl tesselation callback function signature.
|
||||
dnl
|
||||
AS_IF([test "X$ax_cv_check_glu_libglu" != Xno],
|
||||
[AC_CACHE_CHECK([for varargs GLU tesselator callback function type],
|
||||
[ax_cv_varargs_glu_tesscb],
|
||||
[ax_cv_varargs_glu_tesscb=no
|
||||
ax_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$GL_CFLAGS $CFLAGS"
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
# ifdef HAVE_GL_GLU_H
|
||||
# include <GL/glu.h>
|
||||
# else
|
||||
# include <OpenGL/glu.h>
|
||||
# endif]],
|
||||
[[GLvoid (*func)(...); gluTessCallback(0, 0, func)]])],
|
||||
[ax_cv_varargs_glu_tesscb=yes])
|
||||
CFLAGS="$ax_save_CFLAGS"])
|
||||
AS_IF([test X$ax_cv_varargs_glu_tesscb = Xyes],
|
||||
[AC_DEFINE([HAVE_VARARGS_GLU_TESSCB], [1],
|
||||
[Use nonstandard varargs form for the GLU tesselator callback])])])
|
||||
])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
@ -348,80 +456,112 @@ dnl Available from the GNU Autoconf Macro Archive at:
|
||||
dnl http://www.gnu.org/software/ac-archive/ax_check_glut.html
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
dnl @synopsis AX_CHECK_GLUT
|
||||
dnl
|
||||
dnl Check for GLUT. If GLUT is found, the required compiler and linker
|
||||
dnl flags are included in the output variables "GLUT_CFLAGS" and
|
||||
dnl "GLUT_LIBS", respectively. This macro adds the configure option
|
||||
dnl "--with-apple-opengl-framework", which users can use to indicate
|
||||
dnl that Apple's OpenGL framework should be used on Mac OS X. If
|
||||
dnl Apple's OpenGL framework is used, the symbol
|
||||
dnl "HAVE_APPLE_OPENGL_FRAMEWORK" is defined. If GLUT is not found,
|
||||
dnl "no_glut" is set to "yes".
|
||||
dnl SYNOPSIS
|
||||
dnl
|
||||
dnl @category InstalledPackages
|
||||
dnl @author Braden McDaniel <braden@endoframe.com>
|
||||
dnl @version 2004-11-15
|
||||
dnl @license AllPermissive
|
||||
dnl AX_CHECK_GLUT
|
||||
dnl
|
||||
dnl DESCRIPTION
|
||||
dnl
|
||||
dnl Check for GLUT. If GLUT is found, the required compiler and linker flags
|
||||
dnl are included in the output variables "GLUT_CFLAGS" and "GLUT_LIBS",
|
||||
dnl respectively. If GLUT is not found, "no_glut" is set to "yes".
|
||||
dnl
|
||||
dnl If the header "GL/glut.h" is found, "HAVE_GL_GLUT_H" is defined. If the
|
||||
dnl header "GLUT/glut.h" is found, HAVE_GLUT_GLUT_H is defined. These
|
||||
dnl preprocessor definitions may not be mutually exclusive.
|
||||
dnl
|
||||
dnl LICENSE
|
||||
dnl
|
||||
dnl Copyright (c) 2009 Braden McDaniel <braden@endoframe.com>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or modify it
|
||||
dnl under the terms of the GNU General Public License as published by the
|
||||
dnl Free Software Foundation; either version 2 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
dnl Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License along
|
||||
dnl with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
dnl As a special exception, the respective Autoconf Macro's copyright owner
|
||||
dnl gives unlimited permission to copy, distribute and modify the configure
|
||||
dnl scripts that are the output of Autoconf when processing the Macro. You
|
||||
dnl need not follow the terms of the GNU General Public License when using
|
||||
dnl or distributing such scripts, even though portions of the text of the
|
||||
dnl Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
dnl all other use of the material that constitutes the Autoconf Macro.
|
||||
dnl
|
||||
dnl This special exception to the GPL applies to versions of the Autoconf
|
||||
dnl Macro released by the Autoconf Archive. When you make and distribute a
|
||||
dnl modified version of the Autoconf Macro, you may extend this special
|
||||
dnl exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AC_DEFUN([AX_CHECK_GLUT],
|
||||
[AC_REQUIRE([AX_CHECK_GLU])dnl
|
||||
AC_REQUIRE([AC_PATH_XTRA])dnl
|
||||
|
||||
if test "X$with_apple_opengl_framework" = "Xyes"; then
|
||||
GLUT_CFLAGS="${GLU_CFLAGS}"
|
||||
GLUT_LIBS="-framework GLUT -lobjc ${GL_LIBS}"
|
||||
else
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GLU_CFLAGS} ${CPPFLAGS}"
|
||||
AC_CHECK_HEADERS([GL/glut.h GLUT/glut.h])
|
||||
CPPFLAGS="${ax_save_CPPFLAGS}"
|
||||
|
||||
GLUT_CFLAGS=${GLU_CFLAGS}
|
||||
GLUT_LIBS=${GLU_LIBS}
|
||||
|
||||
#
|
||||
# If X is present, assume GLUT depends on it.
|
||||
#
|
||||
if test "X${no_x}" != "Xyes"; then
|
||||
GLUT_LIBS="${X_PRE_LIBS} -lXmu -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"
|
||||
fi
|
||||
|
||||
AC_LANG_PUSH(C)
|
||||
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}"
|
||||
|
||||
AC_CACHE_CHECK([for GLUT library], [ax_cv_check_glut_libglut],
|
||||
[ax_cv_check_glut_libglut="no"
|
||||
ax_save_LIBS="${LIBS}"
|
||||
LIBS=""
|
||||
ax_check_libs="-lglut32 -lglut"
|
||||
for ax_lib in ${ax_check_libs}; do
|
||||
if test X$ax_compiler_ms = Xyes; then
|
||||
ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
|
||||
else
|
||||
ax_try_lib="${ax_lib}"
|
||||
fi
|
||||
LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}"
|
||||
AC_LINK_IFELSE(
|
||||
m4_define([AX_CHECK_GLUT_PROGRAM],
|
||||
[AC_LANG_PROGRAM([[
|
||||
# if HAVE_WINDOWS_H && defined(_WIN32)
|
||||
# include <windows.h>
|
||||
# endif
|
||||
# include <GL/glut.h>]],
|
||||
[[glutMainLoop()]])],
|
||||
# ifdef HAVE_GL_GLUT_H
|
||||
# include <GL/glut.h>
|
||||
# elif defined(HAVE_GLUT_GLUT_H)
|
||||
# include <GLUT/glut.h>
|
||||
# else
|
||||
# error no glut.h
|
||||
# endif]],
|
||||
[[glutMainLoop()]])])
|
||||
|
||||
dnl
|
||||
dnl If X is present, assume GLUT depends on it.
|
||||
dnl
|
||||
AS_IF([test X$no_x != Xyes],
|
||||
[GLUT_LIBS="${X_PRE_LIBS} -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"])
|
||||
|
||||
AC_CACHE_CHECK([for GLUT library], [ax_cv_check_glut_libglut],
|
||||
[ax_cv_check_glut_libglut="no"
|
||||
AC_LANG_PUSH(C)
|
||||
ax_save_CPPFLAGS="${CPPFLAGS}"
|
||||
CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}"
|
||||
ax_save_LIBS="${LIBS}"
|
||||
LIBS=""
|
||||
ax_check_libs="-lglut32 -lglut"
|
||||
for ax_lib in ${ax_check_libs}; do
|
||||
AS_IF([test X$ax_compiler_ms = Xyes],
|
||||
[ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`],
|
||||
[ax_try_lib="${ax_lib}"])
|
||||
LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}"
|
||||
AC_LINK_IFELSE([AX_CHECK_GLUT_PROGRAM],
|
||||
[ax_cv_check_glut_libglut="${ax_try_lib}"; break])
|
||||
|
||||
done
|
||||
LIBS=${ax_save_LIBS}
|
||||
])
|
||||
CPPFLAGS="${ax_save_CPPFLAGS}"
|
||||
AC_LANG_POP(C)
|
||||
|
||||
if test "X${ax_cv_check_glut_libglut}" = "Xno"; then
|
||||
no_glut="yes"
|
||||
GLUT_CFLAGS=""
|
||||
GLUT_LIBS=""
|
||||
else
|
||||
GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}"
|
||||
fi
|
||||
fi
|
||||
AS_IF([test "X$ax_cv_check_glut_libglut" = Xno -a "X$no_x" = Xyes],
|
||||
[LIBS='-framework GLUT'
|
||||
AC_LINK_IFELSE([AX_CHECK_GLUT_PROGRAM],
|
||||
[ax_cv_check_glut_libglut="$LIBS"])])
|
||||
|
||||
CPPFLAGS="${ax_save_CPPFLAGS}"
|
||||
LIBS="${ax_save_LIBS}"
|
||||
AC_LANG_POP(C)])
|
||||
|
||||
AS_IF([test "X$ax_cv_check_glut_libglut" = Xno],
|
||||
[no_glut="yes"; GLUT_CFLAGS=""; GLUT_LIBS=""],
|
||||
[GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}"])
|
||||
|
||||
AC_SUBST([GLUT_CFLAGS])
|
||||
AC_SUBST([GLUT_LIBS])
|
||||
@ -429,77 +569,105 @@ AC_SUBST([GLUT_LIBS])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Available from the GNU Autoconf Macro Archive at:
|
||||
dnl http://www.gnu.org/software/ac-archive/acx_pthread.html
|
||||
dnl http://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||
dnl SYNOPSIS
|
||||
dnl
|
||||
dnl This macro figures out how to build C programs using POSIX threads.
|
||||
dnl It sets the PTHREAD_LIBS output variable to the threads library and
|
||||
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
|
||||
dnl C compiler flags that are needed. (The user can also force certain
|
||||
dnl compiler flags/libs to be tested by setting these environment
|
||||
dnl variables.)
|
||||
dnl AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||
dnl
|
||||
dnl DESCRIPTION
|
||||
dnl
|
||||
dnl This macro figures out how to build C programs using POSIX threads. It
|
||||
dnl sets the PTHREAD_LIBS output variable to the threads library and linker
|
||||
dnl flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
||||
dnl flags that are needed. (The user can also force certain compiler
|
||||
dnl flags/libs to be tested by setting these environment variables.)
|
||||
dnl
|
||||
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||
dnl multi-threaded programs (defaults to the value of CC otherwise).
|
||||
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
|
||||
dnl multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||
dnl is necessary on AIX to use the special cc_r compiler alias.)
|
||||
dnl
|
||||
dnl NOTE: You are assumed to not only compile your program with these
|
||||
dnl flags, but also link it with them as well. e.g. you should link
|
||||
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
|
||||
dnl $LIBS
|
||||
dnl NOTE: You are assumed to not only compile your program with these flags,
|
||||
dnl but also link it with them as well. e.g. you should link with
|
||||
dnl $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
dnl
|
||||
dnl If you are only building threads programs, you may wish to use
|
||||
dnl these variables in your default LIBS, CFLAGS, and CC:
|
||||
dnl If you are only building threads programs, you may wish to use these
|
||||
dnl variables in your default LIBS, CFLAGS, and CC:
|
||||
dnl
|
||||
dnl LIBS="$PTHREAD_LIBS $LIBS"
|
||||
dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
dnl CC="$PTHREAD_CC"
|
||||
dnl
|
||||
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
|
||||
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
|
||||
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||
dnl has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
|
||||
dnl (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
dnl
|
||||
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
|
||||
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
|
||||
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
|
||||
dnl default action will define HAVE_PTHREAD.
|
||||
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
||||
dnl is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||
dnl is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||
dnl will define HAVE_PTHREAD.
|
||||
dnl
|
||||
dnl Please let the authors know if this macro fails on any platform, or
|
||||
dnl if you have any other suggestions or comments. This macro was based
|
||||
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
|
||||
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
|
||||
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
|
||||
dnl We are also grateful for the helpful feedback of numerous users.
|
||||
dnl Please let the authors know if this macro fails on any platform, or if
|
||||
dnl you have any other suggestions or comments. This macro was based on work
|
||||
dnl by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
||||
dnl from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
||||
dnl Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
||||
dnl grateful for the helpful feedback of numerous users.
|
||||
dnl
|
||||
dnl @category InstalledPackages
|
||||
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
dnl @version 2005-01-14
|
||||
dnl @license GPLWithACException
|
||||
dnl LICENSE
|
||||
dnl
|
||||
dnl Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
dnl
|
||||
dnl This program is free software: you can redistribute it and/or modify it
|
||||
dnl under the terms of the GNU General Public License as published by the
|
||||
dnl Free Software Foundation, either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
dnl Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License along
|
||||
dnl with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
dnl As a special exception, the respective Autoconf Macro's copyright owner
|
||||
dnl gives unlimited permission to copy, distribute and modify the configure
|
||||
dnl scripts that are the output of Autoconf when processing the Macro. You
|
||||
dnl need not follow the terms of the GNU General Public License when using
|
||||
dnl or distributing such scripts, even though portions of the text of the
|
||||
dnl Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
dnl all other use of the material that constitutes the Autoconf Macro.
|
||||
dnl
|
||||
dnl This special exception to the GPL applies to versions of the Autoconf
|
||||
dnl Macro released by the Autoconf Archive. When you make and distribute a
|
||||
dnl modified version of the Autoconf Macro, you may extend this special
|
||||
dnl exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AC_DEFUN([ACX_PTHREAD], [
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_LANG_SAVE
|
||||
AC_LANG_C
|
||||
acx_pthread_ok=no
|
||||
ax_pthread_ok=no
|
||||
|
||||
# We used to check for pthread.h first, but this fails if pthread.h
|
||||
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||
# It gets checked for in the link test anyway.
|
||||
dnl We used to check for pthread.h first, but this fails if pthread.h
|
||||
dnl requires special compiler flags (e.g. on True64 or Sequent).
|
||||
dnl It gets checked for in the link test anyway.
|
||||
|
||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
# etcetera environment variables, and if threads linking works using
|
||||
# them:
|
||||
dnl First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
dnl etcetera environment variables, and if threads linking works using
|
||||
dnl them:
|
||||
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
||||
AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
|
||||
AC_MSG_RESULT($acx_pthread_ok)
|
||||
if test x"$acx_pthread_ok" = xno; then
|
||||
AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
|
||||
AC_MSG_RESULT($ax_pthread_ok)
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
fi
|
||||
@ -507,54 +675,59 @@ if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||
CFLAGS="$save_CFLAGS"
|
||||
fi
|
||||
|
||||
# We must check for the threads library under a number of different
|
||||
# names; the ordering is very important because some systems
|
||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
# libraries is broken (non-POSIX).
|
||||
dnl We must check for the threads library under a number of different
|
||||
dnl names; the ordering is very important because some systems
|
||||
dnl (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
dnl libraries is broken (non-POSIX).
|
||||
|
||||
# Create a list of thread flags to try. Items starting with a "-" are
|
||||
# C compiler flags, and other items are library names, except for "none"
|
||||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
dnl Create a list of thread flags to try. Items starting with a "-" are
|
||||
dnl C compiler flags, and other items are library names, except for "none"
|
||||
dnl which indicates that we try without any flags at all, and "pthread-config"
|
||||
dnl which is a program returning the flags for the Pth emulation library.
|
||||
|
||||
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
# The ordering *is* (sometimes) important. Some notes on the
|
||||
# individual items follow:
|
||||
dnl The ordering *is* (sometimes) important. Some notes on the
|
||||
dnl individual items follow:
|
||||
|
||||
# pthreads: AIX (must check this before -lpthread)
|
||||
# none: in case threads are in libc; should be tried before -Kthread and
|
||||
# other compiler flags to prevent continual compiler warnings
|
||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||
# -pthreads: Solaris/gcc
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||
# also defines -D_REENTRANT)
|
||||
# pthread: Linux, etcetera
|
||||
# --thread-safe: KAI C++
|
||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||
dnl pthreads: AIX (must check this before -lpthread)
|
||||
dnl none: in case threads are in libc; should be tried before -Kthread and
|
||||
dnl other compiler flags to prevent continual compiler warnings
|
||||
dnl -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
dnl -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
dnl lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
dnl -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||
dnl -pthreads: Solaris/gcc
|
||||
dnl -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
dnl -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
dnl doesn't hurt to check since this sometimes defines pthreads too;
|
||||
dnl also defines -D_REENTRANT)
|
||||
dnl ... -mt is also the pthreads flag for HP/aCC
|
||||
dnl pthread: Linux, etcetera
|
||||
dnl --thread-safe: KAI C++
|
||||
dnl pthread-config: use pthread-config program (for GNU Pth library)
|
||||
|
||||
case "${host_cpu}-${host_os}" in
|
||||
*solaris*)
|
||||
|
||||
# On Solaris (at least, for some versions), libc contains stubbed
|
||||
# (non-functional) versions of the pthreads routines, so link-based
|
||||
# tests will erroneously succeed. (We need to link with -pthread or
|
||||
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||
# a function called by this macro, so we could check for that, but
|
||||
# who knows whether they'll stub that too in a future libc.) So,
|
||||
# we'll just look for -pthreads and -lpthread first:
|
||||
dnl On Solaris (at least, for some versions), libc contains stubbed
|
||||
dnl (non-functional) versions of the pthreads routines, so link-based
|
||||
dnl tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||
dnl -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||
dnl a function called by this macro, so we could check for that, but
|
||||
dnl who knows whether they'll stub that too in a future libc.) So,
|
||||
dnl we'll just look for -pthreads and -lpthread first:
|
||||
|
||||
acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
|
||||
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
*-darwin*)
|
||||
ax_pthread_flags="-pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test x"$acx_pthread_ok" = xno; then
|
||||
for flag in $acx_pthread_flags; do
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
for flag in $ax_pthread_flags; do
|
||||
|
||||
case $flag in
|
||||
none)
|
||||
@ -567,8 +740,8 @@ for flag in $acx_pthread_flags; do
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
|
||||
if test x"$acx_pthread_config" = xno; then continue; fi
|
||||
AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
|
||||
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
@ -584,26 +757,31 @@ for flag in $acx_pthread_flags; do
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
# need a special flag -Kthread to make this header compile.)
|
||||
# We check for pthread_join because it is in -lpthread on IRIX
|
||||
# while pthread_create is in libc. We check for pthread_attr_init
|
||||
# due to DEC craziness with -lpthreads. We check for
|
||||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
AC_TRY_LINK([#include <pthread.h>],
|
||||
[pthread_t th; pthread_join(th, 0);
|
||||
pthread_attr_init(0); pthread_cleanup_push(0, 0);
|
||||
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
|
||||
[acx_pthread_ok=yes])
|
||||
dnl Check for various functions. We must include pthread.h,
|
||||
dnl since some functions may be macros. (On the Sequent, we
|
||||
dnl need a special flag -Kthread to make this header compile.)
|
||||
dnl We check for pthread_join because it is in -lpthread on IRIX
|
||||
dnl while pthread_create is in libc. We check for pthread_attr_init
|
||||
dnl due to DEC craziness with -lpthreads. We check for
|
||||
dnl pthread_cleanup_push because it is one of the few pthread
|
||||
dnl functions on Solaris that doesn't have a non-functional libc stub.
|
||||
dnl We try pthread_create on general principles.
|
||||
AC_TRY_LINK([#include <pthread.h>
|
||||
static void routine(void* a) {a=0;}
|
||||
static void* start_routine(void* a) {return a;}],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th,0,start_routine,0);
|
||||
pthread_join(th, 0);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_cleanup_push(routine, 0);
|
||||
pthread_cleanup_pop(0); ],
|
||||
[ax_pthread_ok=yes])
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_MSG_RESULT($acx_pthread_ok)
|
||||
if test "x$acx_pthread_ok" = xyes; then
|
||||
AC_MSG_RESULT($ax_pthread_ok)
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
break;
|
||||
fi
|
||||
|
||||
@ -612,18 +790,18 @@ for flag in $acx_pthread_flags; do
|
||||
done
|
||||
fi
|
||||
|
||||
# Various other checks:
|
||||
if test "x$acx_pthread_ok" = xyes; then
|
||||
dnl Various other checks:
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
dnl Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
AC_MSG_CHECKING([for joinable pthread attribute])
|
||||
attr_name=unknown
|
||||
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
AC_TRY_LINK([#include <pthread.h>], [int attr=$attr;],
|
||||
AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
|
||||
[attr_name=$attr; break])
|
||||
done
|
||||
AC_MSG_RESULT($attr_name)
|
||||
@ -647,8 +825,12 @@ if test "x$acx_pthread_ok" = xyes; then
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
# More AIX lossage: must compile with cc_r
|
||||
AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
|
||||
dnl More AIX lossage: must compile with xlc_r or cc_r
|
||||
if test x"$GCC" != xyes; then
|
||||
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
|
||||
else
|
||||
PTHREAD_CC=$CC
|
||||
fi
|
||||
else
|
||||
PTHREAD_CC="$CC"
|
||||
fi
|
||||
@ -657,13 +839,13 @@ AC_SUBST(PTHREAD_LIBS)
|
||||
AC_SUBST(PTHREAD_CFLAGS)
|
||||
AC_SUBST(PTHREAD_CC)
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test x"$acx_pthread_ok" = xyes; then
|
||||
dnl Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test x"$ax_pthread_ok" = xyes; then
|
||||
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
|
||||
:
|
||||
else
|
||||
acx_pthread_ok=no
|
||||
ax_pthread_ok=no
|
||||
$2
|
||||
fi
|
||||
AC_LANG_RESTORE
|
||||
])dnl ACX_PTHREAD
|
||||
])dnl AX_PTHREAD
|
||||
|
Loading…
Reference in New Issue
Block a user