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], [2])
21 m4_define([hivex_release], [1])
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 if test "x$OCAMLC" != "xno"; then
171 dnl Check if we have caml/unixsupport.h header (OCaml bindings only).
173 CFLAGS="$CFLAGS -I$OCAMLLIB"
174 AC_CHECK_HEADERS([caml/unixsupport.h],[],[],
176 #include <caml/config.h>
177 #include <caml/mlvalues.h>
181 dnl Do we have function caml_raise_with_args?
182 f=caml_raise_with_args
183 AC_MSG_CHECKING([for function $f])
184 echo "char $f (); char foo() { return $f (); }" > conftest.c
187 if $OCAMLOPT -c conftest.c 2>/dev/null && \
188 $OCAMLOPT -c conftest_ml.ml 2>/dev/null && \
189 $OCAMLOPT conftest.o conftest_ml.cmx -o conftest 2>/dev/null ; then
190 AC_DEFINE([HAVE_CAML_RAISE_WITH_ARGS],[1],
191 [Defined if function caml_raise_with_args exists.])
192 AC_MSG_RESULT([found])
194 AC_MSG_RESULT([not found])
196 rm -f conftest conftest.* conftest_ml.*
199 dnl Check for Perl (optional, for Perl bindings).
200 dnl XXX This isn't quite right, we should check for Perl devel library.
201 AC_CHECK_PROG([PERL],[perl],[perl],[no])
203 dnl Check for Perl modules that must be present to compile and
204 dnl test the Perl bindings.
205 missing_perl_modules=no
206 for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker IO::Stringy; do
207 AC_MSG_CHECKING([for $pm])
208 if ! perl -M$pm -e1 >/dev/null 2>&1; then
210 missing_perl_modules=yes
215 if test "x$missing_perl_modules" = "xyes"; then
216 AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
219 AM_CONDITIONAL([HAVE_PERL],
220 [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
222 dnl dnl Check for Python (optional, for Python bindings).
223 dnl AC_CHECK_PROG([PYTHON],[python],[python],[no])
227 dnl PYTHON_INCLUDEDIR=
228 dnl PYTHON_SITE_PACKAGES=
230 dnl if test "x$PYTHON" != "xno"; then
231 dnl PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
232 dnl PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
234 dnl $PYTHON_PREFIX/include/python$PYTHON_VERSION \
235 dnl /usr/include/python$PYTHON_VERSION \
236 dnl /usr/local/include/python$PYTHON_VERSION
238 dnl AC_MSG_CHECKING([Python.h in $d])
239 dnl if test -r "$d/Python.h"; then
240 dnl AC_MSG_RESULT([found])
241 dnl PYTHON_INCLUDEDIR=$d
244 dnl AC_MSG_RESULT([not found])
247 dnl $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
248 dnl $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
249 dnl /usr/lib64/python$PYTHON_VERSION/site-packages \
250 dnl /usr/lib/python$PYTHON_VERSION/site-packages \
251 dnl /usr/local/lib/python$PYTHON_VERSION/site-packages
253 dnl AC_MSG_CHECKING([for $d])
254 dnl if test -d "$d"; then
255 dnl AC_MSG_RESULT([found])
256 dnl PYTHON_SITE_PACKAGES=$d
259 dnl AC_MSG_RESULT([not found])
263 dnl AC_SUBST(PYTHON_PREFIX)
264 dnl AC_SUBST(PYTHON_VERSION)
265 dnl AC_SUBST(PYTHON_INCLUDEDIR)
266 dnl AC_SUBST(PYTHON_SITE_PACKAGES)
268 dnl AM_CONDITIONAL([HAVE_PYTHON],
269 dnl [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
271 dnl dnl Check for Ruby and rake (optional, for Ruby bindings).
272 dnl AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
273 dnl AC_CHECK_PROG([RAKE],[rake],[rake],[no])
275 dnl AM_CONDITIONAL([HAVE_RUBY],
276 dnl [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
278 dnl dnl Check for Java.
279 dnl AC_ARG_WITH(java_home,
280 dnl [AS_HELP_STRING([--with-java-home],
281 dnl [specify path to JDK directory @<:@default=check@:>@])],
283 dnl [with_java_home=check])
285 dnl if test "x$with_java_home" != "xno"; then
286 dnl if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
288 dnl # Reject unsafe characters in $JAVA_HOME
291 dnl case $JAVA_HOME in
292 dnl *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
293 dnl AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
295 dnl if test -d "$with_java_home"; then
296 dnl JAVA_HOME="$with_java_home"
298 dnl AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
302 dnl if test "x$JAVA_HOME" = "x"; then
303 dnl # Look for Java in some likely locations.
305 dnl /usr/lib/jvm/java \
306 dnl /usr/lib/jvm/java-6-openjdk
308 dnl if test -d $d -a -f $d/bin/java; then
315 dnl if test "x$JAVA_HOME" != "x"; then
316 dnl AC_MSG_CHECKING(for JDK in $JAVA_HOME)
317 dnl if test ! -x "$JAVA_HOME/bin/java"; then
318 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
320 dnl JAVA="$JAVA_HOME/bin/java"
322 dnl if test ! -x "$JAVA_HOME/bin/javac"; then
323 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
325 dnl JAVAC="$JAVA_HOME/bin/javac"
327 dnl if test ! -x "$JAVA_HOME/bin/javah"; then
328 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
330 dnl JAVAH="$JAVA_HOME/bin/javah"
332 dnl if test ! -x "$JAVA_HOME/bin/javadoc"; then
333 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
335 dnl JAVADOC="$JAVA_HOME/bin/javadoc"
337 dnl if test ! -x "$JAVA_HOME/bin/jar"; then
338 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
340 dnl JAR="$JAVA_HOME/bin/jar"
342 dnl java_version=`$JAVA -version 2>&1 | grep "java version"`
343 dnl AC_MSG_RESULT(found $java_version in $JAVA_HOME)
346 dnl AC_MSG_CHECKING([for jni.h])
347 dnl if test -f "$JAVA_HOME/include/jni.h"; then
348 dnl JNI_CFLAGS="-I$JAVA_HOME/include"
350 dnl if test "`find $JAVA_HOME -name jni.h`" != ""; then
351 dnl head=`find $JAVA_HOME -name jni.h | tail -1`
352 dnl dir=`dirname "$head"`
353 dnl JNI_CFLAGS="-I$dir"
355 dnl AC_MSG_FAILURE([missing jni.h header file])
358 dnl AC_MSG_RESULT([$JNI_CFLAGS])
360 dnl dnl Find jni_md.h.
361 dnl AC_MSG_CHECKING([for jni_md.h])
362 dnl case "$build_os" in
363 dnl *linux*) system="linux" ;;
364 dnl *SunOS*) system="solaris" ;;
365 dnl *cygwin*) system="win32" ;;
366 dnl *) system="$build_os" ;;
368 dnl if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
369 dnl JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
371 dnl if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
372 dnl head=`find $JAVA_HOME -name jni_md.h | tail -1`
373 dnl dir=`dirname "$head"`
374 dnl JNI_CFLAGS="$JNI_CFLAGS -I$dir"
376 dnl AC_MSG_FAILURE([missing jni_md.h header file])
379 dnl AC_MSG_RESULT([$JNI_CFLAGS])
381 dnl dnl Need extra version flag?
382 dnl AC_MSG_CHECKING([extra javac flags])
384 dnl javac_version=`$JAVAC -version 2>&1`
385 dnl case "$javac_version" in
387 dnl JAVAC_FLAGS="-source 1.5" ;;
389 dnl AC_MSG_RESULT([$JAVAC_FLAGS])
391 dnl dnl Where to install jarfiles.
392 dnl dnl XXX How to make it configurable?
393 dnl JAR_INSTALL_DIR=\${prefix}/share/java
394 dnl JNI_INSTALL_DIR=\${libdir}
397 dnl jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
398 dnl jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
399 dnl jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
400 dnl JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
404 dnl AC_SUBST(JAVA_HOME)
408 dnl AC_SUBST(JAVADOC)
410 dnl AC_SUBST(JNI_CFLAGS)
411 dnl AC_SUBST(JAVAC_FLAGS)
412 dnl AC_SUBST(JAR_INSTALL_DIR)
413 dnl AC_SUBST(JNI_INSTALL_DIR)
414 dnl AC_SUBST(JNI_VERSION_INFO)
416 dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
418 dnl dnl Check for Haskell (GHC).
419 dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
421 dnl AM_CONDITIONAL([HAVE_HASKELL],
422 dnl [test "x$GHC" != "xno"])
424 dnl Produce output files.
425 AC_CONFIG_HEADERS([config.h])
426 AC_CONFIG_FILES([Makefile
428 gnulib/tests/Makefile
433 ocaml/Makefile ocaml/META
434 perl/Makefile perl/Makefile.PL
444 echo "------------------------------------------------------------"
445 echo "Thank you for downloading $PACKAGE_STRING"
447 echo "This is how we have configured the optional components for you today:"
449 echo -n "OCaml bindings ...................... "
450 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
451 echo -n "Perl bindings ....................... "
452 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
453 dnl echo -n "Python bindings ..................... "
454 dnl if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
455 dnl echo -n "Ruby bindings ....................... "
456 dnl if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
457 dnl echo -n "Java bindings ....................... "
458 dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
459 dnl echo -n "Haskell bindings .................... "
460 dnl if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
462 echo "If any optional component is configured 'no' when you expected 'yes'"
463 echo "then you should check the preceeding messages."
465 echo "Please report bugs back to the mailing list:"
466 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
468 echo "Next you should type 'make' to build the package,"
469 echo "then 'make check' to run the tests."
470 echo "------------------------------------------------------------"