Mac OS X: Run glibtoolize in absence of libtoolize
[hivex.git] / configure.ac
1 # hivex
2 # Copyright (C) 2009-2011 Red Hat Inc.
3 #
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.
8 #
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.
13 #
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.
17
18 # major/minor/release must be numbers
19 m4_define([hivex_major],   [1])
20 m4_define([hivex_minor],   [3])
21 m4_define([hivex_release], [1])
22 # extra can be any string
23 m4_define([hivex_extra],   [])
24
25 AC_INIT([hivex],hivex_major.hivex_minor.hivex_release[]hivex_extra)
26 AC_CONFIG_AUX_DIR([build-aux])
27 AM_INIT_AUTOMAKE([foreign])
28
29 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
30 AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
31
32 AC_CONFIG_MACRO_DIR([m4])
33
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])
39
40 gl_EARLY
41 gl_INIT
42
43 AM_PROG_LIBTOOL
44
45 dnl Check for basic C environment.
46 AC_PROG_CC_STDC
47 AC_PROG_INSTALL
48 AC_PROG_CPP
49
50 AC_ARG_ENABLE([gcc-warnings],
51   [AS_HELP_STRING([--enable-gcc-warnings],
52                   [turn on lots of GCC warnings (for developers)])],
53   [case $enableval in
54      yes|no) ;;
55      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
56    esac
57    gl_gcc_warnings=$enableval],
58   [gl_gcc_warnings=no]
59 )
60
61 if test "$gl_gcc_warnings" = yes; then
62   gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
63   AC_SUBST([WERROR_CFLAGS])
64
65   nw=
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
91                                     # by xstrtoll.
92
93   gl_MANYWARN_ALL_GCC([ws])
94   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
95   for w in $ws; do
96     gl_WARN_ADD([$w])
97   done
98   gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
99   gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
100   gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
101
102   # In spite of excluding -Wlogical-op above, it is enabled, as of
103   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
104   gl_WARN_ADD([-Wno-logical-op])
105
106   gl_WARN_ADD([-fdiagnostics-show-option])
107
108   AC_SUBST([WARN_CFLAGS])
109
110   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
111   AC_DEFINE([_FORTIFY_SOURCE], [2],
112     [enable compile-time and run-time bounds-checking, and some warnings])
113   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
114 fi
115
116 AC_C_PROTOTYPES
117 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
118
119 AM_PROG_CC_C_O
120
121 dnl Work out how to specify the linker script to the linker.
122 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
123 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
124     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
125 AC_SUBST(VERSION_SCRIPT_FLAGS)
126
127 dnl Check support for 64 bit file offsets.
128 AC_SYS_LARGEFILE
129
130 dnl Check sizeof long.
131 AC_CHECK_SIZEOF([long])
132
133 dnl Headers.
134 AC_CHECK_HEADERS([endian.h byteswap.h])
135
136 dnl Functions.
137 AC_CHECK_FUNCS([bindtextdomain])
138
139 dnl Check for pod2man and pod2text.
140 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
141 test "x$POD2MAN" = "xno" &&
142      AC_MSG_ERROR([pod2man must be installed])
143 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
144 test "x$POD2TEXT" = "xno" &&
145      AC_MSG_ERROR([pod2text must be installed])
146
147 dnl Readline.
148 AC_ARG_WITH([readline],
149     [AS_HELP_STRING([--with-readline],
150         [support fancy command line editing @<:@default=check@:>@])],
151     [],
152     [with_readline=check])
153
154 LIBREADLINE=
155 AS_IF([test "x$with_readline" != xno],
156     [AC_CHECK_LIB([readline], [main],
157         [AC_SUBST([LIBREADLINE], ["-lreadline"])
158          AC_DEFINE([HAVE_LIBREADLINE], [1],
159                    [Define if you have libreadline])
160         ],
161         [if test "x$with_readline" != xcheck; then
162          AC_MSG_FAILURE(
163              [--with-readline was given, but test for readline failed])
164          fi
165         ])])
166
167 dnl For i18n.
168 AM_GNU_GETTEXT([external])
169 AM_GNU_GETTEXT_VERSION([0.17])
170
171 dnl libxml2.
172 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
173 AC_SUBST([LIBXML2_CFLAGS])
174 AC_SUBST([LIBXML2_LIBS])
175
176 dnl Check for OCaml (optional, for OCaml bindings).
177 AC_PROG_OCAML
178 AC_PROG_FINDLIB
179 AM_CONDITIONAL([HAVE_OCAML],
180     [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
181 AM_CONDITIONAL([HAVE_OCAMLOPT],
182     [test "x$OCAMLOPT" != "xno" && test "x$OCAMLFIND" != "xno"])
183
184 if test "x$OCAMLC" != "xno"; then
185     dnl Check if we have caml/unixsupport.h header (OCaml bindings only).
186     old_CFLAGS="$CFLAGS"
187     CFLAGS="$CFLAGS -I$OCAMLLIB"
188     AC_CHECK_HEADERS([caml/unixsupport.h],[],[],
189     [
190     #include <caml/config.h>
191     #include <caml/mlvalues.h>
192     ])
193     CFLAGS="$old_CFLAGS"
194
195     dnl Do we have function caml_raise_with_args?
196     f=caml_raise_with_args
197     AC_MSG_CHECKING([for function $f])
198     echo "char $f (); char foo() { return $f (); }" > conftest.c
199     rm -f conftest_ml.ml
200     touch conftest_ml.ml
201     if $OCAMLC -c conftest.c 2>/dev/null && \
202        $OCAMLC -c conftest_ml.ml 2>/dev/null && \
203        $OCAMLC conftest.o conftest_ml.cmo -o conftest 2>/dev/null ; then
204         AC_DEFINE([HAVE_CAML_RAISE_WITH_ARGS],[1],
205                   [Defined if function caml_raise_with_args exists.])
206         AC_MSG_RESULT([found])
207     else
208         AC_MSG_RESULT([not found])
209     fi
210     rm -f conftest conftest.* conftest_ml.*
211 fi
212
213 dnl Check for Perl (optional, for Perl bindings).
214 dnl XXX This isn't quite right, we should check for Perl devel library.
215 AC_CHECK_PROG([PERL],[perl],[perl],[no])
216
217 dnl Check for Perl modules that must be present to compile and
218 dnl test the Perl bindings.
219 missing_perl_modules=no
220 for pm in Test::More ExtUtils::MakeMaker IO::Stringy; do
221     AC_MSG_CHECKING([for $pm])
222     if ! perl -M$pm -e1 >/dev/null 2>&1; then
223         AC_MSG_RESULT([no])
224         missing_perl_modules=yes
225     else
226         AC_MSG_RESULT([yes])
227     fi
228 done
229 if test "x$missing_perl_modules" = "xyes"; then
230     AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
231 fi
232
233 AM_CONDITIONAL([HAVE_PERL],
234     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
235
236 dnl Check for Python (optional, for Python bindings).
237 AC_CHECK_PROG([PYTHON],[python],[python],[no])
238
239 PYTHON_PREFIX=
240 PYTHON_VERSION=
241
242 if test "x$PYTHON" != "xno"; then
243     PYTHON_PREFIX=`$PYTHON -c "import sys; print(sys.prefix)"`
244     PYTHON_VERSION=`$PYTHON -c "import sys; print(sys.version[[0:3]])"`
245
246     AC_MSG_CHECKING([for Python include path])
247     if test -z "$PYTHON_INCLUDEDIR"; then
248         python_path=`$PYTHON -c "import distutils.sysconfig; \
249                                  print (distutils.sysconfig.get_python_inc ());"`
250         PYTHON_INCLUDEDIR=$python_path
251     fi
252     AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
253
254     AC_MSG_CHECKING([for Python site-packages path])
255     if test -z "$PYTHON_SITE_PACKAGES"; then
256         PYTHON_SITE_PACKAGES=`$PYTHON -c "import distutils.sysconfig; \
257                 print (distutils.sysconfig.get_python_lib(1,0));"`
258     fi
259     AC_MSG_RESULT([$PYTHON_SITE_PACKAGES])
260
261     old_LIBS="$LIBS"
262     LIBS="$LIBS -lpython$PYTHON_VERSION"
263     AC_CHECK_FUNCS([PyCapsule_New])
264     LIBS="$old_LIBS"
265 fi
266
267 AC_SUBST(PYTHON_PREFIX)
268 AC_SUBST(PYTHON_VERSION)
269 AC_SUBST(PYTHON_INCLUDEDIR)
270 AC_SUBST(PYTHON_SITE_PACKAGES)
271
272 AM_CONDITIONAL([HAVE_PYTHON],
273     [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
274
275 dnl Check for Ruby and rake (optional, for Ruby bindings).
276 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
277 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
278
279 AM_CONDITIONAL([HAVE_RUBY],
280     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
281
282 dnl dnl Check for Java.
283 dnl AC_ARG_WITH(java_home,
284 dnl     [AS_HELP_STRING([--with-java-home],
285 dnl         [specify path to JDK directory @<:@default=check@:>@])],
286 dnl     [],
287 dnl     [with_java_home=check])
288
289 dnl if test "x$with_java_home" != "xno"; then
290 dnl     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
291 dnl     then
292 dnl         # Reject unsafe characters in $JAVA_HOME
293 dnl         jh_lf='
294 dnl '
295 dnl         case $JAVA_HOME in
296 dnl           *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
297 dnl             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
298 dnl         esac
299 dnl         if test -d "$with_java_home"; then
300 dnl             JAVA_HOME="$with_java_home"
301 dnl         else
302 dnl             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
303 dnl         fi
304 dnl     fi
305
306 dnl     if test "x$JAVA_HOME" = "x"; then
307 dnl         # Look for Java in some likely locations.
308 dnl         for d in \
309 dnl             /usr/lib/jvm/java \
310 dnl             /usr/lib/jvm/java-6-openjdk
311 dnl         do
312 dnl             if test -d $d && test -f $d/bin/java; then
313 dnl                 JAVA_HOME=$d
314 dnl                 break
315 dnl             fi
316 dnl         done
317 dnl     fi
318
319 dnl     if test "x$JAVA_HOME" != "x"; then
320 dnl         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
321 dnl         if test ! -x "$JAVA_HOME/bin/java"; then
322 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
323 dnl         else
324 dnl             JAVA="$JAVA_HOME/bin/java"
325 dnl         fi
326 dnl         if test ! -x "$JAVA_HOME/bin/javac"; then
327 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
328 dnl         else
329 dnl             JAVAC="$JAVA_HOME/bin/javac"
330 dnl         fi
331 dnl         if test ! -x "$JAVA_HOME/bin/javah"; then
332 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
333 dnl         else
334 dnl             JAVAH="$JAVA_HOME/bin/javah"
335 dnl         fi
336 dnl         if test ! -x "$JAVA_HOME/bin/javadoc"; then
337 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
338 dnl         else
339 dnl             JAVADOC="$JAVA_HOME/bin/javadoc"
340 dnl         fi
341 dnl         if test ! -x "$JAVA_HOME/bin/jar"; then
342 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
343 dnl         else
344 dnl             JAR="$JAVA_HOME/bin/jar"
345 dnl         fi
346 dnl         java_version=`$JAVA -version 2>&1 | grep "java version"`
347 dnl         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
348
349 dnl         dnl Find jni.h.
350 dnl         AC_MSG_CHECKING([for jni.h])
351 dnl         if test -f "$JAVA_HOME/include/jni.h"; then
352 dnl             JNI_CFLAGS="-I$JAVA_HOME/include"
353 dnl         else
354 dnl             if test "`find $JAVA_HOME -name jni.h`" != ""; then
355 dnl                 head=`find $JAVA_HOME -name jni.h | tail -1`
356 dnl                 dir=`dirname "$head"`
357 dnl                 JNI_CFLAGS="-I$dir"
358 dnl             else
359 dnl                 AC_MSG_FAILURE([missing jni.h header file])
360 dnl             fi
361 dnl         fi
362 dnl         AC_MSG_RESULT([$JNI_CFLAGS])
363
364 dnl         dnl Find jni_md.h.
365 dnl         AC_MSG_CHECKING([for jni_md.h])
366 dnl         case "$build_os" in
367 dnl         *linux*) system="linux" ;;
368 dnl         *SunOS*) system="solaris" ;;
369 dnl         *cygwin*) system="win32" ;;
370 dnl         *) system="$build_os" ;;
371 dnl         esac
372 dnl         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
373 dnl             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
374 dnl         else
375 dnl             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
376 dnl                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
377 dnl                 dir=`dirname "$head"`
378 dnl                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
379 dnl             else
380 dnl                 AC_MSG_FAILURE([missing jni_md.h header file])
381 dnl             fi
382 dnl         fi
383 dnl         AC_MSG_RESULT([$JNI_CFLAGS])
384
385 dnl         dnl Need extra version flag?
386 dnl         AC_MSG_CHECKING([extra javac flags])
387 dnl         JAVAC_FLAGS=
388 dnl         javac_version=`$JAVAC -version 2>&1`
389 dnl         case "$javac_version" in
390 dnl         *Eclipse*)
391 dnl             JAVAC_FLAGS="-source 1.5" ;;
392 dnl         esac
393 dnl         AC_MSG_RESULT([$JAVAC_FLAGS])
394
395 dnl         dnl Where to install jarfiles.
396 dnl         dnl XXX How to make it configurable?
397 dnl         JAR_INSTALL_DIR=\${prefix}/share/java
398 dnl         JNI_INSTALL_DIR=\${libdir}
399
400 dnl         dnl JNI version.
401 dnl         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
402 dnl         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
403 dnl         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
404 dnl         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
405 dnl     fi
406 dnl fi
407
408 dnl AC_SUBST(JAVA_HOME)
409 dnl AC_SUBST(JAVA)
410 dnl AC_SUBST(JAVAC)
411 dnl AC_SUBST(JAVAH)
412 dnl AC_SUBST(JAVADOC)
413 dnl AC_SUBST(JAR)
414 dnl AC_SUBST(JNI_CFLAGS)
415 dnl AC_SUBST(JAVAC_FLAGS)
416 dnl AC_SUBST(JAR_INSTALL_DIR)
417 dnl AC_SUBST(JNI_INSTALL_DIR)
418 dnl AC_SUBST(JNI_VERSION_INFO)
419
420 dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
421
422 dnl dnl Check for Haskell (GHC).
423 dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
424
425 dnl AM_CONDITIONAL([HAVE_HASKELL],
426 dnl     [test "x$GHC" != "xno"])
427
428 dnl Produce output files.
429 AC_CONFIG_HEADERS([config.h])
430 AC_CONFIG_FILES([Makefile
431                  generator/Makefile
432                  gnulib/lib/Makefile
433                  gnulib/tests/Makefile
434                  hivex.pc
435                  images/Makefile
436                  lib/Makefile
437                  lib/tools/Makefile
438                  ocaml/Makefile ocaml/META
439                  perl/Makefile perl/Makefile.PL
440                  python/Makefile
441                  po/Makefile.in
442                  regedit/Makefile
443                  ruby/Makefile ruby/Rakefile
444                  sh/Makefile
445                  xml/Makefile])
446 AC_CONFIG_FILES([python/run-python-tests], [chmod +x python/run-python-tests])
447 AC_OUTPUT
448
449 dnl Produce summary.
450 echo
451 echo
452 echo "------------------------------------------------------------"
453 echo "Thank you for downloading $PACKAGE_STRING"
454 echo
455 echo "This is how we have configured the optional components for you today:"
456 echo
457 echo -n "OCaml bindings ...................... "
458 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
459 echo -n "Perl bindings ....................... "
460 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
461 echo -n "Python bindings ..................... "
462 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
463 echo -n "Ruby bindings ....................... "
464 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
465 dnl echo -n "Java bindings ....................... "
466 dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
467 dnl echo -n "Haskell bindings .................... "
468 dnl if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
469 echo
470 echo "If any optional component is configured 'no' when you expected 'yes'"
471 echo "then you should check the preceeding messages."
472 echo
473 echo "Please report bugs back to the mailing list:"
474 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
475 echo
476 echo "Next you should type 'make' to build the package,"
477 echo "then 'make check' to run the tests."
478 echo "------------------------------------------------------------"