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], [1])
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
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 dnl Check for Python (optional, for Python bindings).
194 dnl AC_CHECK_PROG([PYTHON],[python],[python],[no])
198 dnl PYTHON_INCLUDEDIR=
199 dnl PYTHON_SITE_PACKAGES=
201 dnl if test "x$PYTHON" != "xno"; then
202 dnl PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
203 dnl PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
205 dnl $PYTHON_PREFIX/include/python$PYTHON_VERSION \
206 dnl /usr/include/python$PYTHON_VERSION \
207 dnl /usr/local/include/python$PYTHON_VERSION
209 dnl AC_MSG_CHECKING([Python.h in $d])
210 dnl if test -r "$d/Python.h"; then
211 dnl AC_MSG_RESULT([found])
212 dnl PYTHON_INCLUDEDIR=$d
215 dnl AC_MSG_RESULT([not found])
218 dnl $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
219 dnl $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
220 dnl /usr/lib64/python$PYTHON_VERSION/site-packages \
221 dnl /usr/lib/python$PYTHON_VERSION/site-packages \
222 dnl /usr/local/lib/python$PYTHON_VERSION/site-packages
224 dnl AC_MSG_CHECKING([for $d])
225 dnl if test -d "$d"; then
226 dnl AC_MSG_RESULT([found])
227 dnl PYTHON_SITE_PACKAGES=$d
230 dnl AC_MSG_RESULT([not found])
234 dnl AC_SUBST(PYTHON_PREFIX)
235 dnl AC_SUBST(PYTHON_VERSION)
236 dnl AC_SUBST(PYTHON_INCLUDEDIR)
237 dnl AC_SUBST(PYTHON_SITE_PACKAGES)
239 dnl AM_CONDITIONAL([HAVE_PYTHON],
240 dnl [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
242 dnl dnl Check for Ruby and rake (optional, for Ruby bindings).
243 dnl AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
244 dnl AC_CHECK_PROG([RAKE],[rake],[rake],[no])
246 dnl AM_CONDITIONAL([HAVE_RUBY],
247 dnl [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
249 dnl dnl Check for Java.
250 dnl AC_ARG_WITH(java_home,
251 dnl [AS_HELP_STRING([--with-java-home],
252 dnl [specify path to JDK directory @<:@default=check@:>@])],
254 dnl [with_java_home=check])
256 dnl if test "x$with_java_home" != "xno"; then
257 dnl if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
259 dnl # Reject unsafe characters in $JAVA_HOME
262 dnl case $JAVA_HOME in
263 dnl *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
264 dnl AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
266 dnl if test -d "$with_java_home"; then
267 dnl JAVA_HOME="$with_java_home"
269 dnl AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
273 dnl if test "x$JAVA_HOME" = "x"; then
274 dnl # Look for Java in some likely locations.
276 dnl /usr/lib/jvm/java \
277 dnl /usr/lib/jvm/java-6-openjdk
279 dnl if test -d $d -a -f $d/bin/java; then
286 dnl if test "x$JAVA_HOME" != "x"; then
287 dnl AC_MSG_CHECKING(for JDK in $JAVA_HOME)
288 dnl if test ! -x "$JAVA_HOME/bin/java"; then
289 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
291 dnl JAVA="$JAVA_HOME/bin/java"
293 dnl if test ! -x "$JAVA_HOME/bin/javac"; then
294 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
296 dnl JAVAC="$JAVA_HOME/bin/javac"
298 dnl if test ! -x "$JAVA_HOME/bin/javah"; then
299 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
301 dnl JAVAH="$JAVA_HOME/bin/javah"
303 dnl if test ! -x "$JAVA_HOME/bin/javadoc"; then
304 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
306 dnl JAVADOC="$JAVA_HOME/bin/javadoc"
308 dnl if test ! -x "$JAVA_HOME/bin/jar"; then
309 dnl AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
311 dnl JAR="$JAVA_HOME/bin/jar"
313 dnl java_version=`$JAVA -version 2>&1 | grep "java version"`
314 dnl AC_MSG_RESULT(found $java_version in $JAVA_HOME)
317 dnl AC_MSG_CHECKING([for jni.h])
318 dnl if test -f "$JAVA_HOME/include/jni.h"; then
319 dnl JNI_CFLAGS="-I$JAVA_HOME/include"
321 dnl if test "`find $JAVA_HOME -name jni.h`" != ""; then
322 dnl head=`find $JAVA_HOME -name jni.h | tail -1`
323 dnl dir=`dirname "$head"`
324 dnl JNI_CFLAGS="-I$dir"
326 dnl AC_MSG_FAILURE([missing jni.h header file])
329 dnl AC_MSG_RESULT([$JNI_CFLAGS])
331 dnl dnl Find jni_md.h.
332 dnl AC_MSG_CHECKING([for jni_md.h])
333 dnl case "$build_os" in
334 dnl *linux*) system="linux" ;;
335 dnl *SunOS*) system="solaris" ;;
336 dnl *cygwin*) system="win32" ;;
337 dnl *) system="$build_os" ;;
339 dnl if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
340 dnl JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
342 dnl if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
343 dnl head=`find $JAVA_HOME -name jni_md.h | tail -1`
344 dnl dir=`dirname "$head"`
345 dnl JNI_CFLAGS="$JNI_CFLAGS -I$dir"
347 dnl AC_MSG_FAILURE([missing jni_md.h header file])
350 dnl AC_MSG_RESULT([$JNI_CFLAGS])
352 dnl dnl Need extra version flag?
353 dnl AC_MSG_CHECKING([extra javac flags])
355 dnl javac_version=`$JAVAC -version 2>&1`
356 dnl case "$javac_version" in
358 dnl JAVAC_FLAGS="-source 1.5" ;;
360 dnl AC_MSG_RESULT([$JAVAC_FLAGS])
362 dnl dnl Where to install jarfiles.
363 dnl dnl XXX How to make it configurable?
364 dnl JAR_INSTALL_DIR=\${prefix}/share/java
365 dnl JNI_INSTALL_DIR=\${libdir}
368 dnl jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
369 dnl jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
370 dnl jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
371 dnl JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
375 dnl AC_SUBST(JAVA_HOME)
379 dnl AC_SUBST(JAVADOC)
381 dnl AC_SUBST(JNI_CFLAGS)
382 dnl AC_SUBST(JAVAC_FLAGS)
383 dnl AC_SUBST(JAR_INSTALL_DIR)
384 dnl AC_SUBST(JNI_INSTALL_DIR)
385 dnl AC_SUBST(JNI_VERSION_INFO)
387 dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
389 dnl dnl Check for Haskell (GHC).
390 dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
392 dnl AM_CONDITIONAL([HAVE_HASKELL],
393 dnl [test "x$GHC" != "xno"])
395 dnl Produce output files.
396 AC_CONFIG_HEADERS([config.h])
397 AC_CONFIG_FILES([Makefile
399 gnulib/tests/Makefile
404 ocaml/Makefile ocaml/META
405 perl/Makefile perl/Makefile.PL
414 echo "------------------------------------------------------------"
415 echo "Thank you for downloading $PACKAGE_STRING"
417 echo "This is how we have configured the optional components for you today:"
419 echo -n "OCaml bindings ...................... "
420 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
421 echo -n "Perl bindings ....................... "
422 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
423 dnl echo -n "Python bindings ..................... "
424 dnl if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
425 dnl echo -n "Ruby bindings ....................... "
426 dnl if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
427 dnl echo -n "Java bindings ....................... "
428 dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
429 dnl echo -n "Haskell bindings .................... "
430 dnl if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
432 echo "If any optional component is configured 'no' when you expected 'yes'"
433 echo "then you should check the preceeding messages."
435 echo "Please report bugs back to the mailing list:"
436 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
438 echo "Next you should type 'make' to build the package,"
439 echo "then 'make check' to run the tests."
440 echo "------------------------------------------------------------"