ruby: Test against locally built library.
[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], [0])
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 Check for pod2man and pod2text.
137 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
138 test "x$POD2MAN" = "xno" &&
139      AC_MSG_ERROR([pod2man must be installed])
140 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
141 test "x$POD2TEXT" = "xno" &&
142      AC_MSG_ERROR([pod2text must be installed])
143
144 dnl Readline.
145 AC_ARG_WITH([readline],
146     [AS_HELP_STRING([--with-readline],
147         [support fancy command line editing @<:@default=check@:>@])],
148     [],
149     [with_readline=check])
150
151 LIBREADLINE=
152 AS_IF([test "x$with_readline" != xno],
153     [AC_CHECK_LIB([readline], [main],
154         [AC_SUBST([LIBREADLINE], ["-lreadline"])
155          AC_DEFINE([HAVE_LIBREADLINE], [1],
156                    [Define if you have libreadline])
157         ],
158         [if test "x$with_readline" != xcheck; then
159          AC_MSG_FAILURE(
160              [--with-readline was given, but test for readline failed])
161          fi
162         ])])
163
164 dnl For i18n.
165 AM_GNU_GETTEXT([external])
166 AM_GNU_GETTEXT_VERSION([0.17])
167
168 dnl libxml2.
169 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
170 AC_SUBST([LIBXML2_CFLAGS])
171 AC_SUBST([LIBXML2_LIBS])
172
173 dnl Check for OCaml (optional, for OCaml bindings).
174 AC_PROG_OCAML
175 AC_PROG_FINDLIB
176 AM_CONDITIONAL([HAVE_OCAML],
177     [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
178 AM_CONDITIONAL([HAVE_OCAMLOPT],
179     [test "x$OCAMLOPT" != "xno" && test "x$OCAMLFIND" != "xno"])
180
181 if test "x$OCAMLC" != "xno"; then
182     dnl Check if we have caml/unixsupport.h header (OCaml bindings only).
183     old_CFLAGS="$CFLAGS"
184     CFLAGS="$CFLAGS -I$OCAMLLIB"
185     AC_CHECK_HEADERS([caml/unixsupport.h],[],[],
186     [
187     #include <caml/config.h>
188     #include <caml/mlvalues.h>
189     ])
190     CFLAGS="$old_CFLAGS"
191
192     dnl Do we have function caml_raise_with_args?
193     f=caml_raise_with_args
194     AC_MSG_CHECKING([for function $f])
195     echo "char $f (); char foo() { return $f (); }" > conftest.c
196     rm -f conftest_ml.ml
197     touch conftest_ml.ml
198     if $OCAMLC -c conftest.c 2>/dev/null && \
199        $OCAMLC -c conftest_ml.ml 2>/dev/null && \
200        $OCAMLC conftest.o conftest_ml.cmo -o conftest 2>/dev/null ; then
201         AC_DEFINE([HAVE_CAML_RAISE_WITH_ARGS],[1],
202                   [Defined if function caml_raise_with_args exists.])
203         AC_MSG_RESULT([found])
204     else
205         AC_MSG_RESULT([not found])
206     fi
207     rm -f conftest conftest.* conftest_ml.*
208 fi
209
210 dnl Check for Perl (optional, for Perl bindings).
211 dnl XXX This isn't quite right, we should check for Perl devel library.
212 AC_CHECK_PROG([PERL],[perl],[perl],[no])
213
214 dnl Check for Perl modules that must be present to compile and
215 dnl test the Perl bindings.
216 missing_perl_modules=no
217 for pm in Test::More ExtUtils::MakeMaker IO::Stringy; do
218     AC_MSG_CHECKING([for $pm])
219     if ! perl -M$pm -e1 >/dev/null 2>&1; then
220         AC_MSG_RESULT([no])
221         missing_perl_modules=yes
222     else
223         AC_MSG_RESULT([yes])
224     fi
225 done
226 if test "x$missing_perl_modules" = "xyes"; then
227     AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
228 fi
229
230 AM_CONDITIONAL([HAVE_PERL],
231     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
232
233 dnl Check for Python (optional, for Python bindings).
234 AC_CHECK_PROG([PYTHON],[python],[python],[no])
235
236 PYTHON_PREFIX=
237 PYTHON_VERSION=
238
239 if test "x$PYTHON" != "xno"; then
240     PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
241     PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
242
243     AC_MSG_CHECKING([for Python include path])
244     if test -z "$PYTHON_INCLUDEDIR"; then
245         python_path=`$PYTHON -c "import distutils.sysconfig; \
246                                  print (distutils.sysconfig.get_python_inc ());"`
247         PYTHON_INCLUDEDIR=$python_path
248     fi
249     AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
250
251     AC_MSG_CHECKING([for Python site-packages path])
252     if test -z "$PYTHON_SITE_PACKAGES"; then
253         PYTHON_SITE_PACKAGES=`$PYTHON -c "import distutils.sysconfig; \
254                 print (distutils.sysconfig.get_python_lib(1,0));"`
255     fi
256     AC_MSG_RESULT([$PYTHON_SITE_PACKAGES])
257
258     old_LIBS="$LIBS"
259     LIBS="$LIBS -lpython$PYTHON_VERSION"
260     AC_CHECK_FUNCS([PyCapsule_New])
261     LIBS="$old_LIBS"
262 fi
263
264 AC_SUBST(PYTHON_PREFIX)
265 AC_SUBST(PYTHON_VERSION)
266 AC_SUBST(PYTHON_INCLUDEDIR)
267 AC_SUBST(PYTHON_SITE_PACKAGES)
268
269 AM_CONDITIONAL([HAVE_PYTHON],
270     [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
271
272 dnl Check for Ruby and rake (optional, for Ruby bindings).
273 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
274 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
275
276 AM_CONDITIONAL([HAVE_RUBY],
277     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
278
279 dnl dnl Check for Java.
280 dnl AC_ARG_WITH(java_home,
281 dnl     [AS_HELP_STRING([--with-java-home],
282 dnl         [specify path to JDK directory @<:@default=check@:>@])],
283 dnl     [],
284 dnl     [with_java_home=check])
285
286 dnl if test "x$with_java_home" != "xno"; then
287 dnl     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
288 dnl     then
289 dnl         # Reject unsafe characters in $JAVA_HOME
290 dnl         jh_lf='
291 dnl '
292 dnl         case $JAVA_HOME in
293 dnl           *[\\\"\#\$\&\'\`$jh_lf\ \ ]*)
294 dnl             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
295 dnl         esac
296 dnl         if test -d "$with_java_home"; then
297 dnl             JAVA_HOME="$with_java_home"
298 dnl         else
299 dnl             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
300 dnl         fi
301 dnl     fi
302
303 dnl     if test "x$JAVA_HOME" = "x"; then
304 dnl         # Look for Java in some likely locations.
305 dnl         for d in \
306 dnl             /usr/lib/jvm/java \
307 dnl             /usr/lib/jvm/java-6-openjdk
308 dnl         do
309 dnl             if test -d $d && test -f $d/bin/java; then
310 dnl                 JAVA_HOME=$d
311 dnl                 break
312 dnl             fi
313 dnl         done
314 dnl     fi
315
316 dnl     if test "x$JAVA_HOME" != "x"; then
317 dnl         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
318 dnl         if test ! -x "$JAVA_HOME/bin/java"; then
319 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
320 dnl         else
321 dnl             JAVA="$JAVA_HOME/bin/java"
322 dnl         fi
323 dnl         if test ! -x "$JAVA_HOME/bin/javac"; then
324 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
325 dnl         else
326 dnl             JAVAC="$JAVA_HOME/bin/javac"
327 dnl         fi
328 dnl         if test ! -x "$JAVA_HOME/bin/javah"; then
329 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
330 dnl         else
331 dnl             JAVAH="$JAVA_HOME/bin/javah"
332 dnl         fi
333 dnl         if test ! -x "$JAVA_HOME/bin/javadoc"; then
334 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
335 dnl         else
336 dnl             JAVADOC="$JAVA_HOME/bin/javadoc"
337 dnl         fi
338 dnl         if test ! -x "$JAVA_HOME/bin/jar"; then
339 dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
340 dnl         else
341 dnl             JAR="$JAVA_HOME/bin/jar"
342 dnl         fi
343 dnl         java_version=`$JAVA -version 2>&1 | grep "java version"`
344 dnl         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
345
346 dnl         dnl Find jni.h.
347 dnl         AC_MSG_CHECKING([for jni.h])
348 dnl         if test -f "$JAVA_HOME/include/jni.h"; then
349 dnl             JNI_CFLAGS="-I$JAVA_HOME/include"
350 dnl         else
351 dnl             if test "`find $JAVA_HOME -name jni.h`" != ""; then
352 dnl                 head=`find $JAVA_HOME -name jni.h | tail -1`
353 dnl                 dir=`dirname "$head"`
354 dnl                 JNI_CFLAGS="-I$dir"
355 dnl             else
356 dnl                 AC_MSG_FAILURE([missing jni.h header file])
357 dnl             fi
358 dnl         fi
359 dnl         AC_MSG_RESULT([$JNI_CFLAGS])
360
361 dnl         dnl Find jni_md.h.
362 dnl         AC_MSG_CHECKING([for jni_md.h])
363 dnl         case "$build_os" in
364 dnl         *linux*) system="linux" ;;
365 dnl         *SunOS*) system="solaris" ;;
366 dnl         *cygwin*) system="win32" ;;
367 dnl         *) system="$build_os" ;;
368 dnl         esac
369 dnl         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
370 dnl             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
371 dnl         else
372 dnl             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
373 dnl                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
374 dnl                 dir=`dirname "$head"`
375 dnl                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
376 dnl             else
377 dnl                 AC_MSG_FAILURE([missing jni_md.h header file])
378 dnl             fi
379 dnl         fi
380 dnl         AC_MSG_RESULT([$JNI_CFLAGS])
381
382 dnl         dnl Need extra version flag?
383 dnl         AC_MSG_CHECKING([extra javac flags])
384 dnl         JAVAC_FLAGS=
385 dnl         javac_version=`$JAVAC -version 2>&1`
386 dnl         case "$javac_version" in
387 dnl         *Eclipse*)
388 dnl             JAVAC_FLAGS="-source 1.5" ;;
389 dnl         esac
390 dnl         AC_MSG_RESULT([$JAVAC_FLAGS])
391
392 dnl         dnl Where to install jarfiles.
393 dnl         dnl XXX How to make it configurable?
394 dnl         JAR_INSTALL_DIR=\${prefix}/share/java
395 dnl         JNI_INSTALL_DIR=\${libdir}
396
397 dnl         dnl JNI version.
398 dnl         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
399 dnl         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
400 dnl         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
401 dnl         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
402 dnl     fi
403 dnl fi
404
405 dnl AC_SUBST(JAVA_HOME)
406 dnl AC_SUBST(JAVA)
407 dnl AC_SUBST(JAVAC)
408 dnl AC_SUBST(JAVAH)
409 dnl AC_SUBST(JAVADOC)
410 dnl AC_SUBST(JAR)
411 dnl AC_SUBST(JNI_CFLAGS)
412 dnl AC_SUBST(JAVAC_FLAGS)
413 dnl AC_SUBST(JAR_INSTALL_DIR)
414 dnl AC_SUBST(JNI_INSTALL_DIR)
415 dnl AC_SUBST(JNI_VERSION_INFO)
416
417 dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
418
419 dnl dnl Check for Haskell (GHC).
420 dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
421
422 dnl AM_CONDITIONAL([HAVE_HASKELL],
423 dnl     [test "x$GHC" != "xno"])
424
425 dnl Produce output files.
426 AC_CONFIG_HEADERS([config.h])
427 AC_CONFIG_FILES([Makefile
428                  generator/Makefile
429                  gnulib/lib/Makefile
430                  gnulib/tests/Makefile
431                  hivex.pc
432                  images/Makefile
433                  lib/Makefile
434                  lib/tools/Makefile
435                  ocaml/Makefile ocaml/META
436                  perl/Makefile perl/Makefile.PL
437                  python/Makefile
438                  po/Makefile.in
439                  regedit/Makefile
440                  ruby/Makefile ruby/Rakefile
441                  sh/Makefile
442                  xml/Makefile])
443 AC_CONFIG_FILES([python/run-python-tests], [chmod +x python/run-python-tests])
444 AC_OUTPUT
445
446 dnl Produce summary.
447 echo
448 echo
449 echo "------------------------------------------------------------"
450 echo "Thank you for downloading $PACKAGE_STRING"
451 echo
452 echo "This is how we have configured the optional components for you today:"
453 echo
454 echo -n "OCaml bindings ...................... "
455 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
456 echo -n "Perl bindings ....................... "
457 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
458 echo -n "Python bindings ..................... "
459 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
460 echo -n "Ruby bindings ....................... "
461 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
462 dnl echo -n "Java bindings ....................... "
463 dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
464 dnl echo -n "Haskell bindings .................... "
465 dnl if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
466 echo
467 echo "If any optional component is configured 'no' when you expected 'yes'"
468 echo "then you should check the preceeding messages."
469 echo
470 echo "Please report bugs back to the mailing list:"
471 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
472 echo
473 echo "Next you should type 'make' to build the package,"
474 echo "then 'make check' to run the tests."
475 echo "------------------------------------------------------------"