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