1# -*- Autoconf -*- 2# Process this file with autoconf to produce a configure script. 3 4AC_PREREQ(2.61) 5AC_INIT([pHash],[0.9.6],[support@phash.org]) 6AM_INIT_AUTOMAKE($PACKAGE_NAME,$PACKAGE_VERSION) 7AC_CONFIG_SRCDIR([src/pHash.cpp]) 8AC_CONFIG_HEADERS([config.h pHash-config.h]) 9 10m4_include([m4/ax_pthread.m4]) 11 12# Checks for programs. 13AC_PROG_CXX 14AC_PROG_CC 15 16if test -z $DISTRO; then 17 AC_CHECK_FILE(/etc/gentoo-release, [DISTRO="gentoo"]) 18 AC_CHECK_FILE(/etc/redhat-release, [DISTRO="redhat"]) 19 AC_CHECK_FILE(/etc/slackware-version, [DISTRO="slackware"]) 20 AC_CHECK_FILE(/etc/debian_version, [DISTRO="debian"]) 21 AC_CHECK_FILE(/etc/SuSErelease, [DISTRO="suse"]) 22fi 23 24 25AC_ARG_ENABLE(pthread, [AS_HELP_STRING([--disable-pthread], 26[pthread support @<:@default=no@:>@])]) 27 28AS_IF([test "x$enable_pthread" != "xno"], 29[ 30 AX_PTHREAD([ 31 LIBS="$PTHREAD_LIBS $LIBS" 32 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS" 33 CC="$PTHREAD_CC" 34 AC_DEFINE([HAVE_PTHREAD], [1], [configure with pthread support]) 35 ]) 36]) 37 38AM_CONDITIONAL([HAVE_PTHREAD], [test "x$enable_pthread" != "xno"]) 39 40AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug], 41[compile with debugging support @<:@default=no@:>@])]) 42 43AS_IF([test "x$enable_debug" = "xyes"], 44 [CXXFLAGS="`echo $CXXFLAGS' ' | sed 's/-O[0-9]//g'`" 45 CXXFLAGS="$CXXFLAGS -O0 -g" 46 LDFLAGS="`echo $LDFLAGS | sed 's/-g//g' | sed 's/-O[0-9]//g'`"], 47 [CXXFLAGS="`echo $CXXFLAGS' -ffast-math' | sed 's/-g//g' | sed 's/-O[0-9]//g'`" 48 CXXFLAGS="$CXXFLAGS -O3" 49 CPPFLAGS="`echo $CPPFLAGS | sed 's/-g//g' | sed 's/-O[0-9]//g'`" 50 LDFLAGS="`echo $LDFLAGS | sed 's/-g//g' | sed 's/-O[0-9]//g'`"]) 51 52AC_ARG_ENABLE(openmp, [AS_HELP_STRING([--enable-openmp], 53[enable OpenMP support in pHash to use multiple cores/CPUs @<:@default=no@:>@])]) 54 55AS_IF([test "x$enable_openmp" = "xyes"], 56[ 57 CPPFLAGS="$CPPFLAGS -Dcimg_use_openmp" 58 if test $GCC = "yes"; then 59 CXXFLAGS="$CXXFLAGS -fopenmp" 60 fi 61]) 62 63AC_ARG_ENABLE(java, [AS_HELP_STRING([--enable-java], 64[compile java (JNI) binding for pHash @<:@default=no@:>@])]) 65 66AS_IF([test "x$enable_java" = "xyes"], 67[ 68 AC_CHECK_HEADER([jni.h], [found_jni="y"], [found_jni="n"]) 69 70if test x"$found_jni" = x"n"; then 71 AC_MSG_CHECKING([whether jni.h is in the current or src directory.]) 72 73 if [test `ls . src | grep "jni.h"` >/dev/null 2>&1]; then 74 AC_MSG_RESULT([yes]) 75 found_java="y" 76 else 77 AC_MSG_RESULT([no]) 78 AC_MSG_CHECKING([if jni.h is in other system directories.]) 79 jni_header=`locate jni.h|grep include/jni.h|head -n1` 80 81 if test x"$jni_header" != "x"; then 82 AC_MSG_RESULT([yes]) 83 jni_header=`dirname $jni_header` 84 jni_md_header=$jni_header"/"`uname|tr '[A-Z]' '[a-z]'` 85 CPPFLAGS="$CPPFLAGS -I $jni_header -I $jni_md_header" 86 else 87 AC_MSG_RESULT([no]) 88 fi 89 fi 90 91fi 92 93]) 94 95AM_CONDITIONAL([WITH_JAVA], [test "x$enable_java" = "xyes"]) 96 97AC_PROG_INSTALL 98AC_LANG([C++]) 99AC_PROG_LN_S 100AC_PROG_LIBTOOL 101 102AC_SUBST([LIBTOOLS_DEPS]) 103 104LDFLAGS="$LDFLAGS -L/usr/local/lib" 105CPPFLAGS="$CPPFLAGS -I/usr/local/include" 106 107AC_DEFUN([AC_CHECK_CIMG], [ 108AC_CHECK_HEADER([CImg.h], [found_cimg="y"], [found_cimg="n"]) 109 110if test x"$found_cimg" = x"n"; then 111 AC_MSG_CHECKING([whether CImg.h is in the current or src directory.]) 112 113 if [test `ls . src | grep "CImg.h"` >/dev/null 2>&1]; then 114 AC_MSG_RESULT([yes]) 115 found_cimg="y" 116 else 117 AC_MSG_RESULT([no]) 118 fi 119 120fi]) 121 122AC_DEFUN([AC_CHECK_FFMPEG], 123[ 124AC_MSG_CHECKING([whether FFmpeg is present]) 125AC_CHECK_LIB([avcodec], [avcodec_decode_video2], [], [AC_MSG_ERROR([ 126 127*** libavcodec not found. 128You need FFmpeg. Get it at <http://ffmpeg.org/>])]) 129 130AC_CHECK_LIB([avutil], [av_log_set_level], [], [AC_MSG_ERROR([ 131 132*** libavutil not found. 133You need FFmpeg. Get it at <http://ffmpeg.org/>])]) 134 135AC_CHECK_LIB([avformat], [av_read_frame], [], [AC_MSG_ERROR([ 136 137*** libavformat not found. 138You need FFmpeg. Get it at <http://ffmpeg.org/>])]) 139 140AC_CHECK_LIB([swscale], [sws_getContext], [], [AC_MSG_ERROR([ 141 142*** libswscale not found. 143You need FFmpeg. Get it at <http://ffmpeg.org/>])]) 144found_ffmpeg="y"]) 145 146 147AC_DEFUN([AC_CHECK_SNDFILE], 148[ 149AC_MSG_CHECKING([whether sndfile lib is present]) 150AC_CHECK_LIB([sndfile], [sf_readf_float], [], [AC_MSG_ERROR([ 151 152*** libsndfile not found. 153You need sndfile. Get it at <http://www.mega-nerd.com/libsndfile/>])]) 154found_sndfile="y"]) 155 156 157AC_DEFUN([AC_CHECK_SAMPLERATE], 158[ 159AC_MSG_CHECKING([whether samplerate lib is present]) 160AC_CHECK_LIB([samplerate],[src_process],[],[AC_MSG_ERROR([ 161 162*** libsamplerate not found. 163You need samplerate. Get it at <http://www.mega-nerd.com/libsamplerate/>])]) 164found_samplerate="y"]) 165 166 167AC_DEFUN([AC_CHECK_MPG123], 168[ 169AC_MSG_CHECKING([whether libmpg123 is present]) 170AC_CHECK_LIB([mpg123],[mpg123_init],[],[AC_MSG_ERROR([ 171 172*** libmpg123 not found. 173You need libmpg123. 174Get it at <http://www.mpg123.de/>])]) 175found_mpg123="y"]) 176 177 178AC_ARG_ENABLE([image-hash], [AS_HELP_STRING([--enable-image-hash], 179[include support for perceptual image hashes @<:@default=yes@:>@])]) 180 181AS_IF([test x"$enable_image_hash" != "xno"], 182[ 183 echo 184 echo "*** Configuring image hash ***" 185 echo 186 AC_CHECK_CIMG() 187 AC_DEFINE([HAVE_IMAGE_HASH], [1], [configure with image hash]) 188]) 189 190AM_CONDITIONAL(HAVE_IMAGE_HASH, [test "x$enable_image_hash" != "xno"]) 191 192AC_ARG_ENABLE([video-hash], [AS_HELP_STRING([--enable-video-hash], 193[include support for perceptual video hashes @<:@default=yes@:>@])]) 194 195AS_IF([test "x$enable_video_hash" != "xno"], 196[ 197 echo 198 echo "*** Configuring video Hash ***" 199 echo 200 if test "$found_ffmpeg" != "y"; then 201 AC_CHECK_FFMPEG() 202 203 case "$DISTRO" in 204 debian) CPPFLAGS="$CPPFLAGS -I/usr/include/ffmpeg" ;; 205 redhat) CPPFLAGS="$CPPFLAGS -I/usr/include/libavcodec -I/usr/include/libavformat -I/usr/include/libswscale" ;; 206 esac 207 fi 208 if test "$found_cimg" != "y"; then 209 AC_CHECK_CIMG() 210 fi 211 AC_DEFINE([HAVE_VIDEO_HASH],[1], [configure with video hash]) 212]) 213 214AM_CONDITIONAL(HAVE_VIDEO_HASH, [test "x$enable_video_hash" != "xno"]) 215 216AC_ARG_ENABLE([audio-hash], [AS_HELP_STRING([--enable-audio-hash], 217[include support for perceptual audio hashes @<:@default=yes@:>@])]) 218 219AS_IF([test "x$enable_audio_hash" != "xno"], 220 [ 221 echo 222 echo "*** Configuring audio hash ***" 223 echo 224 if test "$found_sndfile" != "y"; then 225 AC_CHECK_SNDFILE() 226 fi 227 228 if test "$found_samplerate" != "y"; then 229 AC_CHECK_SAMPLERATE() 230 fi 231 if test "$found_mpg123" != "y"; then 232 AC_CHECK_MPG123() 233 fi 234 AC_DEFINE([HAVE_AUDIO_HASH],[1], [configure with audio hash]) 235 ]) 236 237AM_CONDITIONAL(HAVE_AUDIO_HASH, [test "x$enable_audio_hash" != "xno"]) 238 239# Checks for libraries. 240AC_ARG_WITH([libpng], AS_HELP_STRING([--without-libpng], [do not include libpng support])) 241AC_ARG_WITH([libjpeg], AS_HELP_STRING([--without-libjpeg], [do not include libjpeg support])) 242AC_ARG_WITH([fftw], AS_HELP_STRING([--without-fftw], [do not include FFTW support])) 243 244AS_IF([test "x$enable_image_hash" != "xno" -o "x$enable_video_hash" != "xno"], 245 AS_IF([test "x$with_libpng" != "xno"], 246 AC_CHECK_LIB([png], [png_create_read_struct], 247 [ CPPFLAGS="$CPPFLAGS -Dcimg_use_png" LIBS="$LIBS -lpng" ], 248 AS_IF([test "x$with_libpng" = "xyes"], AC_MSG_ERROR([libpng support requested but library not found])) 249 ) 250 ) 251 252 AS_IF([test "x$with_libjpeg" != "xno"], 253 AC_CHECK_LIB([jpeg], [jpeg_read_header], 254 [ CPPFLAGS="$CPPFLAGS -Dcimg_use_jpeg" LIBS="$LIBS -ljpeg" ], 255 AS_IF([test "x$with_libjpeg" = "xyes"], AC_MSG_ERROR([libjpeg support requested but library not found])) 256 ) 257 ) 258) 259 260AS_IF([test "x$with_fftw" != "xno"], 261 AC_CHECK_LIB([fftw3], [fftw_plan_dft_r2c_1d], 262 [ CPPFLAGS="$CPPFLAGS -Dcimg_use_fftw3" LIBS="$LIBS -lfftw3" ], 263 AS_IF([test "x$with_fftw" = "xyes"], AC_MSG_ERROR([FFTW support requested but library not found])) 264 ) 265) 266 267CFLAGS="$CXXFLAGS" 268 269# Checks for typedefs, structures, and compiler characteristics. 270AC_TYPE_SIZE_T 271AC_TYPE_UINT32_T 272AC_TYPE_UINT8_T 273AC_CHECK_TYPE([uint64_t],[],[AC_MSG_ERROR([ 274 275*** Required type uint64_t not found. 276pHash requires 64-bit integers for video and image hashes.])]) 277 278AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile pHash.pc bindings/Makefile bindings/java/Makefile]) 279AC_OUTPUT 280 281