2 # Copyright (C) 2009-2010 Red Hat Inc.
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 # major/minor/release must be numbers
19 m4_define([hivex_major], [1])
20 m4_define([hivex_minor], [0])
21 m4_define([hivex_release], [75])
22 # extra can be any string
23 m4_define([hivex_extra], [])
25 AC_INIT([hivex],hivex_major.hivex_minor.hivex_release[]hivex_extra)
26 AC_CONFIG_AUX_DIR([build-aux])
27 AM_INIT_AUTOMAKE([foreign])
29 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
30 AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
32 AC_CONFIG_MACRO_DIR([m4])
34 dnl Split up the version string.
35 AC_DEFINE([PACKAGE_VERSION_MAJOR],[hivex_major],[Major version number])
36 AC_DEFINE([PACKAGE_VERSION_MINOR],[hivex_minor],[Minor version number])
37 AC_DEFINE([PACKAGE_VERSION_RELEASE],[hivex_release],[Release number])
38 AC_DEFINE([PACKAGE_VERSION_EXTRA],["hivex_extra"],[Extra version string])
45 dnl Check for basic C environment.
50 AC_ARG_ENABLE([gcc-warnings],
51 [AS_HELP_STRING([--enable-gcc-warnings],
52 [turn on lots of GCC warnings (for developers)])],
55 *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
57 gl_gcc_warnings=$enableval],
61 if test "$gl_gcc_warnings" = yes; then
62 gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
63 AC_SUBST([WERROR_CFLAGS])
66 # This, $nw, is the list of warnings we disable.
67 nw="$nw -Wdeclaration-after-statement" # too useful to forbid
68 nw="$nw -Waggregate-return" # anachronistic
69 nw="$nw -Wc++-compat" # We don't care about C++ compilers
70 nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib
71 nw="$nw -Wtraditional" # Warns on #elif which we use often
72 nw="$nw -Wcast-qual" # Too many warnings for now
73 nw="$nw -Wconversion" # Too many warnings for now
74 nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
75 nw="$nw -Wsign-conversion" # Too many warnings for now
76 nw="$nw -Wtraditional-conversion" # Too many warnings for now
77 nw="$nw -Wunreachable-code" # Too many warnings for now
78 nw="$nw -Wpadded" # Our structs are not padded
79 nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat
80 nw="$nw -Wlogical-op" # any use of fwrite provokes this
81 nw="$nw -Wvla" # two warnings in mount.c
82 # things I might fix soon:
83 nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn
84 nw="$nw -Winline" # daemon.h's asprintf_nowarn
85 nw="$nw -Wshadow" # numerous, plus we're not unanimous
86 # ?? -Wstrict-overflow
87 nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization
88 # was not possible, safe to ignore
89 nw="$nw -Wpacked" # Allow attribute((packed)) on structs
91 gl_MANYWARN_ALL_GCC([ws])
92 gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
96 gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
97 gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
98 gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
100 # In spite of excluding -Wlogical-op above, it is enabled, as of
101 # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
102 gl_WARN_ADD([-Wno-logical-op])
104 gl_WARN_ADD([-fdiagnostics-show-option])
106 AC_SUBST([WARN_CFLAGS])
108 AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
109 AC_DEFINE([_FORTIFY_SOURCE], [2],
110 [enable compile-time and run-time bounds-checking, and some warnings])
111 AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
115 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
119 dnl Check support for 64 bit file offsets.
122 dnl Check sizeof long.
123 AC_CHECK_SIZEOF([long])
126 AC_CHECK_HEADERS([endian.h byteswap.h])
128 dnl Check for pod2man and pod2text.
129 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
130 test "x$POD2MAN" = "xno" &&
131 AC_MSG_ERROR([pod2man must be installed])
132 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
133 test "x$POD2TEXT" = "xno" &&
134 AC_MSG_ERROR([pod2text must be installed])
137 AC_ARG_WITH([readline],
138 [AS_HELP_STRING([--with-readline],
139 [support fancy command line editing @<:@default=check@:>@])],
141 [with_readline=check])
144 AS_IF([test "x$with_readline" != xno],
145 [AC_CHECK_LIB([readline], [main],
146 [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
147 AC_DEFINE([HAVE_LIBREADLINE], [1],
148 [Define if you have libreadline])
150 [if test "x$with_readline" != xcheck; then
152 [--with-readline was given, but test for readline failed])
157 AM_GNU_GETTEXT([external])
158 AM_GNU_GETTEXT_VERSION([0.17])
161 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
162 AC_SUBST([LIBXML2_CFLAGS])
163 AC_SUBST([LIBXML2_LIBS])
165 dnl Check for OCaml (optional, for OCaml bindings).
168 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
170 dnl Check for Perl (optional, for Perl bindings).
171 dnl XXX This isn't quite right, we should check for Perl devel library.
172 AC_CHECK_PROG([PERL],[perl],[perl],[no])
174 dnl Check for Perl modules that must be present to compile and
175 dnl test the Perl bindings.
176 missing_perl_modules=no
177 for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker; do
178 AC_MSG_CHECKING([for $pm])
179 if ! perl -M$pm -e1 >/dev/null 2>&1; then
181 missing_perl_modules=yes
186 if test "x$missing_perl_modules" = "xyes"; then
187 AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
190 AM_CONDITIONAL([HAVE_PERL],
191 [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
193 dnl Check for Python (optional, for Python bindings).
194 AC_CHECK_PROG([PYTHON],[python],[python],[no])
199 PYTHON_SITE_PACKAGES=
201 if test "x$PYTHON" != "xno"; then
202 PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
203 PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
205 $PYTHON_PREFIX/include/python$PYTHON_VERSION \
206 /usr/include/python$PYTHON_VERSION \
207 /usr/local/include/python$PYTHON_VERSION
209 AC_MSG_CHECKING([Python.h in $d])
210 if test -r "$d/Python.h"; then
211 AC_MSG_RESULT([found])
215 AC_MSG_RESULT([not found])
218 $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
219 $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
220 /usr/lib64/python$PYTHON_VERSION/site-packages \
221 /usr/lib/python$PYTHON_VERSION/site-packages \
222 /usr/local/lib/python$PYTHON_VERSION/site-packages
224 AC_MSG_CHECKING([for $d])
225 if test -d "$d"; then
226 AC_MSG_RESULT([found])
227 PYTHON_SITE_PACKAGES=$d
230 AC_MSG_RESULT([not found])
234 AC_SUBST(PYTHON_PREFIX)
235 AC_SUBST(PYTHON_VERSION)
236 AC_SUBST(PYTHON_INCLUDEDIR)
237 AC_SUBST(PYTHON_SITE_PACKAGES)
239 AM_CONDITIONAL([HAVE_PYTHON],
240 [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
242 dnl Check for Ruby and rake (optional, for Ruby bindings).
243 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
244 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
246 AM_CONDITIONAL([HAVE_RUBY],
247 [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
250 AC_ARG_WITH(java_home,
251 [AS_HELP_STRING([--with-java-home],
252 [specify path to JDK directory @<:@default=check@:>@])],
254 [with_java_home=check])
256 if test "x$with_java_home" != "xno"; then
257 if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
259 # Reject unsafe characters in $JAVA_HOME
263 *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
264 AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
266 if test -d "$with_java_home"; then
267 JAVA_HOME="$with_java_home"
269 AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
273 if test "x$JAVA_HOME" = "x"; then
274 # Look for Java in some likely locations.
277 /usr/lib/jvm/java-6-openjdk
279 if test -d $d -a -f $d/bin/java; then
286 if test "x$JAVA_HOME" != "x"; then
287 AC_MSG_CHECKING(for JDK in $JAVA_HOME)
288 if test ! -x "$JAVA_HOME/bin/java"; then
289 AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
291 JAVA="$JAVA_HOME/bin/java"
293 if test ! -x "$JAVA_HOME/bin/javac"; then
294 AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
296 JAVAC="$JAVA_HOME/bin/javac"
298 if test ! -x "$JAVA_HOME/bin/javah"; then
299 AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
301 JAVAH="$JAVA_HOME/bin/javah"
303 if test ! -x "$JAVA_HOME/bin/javadoc"; then
304 AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
306 JAVADOC="$JAVA_HOME/bin/javadoc"
308 if test ! -x "$JAVA_HOME/bin/jar"; then
309 AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
311 JAR="$JAVA_HOME/bin/jar"
313 java_version=`$JAVA -version 2>&1 | grep "java version"`
314 AC_MSG_RESULT(found $java_version in $JAVA_HOME)
317 AC_MSG_CHECKING([for jni.h])
318 if test -f "$JAVA_HOME/include/jni.h"; then
319 JNI_CFLAGS="-I$JAVA_HOME/include"
321 if test "`find $JAVA_HOME -name jni.h`" != ""; then
322 head=`find $JAVA_HOME -name jni.h | tail -1`
323 dir=`dirname "$head"`
326 AC_MSG_FAILURE([missing jni.h header file])
329 AC_MSG_RESULT([$JNI_CFLAGS])
332 AC_MSG_CHECKING([for jni_md.h])
334 *linux*) system="linux" ;;
335 *SunOS*) system="solaris" ;;
336 *cygwin*) system="win32" ;;
337 *) system="$build_os" ;;
339 if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
340 JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
342 if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
343 head=`find $JAVA_HOME -name jni_md.h | tail -1`
344 dir=`dirname "$head"`
345 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
347 AC_MSG_FAILURE([missing jni_md.h header file])
350 AC_MSG_RESULT([$JNI_CFLAGS])
352 dnl Need extra version flag?
353 AC_MSG_CHECKING([extra javac flags])
355 javac_version=`$JAVAC -version 2>&1`
356 case "$javac_version" in
358 JAVAC_FLAGS="-source 1.5" ;;
360 AC_MSG_RESULT([$JAVAC_FLAGS])
362 dnl Where to install jarfiles.
363 dnl XXX How to make it configurable?
364 JAR_INSTALL_DIR=\${prefix}/share/java
365 JNI_INSTALL_DIR=\${libdir}
368 jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
369 jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
370 jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
371 JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
382 AC_SUBST(JAVAC_FLAGS)
383 AC_SUBST(JAR_INSTALL_DIR)
384 AC_SUBST(JNI_INSTALL_DIR)
385 AC_SUBST(JNI_VERSION_INFO)
387 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
389 dnl Check for Haskell (GHC).
390 AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
392 AM_CONDITIONAL([HAVE_HASKELL],
393 [test "x$GHC" != "xno"])
395 dnl Produce output files.
396 AC_CONFIG_HEADERS([config.h])
397 AC_CONFIG_FILES([Makefile
399 gnulib/tests/Makefile
407 echo "------------------------------------------------------------"
408 echo "Thank you for downloading $PACKAGE_STRING"
410 echo "This is how we have configured the optional components for you today:"
412 echo -n "OCaml bindings ...................... "
413 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
414 echo -n "Perl bindings ....................... "
415 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
416 echo -n "Python bindings ..................... "
417 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
418 echo -n "Ruby bindings ....................... "
419 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
420 echo -n "Java bindings ....................... "
421 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
422 echo -n "Haskell bindings .................... "
423 if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
425 echo "If any optional component is configured 'no' when you expected 'yes'"
426 echo "then you should check the preceeding messages."
428 echo "Please report bugs back to the mailing list:"
429 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
431 echo "Next you should type 'make' to build the package,"
432 echo "then 'make check' to run the tests."
433 echo "------------------------------------------------------------"