(svn r25652) -Fix: Improve text caret movement for complex scripts.
[openttd/fttd.git] / config.lib
bloba2f19113dd42ec468d7fb256994e955a4767fff1
1 # $Id$
3 # This file is part of OpenTTD.
4 # OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
5 # OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6 # See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8 log() {
9         if [ $1 = "1" ]; then
10                 shift
11                 echo "$@"
12         else
13                 shift
14         fi
15         echo "$@" >> $config_log
18 set_default() {
19         ignore_extra_parameters="0"
20         # We set all kinds of defaults for params. Later on the user can override
21         # most of them; but if they don't, this default is used.
22         build=""
23         host=""
24         cc_build=""
25         cc_host=""
26         cxx_build=""
27         cxx_host=""
28         windres=""
29         strip=""
30         lipo=""
31         awk="awk"
32         os="DETECT"
33         endian="AUTO"
34         cpu_type="DETECT"
35         config_log="config.log"
36         prefix_dir="/usr/local"
37         binary_dir="games"
38         data_dir="share/games/openttd"
39         doc_dir="1"
40         icon_dir="share/pixmaps"
41         icon_theme_dir="1"
42         personal_dir="1"
43         shared_dir="1"
44         install_dir="/"
45         man_dir="1"
46         menu_dir="1"
47         menu_group="Game;"
48         menu_name="OpenTTD"
49         binary_name="openttd"
50         enable_debug="0"
51         enable_desync_debug="0"
52         enable_profiling="0"
53         enable_lto="0"
54         enable_dedicated="0"
55         enable_network="1"
56         enable_static="1"
57         enable_translator="0"
58         enable_unicode="1"
59         enable_console="1";
60         enable_assert="1"
61         enable_strip="0"
62         enable_universal="0"
63         enable_osx_g5="0"
64         enable_cocoa_quartz="1"
65         enable_cocoa_quickdraw="1"
66         with_osx_sysroot="1"
67         with_application_bundle="1"
68         with_menu_entry="1"
69         with_allegro="1"
70         with_sdl="1"
71         with_cocoa="1"
72         with_zlib="1"
73         with_lzma="1"
74         with_lzo2="1"
75         with_png="1"
76         enable_builtin_depend="1"
77         with_makedepend="0"
78         with_direct_music="1"
79         with_sort="1"
80         with_iconv="1"
81         with_midi=""
82         with_midi_arg=""
83         with_libtimidity="1"
84         with_freetype="1"
85         with_fontconfig="1"
86         with_icu="1"
87         static_icu="0"
88         with_psp_config="1"
89         with_threads="1"
90         with_distcc="1"
91         with_ccache="1"
92         with_nforenum="1"
93         with_grfcodec="1"
95         save_params_array="
96                 build
97                 host
98                 cc_build
99                 cc_host
100                 cxx_build
101                 cxx_host
102                 windres
103                 strip
104                 lipo
105                 awk
106                 os
107                 endian
108                 cpu_type
109                 config_log
110                 prefix_dir
111                 binary_dir
112                 data_dir
113                 doc_dir
114                 icon_dir
115                 icon_theme_dir
116                 man_dir
117                 menu_dir
118                 personal_dir
119                 shared_dir
120                 install_dir
121                 menu_group
122                 menu_name
123                 binary_name
124                 enable_debug
125                 enable_desync_debug
126                 enable_profiling
127                 enable_lto
128                 enable_dedicated
129                 enable_network
130                 enable_static
131                 enable_translator
132                 enable_unicode
133                 enable_console
134                 enable_assert
135                 enable_strip
136                 enable_universal
137                 enable_osx_g5
138                 enable_cocoa_quartz
139                 enable_cocoa_quickdraw
140                 with_osx_sysroot
141                 with_application_bundle
142                 with_allegro
143                 with_sdl
144                 with_cocoa
145                 with_zlib
146                 with_lzma
147                 with_lzo2
148                 with_png
149                 enable_builtin_depend
150                 with_makedepend
151                 with_direct_music
152                 with_sort
153                 with_iconv
154                 with_midi
155                 with_midi_arg
156                 with_libtimidity
157                 with_freetype
158                 with_fontconfig
159                 with_icu
160                 static_icu
161                 with_psp_config
162                 with_threads
163                 with_distcc
164                 with_ccache
165                 with_grfcodec
166                 with_nforenum
167         CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD"
170 detect_params() {
171         # Walk over all params from the user and override any default settings if
172         #  needed. This also handles any invalid option.
173         for p in "$@"; do
174                 if [ -n "$prev_p" ]; then
175                         eval "$prev_p=\$p"
176                         prev_p=
177                         continue
178                 fi
180                 optarg=`expr "x$p" : 'x[^=]*=\(.*\)'`
182                 case "$p" in
183                         --help | -h | -\?)            showhelp; exit 0;;
185                         --config-log)                 prev_p="config_log";;
186                         --config-log=*)               config_log="$optarg";;
188                         --build)                      prev_p="build";;
189                         --build=*)                    build="$optarg";;
191                         --host)                       prev_p="host";;
192                         --host=*)                     host="$optarg";;
194                         --os)                         prev_p="os";;
195                         --os=*)                       os="$optarg";;
197                         --cpu-type)                   prev_p="cpu_type";;
198                         --cpu-type=*)                 cpu_type="$optarg";;
200                         --cc-build)                   prev_p="cc_build";;
201                         --cc-build=*)                 cc_build="$optarg";;
202                         --cc-host)                    prev_p="cc_host";;
203                         --cc-host=*)                  cc_host="$optarg";;
204                         --cxx-build)                  prev_p="cxx_build";;
205                         --cxx-build=*)                cxx_build="$optarg";;
206                         --cxx-host)                   prev_p="cxx_host";;
207                         --cxx-host=*)                 cxx_host="$optarg";;
208                         --windres)                    prev_p="windres";;
209                         --windres=*)                  windres="$optarg";;
210                         --awk)                        prev_p="awk";;
211                         --awk=*)                      awk="$optarg";;
212                         --strip)                      prev_p="strip";;
213                         --strip=*)                    strip="$optarg";;
214                         --lipo)                       prev_p="lipo";;
215                         --lipo=*)                     lipo="$optarg";;
217                         --endian)                     prev_p="endian";;
218                         --endian=*)                   endian="$optarg";;
222                         # Alias --prefix with --prefix-dir, for compatibility with GNU autotools
223                         --prefix-dir | --prefix)      prev_p="prefix_dir";;
224                         --prefix-dir=* | --prefix=*)  prefix_dir="$optarg";;
226                         --binary-dir)                 prev_p="binary_dir";;
227                         --binary-dir=*)               binary_dir="$optarg";;
229                         --data-dir)                   prev_p="data_dir";;
230                         --data-dir=*)                 data_dir="$optarg";;
232                         --doc-dir)                    prev_p="doc_dir";;
233                         --doc-dir=*)                  doc_dir="$optarg";;
235                         --icon-dir)                   prev_p="icon_dir";;
236                         --icon-dir=*)                 icon_dir="$optarg";;
238                         --icon-theme-dir)             prev_p="icon_theme_dir";;
239                         --icon-theme-dir=*)           icon_theme_dir="$optarg";;
240                         --without-icon-theme)         icon_theme_dir="";;
242                         --menu-dir)                   prev_p="menu_dir";;
243                         --menu-dir=*)                 menu_dir="$optarg";;
244                         --without-menu-entry)         menu_dir="";;
246                         --menu-name)                  prev_p="menu_name";;
247                         --menu-name=*)                menu_name="$optarg";;
249                         --binary-name)                prev_p="binary_name";;
250                         --binary-name=*)              binary_name="$optarg";;
252                         --man-dir)                    prev_p="man_dir";;
253                         --man-dir=*)                  man_dir="$optarg";;
255                         --personal-dir)               prev_p="personal_dir";;
256                         --personal-dir=*)             personal_dir="$optarg";;
257                         --without-personal-dir)       personal_dir="";;
259                         --shared-dir)                 prev_p="shared_dir";;
260                         --shared-dir=*)               shared_dir="$optarg";;
261                         --without-shared-dir)         shared_dir="";;
263                         --install-dir)                prev_p="install_dir";;
264                         --install-dir=*)              install_dir="$optarg";;
268                         --menu-group)                 prev_p="menu_group";;
269                         --menu-group=*)               menu_group="$optarg";;
273                         --enable-debug)               enable_debug="1";;
274                         --enable-debug=*)             enable_debug="$optarg";;
275                         --enable-desync-debug)        enable_desync_debug="1";;
276                         --enable-desync-debug=*)      enable_desync_debug="$optarg";;
277                         --enable-profiling)           enable_profiling="1";;
278                         --enable-profiling=*)         enable_profiling="$optarg";;
279                         --enable-lto)                 enable_lto="1";;
280                         --enable-lto=*)               enable_lto="$optarg";;
281                         --enable-ipo)                 enable_lto="1";;
282                         --enable-ipo=*)               enable_lto="$optarg";;
283                         --enable-dedicated)           enable_dedicated="1";;
284                         --enable-dedicated=*)         enable_dedicated="$optarg";;
285                         --enable-network)             enable_network="2";;
286                         --enable-network=*)           enable_network="$optarg";;
287                         --disable-network)            enable_network="0";;
288                         --disable-static)             enable_static="0";;
289                         --enable-static)              enable_static="2";;
290                         --enable-static=*)            enable_static="$optarg";;
291                         --disable-translator)         enable_translator="0";;
292                         --enable-translator)          enable_translator="2";;
293                         --enable-translator=*)        enable_translator="$optarg";;
294                         --disable-assert)             enable_assert="0";;
295                         --enable-assert)              enable_assert="2";;
296                         --enable-assert=*)            enable_assert="$optarg";;
297                         --disable-strip)              enable_strip="0";;
298                         --enable-strip)               enable_strip="2";;
299                         --enable-strip=*)             enable_strip="$optarg";;
300                         --disable-universal)          enable_universal="0";;
301                         --enable-universal)           enable_universal="i386 ppc";;
302                         --enable-universal=*)         enable_universal="$optarg";;
303                         --disable-osx-g5)             enable_osx_g5="0";;
304                         --enable-osx-g5)              enable_osx_g5="2";;
305                         --enable-osx-g5=*)            enable_osx_g5="$optarg";;
306                         --disable-unicode)            enable_unicode="0";;
307                         --enable-unicode)             enable_unicode="2";;
308                         --enable-unicode=*)           enable_unicode="$optarg";;
309                         --disable-console)            enable_console="0";;
310                         --enable-console)             enable_console="2";;
311                         --enable-console=*)           enable_console="$optarg";;
313                         --disable-cocoa-quartz)       enable_cocoa_quartz="0";;
314                         --enable-cocoa-quartz)        enable_cocoa_quartz="2";;
315                         --enable-cocoa-quartz=*)      enable_cocoa_quartz="$optarg";;
316                         --disable-cocoa-quickdraw)    enable_cocoa_quickdraw="0";;
317                         --enable-cocoa-quickdraw)     enable_cocoa_quickdraw="2";;
318                         --enable-cocoa-quickdraw=*)   enable_cocoa_quickdraw="$optarg";;
320                         --with-allegro)               with_allegro="2";;
321                         --without-allegro)            with_allegro="0";;
322                         --with-allegro=*)             with_allegro="$optarg";;
324                         --with-sdl)                   with_sdl="2";;
325                         --without-sdl)                with_sdl="0";;
326                         --with-sdl=*)                 with_sdl="$optarg";;
328                         --with-cocoa)                 with_cocoa="2";;
329                         --without-cocoa)              with_cocoa="0";;
330                         --with-cocoa=*)               with_cocoa="$optarg";;
332                         --with-zlib)                  with_zlib="2";;
333                         --without-zlib)               with_zlib="0";;
334                         --with-zlib=*)                with_zlib="$optarg";;
336                         --with-lzma)                  with_lzma="2";;
337                         --without-lzma)               with_lzma="0";;
338                         --with-lzma=*)                with_lzma="$optarg";;
339                         --with-liblzma)               with_lzma="2";;
340                         --without-liblzma)            with_lzma="0";;
341                         --with-liblzma=*)             with_lzma="$optarg";;
343                         --with-lzo2)                  with_lzo2="2";;
344                         --without-lzo2)               with_lzo2="0";;
345                         --with-lzo2=*)                with_lzo2="$optarg";;
346                         --with-liblzo2)               with_lzo2="2";;
347                         --without-liblzo2)            with_lzo2="0";;
348                         --with-liblzo2=*)             with_lzo2="$optarg";;
350                         --with-png)                   with_png="2";;
351                         --without-png)                with_png="0";;
352                         --with-png=*)                 with_png="$optarg";;
353                         --with-libpng)                with_png="2";;
354                         --without-libpng)             with_png="0";;
355                         --with-libpng=*)              with_png="$optarg";;
357                         --with-libtimidity)           with_libtimidity="2";;
358                         --without-libtimidity)        with_libtimidity="0";;
359                         --with-libtimidity=*)         with_libtimidity="$optarg";;
361                         --with-freetype)              with_freetype="2";;
362                         --without-freetype)           with_freetype="0";;
363                         --with-freetype=*)            with_freetype="$optarg";;
364                         --with-libfreetype)           with_freetype="2";;
365                         --without-libfreetype)        with_freetype="0";;
366                         --with-libfreetype=*)         with_freetype="$optarg";;
368                         --with-fontconfig)            with_fontconfig="2";;
369                         --without-fontconfig)         with_fontconfig="0";;
370                         --with-fontconfig=*)          with_fontconfig="$optarg";;
371                         --with-libfontconfig)         with_fontconfig="2";;
372                         --without-libfontconfig)      with_fontconfig="0";;
373                         --with-libfontconfig=*)       with_fontconfig="$optarg";;
375                         --with-icu)                   with_icu="2";;
376                         --without-icu)                with_icu="0";;
377                         --with-icu=*)                 with_icu="$optarg";;
378                         --with-libicu)                with_icu="2";;
379                         --without-libicu)             with_icu="0";;
380                         --with-libicu=*)              with_icu="$optarg";;
381                         --static-icu)                 static_icu="1";;
382                         --static-icu=*)               static_icu="$optarg";;
383                         --static-libicu)              static_icu="1";;
384                         --static-libicu=*)            static_icu="$optarg";;
386                         --with-psp-config)            with_psp_config="2";;
387                         --without-psp-config)         with_psp_config="0";;
388                         --with-psp-config=*)          with_psp_config="$optarg";;
390                         --disable-builtin-depend)     enable_builtin_depend="0";;
391                         --enable-builtin-depend)      enable_builtin_depend="2";;
392                         --enable-builtin-depend=*)    enable_builtin_depend="$optarg";;
394                         --with-makedepend)            with_makedepend="2";;
395                         --without-makedepend)         with_makedepend="0";;
396                         --with-makedepend=*)          with_makedepend="$optarg";;
398                         --with-direct-music)          with_direct_music="2";;
399                         --without-direct-music)       with_direct_music="0";;
400                         --with-direct-music=*)        with_direct_music="$optarg";;
402                         --with-sort)                  with_sort="2";;
403                         --without-sort)               with_sort="0";;
404                         --with-sort=*)                with_sort="$optarg";;
406                         --with-iconv)                 with_iconv="2";;
407                         --without-iconv)              with_iconv="0";;
408                         --with-iconv=*)               with_iconv="$optarg";;
410                         --with-midi=*)                with_midi="$optarg";;
411                         --with-midi-arg=*)            with_midi_arg="$optarg";;
413                         --without-distcc)             with_distcc="0";;
414                         --with-distcc)                with_distcc="2";;
415                         --with-distcc=*)              with_distcc="$optarg";;
417                         --without-ccache)             with_ccache="0";;
418                         --with-ccache)                with_ccache="2";;
419                         --with-ccache=*)              with_ccache="$optarg";;
421                         --without-nforenum)           with_nforenum="0";;
422                         --with-nforenum)              with_nforenum="2";;
423                         --with-nforenum=*)            with_nforenum="$optarg";;
425                         --without-grfcodec)           with_grfcodec="0";;
426                         --with-grfcodec)              with_grfcodec="2";;
427                         --with-grfcodec=*)            with_grfcodec="$optarg";;
429                         --without-osx-sysroot)        with_osx_sysroot="0";;
430                         --with-osx-sysroot)           with_osx_sysroot="2";;
431                         --with-osx-sysroot=*)         with_osx_sysroot="$optarg";;
433                         --without-application-bundle) with_application_bundle="0";;
434                         --with-application-bundle)    with_application_bundle="1";;
435                         --with-application-bundle=*)  with_application_bundle="$optarg";;
437                         --without-threads)            with_threads="0";;
438                         --with-threads)               with_threads="1";;
439                         --with-threads=*)             with_threads="$optarg";;
441                         CC=* | --CC=*)                CC="$optarg";;
442                         CXX=* | --CXX=*)              CXX="$optarg";;
443                         CFLAGS=* | --CFLAGS=*)        CFLAGS="$optarg";;
444                         CXXFLAGS=* | --CXXFLAGS=*)    CXXFLAGS="$optarg";;
445                         LDFLAGS=* | --LDFLAGS=*)      LDFLAGS="$optarg";;
446                         CFLAGS_BUILD=* | --CFLAGS_BUILD=* | --CFLAGS-BUILD=*)     CFLAGS_BUILD="$optarg";;
447                         CXXFLAGS_BUILD=* | --CXXFLAGS_BUILD=* | --CXXFLAGS-BUILD=*) CXXFLAGS_BUILD="$optarg";;
448                         LDFLAGS_BUILD=* | --LDFLAGS_BUILD=* | --LDFLAGS-BUILD=*)   LDFLAGS_BUILD="$optarg";;
450                         --ignore-extra-parameters)    ignore_extra_parameters="1";;
452                         --* | -*)
453                                 if [ "$ignore_extra_parameters" = "0" ]; then
454                                         log 1 "Unknown option $p"
455                                         exit 1
456                                 else
457                                         log 1 "Unknown option $p ignored"
458                                 fi
459                                 ;;
460                 esac
461         done
463         if [ -n "$prev_p" ]; then
464                 log 1 "configure: error: missing argument to --$prev_p"
465                 exit 1
466         fi
468         # Clean the logfile
469         echo "" > $config_log
470         log 2 "Invocation: $0 $*"
473 save_params() {
474         # Here we save all params, so we can later on do an exact redo of this
475         #  configuration, without having the user to re-input stuff
477         echo "Running configure with following options:" >> $config_log
478         echo "" >> $config_log
480         configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters"
481         for p in $save_params_array; do
482                 eval "v=\"\$$p\""
483                 p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'`
484                 # Only save those params that aren't empty
485                 configure="$configure --$p=\"$v\""
486         done
488         echo "$configure" >> $config_log
489         echo "$configure" > config.cache
490         echo "" >> $config_log
493 check_params() {
494         # Some params want to be in full uppercase, else they might not work as
495         # expected.. fix that here
497         endian=`echo $endian | tr '[a-z]' '[A-Z]'`
498         os=`echo $os | tr '[a-z]' '[A-Z]'`
499         cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'`
501         # Check if all params have valid values
503         # Endian only allows AUTO, LE and, BE
504         if [ -z "`echo $endian | egrep '^(AUTO|LE|BE|PREPROCESSOR)$'`" ]; then
505                 log 1 "configure: error: invalid option --endian=$endian"
506                 log 1 " Available options are: --endian=[AUTO|LE|BE]"
507                 exit 1
508         fi
509         if [ "$endian" = "PREPROCESSOR" ] && [ "$os" != "OSX" ]; then
510                 log 1 "configure: error: invalid option --endian=$endian"
511                 log 1 " PREPROCESSOR is only available for OSX"
512                 exit 1
513         fi
514         # OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
515         if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP)$'`" ]; then
516                 log 1 "configure: error: invalid option --os=$os"
517                 log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP]"
518                 exit 1
519         fi
520         # cpu_type can be either 32 or 64
521         if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then
522                 log 1 "configure: error: invalid option --cpu-type=$cpu_type"
523                 log 1 " Available options are: --cpu-type[=DETECT|32|64]"
524                 exit 1
525         fi
526         # enable_debug should be between 0 and 4
527         if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then
528                 log 1 "configure: error: invalid option --enable-debug=$enable_debug"
529                 log 1 " Available options are: --enable-debug[=0123]"
530                 exit 1
531         fi
533         # enable_desync_debug should be between 0 and 3
534         if [ -z "`echo $enable_desync_debug | egrep '^[012]$'`" ]; then
535                 log 1 "configure: error: invalid option --enable-desync-debug=$enable_desync_debug"
536                 log 1 " Available options are: --enable-desync-debug[=012]"
537                 exit 1
538         fi
540         detect_awk
542         detect_os
544         check_build
545         check_host
547         # Check for universal builds; they only make sense for OSX, so fail if enabled for another OS
548         if [ "$enable_universal" = "0" ]; then
549                 log 1 "checking universal build... no"
550         else
551                 if [ "$os" != "OSX" ]; then
552                         log 1 "configure: error: --enable-universal only works on OSX"
553                         exit 1
554                 fi
555                 log 1 "checking universal build... yes, for: $enable_universal"
556         fi
558         # Already detected by check_build
559         log 1 "checking build cc... $cc_build"
560         log 1 "checking host cc... $cc_host"
562         check_cxx_build
563         check_cxx_host
564         check_windres
565         if [ "$enable_strip" != "0" ]; then
566                 check_strip
567         else
568                 log 1 "checking strip... disabled"
569         fi
570         check_lipo
572         if [ "$enable_builtin_depend" != "0" ]; then
573                 log 1 "checking builtin depend... yes"
574                 makedepend="\$(SRC_OBJS_DIR)/\$(DEPEND)"
575         else
576                 log 1 "checking builtin depend... no"
577         fi
579         check_makedepend
580         detect_cputype
582         if [ "$enable_static" = "1" ]; then
583                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "DOS" ]; then
584                         enable_static="2"
585                 else
586                         enable_static="0"
587                 fi
588         fi
590         if [ "$enable_static" != "0" ]; then
591                 log 1 "checking static... yes"
593                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "DOS" ]; then
594                         log 1 "WARNING: static is only known to work on Windows, DOS, MacOSX and MorphOS"
595                         log 1 "WARNING: use static at your own risk on this platform"
597                         sleep 5
598                 fi
599         else
600                 log 1 "checking static... no"
601         fi
603         if [ "$enable_unicode" = "1" ]; then
604                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then
605                         enable_unicode="2"
606                 else
607                         enable_unicode="0"
608                 fi
609         fi
611         if [ "$enable_unicode" != "0" ]; then
612                 log 1 "checking unicode... yes"
613         else
614                 log 1 "checking unicode... no"
615         fi
617         # Show what we configured
618         if [ "$enable_debug" = "0" ]; then
619                 log 1 "using debug level... no"
620         elif [ "$enable_profiling" != "0" ]; then
621                 log 1 "using debug level... profiling (debug level $enable_debug)"
622         else
623                 log 1 "using debug level... level $enable_debug"
624         fi
626         if [ "$enable_desync_debug" = "0" ]; then
627                 log 1 "using desync debug level... no"
628         else
629                 log 1 "using desync debug level... level $enable_desync_debug"
630                 log 1 "WARNING: desync debug functions slow down the game considerably."
631                 log 1 "WARNING: use only when you are instructed to do so"
632                 log 1 "         or when you know what you are doing."
634                 sleep 5
635         fi
637         if [ "$enable_lto" != "0" ]; then
638                 # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
639                 has_lto=`($cxx_build -dumpspecs 2>&1 | grep '\%{flto') || ($cxx_build -help ipo 2>&1 | grep '\-ipo')`
640                 if [ -n "$has_lto" ]; then
641                         log 1 "using link time optimization... yes"
642                 else
643                         enable_lto="0"
644                         log 1 "using link time optimization... no"
645                         log 1 "WARNING: you selected link time optimization but it is not found."
646                         sleep 5
647                 fi
648         else
649                 log 1 "using link time optimization... no"
650         fi
653         if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then
654                 if [ "$with_osx_sysroot" = "1" ]; then
655                         with_osx_sysroot="0"
657                         log 1 "checking OSX sysroot... not OSX, skipping"
658                 else
659                         log 1 "configure: error: --with-osx-sysroot only works if OSX is the target"
660                         exit 1
661                 fi
662         fi
664         if [ "$with_osx_sysroot" != "0" ]; then
665                 if [ "$enable_universal" = "0" ] && [ "$with_osx_sysroot" != "1" ] && [ "$with_osx_sysroot" != "2" ]; then
666                         # Sysroot manually specified? Check for usability
667                         log 1 "checking OSX sysroot... $with_osx_sysroot"
668                         if ! check_osx_sdk "$with_osx_sysroot"; then
669                                 log 1 "Passed sysroot not found/not functional"
670                                 exit 1
671                         fi
672                 else
673                         # If autodetect and no universal, use system default
674                         if [ "$with_osx_sysroot" = "1" ] && [ "$enable_universal" = "0" ]; then
675                                 log 1 "checking OSX sysroot... no (use system default)"
676                         else
677                                 log 1 "checking OSX sysroot... automatically"
678                                 detect_osx_sdk
679                         fi
680                 fi
682                 if [ -n "$osx_sdk_path" ]; then
683                         if [ "$enable_universal" != "0" ]; then
684                                 if [ -z "$osx_sdk_104_path" ]; then
685                                         log 1 "WARNING: Could not find a usable 10.4u SDK, the resulting"
686                                         log 1 "WARNING: binary will only run on OSX 10.5 or later"
687                                         osx_sdk_104_path="$osx_sdk_path"
688                                 fi
689                                 OSX_SYSROOT="-isysroot $osx_sdk_104_path"
690                                 OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_104_path"
691                         else
692                                 OSX_SYSROOT="-isysroot $osx_sdk_path"
693                                 OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_path"
694                         fi
695                 fi
696         else
697                 if [ "$os" = "OSX" ]; then
698                         log 1 "checking OSX sysroot... no (use system default)"
699                 fi
700         fi
702         detect_allegro
703         detect_sdl
704         detect_cocoa
706         if [ "$enable_dedicated" != "0" ]; then
707                 log 1 "checking GDI video driver... dedicated server, skipping"
708                 log 1 "checking dedicated... found"
710                 if [ "$enable_network" = "0" ]; then
711                         log 1 "configure: error: building a dedicated server without network support is pointless"
712                         exit 1
713                 fi
714         else
715                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
716                         log 1 "checking GDI video driver... found"
717                 else
718                         log 1 "checking GDI video driver... not Windows, skipping"
719                 fi
721                 if [ -z "$allegro_config" ] && [ -z "$sdl_config" ] && [ "$with_cocoa" = 0 ] && [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
722                         log 1 "configure: error: no video driver development files found"
723                         log 1 " If you want a dedicated server use --enable-dedicated as parameter"
724                         exit 1
725                 else
726                         log 1 "checking dedicated... not selected"
727                 fi
728         fi
730         if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
731                 log 1 "checking console application... not Windows, skipping"
732         elif [ "$enable_console" = "1" ] && [ "$enable_dedicated" != "0" ]; then
733                 log 1 "checking console application... dedicated server, enabled"
734                 enable_console="2"
735         elif [ "$enable_console" = "1" ]; then
736                 log 1 "checking console application... disabled (only used when forced)"
737                 enable_console="0"
738         elif [ "$enable_console" = "0" ]; then
739                 log 1 "checking console application... disabled"
740         else
741                 log 1 "checking console application... enabled"
742         fi
744         if [ "$enable_network" = "1" ] && [ "$os" = "DOS" ]; then
745                 log 1 "checking network... DOS, skipping"
746                 enable_network=0
747         elif [ "$enable_network" != "0" ]; then
748                 log 1 "checking network... found"
749         else
750                 log 1 "checking network... disabled"
751         fi
753         log 1 "checking squirrel... found"
754         SCRIPT_SRC_DIR="$ROOT_DIR/src/3rdparty/squirrel/include"
756         if [ "$enable_translator" != "0" ]; then
757                 log 1 "checking translator... debug"
758                 # -t shows TODO items, normally they are muted
759                 strgen_flags="-t"
760         else
761                 log 1 "checking translator... no"
762                 strgen_flags=""
763         fi
765         if [ "$enable_assert" != "0" ]; then
766                 log 1 "checking assert... enabled"
767         else
768                 log 1 "checking assert... disabled"
769         fi
771         pre_detect_with_zlib=$with_zlib
772         detect_zlib
774         if [ "$with_zlib" = "0" ] || [ -z "$zlib" ]; then
775                 log 1 "WARNING: zlib was not detected or disabled"
776                 log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features"
777                 log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps,"
778                 log 1 "WARNING: using PNG, or using fonts, ...) will be disabled."
779                 if [ "$pre_detect_with_zlib" = "0" ]; then
780                         log 1 "WARNING: We strongly suggest you to install zlib."
781                 else
782                         log 1 "configure: error: no zlib detected"
783                         log 1 " If you want to compile without zlib use --without-zlib as parameter"
784                         exit
785                 fi
786         fi
788         pre_detect_with_lzma=$with_lzma
789         detect_lzma
791         if [ "$with_lzma" = "0" ] || [ -z "$lzma_config" ]; then
792                 log 1 "WARNING: lzma was not detected or disabled"
793                 log 1 "WARNING: OpenTTD doesn't require lzma, but it does mean that many features"
794                 log 1 "WARNING: (like loading most savegames/scenarios and joining most servers)"
795                 log 1 "WARNING: will be disabled."
796                 if [ "$pre_detect_with_lzma" = "0" ]; then
797                         log 1 "WARNING: We strongly suggest you to install liblzma."
798                         log 1 "configure: error: no liblzma detected"
799                 else
800                         log 1 " If you want to compile without lzma use --without-lzma as parameter"
801                         exit
802                 fi
803         fi
805         pre_detect_with_lzo2=$with_lzo2
806         detect_lzo2
808         if [ "$with_lzo2" = "0" ] || [ -z "$lzo2" ]; then
809                 log 1 "WARNING: liblzo2 was not detected or disabled"
810                 log 1 "WARNING: OpenTTD doesn't require liblzo2, but it does mean that"
811                 log 1 "WARNING: loading old savegames/scenarios will be disabled."
812                 if [ "$pre_detect_with_lzo2" = "0" ]; then
813                         log 1 "WARNING: We strongly suggest you to install liblzo2."
814                 else
815                         log 1 "configure: error: no liblzo2 detected"
816                         log 1 " If you want to compile without liblzo2 use --without-liblzo2 as parameter"
817                         exit
818                 fi
819         fi
821         detect_png
822         detect_freetype
823         detect_fontconfig
824         detect_icu
825         detect_pspconfig
826         detect_libtimidity
828         if [ "$with_direct_music" != "0" ]; then
829                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
830                         if [ "$with_direct_music" != "1" ]; then
831                                 log 1 "configure: error: direct-music is only supported on Win32 targets"
832                                 exit 1
833                         fi
834                         with_direct_music="0"
836                         log 1 "checking direct-music... not Windows, skipping"
837                 else
838                         check_direct_music
839                 fi
840         fi
842         detect_sort
844         if [ "$os" = "OSX" ] && [ "$endian" = "AUTO" ]; then
845                 endian="PREPROCESSOR"
846         fi
848         log 1 "checking endianess... $endian"
850         # Suppress language errors when there is a version defined, indicating a release
851         #  It just isn't pretty if any release produces warnings in the languages.
852         if [ -f "$ROOT_DIR/version" ]; then
853                 lang_suppress="yes"
854                 log 1 "suppress language errors... yes"
855         else
856                 lang_suppress=""
857                 log 1 "suppress language errors... no"
858         fi
860         if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then
861                 if [ "$os" = "MORPHOS" ]; then
862                         strip_arg="--strip-all --strip-unneeded --remove-section .comment"
863                 elif [ "$os" = "OSX" ]; then
864                         strip_arg=""
865                 elif [ "$os" = "OS2" ]; then
866                         strip_arg=""
867                         # OS2 uses strip via gcc, because it needs to be feed to emxbind
868                         LDFLAGS="$LDFLAGS -s"
869                 elif [ "$os" = "SUNOS" ]; then
870                         # The GNU strip does know -s, the non-GNU doesn't
871                         #  So try to detect it (in a bit of an ugly way)
872                         strip_arg="`$strip -s strip.test 2>/dev/null && echo \"-s\"`"
873                 else
874                         strip_arg="-s"
875                 fi
877                 log 1 "checking stripping... $strip $strip_arg"
878         else
879                 strip=""
880                 log 1 "checking stripping... skipped"
881         fi
883         if [ "$with_distcc" = "0" ]; then
884                 log 1 "checking distcc... no"
885         elif [ "$with_distcc" = "1" ]; then
886                 with_distcc="0"
888                 log 1 "checking distcc... no (only used when forced)"
889         elif [ "$with_distcc" = "2" ]; then
890                 distcc="distcc"
891         else
892                 distcc="$with_distcc"
893         fi
894         if [ "$with_distcc" != "0" ]; then
895                 res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 1-6`"
896                 if [ "$res" != "distcc" ]; then
897                         distcc=""
898                         log 1 "checking distcc... no"
899                         if [ "$with_distcc" = "2" ]; then
900                                 log 1 "configure: error: no distcc detected, but was forced to be used"
901                                 exit 1
902                         fi
903                         if [ "$with_distcc" != "1" ]; then
904                                 log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me"
905                                 exit 1
906                         fi
907                 fi
909                 log 1 "checking distcc... $distcc"
910         fi
912         if [ "$with_ccache" = "0" ]; then
913                 log 1 "checking ccache... no"
914         elif [ "$with_ccache" = "1" ]; then
915                 with_ccache="0"
917                 log 1 "checking ccache... no (only used when forced)"
918         elif [ "$with_ccache" = "2" ]; then
919                 ccache="ccache"
920         else
921                 ccache="$with_ccache"
922         fi
923         if [ "$with_ccache" != "0" ]; then
924                 res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 1-6`"
925                 if [ "$res" != "ccache" ]; then
926                         ccache=""
927                         log 1 "checking ccache... no"
928                         if [ "$with_ccache" = "2" ]; then
929                                 log 1 "configure: error: no ccache detected, but was forced to be used"
930                                 exit 1
931                         fi
932                         if [ "$with_ccache" != "1" ]; then
933                                 log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me"
934                                 exit 1
935                         fi
936                 fi
938                 log 1 "checking ccache... $ccache"
939         fi
941         detect_grfcodec
942         detect_nforenum
944         if [ -z "$grfcodec" ] && [ -n "$nforenum" ]; then
945                 log 1 "checking nforenum/grfcodec... nforenum needs grfcodec enabled, disabling nforenum"
946                 nforenum=""
947         fi
949         if [ -z "$nforenum" ] && [ -n "$grfcodec" ]; then
950                 log 1 "checking nforenum/grfcodec... grfcodec needs nforenum enabled, disabling grfcodec"
951                 grfcodec=""
952         fi
954         if [ "$os" = "DOS" ]; then
955                 with_threads="0"
956         fi
958         if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then
959                 if [ "$with_application_bundle" = "1" ]; then
960                         with_application_bundle="0"
962                         log 1 "checking OSX application bundle... not OSX, skipping"
963                 else
964                         log 1 "configure: error: --with-application-bundle only works if OSX is the target"
965                         exit 1
966                 fi
967         fi
969         if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then
970                 OSXAPP="OpenTTD.app"
971         else
972                 OSXAPP=""
973         fi
975         if [ "$os" = "OSX" ]; then
976                 # Test on ppc970 (G5) - we can optimize there
978                 if [ "$enable_osx_g5" != "0" ]; then
979                         log 1 "detecting ppc970 (G5)... yes (forced)"
980                 else
981                         # First, are we a real OSX system, else we can't detect it
982                         native=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | grep darwin`
983                         # If $host doesn't match $build , we are cross-compiling
984                         if [ -n "$native" ] && [ "$build" = "$host" ]; then
985                                 $cxx_build $SRC_DIR/os/macosx/G5_detector.cpp -o G5_detector
986                                 res=`./G5_detector`
987                                 rm -f G5_detector
988                                 if [ -n "$res" ]; then
989                                         # This is G5, add flags for it
990                                         enable_osx_g5="2"
992                                         log 1 "detecting ppc970 (G5)... yes"
993                                 else
994                                         enable_osx_g5="0"
996                                         log 1 "detecting ppc970 (G5)... no"
997                                 fi
998                         else
999                                 enable_osx_g5="0"
1001                                 log 1 "detecting ppc970 (G5)... no (cross-compiling)"
1002                         fi
1003                 fi
1004         else
1005                 if [ "$enable_osx_g5" != "0" ]; then
1006                         log 1 "configure: error: ppc970 (OSX G5) selected, but not compiling for OSX"
1007                         log 1 "configure: error: either select OSX as OS, or deselect ppc970"
1009                         exit 1
1010                 fi
1011         fi
1013         if [ -d "$ROOT_DIR/.svn" ] && [ -n "`svn help 2>/dev/null`" ]; then
1014                 log 1 "checking revision... svn detection"
1015         elif [ -d "$ROOT_DIR/../.svn" ] && [ -n "`svn help 2>/dev/null`" ] && [ -n "`LC_ALL=C svn info $ROOT_DIR/.. | grep '^URL:.*tags$'`" ]; then
1016                 # subversion changed its behaviour; now not all folders have a .svn folder,
1017                 # but only the root folder. Since making tags requires a (sparse) checkout
1018                 # of the tags folder, the folder of the tag does not have a .svn folder
1019                 # anymore and this fails to detect the subversion repository checkout.
1020                 log 1 "checking revision... svn detection (tag)"
1021         elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then
1022                 log 1 "checking revision... git detection"
1023         elif [ -d "$ROOT_DIR/.hg" ] && [ -n "`hg help 2>/dev/null`" ]; then
1024                 log 1 "checking revision... hg detection"
1025         elif [ -f "$ROOT_DIR/.ottdrev" ]; then
1026                 log 1 "checking revision... source tarball"
1027         else
1028                 log 1 "checking revision... no detection"
1029                 log 1 "WARNING: there is no means to determine the version."
1030                 log 1 "WARNING: please use a subversion, mercurial, or git checkout of OpenTTD."
1031                 log 1 "WARNING: you can only join game servers that have been compiled without"
1032                 log 1 "WARNING:   version detection."
1033                 log 1 "WARNING: there is a great chance you desync."
1034                 log 1 "WARNING: USE WITH CAUTION!"
1036                 sleep 5
1037         fi
1039         if [ "$doc_dir" = "1" ]; then
1040                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then
1041                         doc_dir="share/doc/openttd"
1042                 else
1043                         doc_dir="$data_dir/docs"
1044                 fi
1045         else
1046                 doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1047         fi
1049         if [ "$icon_theme_dir" = "1" ]; then
1050                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then
1051                         icon_theme_dir="share/icons/hicolor"
1052                 else
1053                         icon_theme_dir=""
1054                 fi
1055         else
1056                 icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1057         fi
1059         if [ "$personal_dir" = "1" ]; then
1060                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ] || [ "$os" = "DOS" ] || [ "$os" = "HAIKU" ]; then
1061                         personal_dir="OpenTTD"
1062                 elif [ "$os" = "OSX" ]; then
1063                         personal_dir="Documents/OpenTTD"
1064                 else
1065                         personal_dir=".openttd"
1066                 fi
1067         else
1068                 personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1069         fi
1071         if [ "$shared_dir" = "1" ]; then
1072                 # we are using default values
1073                 if [ "$os" = "OSX" ]; then
1074                         shared_dir="/Library/Application\\\\ Support/OpenTTD"
1075                 else
1076                         shared_dir=""
1077                 fi
1078         else
1079                 shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1080         fi
1082         if [ "$man_dir" = "1" ]; then
1083                 # add manpage on UNIX systems
1084                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OSX" ]; then
1085                         man_dir="share/man/man6"
1086                 else
1087                         man_dir=""
1088                 fi
1089         else
1090                 man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1091         fi
1093         if [ "$menu_dir" = "1" ]; then
1094                 # add a freedesktop menu item only for some UNIX systems
1095                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then
1096                         menu_dir="share/applications"
1097                 else
1098                         menu_dir=""
1099                 fi
1100         else
1101                 menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1102         fi
1104         detect_iconv
1106         if [ -n "$personal_dir" ]
1107         then
1108                 log 1 "personal home directory... $personal_dir"
1109         else
1110                 log 1 "personal home directory... none"
1111         fi
1113         if [ -n "$shared_dir" ]
1114         then
1115                 log 1 "shared data directory... $shared_dir"
1116         else
1117                 log 1 "shared data directory... none"
1118         fi
1120         if [ -n "$install_dir" ]
1121         then
1122                 log 1 "installation directory... $install_dir"
1123         else
1124                 log 1 "installation directory... none"
1125         fi
1127         if [ -n "$icon_theme_dir" ]
1128         then
1129                 log 1 "icon theme directory... $icon_theme_dir"
1130         else
1131                 log 1 "icon theme directory... none"
1132         fi
1134         if [ -n "$man_dir" ]
1135         then
1136                 log 1 "manual page directory... $man_dir"
1137         else
1138                 log 1 "manual page directory... none"
1139         fi
1141         if [ -n "$menu_dir" ]
1142         then
1143                 log 1 "menu item directory... $menu_dir"
1144         else
1145                 log 1 "menu item directory... none"
1146         fi
1149 make_compiler_cflags() {
1150         # Params:
1151         # $1 - compiler
1152         # $2 - name of the cflags variable
1153         # $3 - name of the cxxflags variable
1154         # $4 - name of the ldflags variable
1155         # $5 - name of the features variable
1157         eval eval "flags=\\\$$2"
1158         eval eval "cxxflags=\\\$$3"
1159         eval eval "ldflags=\\\$$4"
1160         eval eval "features=\\\$$5"
1162         if [ `basename $1 | cut -c 1-3` = "icc" ]; then
1163                 # Enable some things only for certain ICC versions
1164                 cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g`
1166                 flags="$flags -rdynamic"
1167                 ldflags="$ldflags -rdynamic"
1169                 if [ -z "$first_time_icc_check" ]; then
1170                         first_time_icc_check=no
1171                         if [ $cc_version -lt 90 ]; then
1172                                 log 1 "WARNING: you seem to be using a very old version of ICC"
1173                                 log 1 "WARNING: OpenTTD hasn't been tested with this version"
1174                                 sleep 5
1175                         elif [ $cc_version -lt 120 ]; then
1176                                 log 1 "WARNING: you seem to be using an unsupported ICC version"
1177                                 log 1 "WARNING: ICC older than 12.0 is known to fail to compile OpenTTD"
1178                                 sleep 5
1179                         fi
1180                 fi
1182                 flags="$flags -Wall"
1183                 # remark #111: statement is unreachable
1184                 flags="$flags -wd111"
1185                 # remark #181: argument is incompatible with corresponding format string conversion
1186                 # ICC is very picky about signedness of operands, warnings provided by GCC are enough
1187                 flags="$flags -wd181"
1188                 # remark #271: trailing comma is nonstandard
1189                 flags="$flags -wd271"
1190                 # remark #280: selector expression is constant
1191                 flags="$flags -wd280"
1192                 # remark #304: access control not specified ("public" by default)
1193                 flags="$flags -wd304"
1194                 # remark #383: value copied to temporary, reference to temporary used
1195                 flags="$flags -wd383"
1196                 # remark #444: destructor for base class ... is not virtual
1197                 flags="$flags -wd444"
1198                 # remark #593: variable ... was set but never used
1199                 flags="$flags -wd593"
1200                 # warning #654: overloaded virtual function ... is only partially overridden in class ...
1201                 flags="$flags -wd654"
1202                 # remark #810: conversion from ... to ... may lose significant bits
1203                 flags="$flags -wd810"
1204                 # remark #869: parameter ... was never referenced
1205                 flags="$flags -wd869"
1206                 # warning #873: function ... ::operator new ... has no corresponding operator delete ...
1207                 flags="$flags -wd873"
1208                 # remark #981: operands are evaluated in unspecified order
1209                 flags="$flags -wd981"
1210                 # remark #1418: external function definition with no prior declaration
1211                 flags="$flags -wd1418"
1212                 # remark #1419: external declaration in primary source file
1213                 flags="$flags -wd1419"
1214                 # remark #1572: floating-point equality and inequality
1215                 flags="$flags -wd1572"
1216                 # remark #1599: declaration hides variable/parameter ...
1217                 flags="$flags -wd1599"
1218                 # remark #1720: function ... ::operator new ... has no corresponding member operator delete ...
1219                 flags="$flags -wd1720"
1221                 if [ $cc_version -lt 110 ]; then
1222                         # warns about system headers with recent glibc:
1223                         # warning #1292: attribute "__nonnull__" ignored
1224                         flags="$flags -wd1292"
1225                 fi
1227                 if [ $cc_version -ge 100 ]; then
1228                         # warning #1899: multicharacter character literal (potential portability problem)
1229                         flags="$flags -wd1899"
1230                         # vec report defaults to telling where it did loop vectorisation, which is not very important
1231                         flags="$flags -vec-report=0 "
1232                 fi
1234                 if [ $cc_version -ge 110 ]; then
1235                         # remark #2259: non-pointer conversion from ... to ... may lose significant bits
1236                         flags="$flags -wd2259"
1237                         # Use c++0x mode so static_assert() is available
1238                         cxxflags="$cxxflags -std=c++0x"
1239                 fi
1241                 if [ "$enable_lto" != "0" ]; then
1242                         has_ipo=`$1 -help ipo | grep '\-ipo'`
1243                         if [ -n "$has_ipo" ]; then
1244                                 # Use IPO (only if we see IPO exists and is requested)
1245                                 flags="$flags -ipo"
1246                                 features="$features lto"
1247                         fi
1248                 fi
1249         elif [ `basename $1 | grep 'clang'` ]; then
1250                 # Enable some things only for certain clang versions
1251                 cc_version="`$1 -v 2>&1 | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`"
1253                 # aliasing rules are not held in openttd code
1254                 flags="$flags -fno-strict-aliasing"
1256                 # -W alone doesn't enable all warnings enabled by -Wall; on the other hand,
1257                 # -Weverything enables too many useless warnings that can't be disabled (as of 3.0)
1258                 flags="$flags -Wall -W"
1260                 # warning: unused parameter '...'
1261                 flags="$flags -Wno-unused-parameter"
1263                 # warning: expression result unused
1264                 flags="$flags -Wno-unused-value"
1266                 # warning: multi-character character constant
1267                 flags="$flags -Wno-multichar"
1269                 # warning: explicitly assigning a variable of type '...' to itself
1270                 # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro
1271                 flags="$flags -Wno-self-assign"
1273                 if [ "$cc_version" -lt "30" ]; then
1274                         # warning: equality comparison with extraneous parentheses
1275                         flags="$flags -Wno-parentheses"
1276                         # warning: operands of ? are integers of different signs: 'unsigned int' and 'int'
1277                         flags="$flags -Wno-sign-compare"
1278                 fi
1280                 if [ "$cc_version" -ge "30" ]; then
1281                         # warning: equality comparison with extraneous parentheses
1282                         # this warning could be useful, but it warns about code in squirrel
1283                         flags="$flags -Wno-parentheses-equality"
1284                 fi
1286                 if [ "$with_ccache" != "0" -o "$with_distcc" != "0" ]; then
1287                         # ccache and distcc run separate preprocess and compile passes,
1288                         # both are fed with the same CFLAGS. Unfortunately, clang
1289                         # complains about -I when compiling preprocessed files:
1290                         # "clang: warning: argument unused during compilation: '-I /usr/include'"
1291                         flags="$flags -Qunused-arguments"
1292                 fi
1294                 if [ "$enable_assert" -eq "0" ]; then
1295                         # do not warn about unused variables when building without asserts
1296                         flags="$flags -Wno-unused-variable"
1297                 fi
1299                 # rdynamic is used to get useful stack traces from crash reports.
1300                 ldflags="$ldflags -rdynamic"
1301         else
1302                 # Enable some things only for certain GCC versions
1303                 cc_version=`$1 -dumpversion | cut -c 1,3`
1305                 if [ $cc_version -lt 33 ]; then
1306                         log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support"
1307                         exit 1
1308                 fi
1310                 flags="$flags -Wall -Wno-multichar -Wsign-compare -Wundef"
1311                 flags="$flags -Wwrite-strings -Wpointer-arith"
1312                 flags="$flags -W -Wno-unused-parameter -Wredundant-decls"
1313                 flags="$flags -Wformat=2 -Wformat-security"
1315                 if [ $enable_assert -eq 0 ]; then
1316                         # Do not warn about unused variables when building without asserts
1317                         flags="$flags -Wno-unused-variable"
1318                         if [ $cc_version -ge 46 ]; then
1319                                 # GCC 4.6 gives more warnings, disable them too
1320                                 flags="$flags -Wno-unused-but-set-variable"
1321                                 flags="$flags -Wno-unused-but-set-parameter"
1322                         fi
1323                 fi
1325                 if [ $cc_version -ge 34 ]; then
1326                         # Warn when a variable is used to initialise itself:
1327                         # int a = a;
1328                         flags="$flags -Winit-self"
1329                 fi
1331                 if [ $cc_version -ge 40 ]; then
1332                         # GCC 4.0+ complains about that we break strict-aliasing.
1333                         #  On most places we don't see how to fix it, and it doesn't
1334                         #  break anything. So disable strict-aliasing to make the
1335                         #  compiler all happy.
1336                         flags="$flags -fno-strict-aliasing"
1337                         # Warn about casting-out 'const' with regular C-style cast.
1338                         #  The preferred way is const_cast<>() which doesn't warn.
1339                         flags="$flags -Wcast-qual"
1340                 fi
1342                 if [ $cc_version -ge 42 ]; then
1343                         # GCC 4.2+ automatically assumes that signed overflows do
1344                         # not occur in signed arithmetics, whereas we are not
1345                         # sure that they will not happen. It furthermore complains
1346                         # about its own optimized code in some places.
1347                         flags="$flags -fno-strict-overflow"
1348                         # GCC 4.2 no longer includes -Wnon-virtual-dtor in -Wall.
1349                         # Enable it in order to be consistent with older GCC versions.
1350                         flags="$flags -Wnon-virtual-dtor"
1351                 fi
1353                 if [ $cc_version -ge 43 ]; then
1354                         # Use gnu++0x mode so static_assert() is available.
1355                         # Don't use c++0x, it breaks mingw (with gcc 4.4.0).
1356                         cxxflags="$cxxflags -std=gnu++0x"
1357                 fi
1359                 if [ $cc_version -eq 45 ]; then
1360                         # Prevent optimisation supposing enums are in a range specified by the standard
1361                         # For details, see http://gcc.gnu.org/PR43680
1362                         flags="$flags -fno-tree-vrp"
1363                 fi
1365                 if [ $cc_version -ge 47 ]; then
1366                         # Disable -Wnarrowing which gives many warnings, such as:
1367                         # warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing]
1368                         # They are valid according to the C++ standard, but useless.
1369                         cxxflags="$cxxflags -Wno-narrowing"
1370                         # Disable bogus 'attempt to free a non-heap object' warning
1371                         flags="$flags -Wno-free-nonheap-object"
1372                 fi
1374                 if [ "$enable_lto" != "0" ]; then
1375                         # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
1376                         has_lto=`$1 -dumpspecs | grep '\%{flto'`
1377                         if [ -n "$has_lto" ]; then
1378                                 # Use LTO only if we see LTO exists and is requested
1379                                 if [ $cc_version -lt 46 ]; then
1380                                         flags="$flags -flto"
1381                                 else
1382                                         flags="$flags -flto=jobserver"
1383                                 fi
1384                                 ldflags="$ldflags -fwhole-program"
1385                                 features="$features lto"
1386                         fi
1387                 fi
1389                 has_rdynamic=`$1 -dumpspecs | grep rdynamic`
1390                 if [ -n "$has_rdynamic" ]; then
1391                         # rdynamic is used to get useful stack traces from crash reports.
1392                         flags="$flags -rdynamic"
1393                         ldflags="$ldflags -rdynamic"
1394                 fi
1395         fi
1397         eval "$2=\"$flags\""
1398         eval "$3=\"$cxxflags\""
1399         eval "$4=\"$ldflags\""
1400         eval "$5=\"$features\""
1403 make_cflags_and_ldflags() {
1404         # General CFlags for BUILD
1405         CFLAGS_BUILD="$CFLAGS_BUILD"
1406         # Special CXXFlags for BUILD
1407         CXXFLAGS_BUILD="$CXXFLAGS_BUILD"
1408         # LDFLAGS for BUILD
1409         LDFLAGS_BUILD="$LDFLAGS_BUILD"
1410         # FEATURES for BUILD (lto)
1411         FEATURES_BUILD=""
1412         # General CFlags for HOST
1413         CFLAGS="$CFLAGS"
1414         # Special CXXFlags for HOST
1415         CXXFLAGS="$CXXFLAGS"
1416         # Libs to compile. In fact this is just LDFLAGS
1417         LIBS="-lstdc++"
1418         # LDFLAGS used for HOST
1419         LDFLAGS="$LDFLAGS"
1420         # FEATURES for HOST (lto)
1421         FEATURES=""
1423         make_compiler_cflags "$cc_build" "CFLAGS_BUILD" "CXXFLAGS_BUILD" "LDFLAGS_BUILD" "FEATURES_BUILD"
1424         make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES"
1426         CFLAGS="$CFLAGS -D$os"
1428         if [ "$enable_debug" = "0" ]; then
1429                 # No debug, add default stuff
1430                 OBJS_SUBDIR="release"
1431                 if [ "$os" = "MORPHOS" ]; then
1432                         CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS"
1433                         LDFLAGS="$LDFLAGS -noixemul"
1434                 fi
1436                 CFLAGS="-O2 -fomit-frame-pointer $CFLAGS"
1437         else
1438                 OBJS_SUBDIR="debug"
1440                 # Each debug level reduces the optimization by a bit
1441                 if [ $enable_debug -ge 1 ]; then
1442                         CFLAGS="$CFLAGS -g -D_DEBUG"
1443                         if [ "$os" = "PSP" ]; then
1444                                 CFLAGS="$CFLAGS -G0"
1445                         fi
1446                 fi
1447                 if [ $enable_debug -ge 2 ]; then
1448                         CFLAGS="$CFLAGS -fno-inline"
1449                 fi
1450                 if [ $enable_debug -ge 3 ]; then
1451                         CFLAGS="$CFLAGS -O0"
1452                 else
1453                         CFLAGS="$CFLAGS -O2"
1454                 fi
1455         fi
1457         if [ $enable_debug -le 2 ]; then
1458                 if basename "$cc_host" | grep "gcc" &>/dev/null; then
1459                         # Define only when compiling with GCC. Some GLIBC versions use GNU
1460                         # extensions in a way that breaks build with at least ICC.
1461                         # This requires -O1 or more, so debug level 3 (-O0) is excluded.
1462                         CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
1464                         # Just add -O1 to the tools needed for building.
1465                         CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1"
1466                 fi
1467         fi
1469         if [ "$os" = "OSX" ] && [ $cc_version -eq 40 ]; then
1470                 # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization,
1471                 # wrongly optimizing ^= in loops. This disables the failing optimisation.
1472                 CFLAGS="$CFLAGS -fno-expensive-optimizations"
1473         fi
1475         if [ "$enable_profiling" != "0" ]; then
1476                 CFLAGS="$CFLAGS -p"
1477                 LDFLAGS="$LDFLAGS -pg"
1478         fi
1480         if [ "$with_threads" = "0" ]; then
1481                 CFLAGS="$CFLAGS -DNO_THREADS"
1482         fi
1484         if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then
1485                 if [ "$os" = "CYGWIN" ]; then
1486                         flags="$flags -mwin32"
1487                         LDFLAGS="$LDFLAGS -mwin32"
1488                 fi
1489                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
1490                         if [ $cc_version -lt 46 ]; then
1491                                 flags="$flags -mno-cygwin"
1492                                 LDFLAGS="$LDFLAGS -mno-cygwin"
1493                         fi
1495                         if [ "$enable_console" != "0" ]; then
1496                                 LDFLAGS="$LDFLAGS -Wl,--subsystem,console"
1497                         else
1498                                 LDFLAGS="$LDFLAGS -Wl,--subsystem,windows"
1499                         fi
1501                         LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32"
1503                         if [ $cc_version -ge 44 ]; then
1504                                 LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++"
1505                         fi
1506                         if [ $cc_version -ge 47 ]; then
1507                                 CFLAGS="$CFLAGS -mno-ms-bitfields"
1508                         fi
1509                 fi
1510         fi
1512         if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
1513                 LIBS="$LIBS -lpthread"
1514         fi
1516         if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then
1517                 LIBS="$LIBS -lc"
1518         fi
1519         if [ "$os" = "WINCE" ]; then
1520                 LIBS="$LIBS -lcoredll -lcorelibc -laygshell -lws2 -e WinMainCRTStartup"
1521         fi
1522         if [ "$os" = "PSP" ]; then
1523                 CFLAGS="$CFLAGS -I`$psp_config -p`/include"
1524                 LDFLAGS="$LDFLAGS -L`$psp_config -p`/lib"
1526                 CFLAGS="$CFLAGS -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150"
1527                 LIBS="$LIBS -D_PSP_FW_VERSION=150 -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -lm"
1528         fi
1530         if [ "$os" = "MORPHOS" ]; then
1531                 # -Wstrict-prototypes generates much noise because of system headers
1532                 CFLAGS="$CFLAGS -Wno-strict-prototypes"
1533         fi
1535         if [ "$os" = "OPENBSD" ]; then
1536                 LIBS="$LIBS -pthread"
1537         fi
1539         if [ "$os" = "FREEBSD" ]; then
1540                 LIBS="$LIBS -lpthread"
1541         fi
1543         if [ "$os" = "OSX" ]; then
1544                 LDFLAGS="$LDFLAGS -framework Cocoa"
1546                 # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings.
1547                 CFLAGS="$CFLAGS -isystem/opt/local/include"
1549                 if [ "$enable_dedicated" = "0" ] && ([ "$cpu_type" = "32" ] || [ "$enable_universal" != "0" ]); then
1550                         LIBS="$LIBS -framework QuickTime"
1551                 else
1552                         CFLAGS="$CFLAGS -DNO_QUICKTIME"
1553                 fi
1555                 if [ "$enable_universal" = "0" ]; then
1556                         # Universal builds set this elsewhere
1557                         CFLAGS="$OSX_SYSROOT $CFLAGS"
1558                         LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS"
1559                 fi
1561                 if [ "$enable_universal" = "0" ] && [ $cc_version -ge 40 ]; then
1562                         # Only set the min version when not doing an universal build.
1563                         # Universal builds set the version elsewhere.
1564                         if [ "$cpu_type" = "64" ]; then
1565                                 CFLAGS="$CFLAGS -mmacosx-version-min=10.5"
1566                         else
1567                                 gcc_cpu=`$cc_host -dumpmachine`
1568                                 if [ "`echo $gcc_cpu | cut -c 1-3`" = "ppc" -o "`echo $gcc_cpu | cut -c 1-7`" = "powerpc" ]; then
1569                                         # PowerPC build can run on 10.3
1570                                         CFLAGS="$CFLAGS -mmacosx-version-min=10.3"
1571                                 else
1572                                         # Intel is only available starting from 10.4
1573                                         CFLAGS="$CFLAGS -mmacosx-version-min=10.4"
1574                                 fi
1575                         fi
1576                 fi
1577         fi
1579         if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
1580                 LIBS="$LIBS -lmidi -lbe"
1581         fi
1583         # Most targets act like UNIX, just with some additions
1584         if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
1585                 CFLAGS="$CFLAGS -DUNIX"
1586         fi
1587         # And others like Windows
1588         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
1589                 CFLAGS="$CFLAGS -DWIN"
1590         fi
1592         if [ -n "$allegro_config" ]; then
1593                 CFLAGS="$CFLAGS -DWITH_ALLEGRO"
1594                 CFLAGS="$CFLAGS `$allegro_config --cflags`"
1595                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
1596                         if [ "$enable_static" != "0" ]; then
1597                                 LIBS="$LIBS `$allegro_config --static --libs`"
1598                         else
1599                                 LIBS="$LIBS `$allegro_config --libs`"
1600                         fi
1601                 fi
1602         fi
1604         if [ -n "$sdl_config" ]; then
1605                 CFLAGS="$CFLAGS -DWITH_SDL"
1606                 # SDL must not add _GNU_SOURCE as it breaks many platforms
1607                 CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
1608                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
1609                         if [ "$enable_static" != "0" ]; then
1610                                 LIBS="$LIBS `$sdl_config --static-libs`"
1611                         else
1612                                 LIBS="$LIBS `$sdl_config --libs`"
1613                         fi
1614                 fi
1615         fi
1617         if [ "$with_cocoa" != "0" ]; then
1618                 CFLAGS="$CFLAGS -DWITH_COCOA"
1619                 LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox"
1621                 if [ "$enable_cocoa_quartz" != "0" ]; then
1622                         CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ"
1623                 fi
1625                 if [ "$enable_cocoa_quickdraw" != "0" ]; then
1626                         CFLAGS="$CFLAGS -DENABLE_COCOA_QUICKDRAW"
1627                 fi
1628         fi
1630         if [ "$with_zlib" != "0" ]; then
1631                 if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
1632                         LIBS="$LIBS $zlib"
1633                 else
1634                         LIBS="$LIBS -lz"
1635                 fi
1636                 CFLAGS="$CFLAGS -DWITH_ZLIB"
1637         fi
1639         if [ -n "$lzma_config" ]; then
1640                 CFLAGS="$CFLAGS -DWITH_LZMA"
1641                 CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' '  '`"
1643                 if [ "$enable_static" != "0" ]; then
1644                         CFLAGS="$CFLAGS -DLZMA_API_STATIC"
1645                         LIBS="$LIBS `$lzma_config --libs --static | tr '\n\r' '  '`"
1646                 else
1647                         LIBS="$LIBS `$lzma_config --libs | tr '\n\r' '  '`"
1648                 fi
1649         fi
1651         if [ "$with_lzo2" != "0" ]; then
1652                 if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
1653                         LIBS="$LIBS $lzo2"
1654                 else
1655                         LIBS="$LIBS -llzo2"
1656                 fi
1657                 CFLAGS="$CFLAGS -DWITH_LZO"
1658         fi
1660         # 64bit machines need -D_SQ64
1661         if [ "$cpu_type" = "64" ] && [ "$enable_universal" = "0" ]; then
1662                 CFLAGS="$CFLAGS -D_SQ64"
1663         fi
1664         CFLAGS="$CFLAGS -I$SCRIPT_SRC_DIR"
1666         if [ -n "$png_config" ]; then
1667                 CFLAGS="$CFLAGS -DWITH_PNG"
1668                 CFLAGS="$CFLAGS `$png_config --cppflags --I_opts | tr '\n\r' '  '`"
1670                 # The extra flags are unneeded for latest libpng-config, but some versions are so broken...
1671                 if [ "$enable_static" != "0" ]; then
1672                         if [ "$os" = "OSX" ]; then
1673                                 LIBS="$LIBS `$png_config --prefix`/lib/libpng.a"
1674                         else
1675                                 LIBS="$LIBS `$png_config --static --ldflags | tr '\n\r' '  '`"
1676                         fi
1677                 else
1678                         LIBS="$LIBS `$png_config --ldflags | tr '\n\r' '  '`"
1679                 fi
1680         fi
1682         if [ -n "$fontconfig_config" ]; then
1683                 CFLAGS="$CFLAGS -DWITH_FONTCONFIG"
1684                 CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' '  '`"
1686                 if [ "$enable_static" != "0" ]; then
1687                         if [ "$os" = "OSX" ]; then
1688                                 # fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix
1689                                 # Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps
1690                                 LIBS="$LIBS `$fontconfig_config --variable=prefix`/lib/libfontconfig.a `$fontconfig_config --libs --static | sed s@-lfontconfig@@`"
1691                         else
1692                                 LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' '  '`"
1693                         fi
1694                 else
1695                         LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' '  '`"
1696                 fi
1697         fi
1699         if [ -n "$freetype_config" ]; then
1700                 CFLAGS="$CFLAGS -DWITH_FREETYPE"
1701                 CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' '  '`"
1703                 if [ "$enable_static" != "0" ]; then
1704                         if [ "$os" = "OSX" ]; then
1705                                 LIBS="$LIBS `$freetype_config --prefix`/lib/libfreetype.a"
1706                         else
1707                                 # Is it possible to do static with freetype, if so: how?
1708                                 LIBS="$LIBS `$freetype_config --libs | tr '\n\r' '  '`"
1709                         fi
1710                 else
1711                         LIBS="$LIBS `$freetype_config --libs | tr '\n\r' '  '`"
1712                 fi
1713         fi
1715         if [ -n "$icu_config" ]; then
1716                 CFLAGS="$CFLAGS -DWITH_ICU"
1717                 CFLAGS="$CFLAGS `$icu_config --cppflags | tr '\n\r' '  '`"
1719                 # Some icu-configs have the 'feature' of not adding a space where others do add the space
1720                 if [ "$static_icu" != "0" ]; then
1721                         LIBS="$LIBS `$icu_config --ldflags-searchpath` `($icu_config --ldflags-libsonly; $icu_config --ldflags-layout) | tr '\n\r' '  ' | sed s/licu/lsicu/g`"
1722                 else
1723                         LIBS="$LIBS `$icu_config --ldflags-searchpath` `($icu_config --ldflags-libsonly; $icu_config --ldflags-layout) | tr '\n\r' '  '`"
1724                 fi
1725         fi
1728         if [ "$with_direct_music" != "0" ]; then
1729                 CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT"
1730                 # GCC 4.0+ doesn't like the DirectX includes (gives tons of
1731                 #  warnings on it we won't be able to fix). For now just
1732                 #  suppress those warnings.
1733                 if [ $cc_version -ge 40 ]; then
1734                         CFLAGS="$CFLAGS -Wno-non-virtual-dtor"
1735                 fi
1736         fi
1738         if [ -n "$libtimidity" ]; then
1739                 if [ "$enable_static" != "0" ]; then
1740                         LIBS="$LIBS $libtimidity"
1741                 else
1742                         LIBS="$LIBS -ltimidity"
1743                 fi
1744                 CFLAGS="$CFLAGS -DLIBTIMIDITY"
1745         fi
1747         if [ "$with_iconv" != "0" ]; then
1748                 CFLAGS="$CFLAGS -DWITH_ICONV"
1749                 if [ "$link_to_iconv" = "yes" ]; then
1750                         LIBS="$LIBS -liconv"
1751                         if [ "$with_iconv" != "2" ]; then
1752                                 CFLAGS="$CFLAGS -I$with_iconv/include"
1753                                 LIBS="$LIBS -L$with_iconv/lib"
1754                         fi
1755                 fi
1757                 if [ "$os" != "OSX" ] && [ "$have_non_const_iconv" != "no" ]; then
1758                         CFLAGS="$CFLAGS -DHAVE_NON_CONST_ICONV"
1759                 fi
1760         fi
1762         if [ -n "$with_midi" ]; then
1763                 CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\""
1764         fi
1765         if [ -n "$with_midi_arg" ]; then
1766                 CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\""
1767         fi
1769         if [ "$enable_dedicated" != "0" ]; then
1770                 CFLAGS="$CFLAGS -DDEDICATED"
1771         fi
1773         if [ "$enable_unicode" != "0" ]; then
1774                 CFLAGS="$CFLAGS -DUNICODE -D_UNICODE"
1775         fi
1777         if [ "$enable_network" != "0" ]; then
1778                 CFLAGS="$CFLAGS -DENABLE_NETWORK"
1780                 if [ "$os" = "BEOS" ]; then
1781                         LDFLAGS="$LDFLAGS -lbind -lsocket"
1782                 fi
1784                 if [ "$os" = "HAIKU" ]; then
1785                         LDFLAGS="$LDFLAGS -lnetwork"
1786                 fi
1788                 if [ "$os" = "SUNOS" ]; then
1789                         LDFLAGS="$LDFLAGS -lnsl -lsocket"
1790                 fi
1791         fi
1793         if [ "$enable_static" != "0" ]; then
1794                 # OSX can't handle -static in LDFLAGS
1795                 if [ "$os" != "OSX" ]; then
1796                         LDFLAGS="$LDFLAGS -static"
1797                 fi
1798         fi
1800         if [ "$enable_assert" = "0" ]; then
1801                 CFLAGS="$CFLAGS -DNDEBUG"
1802                 CFLAGS_BUILD="$CFLAGS_BUILD -DNDEBUG"
1803         fi
1805         if [ "$enable_desync_debug" != "0" ]; then
1806                 CFLAGS="$CFLAGS -DRANDOM_DEBUG"
1807         fi
1809         if [ "$enable_osx_g5" != "0" ]; then
1810                 CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
1811         fi
1813         if [ -n "$personal_dir" ]; then
1814                 CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\""
1815         fi
1817         if [ -n "$shared_dir" ]; then
1818                 CFLAGS="$CFLAGS -DWITH_SHARED_DIR -DSHARED_DIR=\\\\\"$shared_dir\\\\\""
1819         fi
1821         CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
1823         if [ "$enable_lto" != "0" ]; then
1824                 lto_build=`echo "$FEATURES_BUILD" | grep "lto"`
1825                 lto_host=`echo "$FEATURES" | grep "lto"`
1826                 if [ -z "$lto_build$lto_host" ]; then
1827                         log 1 "WARNING: you enabled LTO/IPO, but neither build nor host compiler supports it"
1828                         log 1 "WARNING: LTO/IPO has been disabled"
1829                 fi
1830                 if [ -n "$lto_build" ]; then
1831                         LDFLAGS_BUILD="$LDFLAGS_BUILD $CFLAGS_BUILD $CXXFLAGS_BUILD"
1832                 fi
1833                 if [ -n "$lto_host" ]; then
1834                         LDFLAGS="$LDFLAGS $CFLAGS $CXXFLAGS"
1835                 fi
1836         fi
1838         log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD"
1839         log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD"
1840         log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD"
1841         log 1 "using CFLAGS... $CFLAGS"
1842         log 1 "using CXXFLAGS... $CXXFLAGS"
1843         log 1 "using LDFLAGS... $LIBS $LDFLAGS"
1845         # Makedepend doesn't like something like: -isysroot /OSX/blabla
1846         #  so convert it to: -isysroot -OSX/blabla. makedepend just ignores
1847         #  any - command it doesn't know, so we are pretty save.
1848         # Lovely hackish, not?
1849         # Btw, this almost always comes from outside the configure, so it is
1850         #  not something we can control.
1851         # Also make makedepend aware of compiler's built-in defines.
1852         if [ "$with_makedepend" != "0" ] || [ "$enable_builtin_depend" != "0" ]; then
1853                 # Append CXXFLAGS possibly containing -std=c++0x
1854                 cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`"
1856                 # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations
1857                 cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`"
1858         else
1859                 makedepend=""
1860         fi
1862         if [ "$with_distcc" != "0" ]; then
1863                 cc_host="$distcc $cc_host"
1864                 cxx_host="$distcc $cxx_host"
1865                 log 1 ""
1866                 log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc"
1867                 log 1 ""
1868         fi
1870         if [ "$with_ccache" != "0" ]; then
1871                 cc_host="$ccache $cc_host"
1872                 cxx_host="$ccache $cxx_host"
1873         fi
1876 check_compiler() {
1877         # Params:
1878         # $1 - Type for message (build / host)
1879         # $2 - What to fill with the found compiler
1880         # $3 - System to try
1881         # $4 - Compiler to try
1882         # $5 - Env-setting to try
1883         # $6 - GCC alike to try
1884         # $7 - CC alike to try
1885         # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo
1886         # $9 - What the command is to check for
1888         if [ -n "$3" ]; then
1889                 # Check for system
1890                 if [ -z "$6" ]; then
1891                         compiler="$3"
1892                 else
1893                         compiler="$3-$6"
1894                 fi
1895                 machine=`eval $compiler $9 2>/dev/null`
1896                 ret=$?
1897                 eval "$2=\"$compiler\""
1899                 log 2 "executing $compiler $9"
1900                 log 2 "  returned $machine"
1901                 log 2 "  exit code $ret"
1903                 if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1904                         log 1 "checking $1... $compiler not found"
1905                         log 1 "I couldn't detect any $6 binary for $3"
1906                         exit 1
1907                 fi
1909                 if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then
1910                         log 1 "checking $1... expected $3, found $machine"
1911                         log 1 "the compiler suggests it doesn't build code for the machine you specified"
1912                         exit 1
1913                 fi
1914         elif [ -n "$4" ]; then
1915                 # Check for manual compiler
1916                 machine=`$4 $9 2>/dev/null`
1917                 ret=$?
1918                 eval "$2=\"$4\""
1920                 log 2 "executing $4 $9"
1921                 log 2 "  returned $machine"
1922                 log 2 "  exit code $ret"
1924                 if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1925                         log 1 "checking $1... $4 not found"
1926                         log 1 "the selected binary doesn't seem to be a $6 binary"
1927                         exit 1
1928                 fi
1929         else
1930                 # Nothing given, autodetect
1932                 if [ -n "$5" ]; then
1933                         machine=`$5 $9 2>/dev/null`
1934                         ret=$?
1935                         eval "$2=\"$5\""
1937                         log 2 "executing $5 $9"
1938                         log 2 "  returned $machine"
1939                         log 2 "  exit code $ret"
1941                         # The user defined a GCC that doesn't reply to $9.. abort
1942                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1943                                 log 1 "checking $1... $5 unusable"
1944                                 log 1 "the CC environment variable is set, but it doesn't seem to be a $6 binary"
1945                                 log 1 "please redefine the CC/CXX environment to a $6 binary"
1946                                 exit 1
1947                         fi
1948                 else
1949                         log 2 "checking $1... CC/CXX not set (skipping)"
1951                         # No $5, so try '$6'
1952                         machine=`$6 $9 2>/dev/null`
1953                         ret=$?
1954                         eval "$2=\"$6\""
1956                         log 2 "executing $6 $9"
1957                         log 2 "  returned $machine"
1958                         log 2 "  exit code $ret"
1960                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1961                                 # Maybe '$7'?
1962                                 machine=`$7 $9 2>/dev/null`
1963                                 ret=$?
1964                                 eval "$2=\"$7\""
1966                                 log 2 "executing $7 $9"
1967                                 log 2 "  returned $machine"
1968                                 log 2 "  exit code $ret"
1970                                 # All failed, abort
1971                                 if [ -z "$machine" ]; then
1972                                         log 1 "checking $1... $6 not found"
1973                                         log 1 "I couldn't detect any $6 binary on your system"
1974                                         log 1 "please define the CC/CXX environment to where it is located"
1976                                         exit 1
1977                                 fi
1978                         fi
1979                 fi
1980         fi
1982         if [ "$8" != "0" ]; then
1983                 eval "res=\$$2"
1984                 log 1 "checking $1... $res"
1985         else
1986                 log 1 "checking $1... $machine"
1987         fi
1990 check_build() {
1991         if [ "$os" = "FREEBSD" ]; then
1992                 # FreeBSD's C compiler does not support dump machine.
1993                 # However, removing C support is not possible because PSP must be linked with the C compiler.
1994                 check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CXX" "g++" "c++" "0" "-dumpmachine"
1995         else
1996                 check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine"
1997         fi
2000 check_host() {
2001         # By default the host is the build
2002         if [ -z "$host" ]; then host="$build"; fi
2004         if [ "$os" = "FREEBSD" ]; then
2005                 # FreeBSD's C compiler does not support dump machine.
2006                 # However, removing C support is not possible because PSP must be linked with the C compiler.
2007                 check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CXX" "g++" "c++" "0" "-dumpmachine"
2008         else
2009                 check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine"
2010         fi
2013 check_cxx_build() {
2014         check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "g++" "c++" 1 "-dumpmachine"
2017 check_cxx_host() {
2018         # By default the host is the build
2019         if [ -z "$host" ]; then host="$build"; fi
2020         check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "g++" "c++" 1 "-dumpmachine"
2023 check_windres() {
2024         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
2025                 check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V"
2026         fi
2029 check_strip() {
2030         if [ "$os" = "OS2" ]; then
2031                 # OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly
2032                 log 1 "checking host strip... using gcc -s option"
2033         elif [ "$os" = "OSX" ]; then
2034                 # Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something
2035                 echo "int main(int argc, char *argv[]) { }" > strip.test.c
2036                 $cxx_host strip.test.c -o strip.test
2037                 check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test"
2038                 rm -f strip.test.c strip.test
2039         else
2040                 check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V"
2041         fi
2044 check_lipo() {
2045         if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
2046                 echo "int main(int argc, char *argv[]) { }" > lipo.test.c
2047                 $cxx_host lipo.test.c -o lipo.test
2048                 check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test"
2049                 rm -f lipo.test.c lipo.test
2050         fi
2053 check_osx_sdk() {
2054         local sysroot=""
2055         if [ -n "$1" ]; then
2056                 if echo "$1" | grep -q / ; then
2057                         # Seems to be a file system path
2058                         osx_sdk_path="$1"
2059                 else
2060                         osx_sdk_path="/Developer/SDKs/MacOSX$1.sdk"
2061                 fi
2062                 if [ ! -d "$osx_sdk_path" ]; then
2063                         # No directory, not present or garbage
2064                         return 1
2065                 fi
2067                 # Set minimum version to 10.4 as that's when kCGBitmapByteOrder32Host was introduced
2068                 sysroot="-isysroot $osx_sdk_path -Wl,-syslibroot,$osx_sdk_path -mmacosx-version-min=10.4"
2069         fi
2071 cat > tmp.osx.mm << EOF
2072 #include <Cocoa/Cocoa.h>
2073 int main() {
2074         kCGBitmapByteOrder32Host;
2075         return 0;
2078         execute="$cxx_host $sysroot $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
2079         eval $execute > /dev/null
2080         ret=$?
2081         log 2 "executing $execute"
2082         log 2 "  exit code $ret"
2083         rm -f tmp.osx.mm tmp.osx
2084         return $ret
2087 check_direct_music() {
2088         echo "
2089                 #include <windows.h>
2090                 #include <dmksctrl.h>
2091                 #include <dmusici.h>
2092                 #include <dmusicc.h>
2093                 #include <dmusicf.h>
2094                 int main(int argc, char *argv[]) { }" > direct_music.test.c
2095         $cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null
2096         res=$?
2097         rm -f direct_music.test.c direct_music.test
2099         if [ "$res" != "0" ]; then
2100                 if [ "$with_direct_music" != "1" ]; then
2101                         log 1 "configure: error: direct-music is not available on this system"
2102                         exit 1
2103                 fi
2104                 with_direct_music="0"
2106                 log 1 "checking direct-music... not found"
2107         else
2108                 log 1 "checking direct-music... found"
2109         fi
2112 check_makedepend() {
2113         if [ "$enable_builtin_depend" != "0" ]; then
2114                 with_makedepend="0"
2115         fi
2117         if [ "$with_makedepend" = "0" ]; then
2118                 log 1 "checking makedepend... disabled"
2119                 return
2120         fi
2122         if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then
2123                 makedepend="makedepend"
2124         else
2125                 makedepend="$with_makedepend"
2126         fi
2128         rm -f makedepend.tmp
2129         touch makedepend.tmp
2130         res=`$makedepend -fmakedepend.tmp 2>/dev/null`
2131         res=$?
2132         log 2 "executing $makedepend -f makedepend.tmp"
2133         log 2 "  returned `cat makedepend.tmp`"
2134         log 2 "  exit code $ret"
2136         if [ ! -s makedepend.tmp ]; then
2137                 rm -f makedepend.tmp makedepend.tmp.bak
2139                 if [ "$with_makedepend" = "2" ]; then
2140                         log 1 "checking makedepend... not found"
2142                         log 1 "I couldn't detect any makedepend on your system"
2143                         log 1 "please locate it via --makedepend=[binary]"
2145                         exit 1
2146                 elif [ "$with_makedepend" != "1" ]; then
2147                         log 1 "checking makedepend... $makedepend not found"
2149                         log 1 "the selected file doesn't seem to be a valid makedepend binary"
2151                         exit 1
2152                 else
2153                         log 1 "checking makedepend... not found"
2155                         with_makedepend="0"
2156                         return
2157                 fi
2158         fi
2160         rm -f makedepend.tmp makedepend.tmp.bak
2162         log 1 "checking makedepend... $makedepend"
2165 check_version() {
2166         # $1 - requested version (major.minor)
2167         # $2 - version we got (major.minor)
2169         if [ -z "$2" ]; then
2170                 return 0
2171         fi
2173         req_major=`echo $1 | cut -d. -f1`
2174         got_major=`echo $2 | cut -d. -f1`
2175         if [ $got_major -lt $req_major ]; then
2176                 return 0
2177         elif [ $got_major -gt $req_major ]; then
2178                 return 1
2179         fi
2181         req_minor=`echo $1 | cut -d. -f2`
2182         got_minor=`echo $2 | cut -d. -f2`
2183         if [ $got_minor -lt $req_minor ]; then
2184                 return 0
2185         fi
2186         return 1
2189 detect_awk() {
2190         # Not all awks allow gsub(), so we test for that here! It is in fact all we need...
2192         # These awks are known to work. Test for them explicit
2193         awks="gawk mawk nawk"
2195         awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | "
2196         awk_param="' { ORS = \" \" } /\.c$/   { gsub(\".c$\",   \".o\", \$0); print \$0; }' 2>/dev/null"
2197         awk_result="a.o b.o c.o "
2198         log 2 "Detecing awk..."
2200         log 2 "Trying: $awk_prefix $awk $awk_param"
2201         res=`eval $awk_prefix $awk $awk_param`
2202         log 2 "Result: '$res'"
2203         if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then
2204                 # User didn't supply his own awk, so try to detect some other known working names for an awk
2205                 for awk in $awks; do
2206                         log 2 "Trying: $awk_prefix $awk $awk_param"
2207                         res=`eval $awk_prefix $awk $awk_param`
2208                         log 2 "Result: '$res'"
2209                         if [ "$res" = "$awk_result" ]; then break; fi
2210                 done
2212                 if [ "$res" != "$awk_result" ]; then
2213                         log 1 "checking awk... not found"
2214                         log 1 "configure: error: no awk found"
2215                         log 1 "configure: error: please install one of the following: $awks"
2216                         exit 1
2217                 fi
2218         fi
2219         if [ "$res" != "$awk_result" ]; then
2220                 log 1 "checking awk... not found"
2221                 log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk"
2222                 exit 1
2223         fi
2225         log 1 "checking awk... $awk"
2228 detect_os() {
2229         if [ "$os" = "DETECT" ]; then
2230                 # Detect UNIX, OSX, FREEBSD, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
2232                 # Try first via dumpmachine, then via uname
2233                 os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk '
2234                                         /linux/        { print "UNIX";    exit}
2235                                         /darwin/       { print "OSX";     exit}
2236                                         /freebsd/      { print "FREEBSD"; exit}
2237                                         /openbsd/      { print "OPENBSD"; exit}
2238                                         /netbsd/       { print "NETBSD";  exit}
2239                                         /hp-ux/        { print "HPUX";    exit}
2240                                         /morphos/      { print "MORPHOS"; exit}
2241                                         /beos/         { print "BEOS";    exit}
2242                                         /haiku/        { print "HAIKU";   exit}
2243                                         /sunos/        { print "SUNOS";   exit}
2244                                         /solaris/      { print "SUNOS";   exit}
2245                                         /cygwin/       { print "CYGWIN";  exit}
2246                                         /mingw/        { print "MINGW";   exit}
2247                                         /os2/          { print "OS2";     exit}
2248                                         /dos/          { print "DOS";     exit}
2249                                         /wince/        { print "WINCE";   exit}
2250                                         /psp/          { print "PSP";     exit}
2251                 '`
2253                 if [ -z "$os" ]; then
2254                         os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk '
2255                                         /linux/        { print "UNIX";    exit}
2256                                         /darwin/       { print "OSX";     exit}
2257                                         /freebsd/      { print "FREEBSD"; exit}
2258                                         /openbsd/      { print "OPENBSD"; exit}
2259                                         /netbsd/       { print "NETBSD";  exit}
2260                                         /hp-ux/        { print "HPUX";    exit}
2261                                         /morphos/      { print "MORPHOS"; exit}
2262                                         /beos/         { print "BEOS";    exit}
2263                                         /haiku/        { print "HAIKU";   exit}
2264                                         /sunos/        { print "SUNOS";   exit}
2265                                         /cygwin/       { print "CYGWIN";  exit}
2266                                         /mingw/        { print "MINGW";   exit}
2267                                         /os\/2/        { print "OS2";     exit}
2268                                         /gnu/          { print "UNIX";    exit}
2269                         '`
2270                 fi
2272                 if [ -z "$os" ]; then
2273                         log 1 "detecting OS... none detected"
2274                         log 1 "I couldn't detect your OS. Please use --os=OS to force one"
2275                         log 1 "Allowed values are: UNIX, OSX, FREEBSD, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP"
2276                         exit 1
2277                 fi
2279                 log 1 "detecting OS... $os"
2280         else
2281                 log 1 "forcing OS... $os"
2282         fi
2285 detect_allegro() {
2286         # 0 means no, 1 is auto-detect, 2 is force
2287         if [ "$with_allegro" = "0" ]; then
2288                 log 1 "checking Allegro... disabled"
2290                 allegro_config=""
2291                 return 0
2292         fi
2294         if [ "$with_allegro" = "2" ] && [ "$with_cocoa" = "2" ]; then
2295                 log 1 "configure: error: it is impossible to compile both Allegro and COCOA"
2296                 log 1 "configure: error: please deselect one of them and try again"
2297                 exit 1
2298         fi
2300         if [ "$with_allegro" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2301                 log 1 "configure: error: it is impossible to compile a dedicated with Allegro"
2302                 log 1 "configure: error: please deselect one of them and try again"
2303                 exit 1
2304         fi
2306         if [ "$enable_dedicated" != "0" ]; then
2307                 log 1 "checking Allegro... dedicated server, skipping"
2309                 allegro_config=""
2310                 return 0
2311         fi
2313         # By default on OSX we don't use SDL. The rest is auto-detect
2314         if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
2315                 log 1 "checking Allegro... OSX, skipping"
2317                 allegro_config=""
2318                 return 0
2319         fi
2321         if [ "$with_allegro" = "1" ] || [ "$with_allegro" = "" ] || [ "$with_allegro" = "2" ]; then
2322                 allegro_config="allegro-config"
2323         else
2324                 allegro_config="$with_allegro"
2325         fi
2327         version=`$allegro_config --version 2>/dev/null`
2328         ret=$?
2329         log 2 "executing $allegro_config --version"
2330         log 2 "  returned $version"
2331         log 2 "  exit code $ret"
2333         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2334                 log 1 "checking Allegro... not found"
2336                 # It was forced, so it should be found.
2337                 if [ "$with_allegro" != "1" ]; then
2338                         log 1 "configure: error: allegro-config couldn't be found"
2339                         log 1 "configure: error: you supplied '$with_allegro', but it seems invalid"
2340                         exit 1
2341                 fi
2343                 allegro_config=""
2344                 return 0
2345         fi
2347         log 1 "checking Allegro... found"
2351 detect_sdl() {
2352         # 0 means no, 1 is auto-detect, 2 is force
2353         if [ "$with_sdl" = "0" ]; then
2354                 log 1 "checking SDL... disabled"
2356                 sdl_config=""
2357                 return 0
2358         fi
2360         if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then
2361                 log 1 "configure: error: it is impossible to compile both SDL and COCOA"
2362                 log 1 "configure: error: please deselect one of them and try again"
2363                 exit 1
2364         fi
2366         if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2367                 log 1 "configure: error: it is impossible to compile a dedicated with SDL"
2368                 log 1 "configure: error: please deselect one of them and try again"
2369                 exit 1
2370         fi
2372         if [ "$enable_dedicated" != "0" ]; then
2373                 log 1 "checking SDL... dedicated server, skipping"
2375                 sdl_config=""
2376                 return 0
2377         fi
2379         # By default on OSX we don't use SDL. The rest is auto-detect
2380         if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
2381                 log 1 "checking SDL... OSX, skipping"
2383                 sdl_config=""
2384                 return 0
2385         fi
2387         if [ "$os" = "OSX" ]; then
2388                 log 1 "WARNING: sdl is known to fail on some versions of Mac OS X"
2389                 log 1 "WARNING: with some hardware configurations. Use at own risk!"
2390                 sleep 5
2391         fi
2393         if [ "$with_sdl" = "1" ] || [ "$with_sdl" = "" ] || [ "$with_sdl" = "2" ]; then
2394                 sdl_config="sdl-config"
2395         else
2396                 sdl_config="$with_sdl"
2397         fi
2399         version=`$sdl_config --version 2>/dev/null`
2400         ret=$?
2401         log 2 "executing $sdl_config --version"
2402         log 2 "  returned $version"
2403         log 2 "  exit code $ret"
2405         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2406                 log 1 "checking SDL... not found"
2408                 # It was forced, so it should be found.
2409                 if [ "$with_sdl" != "1" ]; then
2410                         log 1 "configure: error: sdl-config couldn't be found"
2411                         log 1 "configure: error: you supplied '$with_sdl', but it seems invalid"
2412                         exit 1
2413                 fi
2415                 sdl_config=""
2416                 return 0
2417         fi
2419         log 1 "checking SDL... found"
2422 detect_osx_sdk() {
2423         # Try to find the best SDK available. For a normal build this
2424         # is currently the 10.5 SDK as this is needed to compile all
2425         # optional code. Because such an executable won't run on 10.4
2426         # or lower, also check for the 10.4u SDK when doing an universal
2427         # build.
2429         # Check for the 10.5 SDK, but try 10.6 if that fails
2430         check_osx_sdk "10.5" || check_osx_sdk "10.6" || osx_sdk_path=""
2432         if [ -z "$osx_sdk_path" ] || [ "$enable_universal" != "0" ]; then
2433                 # No better SDK or universal build enabled? Check 10.4u SDK as well
2434                 local old_sdk="$osx_sdk_path"
2435                 if check_osx_sdk "10.4u"; then
2436                         osx_sdk_104_path="$osx_sdk_path"
2437                 else
2438                         osx_sdk_104_path=""
2439                 fi
2440                 if [ -z "$old_sdk" ]; then
2441                         osx_sdk_path="$osx_sdk_104_path"
2442                 else
2443                         osx_sdk_path="$old_sdk"
2444                 fi
2445         fi
2447         if [ -z "$osx_sdk_path" ]; then
2448                 log 1 "Your system SDK is probably too old"
2449                 log 1 "Please install/upgrade your Xcode to >= 2.5"
2451                 exit 1
2452         fi
2455 detect_cocoa() {
2456         # 0 means no, 1 is auto-detect, 2 is force
2457         if [ "$with_cocoa" = "0" ]; then
2458                 log 1 "checking COCOA... disabled"
2460                 return 0
2461         fi
2463         if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2464                 log 1 "configure: error: it is impossible to compile a dedicated with COCOA"
2465                 log 1 "configure: error: please deselect one of them and try again"
2466                 exit 1
2467         fi
2469         if [ "$enable_dedicated" != "0" ]; then
2470                 log 1 "checking COCOA... dedicated server, skipping"
2472                 with_cocoa="0"
2473                 return 0
2474         fi
2476         # By default on OSX we use COCOA. The rest doesn't support it
2477         if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then
2478                 log 1 "checking COCOA... not OSX, skipping"
2480                 with_cocoa="0"
2481                 return 0
2482         fi
2484         if [ "$os" != "OSX" ]; then
2485                 log 1 "checking COCOA... not OSX"
2487                 log 1 "configure: error: COCOA video driver is only supported for OSX"
2488                 exit 1
2489         fi
2491         log 1 "checking COCOA... found"
2494         if [ "$enable_cocoa_quartz" != "0" ]; then
2495                 log 1 "checking whether to enable the Quartz window subdriver... yes"
2496         else
2497                 log 1 "checking whether to enable the Quartz window subdriver... no"
2498         fi
2500         detect_quickdraw
2503 detect_quickdraw() {
2504         # 0 means no, 1 is auto-detect, 2 is force
2505         if [ "$enable_cocoa_quickdraw" = "0" ]; then
2506                 log 1 "checking Quickdraw window subdriver... disabled"
2507                 return 0
2508         fi
2510         # Assume QuickDraw is available when doing an universal build
2511         if [ "$enable_universal" != "0" ]; then
2512                 log 1 "checking Quickdraw window subdriver... found"
2513                 return 0
2514         fi
2516         # 64 bits doesn't have quickdraw
2517         if [ "$cpu_type" = "64" ]; then
2518                 enable_cocoa_quickdraw="0"
2519                 log 1 "checking Quickdraw window subdriver... disabled (64 bits)"
2520                 return 0
2521         fi
2523 cat > tmp.osx.mm << EOF
2524 #include <AvailabilityMacros.h>
2525 #import <Cocoa/Cocoa.h>
2526 int main(int argc, char *argv[]) { SetEmptyRgn(NULL); return 0; }
2528         execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS -mmacosx-version-min=10.3 tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
2529         eval $execute > /dev/null
2530         ret=$?
2531         log 2 "executing $execute"
2532         log 2 "  exit code $ret"
2533         rm -f tmp.osx.mm tmp.osx
2534         if [ "$ret" != "0" ]; then
2535                 log 1 "checking Quickdraw window subdriver... not found"
2537                 # It was forced, so it should be found.
2538                 if [ "$enable_cocoa_quickdraw" != "1" ]; then
2539                         log 1 "configure: error: Quickdraw window driver could not be found"
2540                         exit 1
2541                 fi
2543                 enable_cocoa_quickdraw=0
2544                 return 0
2545         fi
2547         enable_cocoa_quickdraw=1
2548         log 1 "checking Quickdraw window subdriver... found"
2551 detect_library() {
2552         # $1 - config-param ($with_zlib value)
2553         # $2 - library name ('zlib', sets $zlib)
2554         # $3 - static library name (libz.a)
2555         # $4 - header directory ()
2556         # $5 - header name (zlib.h)
2557         # $6 - force static (if non-empty)
2559         if [ -n "$6" ]; then force_static="1"; fi
2561         # 0 means no, 1 is auto-detect, 2 is force
2562         if [ "$1" = "0" ]; then
2563                 log 1 "checking $2... disabled"
2565                 eval "$2=\"\""
2566                 return 0
2567         fi
2569         log 2 "detecting $2"
2571         if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
2572                 eval "$2=`ls -1 /usr/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2573                 eval "res=\$$2"
2574                 if [ -z "$res" ]; then
2575                         log 2 "  trying /usr/include/$4$5... no"
2576                         eval "$2=`ls -1 /usr/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2577                 fi
2578                 eval "res=\$$2"
2579                 if [ -z "$res" ]; then
2580                         log 2 "  trying /usr/local/include/$4$5... no"
2581                         eval "$2=`ls -1 /mingw/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2582                 fi
2583                 eval "res=\$$2"
2584                 if [ -z "$res" ]; then
2585                         log 2 "  trying /mingw/include/$4$5... no"
2586                         eval "$2=`ls -1 /opt/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2587                 fi
2588                 eval "res=\$$2"
2589                 if [ -z "$res" ]; then
2590                         log 2 "  trying /opt/local/include/$4$5... no"
2591                 fi
2592                 if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then
2593                         eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2594                         eval "res=\$$2"
2595                         if [ -z "$res" ]; then
2596                                 log 2 "  trying /usr/pkg/include/$4$5... no"
2597                         fi
2598                 fi
2599                 if [ -z "$res" ] && [ "$os" = "HAIKU" ]; then
2600                         eval "$2=`ls -1 /boot/common/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2601                         eval "res=\$$2"
2602                         if [ -z "$res" ]; then
2603                                 log 2 "  trying /boot/common/include/$4$5... no"
2604                         fi
2605                 fi
2607                 eval "res=\$$2"
2608                 if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
2609                         eval "res=\$$2"
2610                         log 2 "  trying $res... found"
2611                         # Now find the static lib, if needed
2612                         eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2613                         eval "res=\$$2"
2614                         if [ -z "$res" ]; then
2615                                 log 2 "  trying /lib/$3... no"
2616                                 eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2617                         fi
2618                         eval "res=\$$2"
2619                         if [ -z "$res" ]; then
2620                                 log 2 "  trying /usr/lib/$3... no"
2621                                 eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2622                         fi
2623                         eval "res=\$$2"
2624                         if [ -z "$res" ]; then
2625                                 log 2 "  trying /usr/local/lib/$3... no"
2626                                 eval "$2=`ls /mingw/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2627                         fi
2628                         eval "res=\$$2"
2629                         if [ -z "$res" ]; then
2630                                 log 2 "  trying /mingw/lib/$3... no"
2631                                 log 1 "configure: error: $2 couldn't be found"
2632                                 log 1 "configure: error: you requested a static link, but I can't find $3"
2634                                 exit 1
2635                         fi
2636                 fi
2637         else
2638                 # Make sure it exists
2639                 if [ -f "$1" ]; then
2640                         eval "$2=`ls $1 2>/dev/null`"
2641                 else
2642                         eval "$2=`ls $1/$3 2>/dev/null`"
2643                 fi
2644         fi
2646         eval "res=\$$2"
2647         if [ -z "$res" ]; then
2648                 log 1 "checking $2... not found"
2649                 if [ "$1" = "2" ]; then
2650                         log 1 "configure: error: $2 couldn't be found"
2652                         exit 1
2653                 elif [ "$1" != "1" ]; then
2654                         log 1 "configure: error: $2 couldn't be found"
2655                         log 1 "configure: error: you supplied '$1', but it seems invalid"
2657                         exit 1
2658                 fi
2660                 eval "with_$2=0"
2662                 return 0
2663         fi
2665         eval "res=\$$2"
2666         log 2 "  trying $res... found"
2668         log 1 "checking $2... found"
2671 detect_zlib() {
2672         detect_library "$with_zlib" "zlib" "libz.a" "" "zlib.h"
2675 detect_lzo2() {
2676         detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h"
2679 detect_libtimidity() {
2680         detect_library "$with_libtimidity" "libtimidity" "libtimidity.a" "" "timidity.h"
2683 detect_lzma() {
2684         # 0 means no, 1 is auto-detect, 2 is force
2685         if [ "$with_lzma" = "0" ]; then
2686                 log 1 "checking liblzma... disabled"
2688                 lzma_config=""
2689                 return 0
2690         fi
2692         if [ "$with_lzma" = "1" ] || [ "$with_lzma" = "" ] || [ "$with_lzma" = "2" ]; then
2693                 lzma_config="pkg-config liblzma"
2694         else
2695                 lzma_config="$with_lzma"
2696         fi
2698         version=`$lzma_config --modversion 2>/dev/null`
2699         ret=$?
2700         log 2 "executing $lzma_config --modversion"
2701         log 2 "  returned $version"
2702         log 2 "  exit code $ret"
2704         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2705                 log 1 "checking liblzma... not found"
2707                 # It was forced, so it should be found.
2708                 if [ "$with_lzma" != "1" ]; then
2709                         log 1 "configure: error: pkg-config liblzma couldn't be found"
2710                         log 1 "configure: error: you supplied '$with_lzma', but it seems invalid"
2711                         exit 1
2712                 fi
2714                 lzma_config=""
2715                 return 0
2716         fi
2718         log 1 "checking liblzma... found"
2721 detect_png() {
2722         # 0 means no, 1 is auto-detect, 2 is force
2723         if [ "$with_png" = "0" ]; then
2724                 log 1 "checking libpng... disabled"
2726                 png_config=""
2727                 return 0
2728         fi
2730         if [ "$with_zlib" = "0" ] || [ -z "$zlib" ]; then
2731                 if [ "$with_png" != "1" ]; then
2732                         log 1 "checking libpng... no zlib"
2733                         log 1 "ERROR: libpng was forced, but zlib was not detected / disabled."
2734                         log 1 "ERROR: libpng depends on zlib."
2736                         exit 1
2737                 fi
2739                 log 1 "checking libpng... no zlib, skipping"
2741                 png_config=""
2742                 return 0
2743         fi
2745         if [ "$with_png" = "1" ] || [ "$with_png" = "" ] || [ "$with_png" = "2" ]; then
2746                 png_config="libpng-config"
2747         else
2748                 png_config="$with_png"
2749         fi
2751         version=`$png_config --version 2>/dev/null`
2752         ret=$?
2753         log 2 "executing $png_config --version"
2754         log 2 "  returned $version"
2755         log 2 "  exit code $ret"
2757         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2758                 log 1 "checking libpng... not found"
2760                 # It was forced, so it should be found.
2761                 if [ "$with_png" != "1" ]; then
2762                         log 1 "configure: error: libpng-config couldn't be found"
2763                         log 1 "configure: error: you supplied '$with_png', but it seems invalid"
2764                         exit 1
2765                 fi
2767                 png_config=""
2768                 return 0
2769         fi
2771         log 1 "checking libpng... found"
2774 detect_freetype() {
2775         # 0 means no, 1 is auto-detect, 2 is force
2776         if [ "$with_freetype" = "0" ]; then
2777                 log 1 "checking libfreetype... disabled"
2779                 freetype_config=""
2780                 return 0
2781         fi
2782         if [ "$with_freetype" = "1" ] && [ "$enable_dedicated" != "0" ]; then
2783                 log 1 "checking libfreetype... dedicated server, skipping"
2785                 freetype_config=""
2786                 return 0
2787         fi
2789         if [ "$with_zlib" = "0" ] || [ -z "$zlib" ]; then
2790                 if [ "$with_freetype" != "1" ]; then
2791                         log 1 "checking libfreetype... no zlib"
2792                         log 1 "ERROR: libfreetype was forced, but zlib was not detected / disabled."
2793                         log 1 "ERROR: libfreetype depends on zlib."
2795                         exit 1
2796                 fi
2798                 log 1 "checking libfreetype... no zlib, skipping"
2800                 freetype_config=""
2801                 return 0
2802         fi
2804         if [ "$with_freetype" = "1" ] || [ "$with_freetype" = "" ] || [ "$with_freetype" = "2" ]; then
2805                 freetype_config="freetype-config"
2806         else
2807                 freetype_config="$with_freetype"
2808         fi
2810         version=`$freetype_config --version 2>/dev/null`
2811         ret=$?
2812         log 2 "executing freetype_config --version"
2813         log 2 "  returned $version"
2814         log 2 "  exit code $ret"
2816         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2817                 log 1 "checking libfreetype... not found"
2819                 # It was forced, so it should be found.
2820                 if [ "$with_freetype" != "1" ]; then
2821                         log 1 "configure: error: freetype-config couldn't be found"
2822                         log 1 "configure: error: you supplied '$with_freetype', but it seems invalid"
2823                         exit 1
2824                 fi
2826                 freetype_config=""
2827                 return 0
2828         fi
2830         log 1 "checking libfreetype... found"
2833 detect_fontconfig() {
2834         # 0 means no, 1 is auto-detect, 2 is force
2835         if [ "$with_fontconfig" = "0" ]; then
2836                 log 1 "checking libfontconfig... disabled"
2838                 fontconfig_config=""
2839                 return 0
2840         fi
2841         if [ "$with_fontconfig" = "1" ] && [ "$enable_dedicated" != "0" ]; then
2842                 log 1 "checking libfontconfig... dedicated server, skipping"
2844                 fontconfig_config=""
2845                 return 0
2846         fi
2847         if [ "$with_fontconfig" != "2" ] && [ -z "$freetype_config" ]; then
2848                 log 1 "checking libfontconfig... no freetype, skipping"
2850                 fontconfig_config=""
2851                 return 0
2852         fi
2854         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
2855                 log 1 "checking libfontconfig... WIN32, skipping"
2856                 fontconfig_config=""
2857                 return 0
2858         fi
2860         if [ "$os" = "OSX" ]; then
2861                 log 1 "checking libfontconfig... OSX, skipping"
2862                 fontconfig_config=""
2863                 return 0
2864         fi
2866         if [ "$with_fontconfig" = "1" ] || [ "$with_fontconfig" = "" ] || [ "$with_fontconfig" = "2" ]; then
2867                 fontconfig_config="pkg-config fontconfig"
2868         else
2869                 fontconfig_config="$with_fontconfig"
2870         fi
2872         version=`$fontconfig_config --modversion 2>/dev/null`
2873         ret=$?
2874         check_version '2.3' "$version"
2875         version_ok=$?
2876         log 2 "executing $fontconfig_config --modversion"
2877         log 2 "  returned $version"
2878         log 2 "  exit code $ret"
2880         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
2881                 if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
2882                         log 1 "checking libfontconfig... needs at least version 2.3.0, fontconfig NOT enabled"
2883                 else
2884                         log 1 "checking libfontconfig... not found"
2885                 fi
2887                 # It was forced, so it should be found.
2888                 if [ "$with_fontconfig" != "1" ]; then
2889                         log 1 "configure: error: fontconfig-config couldn't be found"
2890                         log 1 "configure: error: you supplied '$with_fontconfig', but it seems invalid"
2891                         exit 1
2892                 fi
2894                 fontconfig_config=""
2895                 return 0
2896         fi
2898         log 1 "checking libfontconfig... found"
2901 detect_icu() {
2902         # 0 means no, 1 is auto-detect, 2 is force
2903         if [ "$with_icu" = "0" ]; then
2904                 log 1 "checking libicu... disabled"
2906                 icu_config=""
2907                 return 0
2908         fi
2909         if [ "$with_icu" = "1" ] && [ "$enable_dedicated" != "0" ]; then
2910                 log 1 "checking libicu... dedicated server, skipping"
2912                 icu_config=""
2913                 return 0
2914         fi
2916         if [ "$with_icu" = "1" ] || [ "$with_icu" = "" ] || [ "$with_icu" = "2" ]; then
2917                 icu_config="icu-config"
2918         else
2919                 icu_config="$with_icu"
2920         fi
2922         version=`$icu_config --version 2>/dev/null`
2923         ret=$?
2924         check_version '3.6' "$version"
2925         version_ok=$?
2926         log 2 "executing $icu_config --version"
2927         log 2 "  returned $version"
2928         log 2 "  exit code $ret"
2930         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
2931                 if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
2932                         log 1 "checking libicu... needs at least version 3.6.0, icu NOT enabled"
2933                 else
2934                         log 1 "checking libicu... not found"
2935                 fi
2937                 # It was forced, so it should be found.
2938                 if [ "$with_icu" != "1" ]; then
2939                         log 1 "configure: error: icu-config couldn't be found"
2940                         log 1 "configure: error: you supplied '$with_icuconfig', but it seems invalid"
2941                         exit 1
2942                 fi
2944                 icu_config=""
2945                 return 0
2946         fi
2948         log 1 "checking libicu... found"
2951 detect_pspconfig() {
2952         # 0 means no, 1 is auto-detect, 2 is force
2953         if [ "$with_psp_config" = "0" ]; then
2954                 log 1 "checking psp-config... disabled"
2956                 psp_config=""
2957                 return 0
2958         fi
2960         if [ "$with_psp_config" = "1" ] && [ "$os" != "PSP" ]; then
2961                 log 1 "checking psp-config... not PSP, skipping"
2963                 psp_config="";
2964                 return 0
2965         fi
2967         if [ "$os" != "PSP" ]; then
2968                 log 1 "checking psp-config... not PSP"
2970                 log 1 "configure: error: psp-config is only supported for PSP"
2971                 exit 1
2972         fi
2974         if [ "$with_psp_config" = "1" ] || [ "$with_psp_config" = "" ] || [ "$with_psp_config" = "2" ]; then
2975                 psp_config="psp-config"
2976         else
2977                 psp_config="$with_psp_config"
2978         fi
2980         version=`$psp_config -p 2>/dev/null`
2981         ret=$?
2982         log 2 "executing $psp_config -p"
2983         log 2 "  returned $version"
2984         log 2 "  exit code $ret"
2986         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2987                 log 1 "checking psp-config... not found"
2988                 log 1 "configure: error: psp-config couldn't be found"
2990                 # It was forced, so it should be found.
2991                 if [ "$with_psp_config" != "1" ]; then
2992                         log 1 "configure: error: you supplied '$with_psp_config', but it seems invalid"
2993                 fi
2994                 exit 1
2995         fi
2997         log 1 "checking psp-config... found"
3000 detect_iconv() {
3001         # 0 means no, 1 is auto-detect, 2 is force
3002         if [ "$with_iconv" = "0" ]; then
3003                 log 1 "checking iconv... disabled"
3005                 return 0
3006         fi
3008         if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then
3009                 log 1 "checking iconv... not OSX, skipping"
3010                 with_iconv="0"
3012                 return 0
3013         fi
3015         # Try to find iconv.h, seems to only thing to detect iconv with
3017         if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then
3018                 iconv=`ls -1 /usr/include 2>/dev/null | grep "iconv.h"`
3019                 if [ -z "$iconv" ]; then
3020                         iconv=`ls -1 /usr/local/include 2>/dev/null | grep "iconv.h"`
3021                 fi
3022         else
3023                 # Make sure it exists
3024                 iconv=`ls $with_iconv/include/iconv.h 2>/dev/null`
3025         fi
3027         if [ -z "$iconv" ]; then
3028                 log 1 "checking iconv... not found"
3029                 if [ "$with_iconv" = "2" ]; then
3030                         log 1 "configure: error: iconv couldn't be found"
3032                         exit 1
3033                 elif [ "$with_iconv" != "1" ]; then
3034                         log 1 "configure: error: iconv couldn't be found"
3035                         log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it"
3037                         exit 1
3038                 fi
3040                 return 0
3041         fi
3043         if [ "$with_iconv" = "1" ]; then
3044                 with_iconv="2"
3045         fi
3047         log 2 "found iconv in $iconv"
3049         log 1 "checking iconv... found"
3051         # There are different implementations of iconv. The older ones,
3052         # e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g.
3053         # IEEE 1003.1 (2004), pass a non-const pointer.
3055         cat > tmp.iconv.cpp << EOF
3056 #include "src/stdafx.h"
3057 #include <iconv.h>
3058 int main() {
3059         static char buf[1024];
3060         iconv_t convd = 0;
3061         const char *inbuf = "";
3062         char *outbuf  = buf;
3063         size_t outlen = 1023;
3064         size_t inlen  = 0;
3065         return iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
3068         execute="$cxx_host $OSX_SYSROOT $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
3069         eval $execute > /dev/null
3070         ret=$?
3071         log 2 "executing $execute"
3072         log 2 "  exit code $ret"
3073         if [ "$ret" = "0" ]; then have_non_const_iconv="no"; else have_non_const_iconv="yes"; fi
3074         log 1 "checking if iconv has non-const inbuf... $have_non_const_iconv"
3076         cat > tmp.iconv.cpp << EOF
3077 #include "src/stdafx.h"
3078 #include <iconv.h>
3079 int main() {
3080         static char buf[1024];
3081         iconv_t convd = 0;
3082         char *inbuf = "";
3083         char *outbuf  = buf;
3084         size_t outlen = 1023;
3085         size_t inlen  = 0;
3086         return iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
3089         execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
3090         eval $execute > /dev/null
3091         ret=$?
3092         log 2 "executing $execute"
3093         log 2 "  exit code $ret"
3094         if [ "$ret" = "0" ]; then link_to_iconv="no"; else link_to_iconv="yes"; fi
3095         log 1 "checking whether to link to iconv... $link_to_iconv"
3096         rm -f tmp.iconv tmp.iconv.cpp
3099 _detect_sort() {
3100         sort_test_in="d
3105         sort_test_out="a
3110         log 2 "running echo <array> | $1"
3112         if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then
3113                 sort="$1"
3114                 log 2 "  result was valid"
3115         else
3116                 log 2 "  result was invalid"
3117         fi
3120 detect_sort() {
3121         if [ "$with_sort" = "0" ]; then
3122                 log 1 "checking sort... disabled"
3124                 return
3125         fi
3127         if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then
3128                 _detect_sort "sort"
3129                 if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi
3130                 if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi
3131                 if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi
3132                 if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi
3133                 if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi
3134                 if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi
3135         else
3136                 _detect_sort "$with_sort"
3137         fi
3139         if [ -z "$sort" ]; then
3140                 if [ "$with_sort" = "2" ]; then
3141                         log 1 "checking sort... not found"
3143                         log 1 "configure: error: couldn't detect sort on your system"
3144                         exit 1
3145                 elif [ "$with_sort" != "1" ]; then
3146                         log 1 "checking sort... $with_sort not found"
3148                         log 1 "configure: error: '$with_sort' doesn't look like a sort to me"
3149                         log 1 "configure: error: please verify its location and function and try again"
3151                         exit 1
3152                 else
3153                         log 1 "checking sort... not found"
3154                 fi
3155         else
3156                 log 1 "checking sort... $sort"
3157         fi
3160 detect_grfcodec() {
3161         # 0 means no, 1 is auto-detect, 2 is force
3162         if [ "$with_grfcodec" = "0" ]; then
3163                 log 1 "checking grfcodec... disabled"
3165                 grfcodec=""
3166                 return 0
3167         fi
3169         if [ "$with_grfcodec" = "1" ] || [ "$with_grfcodec" = "" ] || [ "$with_grfcodec" = "2" ]; then
3170                 grfcodec="grfcodec"
3171         else
3172                 grfcodec="$with_grfcodec"
3173         fi
3175         version=`$grfcodec -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'`
3176         ret=$?
3177         log 2 "executing grfcodec -v"
3178         log 2 "  returned $version"
3179         log 2 "  exit code $ret"
3181         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "949" ]; then
3182                 if [ -n "$version" ] && [ "$version" -lt "949" ]; then
3183                         log 1 "checking grfcodec... needs at least version 6.0.2 (r949), disabled"
3184                 else
3185                         log 1 "checking grfcodec... not found"
3186                 fi
3188                 # It was forced, so it should be found.
3189                 if [ "$with_grfcodec" != "1" ]; then
3190                         log 1 "configure: error: grfcodec couldn't be found"
3191                         log 1 "configure: error: you supplied '$with_grfcodec', but it seems invalid"
3192                         exit 1
3193                 fi
3195                 grfcodec=""
3196                 return 0
3197         fi
3199         log 1 "checking grfcodec... found"
3202 detect_nforenum() {
3203         # 0 means no, 1 is auto-detect, 2 is force
3204         if [ "$with_nforenum" = "0" ]; then
3205                 log 1 "checking nforenum... disabled"
3207                 nforenum=""
3208                 return 0
3209         fi
3211         if [ "$with_nforenum" = "1" ] || [ "$with_nforenum" = "" ] || [ "$with_nforenum" = "2" ]; then
3212                 nforenum="nforenum"
3213         else
3214                 nforenum="$with_nforenum"
3215         fi
3217         version=`$nforenum -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'`
3218         ret=$?
3219         log 2 "executing nforenum -v"
3220         log 2 "  returned $version"
3221         log 2 "  exit code $ret"
3223         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "949" ]; then
3224                 if [ -n "$version" ] && [ "$version" -lt "949" ]; then
3225                         log 1 "checking nforenum... needs at least version 6.0.2 (r949), disabled"
3226                 else
3227                         log 1 "checking nforenum... not found"
3228                 fi
3230                 # It was forced, so it should be found.
3231                 if [ "$with_nforenum" != "1" ]; then
3232                         log 1 "configure: error: nforenum couldn't be found"
3233                         log 1 "configure: error: you supplied '$with_nforenum', but it seems invalid"
3234                         exit 1
3235                 fi
3237                 nforenum=""
3238                 return 0
3239         fi
3241         log 1 "checking nforenum... found"
3244 detect_cputype() {
3245         if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
3246                 log 1 "forcing cpu-type... $cpu_type bits"
3247                 return;
3248         fi
3249         echo "#define _SQ64 1" > tmp.64bit.cpp
3250         echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp
3251         echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
3252         echo "int main() { return 0; }" >> tmp.64bit.cpp
3253         execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
3254         cpu_type="`eval $execute 2>/dev/null`"
3255         ret=$?
3256         log 2 "executing $execute"
3257         log 2 "  returned $cpu_type"
3258         log 2 "  exit code $ret"
3259         if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
3260         log 1 "detecting cpu-type... $cpu_type bits"
3261         rm -f tmp.64bit tmp.64bit.cpp
3264 make_sed() {
3265         T_CFLAGS="$CFLAGS"
3266         T_CXXFLAGS="$CXXFLAGS"
3267         T_LDFLAGS="$LDFLAGS"
3269         SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR"
3271         # All the data needed to compile a single target
3272         #  Make sure if you compile multiple targets to
3273         #  use multiple OBJS_DIR, because all in-between
3274         #  binaries are stored in there, and nowhere else.
3275         SRC_REPLACE="
3276                 s@!!CC_HOST!!@$cc_host@g;
3277                 s@!!CXX_HOST!!@$cxx_host@g;
3278                 s@!!CC_BUILD!!@$cc_build@g;
3279                 s@!!CXX_BUILD!!@$cxx_build@g;
3280                 s@!!WINDRES!!@$windres@g;
3281                 s@!!STRIP!!@$strip $strip_arg@g;
3282                 s@!!LIPO!!@$lipo@g;
3283                 s@!!CFLAGS!!@$T_CFLAGS@g;
3284                 s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g;
3285                 s@!!CXXFLAGS!!@$T_CXXFLAGS@g;
3286                 s@!!CXXFLAGS_BUILD!!@$CXXFLAGS_BUILD@g;
3287                 s@!!STRGEN_FLAGS!!@$strgen_flags@g;
3288                 s@!!LIBS!!@$LIBS@g;
3289                 s@!!LDFLAGS!!@$T_LDFLAGS@g;
3290                 s@!!LDFLAGS_BUILD!!@$LDFLAGS_BUILD@g;
3291                 s@!!BIN_DIR!!@$BIN_DIR@g;
3292                 s@!!ROOT_DIR!!@$ROOT_DIR@g;
3293                 s@!!MEDIA_DIR!!@$MEDIA_DIR@g;
3294                 s@!!SOURCE_LIST!!@$SOURCE_LIST@g;
3295                 s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g;
3296                 s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g;
3297                 s@!!GRF_OBJS_DIR!!@$GRF_OBJS_DIR@g;
3298                 s@!!SETTING_OBJS_DIR!!@$SETTING_OBJS_DIR@g;
3299                 s@!!SRC_DIR!!@$SRC_DIR@g;
3300                 s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g;
3301                 s@!!OSXAPP!!@$OSXAPP@g;
3302                 s@!!LANG_DIR!!@$LANG_DIR@g;
3303                 s@!!TTD!!@$TTD@g;
3304                 s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g;
3305                 s@!!DATA_DIR!!@$prefix_dir/$data_dir@g;
3306                 s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g;
3307                 s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
3308                 s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g;
3309                 s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
3310                 s@!!PERSONAL_DIR!!@$personal_dir@g;
3311                 s@!!SHARED_DIR!!@$shared_dir@g;
3312                 s@!!INSTALL_DIR!!@$install_dir@g;
3313                 s@!!BINARY_NAME!!@$binary_name@g;
3314                 s@!!STRGEN!!@$STRGEN@g;
3315                 s@!!ENDIAN_CHECK!!@$ENDIAN_CHECK@g;
3316                 s@!!DEPEND!!@$DEPEND@g;
3317                 s@!!SETTINGSGEN!!@$SETTINGSGEN@g;
3318                 s@!!ENDIAN_FORCE!!@$endian@g;
3319                 s@!!STAGE!!@$STAGE@g;
3320                 s@!!MAKEDEPEND!!@$makedepend@g;
3321                 s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g;
3322                 s@!!SORT!!@$sort@g;
3323                 s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g;
3324                 s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g;
3325                 s@!!CONFIG_CACHE_ENDIAN!!@config.cache.endian@g;
3326                 s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g;
3327                 s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g;
3328                 s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g;
3329                 s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g;
3330                 s@!!LANG_SUPPRESS!!@$lang_suppress@g;
3331                 s@!!OBJS_C!!@$OBJS_C@g;
3332                 s@!!OBJS_CPP!!@$OBJS_CPP@g;
3333                 s@!!OBJS_MM!!@$OBJS_MM@g;
3334                 s@!!OBJS_RC!!@$OBJS_RC@g;
3335                 s@!!SRCS!!@$SRCS@g;
3336                 s@!!OS!!@$os@g;
3337                 s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g;
3338                 s@!!AWK!!@$awk@g;
3339                 s@!!DISTCC!!@$distcc@g;
3340                 s@!!NFORENUM!!@$nforenum@g;
3341                 s@!!GRFCODEC!!@$grfcodec@g;
3342         "
3344         if [ "$icon_theme_dir" != "" ]; then
3345                 SRC_REPLACE="$SRC_REPLACE
3346                         s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
3347                 "
3348         else
3349                 SRC_REPLACE="$SRC_REPLACE
3350                         s@!!ICON_THEME_DIR!!@@g;
3351                 "
3352         fi
3354         if [ "$man_dir" != "" ]; then
3355                 SRC_REPLACE="$SRC_REPLACE
3356                         s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
3357                 "
3358         else
3359                 SRC_REPLACE="$SRC_REPLACE
3360                         s@!!MAN_DIR!!@@g;
3361                 "
3362         fi
3364         if [ "$menu_dir" != "" ]; then
3365                 SRC_REPLACE="$SRC_REPLACE
3366                         s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g;
3367                 "
3368         else
3369                 SRC_REPLACE="$SRC_REPLACE
3370                         s@!!MENU_DIR!!@@g;
3371                 "
3372         fi
3375 generate_menu_item() {
3376         MENU_REPLACE="
3377                 s@!!TTD!!@$TTD@g;
3378                 s@!!MENU_GROUP!!@$menu_group@g;
3379                 s@!!MENU_NAME!!@$menu_name@g
3380         "
3381         log 1 "Generating menu item..."
3382         mkdir -p media
3383         < $ROOT_DIR/media/openttd.desktop.in sed "$MENU_REPLACE" > media/openttd.desktop
3386 generate_main() {
3387         STAGE="[MAIN]"
3389         make_sed
3391         # Create the main Makefile
3392         log 1 "Generating Makefile..."
3393         echo "# Auto-generated file from 'Makefile.in' -- DO NOT EDIT" > Makefile
3394         < $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" >> Makefile
3395         cp $ROOT_DIR/Makefile.bundle.in Makefile.bundle
3396         echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am
3397         echo >> Makefile.am
3398         # Make the copy of the source-list, so we don't trigger an unwanted recompile
3399         cp $SOURCE_LIST config.cache.source.list
3400         # Add the current directory, so we don't trigger an unwanted recompile
3401         echo "`pwd`" > config.cache.pwd
3402         # Make sure config.cache is OLDER then config.cache.source.list
3403         touch config.cache
3404         touch config.pwd
3406         if [ "$menu_dir" != "" ]; then
3407                 generate_menu_item
3408         fi
3411 generate_lang() {
3412         STAGE="[LANG]"
3414         make_sed
3416         # Create the language file
3417         mkdir -p $LANG_OBJS_DIR
3419         log 1 "Generating lang/Makefile..."
3420         echo "# Auto-generated file from 'Makefile.lang.in' -- DO NOT EDIT" > $LANG_OBJS_DIR/Makefile
3421         < $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" >> $LANG_OBJS_DIR/Makefile
3422         echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am
3423         echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am
3426 generate_settings() {
3427         STAGE="[SETTING]"
3429         make_sed
3431         # Create the language file
3432         mkdir -p $SETTING_OBJS_DIR
3434         log 1 "Generating setting/Makefile..."
3435         echo "# Auto-generated file from 'Makefile.settings.in' -- DO NOT EDIT" > $SETTING_OBJS_DIR/Makefile
3436         < $ROOT_DIR/Makefile.setting.in sed "$SRC_REPLACE" >> $SETTING_OBJS_DIR/Makefile
3437         echo "DIRS += $SETTING_OBJS_DIR" >> Makefile.am
3440 generate_grf() {
3441         STAGE="[BASESET]"
3443         make_sed
3445         # Create the language file
3446         mkdir -p $GRF_OBJS_DIR
3448         log 1 "Generating grf/Makefile..."
3449         echo "# Auto-generated file from 'Makefile.grf.in' -- DO NOT EDIT" > $GRF_OBJS_DIR/Makefile
3450         < $ROOT_DIR/Makefile.grf.in sed "$SRC_REPLACE" >> $GRF_OBJS_DIR/Makefile
3451         echo "DIRS += $GRF_OBJS_DIR" >> Makefile.am
3454 generate_src_normal() {
3455         STAGE=$1
3457         make_sed
3459         # Create the source file
3460         mkdir -p $SRC_OBJS_DIR
3462         log 1 "Generating $2/Makefile..."
3463         echo "# Auto-generated file from 'Makefile.src.in' -- DO NOT EDIT" > $SRC_OBJS_DIR/Makefile
3464         < $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" >> $SRC_OBJS_DIR/Makefile
3465         echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am
3466         echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am
3469 generate_src_osx() {
3470         cc_host_orig="$cc_host"
3471         cxx_host_orig="$cxx_host"
3472         CFLAGS_orig="$CFLAGS"
3473         LDFLAGS_orig="$LDFLAGS"
3475         for type in $enable_universal; do
3477                 if [ -n "$osx_sdk_104_path" ]; then
3478                         # Use 10.4 SDK for 32-bit targets
3479                         CFLAGS="-isysroot $osx_sdk_104_path $CFLAGS_orig"
3480                         LDFLAGS="-Wl,-syslibroot,$osx_sdk_104_path $LDFLAGS_orig"
3481                 fi
3483                 # We don't want to duplicate the x86_64 stuff for each target, so do it once here
3484                 if [ "$type" = "ppc64" ] || [ "$type" = "x86_64" ]; then
3485                         # 64 bits is always 10.5 or higher. Furthermore it has a non const ICONV
3486                         # and they also removed support for QuickTime/QuickDraw
3487                         if [ -n "$osx_sdk_path" ]; then
3488                                 CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig"
3489                                 LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig"
3490                         fi
3491                         CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME -UENABLE_COCOA_QUICKDRAW"
3492                         LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`"
3493                 fi
3495                 case $type in
3496                         ppc)
3497                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc"
3498                                 cc_host="$cc_host_orig -arch ppc -mmacosx-version-min=10.3"
3499                                 cxx_host="$cxx_host_orig -arch ppc -mmacosx-version-min=10.3"
3500                                 generate_src_normal "[ppc]" "objs/ppc";;
3501                         ppc970)
3502                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970"
3503                                 cc_host="$cc_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
3504                                 cxx_host="$cxx_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
3505                                 generate_src_normal "[ppc970]" "objs/ppc970";;
3506                         i386)
3507                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/i386"
3508                                 cc_host="$cc_host_orig -arch i386 -mmacosx-version-min=10.4"
3509                                 cxx_host="$cxx_host_orig -arch i386 -mmacosx-version-min=10.4"
3510                                 generate_src_normal "[i386]" "objs/i386";;
3511                         ppc64)
3512                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc64"
3513                                 cc_host="$cc_host_orig -arch ppc64 -mmacosx-version-min=10.5"
3514                                 cxx_host="$cxx_host_orig -arch ppc64 -mmacosx-version-min=10.5"
3515                                 generate_src_normal "[ppc64]" "objs/ppc64";;
3516                         x86_64)
3517                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/x86_64"
3518                                 cc_host="$cc_host_orig -arch x86_64 -mmacosx-version-min=10.5"
3519                                 cxx_host="$cxx_host_orig -arch x86_64 -mmacosx-version-min=10.5"
3520                                 generate_src_normal "[x86_64]" "objs/x86_64";;
3521                         *) log 1 "Unknown architecture requested for universal build: $type";;
3522                 esac
3523         done
3526 generate_src() {
3527         if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
3528                 generate_src_osx
3529         else
3530                 generate_src_normal "[SRC]" "objs"
3531         fi
3534 showhelp() {
3535         echo "'configure' configures OpenTTD."
3536         echo ""
3537         echo "Usage: $0 [OPTION]... [VAR=VALUE]..."
3538         echo ""
3539         echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as"
3540         echo "VAR=VALUE.  See below for descriptions of some of the useful variables."
3541         echo ""
3542         echo "Defaults for the options are specified in brackets."
3543         echo ""
3544         echo "Configuration:"
3545         echo "  -h, --help                     display this help and exit"
3546         echo ""
3547         echo "System types:"
3548         echo "  --build=BUILD                  configure for building on BUILD [guessed]"
3549         echo "  --host=HOST                    cross-compile to build programs to run"
3550         echo "                                 on HOST [BUILD]"
3551         echo "  --windres=WINDRES              the windres to use [HOST-windres]"
3552         echo "  --strip=STRIP                  the strip to use [HOST-strip]"
3553         echo "  --awk=AWK                      the awk to use in configure [awk]"
3554         echo "  --lipo=LIPO                    the lipo to use (OSX ONLY) [HOST-lipo]"
3555         echo "  --os=OS                        the OS we are compiling for [DETECT]"
3556         echo "                                 DETECT/UNIX/OSX/FREEBSD/OPENBSD/NETBSD/"
3557         echo "                                 MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/MINGW/OS2/"
3558         echo "                                 DOS/WINCE/PSP/HAIKU"
3559         echo "  --endian=ENDIAN                set the endian of the HOST (AUTO/LE/BE)"
3560         echo ""
3561         echo "Paths:"
3562         echo "  --prefix-dir=dir               specifies the prefix for all installed"
3563         echo "                                 files [/usr/local]"
3564         echo "  --binary-dir=dir               location of the binary. Will be prefixed"
3565         echo "                                 with the prefix-dir [games]"
3566         echo "  --data-dir=dir                 location of data files (lang, data, gm)."
3567         echo "                                 Will be prefixed with the prefix-dir"
3568         echo "                                 [share/games/openttd]"
3569         echo "  --doc-dir=dir                  location of the doc files"
3570         echo "                                 Will be prefixed with the prefix-dir"
3571         echo "                                 [$doc_dir]"
3572         echo "  --icon-dir=dir                 location of icons. Will be prefixed"
3573         echo "                                 with the prefix-dir [share/pixmaps]"
3574         echo "  --icon-theme-dir=dir           location of icon theme."
3575         echo "                                 Will be prefixed with the prefix-dir"
3576         echo "                                 and postfixed with size-dirs [$icon_theme_dir]"
3577         echo "  --man-dir=dir                  location of the manual page (UNIX only)"
3578         echo "                                 Will be prefixed with the prefix-dir"
3579         echo "                                 [$man_dir]"
3580         echo "  --menu-dir=dir                 location of the menu item. (UNIX only, except OSX)"
3581         echo "                                 Will be prefixed with the prefix-dir"
3582         echo "                                 [share/applications]"
3583         echo "  --personal-dir=dir             location of the personal directory"
3584         echo "                                 [os-dependent default]"
3585         echo "  --shared-dir=dir               location of shared data files"
3586         echo "                                 [os-dependent default]"
3587         echo "  --install-dir=dir              specifies the root to install to."
3588         echo "                                 Useful to install into jails [/]"
3589         echo "  --binary-name                  the name used for the binary, icons,"
3590         echo "                                 desktop file, etc. when installing [openttd]"
3591         echo ""
3592         echo "Features and packages:"
3593         echo "  --enable-debug[=LVL]           enable debug-mode (LVL=[0123], 0 is release)"
3594         echo "  --enable-desync-debug=[LVL]    enable desync debug options (LVL=[012], 0 is none"
3595         echo "  --enable-profiling             enables profiling"
3596         echo "  --enable-lto                   enables GCC's Link Time Optimization (LTO)/ICC's"
3597         echo "                                 Interprocedural Optimization if available"
3598         echo "  --enable-dedicated             compile a dedicated server (without video)"
3599         echo "  --enable-static                enable static compile (doesn't work for"
3600         echo "                                 all HOSTs)"
3601         echo "  --enable-translator            enable extra output for translators"
3602         echo "  --enable-universal[=ARCH]      enable universal builds (OSX ONLY). Allowed is any combination"
3603         echo "                                 of architectures: i386 ppc ppc970 ppc64 x86_64"
3604         echo "                                 Default architectures are: i386 ppc"
3605         echo "  --enable-osx-g5                enables optimizations for ppc970 (G5) (OSX ONLY)"
3606         echo "  --disable-cocoa-quartz         disable the quartz window mode driver for Cocoa (OSX ONLY)"
3607         echo "  --disable-cocoa-quickdraw      disable the quickdraw window mode driver for Cocoa (OSX ONLY)"
3608         echo "  --disable-unicode              disable unicode support to build win9x"
3609         echo "                                 version (Win32 ONLY)"
3610         echo "  --enable-console               compile as a console application instead of as a GUI application."
3611         echo "                                 If this setting is active, debug output will appear in the same"
3612         echo "                                 console instead of opening a new window. (Win32 ONLY)"
3613         echo "  --disable-network              disable network support"
3614         echo "  --disable-assert               disable asserts (continue on errors)"
3615         echo "  --enable-strip                 enable any possible stripping"
3616         echo "  --without-osx-sysroot          disable the automatic adding of sysroot "
3617         echo "                                 (OSX ONLY)"
3618         echo "  --without-application-bundle   disable generation of application bundle"
3619         echo "                                 (OSX ONLY)"
3620         echo "  --without-menu-entry           Don't generate a menu item (Freedesktop based only)"
3621         echo "  --menu-group=group             Category in which the menu item will be placed (Freedesktop based only)"
3622         echo "  --menu-name=name               Name of the menu item when placed [OpenTTD]"
3623         echo "  --with-direct-music            enable direct music support (Win32 ONLY)"
3624         echo "  --with-sort=sort               define a non-default location for sort"
3625         echo "  --with-midi=midi               define which midi-player to use"
3626         echo "  --with-midi-arg=arg            define which args to use for the"
3627         echo "                                 midi-player"
3628         echo "  --with-libtimidity             enables libtimidity support"
3629         echo "  --with-allegro[=allegro-config]"
3630         echo "                                 enables Allegro video driver support"
3631         echo "  --with-cocoa                   enables COCOA video driver (OSX ONLY)"
3632         echo "  --with-sdl[=sdl-config]        enables SDL video driver support"
3633         echo "  --with-zlib[=zlib.a]           enables zlib support"
3634         echo "  --with-liblzma[=liblzma.a]     enables liblzma support"
3635         echo "  --with-liblzo2[=liblzo2.a]     enables liblzo2 support"
3636         echo "  --with-png[=libpng-config]     enables libpng support"
3637         echo "  --with-freetype[=freetype-config]"
3638         echo "                                 enables libfreetype support"
3639         echo "  --with-fontconfig[=pkg-config fontconfig]"
3640         echo "                                 enables fontconfig support"
3641         echo "  --with-icu[=icu-config]        enables icu (used for right-to-left support)"
3642         echo "  --static-icu                   try to link statically (libsicu instead of"
3643         echo "                                 libicu; can fail as the new name is guessed)"
3644         echo "  --with-iconv[=iconv-path]      enables iconv support"
3645         echo "  --with-psp-config[=psp-config] enables psp-config support (PSP ONLY)"
3646         echo "  --disable-builtin-depend       disable use of builtin deps finder"
3647         echo "  --with-makedepend[=makedepend] enables makedepend support"
3648         echo "  --with-ccache                  enables ccache support"
3649         echo "  --with-distcc                  enables distcc support"
3650         echo "  --without-grfcodec             disable usage of grfcodec and re-generation of base sets"
3651         echo ""
3652         echo "Some influential environment variables:"
3653         echo "  CC                             C compiler command"
3654         echo "  CXX                            C++ compiler command"
3655         echo "  CFLAGS                         C compiler flags"
3656         echo "  CXXFLAGS                       C++ compiler flags"
3657         echo "  WINDRES                        windres command"
3658         echo "  LDFLAGS                        linker flags, e.g. -L<lib dir> if you"
3659         echo "                                 have libraries in a nonstandard"
3660         echo "                                 directory <lib dir>"
3661         echo "  CFLAGS_BUILD                   C compiler flags for build time tool generation"
3662         echo "  CXXFLAGS_BUILD                 C++ compiler flags for build time tool generation"
3663         echo "  LDFLAGS_BUILD                  linker flags for build time tool generation"
3664         echo ""
3665         echo "Use these variables to override the choices made by 'configure' or to help"
3666         echo "it to find libraries and programs with nonstandard names/locations."