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], [3])
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_ARG_ENABLE([ruby],
316 AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
319 AS_IF([test "x$enable_ruby" != "xno"],
321 AC_CHECK_PROG([RUBY],[ruby],[ruby],[no])
322 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
323 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
326 AM_CONDITIONAL([HAVE_RUBY],
327 [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
329 AM_CONDITIONAL([HAVE_RUBY],
330 [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
332 dnl dnl Check for Java.
333 dnl AC_ARG_WITH(java_home,
334 dnl [AS_HELP_STRING([--with-java-home],
335 dnl [specify path to JDK directory @<:@default=check@:>@])],
337 dnl [with_java_home=check])
339 dnl if test "x$with_java_home" != "xno"; then
340 dnl if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
342 dnl # Reject unsafe characters in $JAVA_HOME
345 dnl case $JAVA_HOME in
346 dnl *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
347 dnl AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
349 dnl if test -d "$with_java_home"; then
350 dnl JAVA_HOME="$with_java_home"
352 dnl AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
356 dnl if test "x$JAVA_HOME" = "x"; then
357 dnl # Look for Java in some likely locations.
359 dnl /usr/lib/jvm/java \
360 dnl /usr/lib/jvm/java-6-openjdk
362 dnl if test -d $d && test -f $d/bin/java; then
369 dnl if test "x$JAVA_HOME" != "x"; then
370 dnl AC_MSG_CHECKING(for JDK in $JAVA_HOME)
371 dnl if test ! -x "$JAVA_HOME/bin/java"; then
372 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
374 dnl JAVA="$JAVA_HOME/bin/java"
376 dnl if test ! -x "$JAVA_HOME/bin/javac"; then
377 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
379 dnl JAVAC="$JAVA_HOME/bin/javac"
381 dnl if test ! -x "$JAVA_HOME/bin/javah"; then
382 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
384 dnl JAVAH="$JAVA_HOME/bin/javah"
386 dnl if test ! -x "$JAVA_HOME/bin/javadoc"; then
387 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
389 dnl JAVADOC="$JAVA_HOME/bin/javadoc"
391 dnl if test ! -x "$JAVA_HOME/bin/jar"; then
392 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
394 dnl JAR="$JAVA_HOME/bin/jar"
396 dnl java_version=`$JAVA -version 2>&1 | grep "java version"`
397 dnl AC_MSG_RESULT(found $java_version in $JAVA_HOME)
400 dnl AC_MSG_CHECKING([for jni.h])
401 dnl if test -f "$JAVA_HOME/include/jni.h"; then
402 dnl JNI_CFLAGS="-I$JAVA_HOME/include"
404 dnl if test "`find $JAVA_HOME -name jni.h`" != ""; then
405 dnl head=`find $JAVA_HOME -name jni.h | tail -1`
406 dnl dir=`dirname "$head"`
407 dnl JNI_CFLAGS="-I$dir"
409 dnl AC_MSG_FAILURE([missing jni.h header file])
412 dnl AC_MSG_RESULT([$JNI_CFLAGS])
414 dnl dnl Find jni_md.h.
415 dnl AC_MSG_CHECKING([for jni_md.h])
416 dnl case "$build_os" in
417 dnl *linux*) system="linux" ;;
418 dnl *SunOS*) system="solaris" ;;
419 dnl *cygwin*) system="win32" ;;
420 dnl *) system="$build_os" ;;
422 dnl if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
423 dnl JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
425 dnl if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
426 dnl head=`find $JAVA_HOME -name jni_md.h | tail -1`
427 dnl dir=`dirname "$head"`
428 dnl JNI_CFLAGS="$JNI_CFLAGS -I$dir"
430 dnl AC_MSG_FAILURE([missing jni_md.h header file])
433 dnl AC_MSG_RESULT([$JNI_CFLAGS])
435 dnl dnl Need extra version flag?
436 dnl AC_MSG_CHECKING([extra javac flags])
438 dnl javac_version=`$JAVAC -version 2>&1`
439 dnl case "$javac_version" in
441 dnl JAVAC_FLAGS="-source 1.5" ;;
443 dnl AC_MSG_RESULT([$JAVAC_FLAGS])
445 dnl dnl Where to install jarfiles.
446 dnl dnl XXX How to make it configurable?
447 dnl JAR_INSTALL_DIR=\${prefix}/share/java
448 dnl JNI_INSTALL_DIR=\${libdir}
451 dnl jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
452 dnl jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
453 dnl jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
454 dnl JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
458 dnl AC_SUBST(JAVA_HOME)
462 dnl AC_SUBST(JAVADOC)
464 dnl AC_SUBST(JNI_CFLAGS)
465 dnl AC_SUBST(JAVAC_FLAGS)
466 dnl AC_SUBST(JAR_INSTALL_DIR)
467 dnl AC_SUBST(JNI_INSTALL_DIR)
468 dnl AC_SUBST(JNI_VERSION_INFO)
470 dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
472 dnl dnl Check for Haskell (GHC).
473 dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
475 dnl AM_CONDITIONAL([HAVE_HASKELL],
476 dnl [test "x$GHC" != "xno"])
478 dnl Produce output files.
479 AC_CONFIG_HEADERS([config.h])
480 AC_CONFIG_FILES([Makefile
483 gnulib/tests/Makefile
488 ocaml/Makefile ocaml/META
489 perl/Makefile perl/Makefile.PL
493 ruby/Makefile ruby/Rakefile
496 AC_CONFIG_FILES([python/run-python-tests], [chmod +x python/run-python-tests])
502 echo "------------------------------------------------------------"
503 echo "Thank you for downloading $PACKAGE_STRING"
505 echo "This is how we have configured the optional components for you today:"
507 echo -n "OCaml bindings ...................... "
508 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
509 echo -n "Perl bindings ....................... "
510 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
511 echo -n "Python bindings ..................... "
512 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
513 echo -n "Ruby bindings ....................... "
514 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
515 dnl echo -n "Java bindings ....................... "
516 dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
517 dnl echo -n "Haskell bindings .................... "
518 dnl if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
520 echo "If any optional component is configured 'no' when you expected 'yes'"
521 echo "then you should check the preceeding messages."
523 echo "Please report bugs back to the mailing list:"
524 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
526 echo "Next you should type 'make' to build the package,"
527 echo "then 'make check' to run the tests."
528 echo "------------------------------------------------------------"