]> git.mxchange.org Git - flightgear.git/blob - configure.ac
27091e02814fbcd239f15275a85d6c616fecefe0
[flightgear.git] / configure.ac
1 dnl Process this file with autoget.sh to produce a working configure
2 dnl script.
3 dnl
4 dnl $Id$
5
6 AC_INIT
7 AC_CONFIG_SRCDIR([src/Aircraft/aircraft.cxx])
8
9 dnl Require at least automake 2.52
10 AC_PREREQ(2.52)
11
12 dnl Initialize the automake stuff
13 AM_INIT_AUTOMAKE(FlightGear, 0.9.2)
14
15 dnl Checks for programs.
16 AC_PROG_MAKE_SET
17 AC_PROG_CC
18 AC_PROG_CPP
19 AC_PROG_CXX
20 AC_PROG_RANLIB
21 AC_PROG_INSTALL
22 AC_PROG_LN_S
23
24 # specify the simgear location
25 AC_ARG_WITH(simgear, [  --with-simgear=PREFIX   Specify the prefix path to simgear])
26
27 if test "x$with_simgear" != "x" ; then
28     echo "SimGear prefix path is $with_simgear"
29     EXTRA_DIRS="${EXTRA_DIRS} $with_simgear"
30 fi
31
32 dnl set the $host variable based on local machine/os
33 AC_CANONICAL_HOST
34
35 case "${host}" in
36 *-*-irix*)
37     if test "$CXX" = "CC"; then
38         AR="CC -ar"
39         ARFLAGS="-o"
40         CXXFLAGS="$CXXFLAGS -I$with_simgear/include/simgear/compatibility"
41     else
42         AR="ar"
43         ARFLAGS="cru"
44     fi
45     ;;
46 *)
47     AR="ar"
48     ARFLAGS="cru"
49     ;;
50 esac
51 AC_SUBST(AR)
52 AC_SUBST(ARFLAGS)
53
54 dnl set logging; default value of with_logging=yes
55 AC_ARG_WITH(logging, [  --with-logging          Include logging output (default)])
56 if test "x$with_logging" = "xno" ; then
57     AC_DEFINE([FG_NDEBUG], 1, [Define for no logging output])
58 fi
59
60 # Specify if we want to build with Multiplayer support
61 # default to with_network=yes
62 AC_ARG_WITH(multiplayer, [  --with-multiplayer      Include default multiplayer support])
63 AC_ARG_WITH(network_olk, [  --with-network-olk      Include Oliver's multi-pilot networking support [default=no]])
64
65 if test "x$with_multiplayer" = "xno" -a "x$with_network_olk" = "xno"; then
66   echo "Building without any kind of multiplayer support"
67
68 elif test "x$with_multiplayer" = "xno"; then
69 # echo "Building without default multiplayer support"
70   echo "Building with Oliver's multi-pilot network support"
71   AC_DEFINE([FG_NETWORK_OLK], 1, [Define to build with Oliver's networking])
72
73 else
74   echo "Building with default multiplayer support"
75 # echo "Building without Oliver's multi-pilot network support"
76   AC_DEFINE([FG_MPLAYER_AS], 1, [Define to build with default multiplayer support])
77 fi
78
79 AM_CONDITIONAL(ENABLE_NETWORK_OLK, test "x$with_network_olk" != "xno" -a "x$with_multiplayer" = "xno")
80 AM_CONDITIONAL(ENABLE_MPLAYER_AS, test "x$with_multiplayer" != "xno")
81
82
83 # Specify if we want to use WeatherCM instead of FGEnvironment.
84 # default to with_weathercm=no
85 AC_ARG_WITH(weathercm, [  --with-weathercm        Use WeatherCM instead of FGEnvironment])
86 if test "x$with_weathercm" = "xyes" ; then
87     echo "Building with WeatherCM"
88     AC_DEFINE([FG_WEATHERCM], 1,
89               [Define to build with Christian Mayer's weather code])
90 else
91     echo "Building with FGEnvironment"
92 fi
93 AM_CONDITIONAL(ENABLE_WEATHERCM, test "x$with_weathercm" = "xyes")
94
95 dnl Thread related checks
96 AC_ARG_WITH(threads, [  --with-threads          Include tile loading threads [default=no]])
97 if test "x$with_threads" = "xyes"; then
98     AC_DEFINE([ENABLE_THREADS], 1, [Define to enable threaded tile paging])
99     CXXFLAGS="$CXXFLAGS -D_REENTRANT"
100     CFLAGS="$CFLAGS -D_REENTRANT"
101 fi
102 AC_CHECK_HEADER(pthread.h)
103 AM_CONDITIONAL(WITH_THREADS, test "x$with_threads" = "xyes")
104
105 # specify the plib location
106 AC_ARG_WITH(plib, [  --with-plib=PREFIX      Specify the prefix path to plib])
107
108 if test "x$with_plib" != "x" ; then
109     echo "plib prefix is $with_plib"
110     EXTRA_DIRS="${EXTRA_DIRS} $with_plib"
111 fi
112
113 # specify the metakit location
114 AC_ARG_WITH(metakit, [  --with-metakit=PREFIX   Specify the prefix path to metakit])
115
116 if test "x$with_metakit" != "x" ; then
117     echo "metakit prefix is $with_metakit"
118     EXTRA_DIRS="${EXTRA_DIRS} $with_metakit"
119 fi
120
121 dnl Used by JSBSim to conditionally compile in fgfs interface code
122 AC_DEFINE([FGFS], 1, [Define so that JSBSim compiles in 'library' mode])
123
124 # Check for MS Windows environment
125 AC_CHECK_HEADER(windows.h)
126
127 dnl Determine an extra directories to add to include/lib search paths
128 case "${host}" in
129 *-apple-darwin* | *-*-mingw32*)
130     echo no EXTRA_DIRS for $host
131     ;;
132
133 *)
134     if test -d /usr/X11R6 ; then
135         EXTRA_DIR1="/usr/X11R6"
136     fi
137     if test -d /opt/X11R6 ; then
138         EXTRA_DIR2="/opt/X11R6"
139     fi
140     EXTRA_DIRS="${EXTRA_DIRS} $EXTRA_DIR1 $EXTRA_DIR2"
141     ;;
142
143 esac
144 wi_EXTRA_DIRS(no, ${EXTRA_DIRS})
145
146
147 dnl Using AM_CONDITIONAL is a step out of the protected little 
148 dnl automake fold so it is potentially dangerous.  But, we are
149 dnl beginning to run into cases where the standard checks are not
150 dnl enough.  AM_CONDITIONALS are then referenced to conditionally
151 dnl build a Makefile.in from a Makefile.am which lets us define custom
152 dnl includes, compile alternative source files, etc.
153
154 dnl Check for external variables daylight and timezone.
155 AC_EXT_DAYLIGHT
156 if test "$have_daylight" = yes; then
157     AC_DEFINE([HAVE_DAYLIGHT], 1, [Define if system has daylight variable])
158 fi
159
160 AC_EXT_TIMEZONE
161 if test "$have_timezone" = yes; then
162     AC_DEFINE([HAVE_TIMEZONE], 1, [Define if system has timezone variable])
163 fi
164
165 dnl add correct audio libs and configure for audio support
166 audio_LIBS="-lplibsl -lplibsm"
167 case "${host}" in
168 *-*-cygwin* | *-*-mingw32*)
169     audio_LIBS="$audio_LIBS -lwinmm"
170     ;;
171 *-apple-darwin*)
172     audio_LIBS="$audio_LIBS -framework IOKit -framework CoreFoundation"
173     ;;
174 *-*-irix* )
175     audio_LIBS="$audio_LIBS -laudio"
176     ;;
177
178 esac
179 AC_SUBST(audio_LIBS)
180
181 dnl ENABLE_AUDIO_SUPPORT could be depricated at any time in favor of
182 dnl just assuming we have audio support on all platform.  We can
183 dnl depend on plib to hide the details.
184 AC_DEFINE([ENABLE_AUDIO_SUPPORT], 1, [Define for audio support])
185
186 dnl X11 might be installed on Mac OS X or cygwin/mingwin, we don't want
187 dnl to use it if it is.
188 case "${host}" in
189 *-apple-darwin* | *-*-cygwin* | *-*-mingw32*)
190     echo no fancy X11 check
191     ;;
192
193 *)
194     AC_PATH_XTRA
195     ;;
196
197 esac
198
199 dnl Checks for libraries.
200
201 null_LIBS="$LIBS"
202
203 AC_SEARCH_LIBS(cos, m)
204
205 base_LIBS="$LIBS"
206
207 dnl Thread related checks
208 AC_CHECK_LIB(pthread, pthread_exit)
209 if test "x$ac_cv_lib_pthread_pthread_exit" != "xyes" \
210    -a "x$ac_cv_header_pthread_h" = "xyes"; then
211     dnl FreeBSD: System has pthread.h, but -lpthread library check
212     dnl fails.  See if we need -pthread instead of -lpthread and look
213     dnl for the functions in libc_r.
214     save_CXXFLAGS="$CXXFLAGS"
215     save_CFLAGS="$CFLAGS"
216     CXXFLAGS="-pthread $CXXFLAGS"
217     CFLAGS="-pthread $FLAGS"
218     save_LIBS=$LIBS
219     AC_CHECK_LIB(c_r, pthread_exit)
220     if test "x$ac_cv_lib_c_r_pthread_exit" != "xyes"; then
221         CXXFLAGS=$save_CXXFLAGS
222         CFLAGS=$save_CFLAGS
223     fi
224     LIBS=$save_LIBS
225 fi
226
227 AC_SEARCH_LIBS(inet_addr, xnet)
228 AC_SEARCH_LIBS(socket, socket)
229 AC_SEARCH_LIBS(main, nsl)
230 AC_SEARCH_LIBS(dlclose, dl)
231
232 dnl check for glut location
233 AC_CHECK_HEADER(GL/glut.h)
234 if test "x$ac_cv_header_GL_glut_h" = "xyes"; then
235     AC_DEFINE([GLUT_H], "GL/glut.h", [Define as glut.h include location])
236 else
237     AC_CHECK_HEADER(GLUT/glut.h)
238     if test "x$ac_cv_header_GLUT_glut_h" = "xyes"; then
239         AC_DEFINE([GLUT_H], <GLUT/glut.h>, [Define as glut.h include location])
240     else
241         echo "Neither GL/glut.h nor GLUT/glut.h found.  Cannot continue"
242         exit
243     fi
244 fi
245
246 dnl check for OpenGL related libraries
247 case "${host}" in
248 *-*-cygwin* | *-*-mingw32*)
249     dnl CygWin under Windoze.
250
251     echo Win32 specific hacks...
252     AC_DEFINE([WIN32], 1, [Define for Win32 platforms])
253     AC_DEFINE([NOMINMAX], 1, [Define for Win32 platforms])
254
255     LIBS="$LIBS -lglut32 -lglu32 -lopengl32"
256     LIBS="$LIBS -luser32 -lgdi32"
257
258     dnl add -lwsock32 for mingwin
259     case "${host}" in
260     *-*-mingw32*)
261         echo "********** BUILDING FOR MINGW32 *************"
262         base_LIBS="$base_LIBS -lws2_32"
263         ;;
264     esac
265
266     echo "Will link apps with $LIBS"
267     ;;
268
269
270 *-apple-darwin*)
271     dnl Mac OS X
272
273     LIBS="$LIBS -framework GLUT -framework OpenGL -framework Carbon -lobjc"
274     ;;
275
276 *)
277     dnl X-Windows based machines
278
279     dnl Skip X11 library tests if requested.
280     if test "x$no_x" != "xyes"; then
281         AC_SEARCH_LIBS(XCreateWindow, X11)
282         AC_SEARCH_LIBS(XShmCreateImage, Xext)
283         AC_SEARCH_LIBS(XGetExtensionVersion, Xi)
284         AC_SEARCH_LIBS(IceOpenConnection, ICE)
285         AC_SEARCH_LIBS(SmcOpenConnection, SM)
286         AC_SEARCH_LIBS(XtMalloc, Xt)
287         AC_SEARCH_LIBS(XmuLookupStandardColormap, Xmu)
288     fi
289
290     AC_SEARCH_LIBS(glNewList, [ GL GLcore MesaGL ])
291     if test "x$ac_cv_search_glNewList" = "x-lGLcore"; then
292         dnl if GLcore found, then also check for GL
293         AC_SEARCH_LIBS(glXCreateContext, GL)
294     fi
295
296     dnl if using mesa, check for xmesa.h
297     if test "x$ac_cv_search_glNewList" = "x-lMesaGL"; then
298         AC_CHECK_HEADER(GL/fxmesa.h)
299         if test "x$ac_cv_header_GL_fxmesa_h" = "xyes"; then
300             AC_DEFINE([XMESA], 1, [Define for fxmesa])
301             AC_DEFINE([FX], 1, [Define for fxmesa])
302         fi
303     fi
304
305     AC_SEARCH_LIBS(gluLookAt, [ GLU MesaGLU ])
306     AC_SEARCH_LIBS(glutGetModifiers, [ glut freeglut ])
307     ;;
308
309 esac
310
311 opengl_LIBS="$LIBS"
312 LIBS="$base_LIBS"
313
314 AC_SUBST(base_LIBS)
315 AC_SUBST(opengl_LIBS)
316
317 # The following are C++ items that need to be tested for with the c++
318 # compiler
319
320 AC_LANG_PUSH(C++)
321
322 # Check for "plib" without which we cannot go on
323 AC_CHECK_HEADER(plib/ul.h)
324 if test "x$ac_cv_header_plib_ul_h" != "xyes"; then
325     echo
326     echo "You *must* have the plib library installed on your system to build"
327     echo "the FGFS simulator!"
328     echo
329     echo "Please see README.plib for more details."
330     echo
331     echo "configure aborted."
332     exit
333 fi
334
335 AC_MSG_CHECKING([for plib 1.6.0 or newer])
336 AC_TRY_RUN([
337 #include <plib/ul.h>
338
339 #define MIN_PLIB_VERSION 160
340
341 int main() {
342     int major, minor, micro;
343
344     if ( PLIB_VERSION < MIN_PLIB_VERSION ) {
345          return -1;
346     }
347
348     return 0;
349 }
350
351 ],
352   AC_MSG_RESULT(yes),
353   [AC_MSG_RESULT(wrong version);
354    AC_MSG_ERROR([Install plib 1.6.0 or later first...])],
355   AC_MSG_RESULT(yes)
356 )
357
358 dnl If we get here then plib is available, so force use of plib
359 dnl joystick lib
360 AC_DEFINE([ENABLE_PLIB_JOYSTICK], 1, [Define to enable plib joystick support])
361
362
363 dnl Checking for PSL in plib
364 dnl version of plib, so check for it.
365 AC_MSG_CHECKING([for plib PSL scripting support])
366 AC_COMPILE_IFELSE([
367 #include <plib/psl.h>
368
369 int main() {
370   // not for running...
371   pslProgram program((pslExtension *)0);
372   program.compile("int main () {}", "");
373   return 0;
374 }
375 ],
376   [AC_MSG_RESULT(yes);
377    have_plib_psl=yes],
378   AC_MSG_RESULT(no)
379 )
380 AM_CONDITIONAL(HAVE_PLIB_PSL, test "x$have_plib_psl" = "xyes")
381 if test "x$have_plib_psl" = "xyes"; then
382    AC_DEFINE([HAVE_PLIB_PSL], 1,
383              [Define if plib version is new enough to provide "PSL"])
384 fi
385
386 dnl Check for MetaKit
387 AC_CHECK_HEADER(mk4.h)
388 if test "x$ac_cv_header_mk4_h" != "xyes"; then
389     echo
390     echo "MetaKit library not found."
391     echo
392     echo "If your OS does not provide an installable package for MetaKit"
393     echo "you will have to compile and install it first yourself.  A copy"
394     echo "of metakit-$(VERSION).tar.gz is included with SimGear.  You will"
395     echo "have to untar this source code, and follow it's included instructions"
396     echo "to compile and install on your system."
397     echo
398     echo "configure aborted."
399     exit
400 fi
401
402 AC_MSG_CHECKING([for metakit 2.4.3 or newer])
403 saved_LIBS="$LIBS"
404 LIBS="$saved_LIBS -lmk4"
405 AC_TRY_RUN([
406 #include <mk4.h>
407
408 #define MIN_MK4_VERSION 243
409
410 int main() {
411     int major, minor, micro;
412
413     if ( d4_MetaKitLibraryVersion < MIN_MK4_VERSION ) {
414          return -1;
415     }
416
417     return 0;
418 }
419
420 ],
421   AC_MSG_RESULT(yes),
422   [AC_MSG_RESULT(wrong version);
423    AC_MSG_ERROR([
424
425 Install metakit 2.4.3 or later first.
426
427 Or, the compiler may not be finding your libmk4.so library.
428 Please check the config.log file for specific details of the
429 failure if you believe you have the correct metakit version.
430 Also, look up this issue in the FlightGear FAQ.])],
431   AC_MSG_RESULT(yes)
432 )
433
434 dnl Check for the presence of SimGear
435 AC_CHECK_HEADER(simgear/version.h)
436 if test "x$ac_cv_header_simgear_version_h" != "xyes"; then
437     echo
438     echo "You *must* have the SimGear support library installed on your system"
439     echo "to build the FGFS simulator!"
440     echo
441     echo "Please see README.SimGear for more details."
442     echo
443     echo "configure aborted."
444     exit
445 fi
446
447 AC_MSG_CHECKING([for simgear 0.3.3 or newer])
448 AC_TRY_RUN([
449 #include <stdio.h>
450
451 #include <simgear/version.h>
452
453 #define STRINGIFY(X) XSTRINGIFY(X)
454 #define XSTRINGIFY(X) #X
455
456 #define MIN_MAJOR 0
457 #define MIN_MINOR 3
458 #define MIN_MICRO 3
459
460 int main() {
461     int major, minor, micro;
462
463     printf("%d.%d.%d or greater... ", MIN_MAJOR, MIN_MINOR, MIN_MICRO);
464
465     sscanf( STRINGIFY(SIMGEAR_VERSION), "%d.%d.%d", &major, &minor, &micro );
466
467     if ( major < MIN_MAJOR ) {
468          return -1;
469     } else if ( major == MIN_MAJOR && minor < MIN_MINOR ) {
470          return -1;
471     } else if ( major == MIN_MAJOR && minor == MIN_MINOR && micro < MIN_MICRO ){
472          return -1;
473     }
474
475     return 0;
476 }
477
478 ],
479   AC_MSG_RESULT(yes),
480   [AC_MSG_RESULT(wrong version);
481    AC_MSG_ERROR([Install latest simgear first...])],
482   AC_MSG_RESULT(yes)
483 )
484
485 LIBS="$saved_LIBS"
486
487 dnl Check if SimGear was built with Norman JPEG factory support
488 AC_CHECK_HEADER(simgear/screen/jpgfactory.hxx)
489 if test "x$ac_cv_header_simgear_screen_jpgfactory_hxx" = "xyes"; then
490     AC_CHECK_LIB(jpeg, jpeg_start_compress)
491     if test "x$ac_cv_lib_jpeg_jpeg_start_compress" != "xyes" ; then
492         echo
493         echo "The JPEG factory code was built and installed with SimGear."
494         echo "However it appears the libjpeg is no longer installed."
495         echo "You need to install libjpeg or remove jpgfactory support from"
496         echo "SimGear"
497         echo
498         echo "libjpeg is available at :"
499         echo "  ftp://ftp.uu.net in the directory graphics/jpeg"
500         exit 1
501     fi
502     AC_DEFINE([FG_JPEG_SERVER], 1,
503               [Define to build with jpeg screen shot server])
504 fi
505 AM_CONDITIONAL(ENABLE_JPEG_SERVER, test "x$ac_cv_header_simgear_screen_jpgfactory_hxx" = "xyes")
506
507 AC_LANG_POP
508
509 dnl Check for system installed zlib
510 AC_CHECK_HEADER(zlib.h)
511 if test "x$ac_cv_header_zlib_h" != "xyes"; then
512     echo
513     echo "zlib library not found."
514     echo
515     echo "If your OS does not provide an installable package for zlib"
516     echo "you will have to compile and install it first yourself.  A copy"
517     echo "of zlib-1.1.4.tar.gz is included with SimGear.  You will"
518     echo "have to untar this source code, and follow it's included instructions"
519     echo "to compile and install on your system."
520     echo
521     echo "configure aborted."
522     echo
523 fi
524
525 dnl Checks for header files.
526 AC_HEADER_STDC
527 AC_CHECK_HEADERS( \
528         fcntl.h getopt.h malloc.h memory.h stdlib.h sys/param.h sys/stat.h \
529         sys/time.h sys/timeb.h unistd.h windows.h values.h )
530
531 dnl Checks for typedefs, structures, and compiler characteristics.
532 AC_C_CONST
533 AC_TYPE_SIZE_T
534 AC_HEADER_TIME
535 AC_STRUCT_TM
536
537 dnl Checks for library functions.
538 AC_TYPE_SIGNAL
539 AC_FUNC_VPRINTF
540 AC_CHECK_FUNCS( \
541         ftime gettimeofday timegm memcpy bcopy mktime strstr rand mkfifo \
542         random drand48 setitimer getitimer signal GetLocalTime rint getrusage )
543
544 AM_CONFIG_HEADER(src/Include/config.h)
545
546 AC_CONFIG_FILES([ \
547         Makefile \
548         man/Makefile \
549         man/est-epsilon.1 \
550         man/fgfs.1 \
551         man/fgjs.1 \
552         man/gl-info.1 \
553         man/js_demo.1 \
554         man/pstest.1 \
555         scripts/Makefile \
556         scripts/debug/Makefile \
557         scripts/python/Makefile \
558         src/Makefile \
559         src/Include/Makefile \
560         src/Include/version.h \
561         src/Aircraft/Makefile \
562         src/Airports/Makefile \
563         src/ATC/Makefile \
564         src/Autopilot/Makefile \
565         src/Cockpit/Makefile \
566         src/Cockpit/built_in/Makefile \
567         src/Controls/Makefile \
568         src/Environment/Makefile \
569         src/FDM/Balloon/Makefile \
570         src/FDM/ExternalNet/Makefile \
571         src/FDM/ExternalPipe/Makefile \
572         src/FDM/JSBSim/Makefile \
573         src/FDM/JSBSim/filtersjb/Makefile \
574         src/FDM/LaRCsim/Makefile \
575         src/FDM/UIUCModel/Makefile \
576         src/FDM/YASim/Makefile \
577         src/FDM/Makefile \
578         src/GUI/Makefile \
579         src/Input/Makefile \
580         src/Instrumentation/Makefile \
581         src/Main/Makefile \
582         src/Main/runfgfs \
583         src/Main/runfgfs.bat \
584         src/Model/Makefile \
585         src/MultiPlayer/Makefile \
586         src/Navaids/Makefile \
587         src/Network/Makefile \
588         src/NetworkOLK/Makefile \
589         src/Objects/Makefile \
590         src/Scenery/Makefile \
591         src/Scripting/Makefile \
592         src/Sound/Makefile \
593         src/Systems/Makefile \
594         src/Time/Makefile \
595         src/WeatherCM/Makefile \
596         tests/Makefile \
597         utils/Makefile \
598         utils/TerraSync/Makefile \
599 ])
600 AC_OUTPUT
601
602 AC_OUTPUT_COMMANDS([chmod 755 src/Main/runfgfs])
603
604 echo ""
605 echo "Configure Summary"
606 echo "================="
607
608 echo "Prefix: $prefix"
609
610 if test "x$have_plib_psl" = "xyes"; then
611     echo "Plib PSL scripting: yes"
612 else
613     echo "Plib PSL scripting: $fg_psl_string_compile"
614     echo "  You will not be able to run scripts written in PSL"
615     echo "  and some advanced GUI and input features may not"
616     echo "  work.  Download and install the latest CVS version"
617     echo "  of plib if you would like to enable PSL support."
618 fi
619
620 if test "x$with_logging" != "x"; then
621     echo "Debug messages: $with_logging"
622 else
623     echo "Debug messages: yes"
624 fi
625
626 echo -n "Automake version: "
627 automake --version | head -1
628
629 if test "x$with_weathercm" != "x"; then
630     echo "WeatherCM instead of FGEnvironment: $with_weathercm"
631 else
632     echo "Using FGEnvironment"
633 fi
634
635 if test "x$with_multiplayer" != "xno"; then
636     echo "Using default multiplayer support"
637 elif test "x$with_network_olk" != "xno"; then
638     echo "Using Oliver's multi-pilot network support"
639 fi
640
641 if test "x$with_threads" = "xyes"; then
642     echo "threads: yes"
643 else
644     echo "threads: no"
645 fi