2 # Copyright (C) 2009-2011 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], [3])
21 m4_define([hivex_release], [2])
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
90 nw="$nw -Wlong-long" # Allow long long since it's required
92 nw="$nw -Wsuggest-attribute=pure" # Don't suggest pure functions.
93 # nw="$nw -Wsuggest-attribute=const" # Don't suggest const functions.
94 # nw="$nw -Wunsuffixed-float-constants" # Don't care about these.
96 gl_MANYWARN_ALL_GCC([ws])
97 gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
101 gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
102 gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
103 gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
105 # In spite of excluding -Wlogical-op above, it is enabled, as of
106 # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
107 gl_WARN_ADD([-Wno-logical-op])
109 gl_WARN_ADD([-fdiagnostics-show-option])
111 AC_SUBST([WARN_CFLAGS])
113 AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
114 AC_DEFINE([_FORTIFY_SOURCE], [2],
115 [enable compile-time and run-time bounds-checking, and some warnings])
116 AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
120 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
124 dnl Work out how to specify the linker script to the linker.
125 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
126 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
127 VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
128 AC_SUBST(VERSION_SCRIPT_FLAGS)
130 dnl Check support for 64 bit file offsets.
133 dnl Check sizeof long.
134 AC_CHECK_SIZEOF([long])
137 AC_CHECK_HEADERS([byteswap.h endian.h libintl.h])
140 AC_REPLACE_FUNCS([mmap])
143 AC_CHECK_FUNCS([bindtextdomain])
145 dnl Check for pod2man and pod2text.
146 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
147 test "x$POD2MAN" = "xno" &&
148 AC_MSG_ERROR([pod2man must be installed])
149 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
150 test "x$POD2TEXT" = "xno" &&
151 AC_MSG_ERROR([pod2text must be installed])
154 AC_ARG_WITH([readline],
155 [AS_HELP_STRING([--with-readline],
156 [support fancy command line editing @<:@default=check@:>@])],
158 [with_readline=check])
161 AS_IF([test "x$with_readline" != xno],
162 [AC_CHECK_LIB([readline], [main],
163 [AC_SUBST([LIBREADLINE], ["-lreadline"])
164 AC_DEFINE([HAVE_LIBREADLINE], [1],
165 [Define if you have libreadline])
167 [if test "x$with_readline" != xcheck; then
169 [--with-readline was given, but test for readline failed])
174 AM_GNU_GETTEXT([external])
175 AM_GNU_GETTEXT_VERSION([0.17])
178 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
179 AC_SUBST([LIBXML2_CFLAGS])
180 AC_SUBST([LIBXML2_LIBS])
182 dnl hivexsh depends on open_memstream, which is absent on OS X.
183 AC_CHECK_FUNC([open_memstream])
184 AM_CONDITIONAL([HAVE_HIVEXSH],[test "x$ac_cv_func_open_memstream" = "xyes"])
186 dnl Check for OCaml (optional, for OCaml bindings).
189 AM_CONDITIONAL([HAVE_OCAML],
190 [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
191 AM_CONDITIONAL([HAVE_OCAMLOPT],
192 [test "x$OCAMLOPT" != "xno" && test "x$OCAMLFIND" != "xno"])
194 if test "x$OCAMLC" != "xno"; then
195 dnl Check if we have caml/unixsupport.h header (OCaml bindings only).
197 CFLAGS="$CFLAGS -I$OCAMLLIB"
198 AC_CHECK_HEADERS([caml/unixsupport.h],[],[],
200 #include <caml/config.h>
201 #include <caml/mlvalues.h>
205 dnl Do we have function caml_raise_with_args?
206 f=caml_raise_with_args
207 AC_MSG_CHECKING([for function $f])
208 echo "char $f (); char foo() { return $f (); }" > conftest.c
211 if $OCAMLC -c conftest.c 2>/dev/null && \
212 $OCAMLC -c conftest_ml.ml 2>/dev/null && \
213 $OCAMLC conftest.o conftest_ml.cmo -o conftest 2>/dev/null ; then
214 AC_DEFINE([HAVE_CAML_RAISE_WITH_ARGS],[1],
215 [Defined if function caml_raise_with_args exists.])
216 AC_MSG_RESULT([found])
218 AC_MSG_RESULT([not found])
220 rm -f conftest conftest.* conftest_ml.*
223 dnl Check for Perl (optional, for Perl bindings).
224 dnl XXX This isn't quite right, we should check for Perl devel library.
225 AC_CHECK_PROG([PERL],[perl],[perl],[no])
227 dnl Check for Perl modules that must be present to compile and
228 dnl test the Perl bindings.
229 missing_perl_modules=no
230 for pm in Test::More ExtUtils::MakeMaker IO::Stringy; do
231 AC_MSG_CHECKING([for $pm])
232 if ! perl -M$pm -e1 >/dev/null 2>&1; then
234 missing_perl_modules=yes
239 if test "x$missing_perl_modules" = "xyes"; then
240 AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
243 AM_CONDITIONAL([HAVE_PERL],
244 [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
246 dnl Check for Python (optional, for Python bindings).
252 AC_CHECK_PROG([PYTHON],[python],[python],[no])
254 if test "x$PYTHON" != "xno"; then
255 AC_MSG_CHECKING([Python prefix])
256 PYTHON_PREFIX=`$PYTHON -c "import sys; print (sys.prefix)"`
257 AC_MSG_RESULT([$PYTHON_PREFIX])
259 AC_MSG_CHECKING([Python version])
260 PYTHON_VERSION_MAJOR=`$PYTHON -c "import sys; print (sys.version_info@<:@0@:>@)"`
261 PYTHON_VERSION_MINOR=`$PYTHON -c "import sys; print (sys.version_info@<:@1@:>@)"`
262 PYTHON_VERSION="$PYTHON_VERSION_MAJOR.$PYTHON_VERSION_MINOR"
263 AC_MSG_RESULT([$PYTHON_VERSION])
265 AC_MSG_CHECKING([for Python include path])
266 if test -z "$PYTHON_INCLUDEDIR"; then
267 python_path=`$PYTHON -c "import distutils.sysconfig; \
268 print (distutils.sysconfig.get_python_inc ());"`
269 PYTHON_INCLUDEDIR=$python_path
271 AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
273 AC_ARG_WITH([python-installdir],
274 [AS_HELP_STRING([--with-python-installdir],
275 [directory to install python modules @<:@default=check@:>@])],
276 [PYTHON_INSTALLDIR="$withval"
277 AC_MSG_NOTICE([Python install dir $PYTHON_INSTALLDIR])],
278 [PYTHON_INSTALLDIR=check])
280 if test "x$PYTHON_INSTALLDIR" = "xcheck"; then
282 AC_MSG_CHECKING([for Python site-packages path])
283 if test -z "$PYTHON_INSTALLDIR"; then
284 PYTHON_INSTALLDIR=`$PYTHON -c "import distutils.sysconfig; \
285 print (distutils.sysconfig.get_python_lib(1,0));"`
287 AC_MSG_RESULT([$PYTHON_INSTALLDIR])
290 dnl Look for libpython and some optional symbols in it.
292 if test "x$PYTHON_VERSION_MAJOR" = "x3"; then
293 dnl libpython3 is called "libpython3.Xmu.so"
294 LIBPYTHON="python${PYTHON_VERSION}mu"
296 LIBPYTHON="python$PYTHON_VERSION"
298 AC_CHECK_LIB([$LIBPYTHON], [PyList_Size], [],
299 [AC_MSG_FAILURE([$LIBPYTHON is not installed])])
301 AC_CHECK_FUNCS([PyCapsule_New \
306 AC_SUBST(PYTHON_PREFIX)
307 AC_SUBST(PYTHON_VERSION)
308 AC_SUBST(PYTHON_INCLUDEDIR)
309 AC_SUBST(PYTHON_INSTALLDIR)
311 AM_CONDITIONAL([HAVE_PYTHON],
312 [test "x$PYTHON" != "xno" && test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_INSTALLDIR" != "x"])
314 dnl Check for Ruby and rake (optional, for Ruby bindings).
315 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
316 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
318 AM_CONDITIONAL([HAVE_RUBY],
319 [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
321 dnl dnl Check for Java.
322 dnl AC_ARG_WITH(java_home,
323 dnl [AS_HELP_STRING([--with-java-home],
324 dnl [specify path to JDK directory @<:@default=check@:>@])],
326 dnl [with_java_home=check])
328 dnl if test "x$with_java_home" != "xno"; then
329 dnl if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
331 dnl # Reject unsafe characters in $JAVA_HOME
334 dnl case $JAVA_HOME in
335 dnl *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
336 dnl AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
338 dnl if test -d "$with_java_home"; then
339 dnl JAVA_HOME="$with_java_home"
341 dnl AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
345 dnl if test "x$JAVA_HOME" = "x"; then
346 dnl # Look for Java in some likely locations.
348 dnl /usr/lib/jvm/java \
349 dnl /usr/lib/jvm/java-6-openjdk
351 dnl if test -d $d && test -f $d/bin/java; then
358 dnl if test "x$JAVA_HOME" != "x"; then
359 dnl AC_MSG_CHECKING(for JDK in $JAVA_HOME)
360 dnl if test ! -x "$JAVA_HOME/bin/java"; then
361 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
363 dnl JAVA="$JAVA_HOME/bin/java"
365 dnl if test ! -x "$JAVA_HOME/bin/javac"; then
366 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
368 dnl JAVAC="$JAVA_HOME/bin/javac"
370 dnl if test ! -x "$JAVA_HOME/bin/javah"; then
371 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
373 dnl JAVAH="$JAVA_HOME/bin/javah"
375 dnl if test ! -x "$JAVA_HOME/bin/javadoc"; then
376 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
378 dnl JAVADOC="$JAVA_HOME/bin/javadoc"
380 dnl if test ! -x "$JAVA_HOME/bin/jar"; then
381 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
383 dnl JAR="$JAVA_HOME/bin/jar"
385 dnl java_version=`$JAVA -version 2>&1 | grep "java version"`
386 dnl AC_MSG_RESULT(found $java_version in $JAVA_HOME)
389 dnl AC_MSG_CHECKING([for jni.h])
390 dnl if test -f "$JAVA_HOME/include/jni.h"; then
391 dnl JNI_CFLAGS="-I$JAVA_HOME/include"
393 dnl if test "`find $JAVA_HOME -name jni.h`" != ""; then
394 dnl head=`find $JAVA_HOME -name jni.h | tail -1`
395 dnl dir=`dirname "$head"`
396 dnl JNI_CFLAGS="-I$dir"
398 dnl AC_MSG_FAILURE([missing jni.h header file])
401 dnl AC_MSG_RESULT([$JNI_CFLAGS])
403 dnl dnl Find jni_md.h.
404 dnl AC_MSG_CHECKING([for jni_md.h])
405 dnl case "$build_os" in
406 dnl *linux*) system="linux" ;;
407 dnl *SunOS*) system="solaris" ;;
408 dnl *cygwin*) system="win32" ;;
409 dnl *) system="$build_os" ;;
411 dnl if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
412 dnl JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
414 dnl if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
415 dnl head=`find $JAVA_HOME -name jni_md.h | tail -1`
416 dnl dir=`dirname "$head"`
417 dnl JNI_CFLAGS="$JNI_CFLAGS -I$dir"
419 dnl AC_MSG_FAILURE([missing jni_md.h header file])
422 dnl AC_MSG_RESULT([$JNI_CFLAGS])
424 dnl dnl Need extra version flag?
425 dnl AC_MSG_CHECKING([extra javac flags])
427 dnl javac_version=`$JAVAC -version 2>&1`
428 dnl case "$javac_version" in
430 dnl JAVAC_FLAGS="-source 1.5" ;;
432 dnl AC_MSG_RESULT([$JAVAC_FLAGS])
434 dnl dnl Where to install jarfiles.
435 dnl dnl XXX How to make it configurable?
436 dnl JAR_INSTALL_DIR=\${prefix}/share/java
437 dnl JNI_INSTALL_DIR=\${libdir}
440 dnl jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
441 dnl jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
442 dnl jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
443 dnl JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
447 dnl AC_SUBST(JAVA_HOME)
451 dnl AC_SUBST(JAVADOC)
453 dnl AC_SUBST(JNI_CFLAGS)
454 dnl AC_SUBST(JAVAC_FLAGS)
455 dnl AC_SUBST(JAR_INSTALL_DIR)
456 dnl AC_SUBST(JNI_INSTALL_DIR)
457 dnl AC_SUBST(JNI_VERSION_INFO)
459 dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
461 dnl dnl Check for Haskell (GHC).
462 dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
464 dnl AM_CONDITIONAL([HAVE_HASKELL],
465 dnl [test "x$GHC" != "xno"])
467 dnl Produce output files.
468 AC_CONFIG_HEADERS([config.h])
469 AC_CONFIG_FILES([Makefile
472 gnulib/tests/Makefile
477 ocaml/Makefile ocaml/META
478 perl/Makefile perl/Makefile.PL
482 ruby/Makefile ruby/Rakefile
485 AC_CONFIG_FILES([python/run-python-tests], [chmod +x python/run-python-tests])
491 echo "------------------------------------------------------------"
492 echo "Thank you for downloading $PACKAGE_STRING"
494 echo "This is how we have configured the optional components for you today:"
496 echo -n "OCaml bindings ...................... "
497 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
498 echo -n "Perl bindings ....................... "
499 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
500 echo -n "Python bindings ..................... "
501 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
502 echo -n "Ruby bindings ....................... "
503 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
504 dnl echo -n "Java bindings ....................... "
505 dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
506 dnl echo -n "Haskell bindings .................... "
507 dnl if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
509 echo "If any optional component is configured 'no' when you expected 'yes'"
510 echo "then you should check the preceeding messages."
512 echo "Please report bugs back to the mailing list:"
513 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
515 echo "Next you should type 'make' to build the package,"
516 echo "then 'make check' to run the tests."
517 echo "------------------------------------------------------------"