Merge branch 'master' of git://github.com/BTAxis/naev into testmission
[naev.git] / configure.ac
blob3c7bbf40396e2d0cc0a56c274badd824b65f4fa5
1 #                                               -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
4 AC_PREREQ([2.61])
5 AC_INIT([naev], [0.4.2], [bobbens@gmail.com])
6 AC_CONFIG_SRCDIR([src/naev.c])
7 AC_CONFIG_HEADERS([src/config.h])
8 AC_CONFIG_MACRO_DIR([m4])
9 AC_CONFIG_AUX_DIR([build])
11 AM_INIT_AUTOMAKE([foreign])
13 # M4 defines __unix__ to be the empty string on UNIX-like systems.  This
14 # causes AC_DEFINE to fail if it is used to define __unix__.  This seems to
15 # fix the problem.
16 ifdef([__unix__], define([__unix__], [[__unix__]]))
19 # Utility functions
22 # If A='$B' and B='hello', then "expand_variable A" will cause A='hello'
23 expand_variable()
25   while true; do
26     eval local value=\$$1
27     eval "$1=\"$value\""
28     echo "$value" | grep -qE '(^|[^\\])\$' || break
29   done
32 # Temporarily changes the value of a variable, until it is restored later.
33 # $1: name of variable
34 # $2: temporary value
35 define([VAR_SAVE], [
36   OLD_$1="$$1"
37   $1=$2
40 # Restores the saved variable.
41 # $1: name of variable
42 define([VAR_RESTORE], [
43   $1="$OLD_$1"
47 # Checks for variables
50 # Fix missing prefix
51 AS_IF([test "$prefix" = "NONE"], [
52   prefix="$ac_default_prefix"
54 AS_IF([test "$exec_prefix" = "NONE"], [
55   exec_prefix="$prefix"
58 # Check if we have custom CFLAGS
59 AS_IF([test -n "$CFLAGS"], [have_custom_cflags=yes], [have_custom_cflags=no])
62 # Checks for programs.
64 AC_PROG_CC
65 AC_PROG_LN_S
66 AC_PROG_RANLIB
67 PKG_PROG_PKG_CONFIG
69 AC_CHECK_PROG([CUT], [cut], [cut])
70 AS_IF([test -z "$CUT"],[
71   AC_ERROR([cut not found])
74 AC_CHECK_PROG([DOXYGEN], [doxygen], [doxygen])
75 AC_CHECK_PROG([LUADOC], [luadoc], [luadoc])
76 AC_CHECK_PROG([GIT], [git], [git])
79 # Checks for build environment
81 AC_MSG_CHECKING([whether we are building utils])
82 AS_IF([test -d "$srcdir/utils"], [
83   have_utils=yes
84 ], [
85   have_utils=no
87 AC_MSG_RESULT([$have_utils])
89 AC_MSG_CHECKING([whether we have docs])
90 AS_IF([test -d "$srcdir/docs"], [
91   have_docs=yes
92 ], [
93   have_docs=no
95 AC_MSG_RESULT([$have_docs])
98 # Platform checks
100 AC_CANONICAL_HOST
102 AC_MSG_CHECKING([[if we need a __unix__ define]])
103 AC_COMPILE_IFELSE([
104   #ifndef __unix__
105   # if defined __APPLE__ /* add other known platforms here */
106   #   error should have __unix__ but don't
107   # endif
108   #endif
109 ], [AC_MSG_RESULT([no])],
111   AC_MSG_RESULT([yes])
112   AC_DEFINE([__unix__], 1,
113 [Define to 1 if running on a UNIX-like system where __unix__ is missing])
117 # Checks for command-line arguments
120 # --enable-debug
121 AC_MSG_CHECKING([whether to enable debug mode])
122 AC_ARG_ENABLE([debug],
123   AC_HELP_STRING([--enable-debug=@<:@no|yes|paranoid@:>@],
124                  [enable debug mode (default: yes)]), [
125     case "$enableval" in
126       no)
127         enable_debug=no
128         ;;
129       paranoid)
130         enable_debug=paranoid
131         ;;
132       *)
133         enable_debug=yes
134         ;;
135     esac
136   ], [
137     enable_debug=yes
138   ])
139 AC_MSG_RESULT([$enable_debug])
141 AS_IF([test "$enable_debug" != "no"], [
142   AS_IF([test "$have_custom_cflags" = "no"], [
143     # Undo the default CFLAGS set by autoconf
144     AS_IF([test "$ac_cv_prog_cc_g" = "yes"], [
145       CFLAGS="-g -W -Wall -Wextra -Wunused -Wshadow -Wpointer-arith -Wmissing-prototypes -Winline -Wcast-align -Wmissing-declarations"
146     ], [
147       CFLAGS=
148     ])
149   ])
150   case "$host" in
151     *-linux-gnu)
152       AC_CHECK_LIB([bfd], [bfd_init], [
153         AC_CHECK_HEADERS([bfd.h], [], [
154           AC_WARN([debug mode is enabled but bfd.h is missing; disabling])
155           enable_debug=no
156         ])
157       ], [
158         AC_WARN([debug mode is enabled but libbfd is missing; disabling])
159         enable_debug=no
160       ])
161       ;;
162   esac
165 # --with-openal
166 AC_MSG_CHECKING([whether to use OpenAL])
167 AC_ARG_WITH([openal],
168   AC_HELP_STRING([--with-openal],
169                  [use the OpenAL sound backend (default: yes)]), [
170     AS_IF([test "$withval" = "yes"], [
171       with_openal=yes
172     ], [
173       with_openal=no
174     ])
175   ], [
176     with_openal=yes
177   ])
178 AC_MSG_RESULT([$with_openal])
180 # --with-sdlmixer
181 AC_MSG_CHECKING([whether to use SDL_mixer])
182 AC_ARG_WITH([sdlmixer],
183   AC_HELP_STRING([--with-sdlmixer],
184                  [use the SDL_mixer sound backend (default: yes)]), [
185     AS_IF([test "$withval" = "yes"], [
186       with_sdlmixer=yes
187     ], [
188       with_sdlmixer=no
189     ])
190   ], [
191     with_sdlmixer=yes
192   ])
193 AC_MSG_RESULT([$with_sdlmixer])
195 # --with-ndata
196 ndata_path="$datadir/$PACKAGE_NAME/ndata"
197 expand_variable ndata_path
199 AC_MSG_CHECKING([for path to ndata])
200 AC_ARG_WITH([ndata-path],
201   AC_HELP_STRING([--with-ndata-path=PATH], [path to the ndata file]),
202   [ndata_path="$withval"], [])
203 AC_MSG_RESULT([$ndata_path])
204 AS_IF([test -z "$ndata_path" || test "$ndata_path" = "yes"], [
205   AC_ERROR([The data path must be explicitly specified])
207 AC_SUBST([ndata_path])
210 # Checks for libraries.
213 # SDL
214 AM_PATH_SDL
215 AS_IF([test -z "$SDL_CFLAGS" && test -z "$SDL_LIBS"], [
216   AC_ERROR([SDL not found])
219 # libxml2
220 PKG_CHECK_MODULES([XML], [libxml-2.0], [], [
221   AC_ERROR([libxml-2.0 not found])
224 # FreeType
225 PKG_CHECK_MODULES([FREETYPE], [freetype2], [], [
226   AC_ERROR([freetype2 not found])
229 # vorbisfile
230 PKG_CHECK_MODULES([VORBISFILE], [vorbisfile], [], [
231   AC_ERROR([vorbisfile not found])
234 # libpng
235 PKG_CHECK_MODULES([PNG], [libpng], [], [
236   AC_ERROR([libpng not found])
239 # OpenAL
240 AS_IF([test "$with_openal" = "yes"], [
241   AM_PATH_OPENAL([have_openal=yes], [have_openal=no])
244 # SDL_mixer
245 AS_IF([test "$with_sdlmixer" = "yes"], [
246   VAR_SAVE([LIBS])
247   AC_SEARCH_LIBS([Mix_OpenAudio], [SDL_mixer],
248                  [have_sdlmixer=yes], [have_sdlmixer=no])
249   AS_IF([test "$have_sdlmixer" = "yes"], [
250     SDLMIXER_CFLAGS=
251     SDLMIXER_LIBS="$LIBS"
252   ], [
253     SDLMIXER_CFLAGS=
254     SDLMIXER_LIBS=
255   ])
256   VAR_RESTORE([LIBS])
257 ], [
258   have_sdlmixer=no
261 # SDL_image
262 VAR_SAVE([LIBS])
263 AC_SEARCH_LIBS([IMG_Load], [SDL_image], [], [
264   AC_ERROR([SDL_image not found])
266 SDLIMAGE_CFLAGS=
267 SDLIMAGE_LIBS="$LIBS"
268 VAR_RESTORE([LIBS])
269 AC_SUBST([SDLIMAGE_CFLAGS])
270 AC_SUBST([SDLIMAGE_LIBS])
272 # OpenGL
273 AM_PATH_OPENGL([], [
274   AC_MSG_ERROR([OpenGL not found])
278 # Compiler flags
281 # global
282 GLOBAL_CFLAGS="-include \"\$(top_builddir)/src/config.h\""
283 GLOBAL_CFLAGS="$GLOBAL_CFLAGS -I\"\$(top_srcdir)/src\""
284 GLOBAL_LIBS=
286 AS_IF([test "$enable_debug" != "no"], [
287   GLOBAL_CFLAGS="$GLOBAL_CFLAGS -DLUA_USE_APICHECK"
290 case "$host" in
291   *-mingw*)
292     GLOBAL_LIBS="$NAEV_LIBS -lwsock32"
293     ;;
294 esac
296 AC_SUBST([GLOBAL_CFLAGS])
297 AC_SUBST([GLOBAL_LIBS])
299 # naev
300 WIDGET_LIBS="\$(top_builddir)/src/tk/widget/libwidget.a"
302 CSPARSE_CFLAGS="-I\"\$(top_srcdir)/lib/csparse\""
303 CSPARSE_LIBS="\$(top_builddir)/lib/csparse/libcsparse.a"
305 LUA_CFLAGS="-I\"\$(top_srcdir)/lib/lua\""
306 LUA_LIBS="\$(top_builddir)/lib/lua/liblua.a"
308 NAEV_CFLAGS="$GLOBAL_CFLAGS"
309 NAEV_LIBS="$GLOBAL_LIBS $WIDGET_LIBS"
311 AS_IF([test "$enable_debug" != "no"], [
312   AC_DEFINE([DEBUGGING], 1, [Define to 1 to enable debug code])
313   AC_DEFINE([DEBUG], 1, [Define to 1 to enable debug code])
314   case "$host" in
315     *-linux-gnu)
316       NAEV_LIBS="$NAEV_LIBS -lbfd -rdynamic"
317       ;;
318   esac
320 AS_IF([test "$enable_debug" = "paranoid"], [
321   AC_DEFINE([DEBUG_PARANOID], 1, [Define to 1 to enable paranoid debug code])
324 NAEV_CFLAGS="$NAEV_CFLAGS $CSPARSE_CFLAGS $SDL_CFLAGS"
325 NAEV_CFLAGS="$NAEV_CFLAGS $XML_CFLAGS $FREETYPE_CFLAGS $LUA_CFLAGS"
326 NAEV_CFLAGS="$NAEV_CFLAGS $VORBISFILE_CFLAGS $OPENGL_CFLAGS $PNG_CFLAGS"
327 NAEV_CFLAGS="$NAEV_CFLAGS $SDLIMAGE_CFLAGS"
329 NAEV_LIBS="$NAEV_LIBS $CSPARSE_LIBS $SDL_LIBS $XML_LIBS"
330 NAEV_LIBS="$NAEV_LIBS $FREETYPE_LIBS $LUA_LIBS"
331 NAEV_LIBS="$NAEV_LIBS $VORBISFILE_LIBS $OPENGL_LIBS $PNG_LIBS"
332 NAEV_LIBS="$NAEV_LIBS $SDLIMAGE_LIBS"
334 AS_IF([test "$have_openal" = "yes"], [
335   NAEV_CFLAGS="$NAEV_CFLAGS $OPENAL_CFLAGS"
336   NAEV_LIBS="$NAEV_LIBS $OPENAL_LIBS"
339 AS_IF([test "$have_sdlmixer" = "yes"], [
340   NAEV_CFLAGS="$NAEV_CFLAGS $SDLMIXER_CFLAGS"
341   NAEV_LIBS="$NAEV_LIBS $SDLMIXER_LIBS"
344 case "$host" in
345   *-mingw*)
346     NAEV_LIBS="$NAEV_LIBS -mwindows"
347     ;;
348 esac
350 # This is a list of in-tree static libs that naev depends on.  It is used by
351 # automake to detect when the binary needs recompiling after a library has been
352 # changed.
353 NAEV_DEPENDENCIES="$WIDGET_LIBS $LUA_LIBS $CSPARSE_LIBS"
355 AC_SUBST([NAEV_CFLAGS])
356 AC_SUBST([NAEV_LIBS])
357 AC_SUBST([NAEV_DEPENDENCIES])
359 # liblua
360 LIBLUA_CFLAGS="$GLOBAL_CFLAGS"
362 case "$host" in
363   *-mingw*)
364     LIBLUA_CFLAGS="$LIBLUA_CFLAGS -DLUA_ANSI"
365     ;;
366   *)
367     LIBLUA_CFLAGS="$LIBLUA_CFLAGS -DLUA_USE_POSIX"
368     ;;
369 esac
371 AC_SUBST([LIBLUA_CFLAGS])
373 # utils/pack
374 PACK_CFLAGS="$GLOBAL_CFLAGS $SDL_CFLAGS $SDLIMAGE_CFLAGS"
375 PACK_LIBS="$GLOBAL_LIBS $SDL_LIBS $SDLIMAGE_LIBS"
377 AC_SUBST([PACK_CFLAGS])
378 AC_SUBST([PACK_LIBS])
381 # Checks for headers
383 AC_CHECK_HEADERS([fenv.h])
386 # Checks for typedefs, structures, and compiler characteristics.
388 AC_TYPE_OFF_T
389 AC_TYPE_SIZE_T
390 AC_TYPE_SSIZE_T
391 AC_TYPE_UINT16_T
392 AC_TYPE_UINT32_T
393 AC_TYPE_UINT64_T
394 AC_TYPE_UINT8_T
397 # Checks for functions
399 VAR_SAVE([LIBS], ["-lm"])
400 AC_CHECK_FUNCS([feenableexcept])
401 VAR_RESTORE([LIBS])
403 VAR_SAVE([CFLAGS], ["$VORBISFILE_CFLAGS"])
404 VAR_SAVE([LIBS],   ["$VORBISFILE_LIBS"])
405 AC_CHECK_FUNCS([ov_read_filter])
406 VAR_RESTORE([CFLAGS])
407 VAR_RESTORE([LIBS])
410 # Misc checks
412 AC_MSG_CHECKING([for the current Git commit identifier])
413 AS_IF([test -n "$GIT" && test -d "$srcdir/.git"], [
414   GIT_COMMIT=$(cd "$srcdir" && "$GIT" describe --always --tags)
415   AC_MSG_RESULT([$GIT_COMMIT])
416 ], [
417   GIT_COMMIT=
418   AC_MSG_RESULT([unknown])
422 # Defines in config.h
425 # Version variables
426 VMAJOR=$(echo "$VERSION" | cut -d. -f1)
427 VMINOR=$(echo "$VERSION" | cut -d. -f2)
428 VREV=$(echo "$VERSION" | cut -d. -f3)
430 AC_DEFINE_UNQUOTED([VMAJOR], [$VMAJOR], [Define to the major version component])
431 AC_DEFINE_UNQUOTED([VMINOR], [$VMINOR], [Define to the minor version component])
432 AC_DEFINE_UNQUOTED([VREV], [$VREV], [Define to the revision version component])
434 # USE_OPENAL
435 AS_IF([test "$have_openal" = "yes"], [
436   AC_DEFINE([USE_OPENAL], 1, [Define to 1 if using OpenAL])
439 # USE_SDLMIX
440 AS_IF([test "$have_sdlmixer" = "yes"], [
441   AC_DEFINE([USE_SDLMIX], 1, [Define to 1 if using SDL_mixer])
444 # Operating system
445 case "$host" in
446   *-linux*)
447     AC_DEFINE([LINUX], 1, [Define to 1 if running on Linux])
448     ;;
449   *-freebsd*)
450     AC_DEFINE([FREEBSD], 1, [Define to 1 if running on FreeBSD])
451     ;;
452   *-mingw*)
453     AC_DEFINE([WIN32], 1, [Define to 1 if running on Windows])
454     ;;
455   *-darwin*)
456     AC_DEFINE([MACOSX], 1, [Define to 1 if running on Mac OS X])
457     ;;
458 esac
460 # NDATA_DEF
461 AC_DEFINE_UNQUOTED([NDATA_DEF], ["$ndata_path"],
462                    [Define to the path to the data file])
464 # GIT_COMMIT
465 AS_IF([test -n "$GIT_COMMIT"], [
466   AC_DEFINE_UNQUOTED([GIT_COMMIT], ["$GIT_COMMIT"],
467                      [Define to the current Git commit identifier])
471 # Automake conditionals
474 AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
475 AM_CONDITIONAL([HAVE_LUADOC], [test -n "$LUADOC"])
476 AM_CONDITIONAL([HAVE_UTILS], [test "$have_utils" = "yes"])
477 AM_CONDITIONAL([HAVE_DOCS], [test "$have_docs" = "yes"])
480 # Output
482 SHAVE_INIT([build], [enable])
483 AC_CONFIG_FILES([Makefile
484                  lib/Makefile
485                  lib/csparse/Makefile
486                  lib/lua/Makefile
487                  src/Makefile
488                  src/tk/Makefile
489                  src/tk/widget/Makefile
490                  build/shave])
491 AS_IF([test "$have_utils" = "yes"], [
492   AC_CONFIG_FILES([utils/Makefile
493                    utils/pack/Makefile])
495 AS_IF([test "$have_docs" = "yes"], [
496   AC_CONFIG_FILES([docs/Makefile])
499 AC_OUTPUT
501 echo
502 AC_MSG_NOTICE([prefix:      $prefix])
503 AC_MSG_NOTICE([ndata:       $ndata_path])
504 echo
505 AC_MSG_NOTICE([sound backends:])
506 AC_MSG_NOTICE([  OpenAL:    $have_openal])
507 AC_MSG_NOTICE([  SDL_mixer: $have_sdlmixer])
508 echo
509 AC_MSG_NOTICE([debug mode:  $enable_debug])