Fixed: A fix by Francesco Cat applied (mistakes made during code style improvements...
[ode.git] / configure.ac
blobc45c82338e15aaedfc9643fce20ae81a7861b1e1
1 dnl AC_INIT does not take a macro as a version nr: set it separately! - Bram
2 AC_INIT([ODE],[0.13.1],[ode@ode.org])
3 ODE_VERSION=0.13.1
4 AC_SUBST(ODE_VERSION)
6 # Those are instructions from the Libtool manual:
7 #  1. Start with version information of `0:0:0' for each libtool library.
9 #  2. Update the version information only immediately before a public
10 #     release of your software.  More frequent updates are unnecessary,
11 #     and only guarantee that the current interface number gets larger
12 #     faster.
14 #  3. If the library source code has changed at all since the last
15 #     update, then increment REVISION (`C:R:A' becomes `C:r+1:A').
17 #  4. If any interfaces have been added, removed, or changed since the
18 #     last update, increment CURRENT, and set REVISION to 0.
20 #  5. If any interfaces have been added since the last public release,
21 #     then increment AGE.
23 #  6. If any interfaces have been removed since the last public release,
24 #     then set AGE to 0.
25 CURRENT=5
26 REVISION=0
27 AGE=1
29 AC_ARG_ENABLE(version-info,
30         AS_HELP_STRING([--disable-version-info],
31                 [don't encode version information in the generated library]),
32         version_info=$enableval,
33         version_info=yes)
34 if test x$version_info = xyes
35 then
36     ODE_VERSION_INFO="-version-info $CURRENT:$REVISION:$AGE"
37 else
38     ODE_VERSION_INFO="-avoid-version"
40 AC_SUBST(ODE_VERSION_INFO)
43 AC_CONFIG_SRCDIR([ode/src/ode.cpp])
44 AC_CONFIG_MACRO_DIR([m4])
46 AC_CANONICAL_HOST
48 AM_INIT_AUTOMAKE([1.10 foreign])
49 AC_CONFIG_HEADERS([ode/src/config.h])
51 dnl This is needed because we have subdirectories
52 AC_PROG_MAKE_SET
53 AC_PROG_CXX
54 AC_PROG_CC
55 AM_PROG_CC_C_O
56 AC_PROG_CPP
57 AC_PROG_AWK
58 AC_PROG_INSTALL
59 AC_PROG_LN_S
60 AC_PROG_MKDIR_P
61 LT_INIT([disable-shared win32-dll])
62 AC_CHECK_TOOLS([WINDRES], [windres])
64 AC_C_BIGENDIAN
65 AC_C_INLINE
66 AC_C_VOLATILE
67 PKG_PROG_PKG_CONFIG
69 AC_ARG_VAR([DOXYGEN], [set to doxygen binary to generate doxygen docs])
70 AC_CHECK_PROGS([DOXYGEN], [doxygen])
71 AM_CONDITIONAL([HAVE_DOXYGEN], [test x$DOXYGEN = xdoxygen])
74 dnl this may NOT be the machine on which the code is going to run in,
75 dnl so allow users to compile programs for their target machine.
76 pentium=no
77 cpu64=no
78 case "$host_cpu" in
79   i586 | i686 | i786 )
80         pentium=yes
81         AC_DEFINE(PENTIUM,1,[compiling for a pentium on a gcc-based platform?])
82     ;;
83   x86_64* )
84         pentium=yes
85         cpu64=yes
86         AC_DEFINE(X86_64_SYSTEM,1,[compiling for a X86_64 system on a gcc-based platform?])
87     ;;
88 esac
90 AM_CONDITIONAL(X86_64_SYSTEM, test x$cpu64 = xyes)
97 dnl check for required headers
98 AC_CHECK_HEADERS( [alloca.h stdio.h inttypes.h stdint.h stdlib.h math.h \
99                   string.h stdarg.h malloc.h float.h time.h sys/time.h \
100                   limits.h stddef.h])
103 opcode=no
104 gimpact=no
105 AC_ARG_WITH(trimesh, AS_HELP_STRING([--with-trimesh=[opcode|gimpact|none]],
106         [use the specified system for trimesh support @<:@default=opcode@:>@]),
107         trimesh=$withval,trimesh=opcode
109 if test "$trimesh" = opcode
110 then
111   opcode=yes
113 if test "$trimesh" = gimpact
114 then
115   gimpact=yes
118 AM_CONDITIONAL(OPCODE,  test $opcode  = yes)
119 AM_CONDITIONAL(GIMPACT, test $gimpact = yes)
120 AM_CONDITIONAL(TRIMESH, test $opcode = yes -o $gimpact = yes)
123 AC_MSG_CHECKING(if double precision is requested)
124 AC_ARG_ENABLE(double-precision,
125         AS_HELP_STRING([--enable-double-precision],
126         [Configure ODE to work with double precision, if not specified, single precision is used @<:@default=no@:>@]),
127         usedouble=$enableval,usedouble=no)
128 AC_MSG_RESULT([$usedouble])
129 if test "$usedouble" = yes;
130 then
131         ODE_PRECISION=dDOUBLE
132 else
133         ODE_PRECISION=dSINGLE
135 AC_SUBST(ODE_PRECISION)
138 AC_ARG_WITH([drawstuff],
139     AS_HELP_STRING([--with-drawstuff=X11|Win32|OSX|none],
140         [force a particular drawstuff implementation or disable it.[default=autodetect]]),
141     [drawstuff=$withval],[drawstuff=])
143 dnl Set some Platform Specific Variables
144 EXTRA_LIBTOOL_LDFLAGS=
145 case "$host_os" in
146   cygwin* | mingw*)
147     if test "x$drawstuff" = x
148     then
149        drawstuff="Win32" # if in a Windows enviroment
150     fi
151     EXTRA_LIBTOOL_LDFLAGS="-no-undefined"
152     ;;
153   *apple* | *darwin*) # For Mac OS X
154     if test "x$drawstuff" = x
155     then
156        drawstuff="OSX"
157     fi
158     dnl We need to use C++ compilation and linking for ode on Mac
159     dnl Might as well do it for all code.
160     CC="$CXX"
161     LINK="$CXXLINK"
162     ;;
163   *)
164     if test "x$drawstuff" = x
165     then
166        drawstuff="X11" # if anything else default to X11
167     fi
168     ;;
169 esac
170 AC_SUBST(EXTRA_LIBTOOL_LDFLAGS)
173 dnl Set Drawstuff variables
174 AC_MSG_CHECKING([which drawstuff lib to build])
175 AC_MSG_RESULT($drawstuff)
177 if test "x$drawstuff" = "xX11"
178 then
179     # The built-in macro, X_PATH, causes too many problems, these days everyone uses Xorg,
180     # so we can ask pkg-config to find it for us.
181     PKG_CHECK_MODULES(X11, x11, [], [drawstuff="none"])
184 dnl Check for OpenGL
185 if test "x$drawstuff" = "xOSX"; then
186   AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1],
187             [Use the Apple OpenGL framework.])
188   GL_LIBS="-framework OpenGL -framework GLUT"
189 elif test "x$drawstuff" != "xnone"; then
190   have_gl_headers=yes
191   AC_CHECK_HEADERS(GL/gl.h GL/glu.h GL/glext.h, ,
192         [have_gl_headers=no],
193        [[#ifdef WIN32
194          #include <windows.h>
195          #endif
196          #if HAVE_GL_GL_H
197          #include <GL/gl.h>
198          #endif
199              #if HAVE_GL_GLU_H
200          #include <GL/glu.h>
201          #endif
202        ]])
203   have_gl=no
204   have_glu=no
205   TEMP_LDFLAGS="$LDFLAGS"
206   AC_CHECK_LIB(GL, main, [GL_LIBS="-lGL"; have_gl=yes])
207   AC_CHECK_LIB(GLU, main, [GL_LIBS="-lGLU $GL_LIBS"; have_glu=yes], , -lGL)
208   AC_CHECK_LIB(opengl32, main, [GL_LIBS="-lopengl32"; have_gl=yes])
209   AC_CHECK_LIB(glu32, main, [GL_LIBS="-lglu32 $GL_LIBS"; have_glu=yes], , -lopengl32)
210   LDFLAGS="$TEMP_LDFLAGS"
211   if test $have_gl = no -o $have_glu = no -o $have_gl_headers = no; then
212     drawstuff="none"
213   fi
215 AC_SUBST(GL_LIBS)
217 dnl Set Conditionals
218 AM_CONDITIONAL(WIN32, test x$drawstuff = xWin32)
219 AM_CONDITIONAL(X11, test x$drawstuff = xX11)
220 AM_CONDITIONAL(OSX, test x$drawstuff = xOSX)
221 AM_CONDITIONAL(ENABLE_DRAWSTUFF, test x$drawstuff != xnone)
223 dnl Check if we want to build demos
224 AC_MSG_CHECKING(if demos should be built)
225 AC_ARG_ENABLE(demos,
226         AS_HELP_STRING([--disable-demos], [don't build demos]),
227         enable_demos=$enableval,enable_demos=yes)
228 if test x$drawstuff = xnone -a x$enable_demos = xyes ; then
229     enable_demos=no
230     AC_MSG_RESULT($enable_demos)
231     AC_MSG_WARN([Demos will not be built because OpenGL doesn't seem to work. See `config.log' for details.])
232 else
233     AC_MSG_RESULT($enable_demos)
237 dnl stdc++ is required when linking C programs against ode
238 AC_CHECK_LIB(stdc++,main,[LIBSTDCXX="-lstdc++"],[LIBSTDCXX=])
239 AC_SUBST(LIBSTDCXX)
240 AC_CHECK_LIB(pthread,main,[LIBS="$LIBS -lpthread"])
243 dnl test if we will build demos
244 AM_CONDITIONAL(ENABLE_DEMOS, test x$enable_demos = xyes)
247 dnl Check if the user wants the old timesh collider
248 old_trimesh=no
249 AC_ARG_ENABLE([old-trimesh], AS_HELP_STRING([--enable-old-trimesh],[enable use of the old trimesh collider]),
250         [old_trimesh=$enableval]
251         )
252 if test x$old_trimesh = xyes -a $trimesh = opcode; then
253         AC_DEFINE(dTRIMESH_OPCODE_USE_OLD_TRIMESH_TRIMESH_COLLIDER, 1,
254                 [Use the old trimesh-trimesh collider])
255 else
256         old_trimesh=no
260 dnl Check if the user wants to profile ODE using gprof
261 AC_MSG_CHECKING(for gprof)
262 AC_ARG_ENABLE([gprof],
263         AS_HELP_STRING([--enable-gprof],[enable profiling with gprof]),
264         gprof=$enableval,
265         gprof=no)
266 if test "$gprof" != no
267 then
268     CFLAGS="-pg $CFLAGS"
269     CXXFLAGS="-pg $CXXFLAGS"
270     AC_MSG_RESULT(enabled)
271     AC_CHECK_LIB(gmon, main,[LIBS="$LIBS -lgmon"])
272 else
273     AC_MSG_RESULT(no)
276 # Checks for typedefs, structures, and compiler characteristics.
277 AC_HEADER_STDBOOL
278 AC_C_INLINE
279 AC_TYPE_INT32_T
280 AC_FUNC_OBSTACK
281 AC_TYPE_SIZE_T
282 AC_TYPE_UINT32_T
284 dnl Check for autoscan sugested functions
285 AC_CHECK_LIB(m, [main])
286 AC_CHECK_LIB(sunmath, [main])
287 AC_CHECK_FUNCS([floor memmove memset sqrt sqrtf sinf cosf fabsf atan2f fmodf copysignf copysign snprintf vsnprintf gettimeofday isnan isnanf _isnan _isnanf __isnan __isnanf strchr strstr pthread_attr_setstacklazy])
288 AC_FUNC_ALLOCA 
290 AC_ARG_ENABLE([threading-intf],
291         AS_HELP_STRING([--disable-threading-intf],
292             [disable threading interface support (external implementations may not be assigned; overrides --enable-builtin-threading-impl)]
293         ),
294         threading_intf=$enableval,threading_intf=yes)
295 AC_ARG_ENABLE([ou],
296         AS_HELP_STRING([--enable-ou],
297             [use TLS for global caches (allows threaded collision checks for isolated spaces)]
298         ),
299         use_ou_tls=$enableval,use_ou_tls=no)
300 use_ou="no"
301 if test x$use_ou_tls = xyes -o x$threading_intf = xyes
302 then
303     use_ou="yes"
305 if test x$use_ou = xyes
306 then
307     OU_NAMESPACE=odeou
308     AC_CONFIG_COMMANDS_POST([export OU_NAMESPACE=odeou])
309     AC_DEFINE([_OU_NAMESPACE],[odeou],[libou namespace for ODE])
310     AC_DEFINE([dOU_ENABLED],[1],[Generic OU features are enabled])
311     AC_DEFINE([dATOMICS_ENABLED],[1],[Atomic API of OU is enabled])
312     if test x$use_ou_tls = xyes
313     then
314       AC_DEFINE([dTLS_ENABLED],[1],[Thread Local Storage API of OU is enabled])
315     fi
317     case "$host_os" in
318       cygwin* | mingw*)
319         targetos=_OU_TARGET_OS_WINDOWS
320         ;;
321       *qnx*)
322         targetos=_OU_TARGET_OS_QNX
323         ;;
324       *apple* | *darwin*)
325         targetos=_OU_TARGET_OS_MAC
326         ;;
327       *sunos*)
328         targetos=_OU_TARGET_OS_SUNOS
329         ;;
330       *aix*)
331         targetos=_OU_TARGET_OS_AIX
332         ;;
333       *)
334         targetos=_OU_TARGET_OS_GENUNIX
335         ;;
336     esac
338     if test $targetos = _OU_TARGET_OS_MAC
339     then
340         MAC_OS_X_VERSION=1000
341         AC_CHECK_FUNC([OSAtomicAdd32Barrier], [MAC_OS_X_VERSION=1040])
342         AC_CHECK_FUNC([OSAtomicAnd32OrigBarrier], [MAC_OS_X_VERSION=1050])
343         AC_DEFINE_UNQUOTED(MAC_OS_X_VERSION, $MAC_OS_X_VERSION, [Mac OS X version setting for OU Library])
344     fi
345     
346     if test $targetos = _OU_TARGET_OS_SUNOS
347     then
348         AC_CHECK_FUNC(atomic_inc_32_nv, [],
349             [targetos=_OU_TARGET_OS_GENUNIX])
350     fi
351     
352     AC_DEFINE_UNQUOTED(_OU_TARGET_OS, $targetos, [Target OS setting for OU Library])
354 AC_CONFIG_SUBDIRS([ou])
355 AM_CONDITIONAL(ENABLE_OU, test x$use_ou = xyes)
357 if test x$threading_intf = xyes
358 then
359     AC_ARG_ENABLE([builtin-threading-impl],
360         AS_HELP_STRING([--enable-builtin-threading-impl],
361             [include built-in multithreaded threading implementation (still must be created and assigned to be used)]
362         ),
363         use_builtin_threading_impl=$enableval,use_builtin_threading_impl=no)
364     if test x$use_builtin_threading_impl = xyes
365     then
366         AC_DEFINE([dBUILTIN_THREADING_IMPL_ENABLED],[1],[Built-in multithreaded threading implementation included])
367     fi
368 else
369     AC_DEFINE([dTHREADING_INTF_DISABLED],[1],[Threading interface is disabled])
370     use_builtin_threading_impl=no
373 col_cylinder_cylinder=none
374 col_box_cylinder=default
375 col_capsule_cylinder=none
376 col_convex_box=none
377 col_convex_capsule=none
378 col_convex_cylinder=none
379 col_convex_sphere=default
380 col_convex_convex=default
383 libccd=no
384 libccd_all=no
385 AC_ARG_ENABLE(libccd, AS_HELP_STRING([--enable-libccd],
386             [enable all libccd colliders (except box-cylinder)]),
387             libccd_all=$enableval)
388 if test x$libccd_all = xyes
389 then
390     col_cylinder_cylinder=libccd
391     col_capsule_cylinder=libccd
392     col_convex_box=libccd
393     col_convex_capsule=libccd
394     col_convex_cylinder=libccd
395     col_convex_sphere=libccd
396     col_convex_convex=libccd
397     libccd=yes
401 AC_ARG_WITH([cylinder-cylinder], AS_HELP_STRING([--with-cylinder-cylinder=@<:@none,libccd@:>@], [use specific collider for cylinder-cylinder]),
402             col_cylinder_cylinder=$withval)
404 AC_ARG_WITH([box-cylinder],
405         AS_HELP_STRING([--with-box-cylinder=@<:@default,libccd@:>@], [use specific collider for box-cylinder]),
406             col_box_cylinder=$withval)
408 AC_ARG_WITH([capsule-cylinder], AS_HELP_STRING([--with-capsule-cylinder=@<:@none,libccd@:>@], [use specific collider for capsule-cylinder]),
409             col_capsule_cylinder=$withval)
411 AC_ARG_WITH([convex-box], AS_HELP_STRING([--with-convex-box=@<:@none,libccd@:>@], [use specific collider for convex-box]),
412             col_convex_box=$withval)
414 AC_ARG_WITH([convex-capsule], AS_HELP_STRING([--with-convex-capsule=@<:@none,libccd@:>@], [use specific collider for convex-capsule]),
415             col_convex_capsule=$withval)
417 AC_ARG_WITH([convex-cylinder], AS_HELP_STRING([--with-convex-cylinder=@<:@none,libccd@:>@], [use specific collider for convex-cylinder]),
418             col_convex_cylinder=$withval)
420 AC_ARG_WITH([convex-sphere], AS_HELP_STRING([--with-convex-sphere=@<:@default,libccd@:>@], [use specific collider for convex-sphere]),
421             col_convex_sphere=$withval)
423 AC_ARG_WITH([convex-convex], AS_HELP_STRING([--with-convex-convex=@<:@default,libccd@:>@], [use specific collider for convex-convex]),
424             col_convex_convex=$withval)
426 if test x$col_cylinder_cylinder = xlibccd -o \
427     x$col_box_cylinder = xlibccd -o \
428     x$col_capsule_cylinder = xlibccd -o \
429     x$col_convex_box = xlibccd -o \
430     x$col_convex_capsule = libccd -o \
431     x$col_convex_cylinder = xlibccd -o \
432     x$col_convex_sphere = libccd -o \
433     x$col_convex_convex = libccd
434 then
435     libccd=yes
438 AC_CONFIG_SUBDIRS([libccd])
440 AM_CONDITIONAL(LIBCCD, test x$libccd != xno)
441 AM_CONDITIONAL(LIBCCD_BOX_CYL,          test x$col_box_cylinder = xlibccd)
442 AM_CONDITIONAL(LIBCCD_CYL_CYL,          test x$col_cylinder_cylinder = xlibccd)
443 AM_CONDITIONAL(LIBCCD_CAP_CYL,          test x$col_capsule_cylinder = xlibccd)
444 AM_CONDITIONAL(LIBCCD_CONVEX_BOX,       test x$col_convex_box = xlibccd)
445 AM_CONDITIONAL(LIBCCD_CONVEX_CAP,       test x$col_convex_capsule = xlibccd)
446 AM_CONDITIONAL(LIBCCD_CONVEX_CYL,       test x$col_convex_cylinder = xlibccd)
447 AM_CONDITIONAL(LIBCCD_CONVEX_SPHERE,    test x$col_convex_sphere = xlibccd)
448 AM_CONDITIONAL(LIBCCD_CONVEX_CONVEX,    test x$col_convex_convex = xlibccd)
452 AC_ARG_ENABLE([asserts],
453         AS_HELP_STRING([--disable-asserts],
454             [disables debug error checking]),
455         asserts=$enableval,asserts=yes)
456 if test x$asserts = xno
457 then
458     CPPFLAGS="$CPPFLAGS -DdNODEBUG"
459     if test x$use_ou = xyes
460     then
461         CPPFLAGS="$CPPFLAGS -DNDEBUG"
462     fi
466 dnl include found system headers into config.h
467 AH_TOP([
468 #ifndef ODE_CONFIG_H
469 #define ODE_CONFIG_H
471 AH_BOTTOM([
473 #ifdef HAVE_ALLOCA_H
474 #include <alloca.h>
475 #endif
476 #ifdef HAVE_MALLOC_H
477 #include <malloc.h>
478 #endif
479 #ifdef HAVE_STDINT_H
480 #include <stdint.h>
481 #endif
482 #ifdef HAVE_INTTYPES_H
483 #include <inttypes.h>
484 #endif
486 /* an integer type that we can safely cast a pointer to and
487  * from without loss of bits.
488  */
489 typedef uintptr_t intP;
492 #ifdef dSINGLE
493        #define dEpsilon  FLT_EPSILON
494 #else
495        #define dEpsilon  DBL_EPSILON
496 #endif
499 #include "typedefs.h"
502 #endif /* #define ODE_CONFIG_H */
505 dnl Finally write our Makefiles
506 AC_CONFIG_FILES([
507  Makefile
508  drawstuff/Makefile
509  drawstuff/src/Makefile
510  drawstuff/dstest/Makefile
511  include/Makefile
512  include/drawstuff/Makefile
513  include/ode/Makefile
514  include/ode/version.h
515  include/ode/precision.h
516  ode/Makefile
517  ode/doc/Doxyfile
518  ode/doc/Makefile
519  ode/src/Makefile
520  ode/src/joints/Makefile
521  ode/demo/Makefile
522  OPCODE/Makefile
523  OPCODE/Ice/Makefile
524  GIMPACT/Makefile
525  GIMPACT/include/Makefile
526  GIMPACT/include/GIMPACT/Makefile
527  GIMPACT/src/Makefile
528  tests/Makefile
529  tests/joints/Makefile
530  tests/UnitTest++/Makefile
531  tests/UnitTest++/src/Makefile
532  tests/UnitTest++/src/Posix/Makefile
533  tests/UnitTest++/src/Win32/Makefile
534  ode-config
535  ode.pc
536  ])
537 AC_OUTPUT
539 chmod +x ode-config
541 BUILDDIR=`pwd`
543 dnl Print some useful information
544 echo "Configuration:"
545 echo "  Build  system type:      $build"
546 echo "  Host   system type:      $host"
547 echo "  Use double precision:    $usedouble"
548 echo "  Use drawstuff:           $drawstuff"
549 echo "  Demos enabled:           $enable_demos"
550 echo "  Use OPCODE:              $opcode"
551 echo "  Use GIMPACT:             $gimpact"
552 echo "  Custom colliders:"
553 echo "        cylinder-cylinder: $col_cylinder_cylinder"
554 echo "        box-cylinder:      $col_box_cylinder"
555 echo "        capsule-cylinder:  $col_capsule_cylinder"
556 echo "        convex-box:        $col_convex_box"
557 echo "        convex-capsule:    $col_convex_capsule"
558 echo "        convex-cylinder:   $col_convex_cylinder"
559 echo "        convex-sphere:     $col_convex_sphere"
560 echo "        convex-convex:     $col_convex_convex"
561 echo "  Is target a Pentium:     $pentium"
562 echo "  Is target x86-64:        $cpu64"
563 echo "  Use old opcode trimesh collider: $old_trimesh"
564 echo "  TLS for global caches:   $use_ou_tls"
565 echo "  Threading intf enabled:  $threading_intf"
566 echo "  Built-in threading included: $use_builtin_threading_impl"
567 echo "  Enable debug error check: $asserts"
568 echo "  Headers will be installed in $includedir/ode"
569 echo "  Libraries will be installed in $libdir"
570 echo "  Building in directory    $BUILDDIR"