(svn r27703) -Change [FS#6532]: [gcc] Wnarrowing and Wfree-nonheap-object do no longe...
[openttd.git] / config.lib
blobbf52a94c151e0576c332ecae7c0337105bfb0210
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         pkg_config="pkg-config"
33         os="DETECT"
34         endian="AUTO"
35         cpu_type="DETECT"
36         config_log="config.log"
37         prefix_dir="/usr/local"
38         binary_dir="games"
39         data_dir="share/games/openttd"
40         doc_dir="1"
41         icon_dir="share/pixmaps"
42         icon_theme_dir="1"
43         personal_dir="1"
44         shared_dir="1"
45         install_dir="/"
46         man_dir="1"
47         menu_dir="1"
48         menu_group="Game;"
49         menu_name="OpenTTD"
50         binary_name="openttd"
51         enable_debug="0"
52         enable_desync_debug="0"
53         enable_profiling="0"
54         enable_lto="0"
55         enable_dedicated="0"
56         enable_network="1"
57         enable_static="1"
58         enable_translator="0"
59         enable_unicode="1"
60         enable_console="1";
61         enable_assert="1"
62         enable_strip="0"
63         enable_universal="0"
64         enable_osx_g5="0"
65         enable_cocoa_quartz="1"
66         enable_cocoa_quickdraw="1"
67         with_osx_sysroot="1"
68         with_application_bundle="1"
69         with_menu_entry="1"
70         with_allegro="1"
71         with_sdl="1"
72         with_cocoa="1"
73         with_zlib="1"
74         with_lzma="1"
75         with_lzo2="1"
76         with_xdg_basedir="1"
77         with_png="1"
78         enable_builtin_depend="1"
79         with_makedepend="0"
80         with_direct_music="1"
81         with_sort="1"
82         with_iconv="1"
83         with_midi=""
84         with_midi_arg=""
85         with_libtimidity="1"
86         with_freetype="1"
87         with_fontconfig="1"
88         with_icu_layout="1"
89         with_icu_sort="1"
90         static_icu="0"
91         with_psp_config="1"
92         with_threads="1"
93         with_distcc="1"
94         with_ccache="1"
95         with_nforenum="1"
96         with_grfcodec="1"
97         with_sse="1"
99         save_params_array="
100                 build
101                 host
102                 cc_build
103                 cc_host
104                 cxx_build
105                 cxx_host
106                 windres
107                 strip
108                 lipo
109                 awk
110                 pkg_config
111                 os
112                 endian
113                 cpu_type
114                 config_log
115                 prefix_dir
116                 binary_dir
117                 data_dir
118                 doc_dir
119                 icon_dir
120                 icon_theme_dir
121                 man_dir
122                 menu_dir
123                 personal_dir
124                 shared_dir
125                 install_dir
126                 menu_group
127                 menu_name
128                 binary_name
129                 enable_debug
130                 enable_desync_debug
131                 enable_profiling
132                 enable_lto
133                 enable_dedicated
134                 enable_network
135                 enable_static
136                 enable_translator
137                 enable_unicode
138                 enable_console
139                 enable_assert
140                 enable_strip
141                 enable_universal
142                 enable_osx_g5
143                 enable_cocoa_quartz
144                 enable_cocoa_quickdraw
145                 with_osx_sysroot
146                 with_application_bundle
147                 with_allegro
148                 with_sdl
149                 with_cocoa
150                 with_zlib
151                 with_lzma
152                 with_lzo2
153                 with_xdg_basedir
154                 with_png
155                 enable_builtin_depend
156                 with_makedepend
157                 with_direct_music
158                 with_sort
159                 with_iconv
160                 with_midi
161                 with_midi_arg
162                 with_libtimidity
163                 with_freetype
164                 with_fontconfig
165                 with_icu_layout
166                 with_icu_sort
167                 static_icu
168                 with_psp_config
169                 with_threads
170                 with_distcc
171                 with_ccache
172                 with_grfcodec
173                 with_nforenum
174                 with_sse
175         CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD"
178 detect_params() {
179         # Walk over all params from the user and override any default settings if
180         #  needed. This also handles any invalid option.
181         for p in "$@"; do
182                 if [ -n "$prev_p" ]; then
183                         eval "$prev_p=\$p"
184                         prev_p=
185                         continue
186                 fi
188                 optarg=`expr "x$p" : 'x[^=]*=\(.*\)'`
190                 case "$p" in
191                         --help | -h | -\?)            showhelp; exit 0;;
193                         --config-log)                 prev_p="config_log";;
194                         --config-log=*)               config_log="$optarg";;
196                         --build)                      prev_p="build";;
197                         --build=*)                    build="$optarg";;
199                         --host)                       prev_p="host";;
200                         --host=*)                     host="$optarg";;
202                         --os)                         prev_p="os";;
203                         --os=*)                       os="$optarg";;
205                         --cpu-type)                   prev_p="cpu_type";;
206                         --cpu-type=*)                 cpu_type="$optarg";;
208                         --cc-build)                   prev_p="cc_build";;
209                         --cc-build=*)                 cc_build="$optarg";;
210                         --cc-host)                    prev_p="cc_host";;
211                         --cc-host=*)                  cc_host="$optarg";;
212                         --cxx-build)                  prev_p="cxx_build";;
213                         --cxx-build=*)                cxx_build="$optarg";;
214                         --cxx-host)                   prev_p="cxx_host";;
215                         --cxx-host=*)                 cxx_host="$optarg";;
216                         --windres)                    prev_p="windres";;
217                         --windres=*)                  windres="$optarg";;
218                         --awk)                        prev_p="awk";;
219                         --awk=*)                      awk="$optarg";;
220                         --pkg-config)                 prev_p="pkg_config";;
221                         --pkg-config=*)               pkg_config="$optarg";;
222                         --strip)                      prev_p="strip";;
223                         --strip=*)                    strip="$optarg";;
224                         --lipo)                       prev_p="lipo";;
225                         --lipo=*)                     lipo="$optarg";;
227                         --endian)                     prev_p="endian";;
228                         --endian=*)                   endian="$optarg";;
232                         # Alias --prefix with --prefix-dir, for compatibility with GNU autotools
233                         --prefix-dir | --prefix)      prev_p="prefix_dir";;
234                         --prefix-dir=* | --prefix=*)  prefix_dir="$optarg";;
236                         --binary-dir)                 prev_p="binary_dir";;
237                         --binary-dir=*)               binary_dir="$optarg";;
239                         --data-dir)                   prev_p="data_dir";;
240                         --data-dir=*)                 data_dir="$optarg";;
242                         --doc-dir)                    prev_p="doc_dir";;
243                         --doc-dir=*)                  doc_dir="$optarg";;
245                         --icon-dir)                   prev_p="icon_dir";;
246                         --icon-dir=*)                 icon_dir="$optarg";;
248                         --icon-theme-dir)             prev_p="icon_theme_dir";;
249                         --icon-theme-dir=*)           icon_theme_dir="$optarg";;
250                         --without-icon-theme)         icon_theme_dir="";;
252                         --menu-dir)                   prev_p="menu_dir";;
253                         --menu-dir=*)                 menu_dir="$optarg";;
254                         --without-menu-entry)         menu_dir="";;
256                         --menu-name)                  prev_p="menu_name";;
257                         --menu-name=*)                menu_name="$optarg";;
259                         --binary-name)                prev_p="binary_name";;
260                         --binary-name=*)              binary_name="$optarg";;
262                         --man-dir)                    prev_p="man_dir";;
263                         --man-dir=*)                  man_dir="$optarg";;
265                         --personal-dir)               prev_p="personal_dir";;
266                         --personal-dir=*)             personal_dir="$optarg";;
267                         --without-personal-dir)       personal_dir="";;
269                         --shared-dir)                 prev_p="shared_dir";;
270                         --shared-dir=*)               shared_dir="$optarg";;
271                         --without-shared-dir)         shared_dir="";;
273                         --install-dir)                prev_p="install_dir";;
274                         --install-dir=*)              install_dir="$optarg";;
278                         --menu-group)                 prev_p="menu_group";;
279                         --menu-group=*)               menu_group="$optarg";;
283                         --enable-debug)               enable_debug="1";;
284                         --enable-debug=*)             enable_debug="$optarg";;
285                         --enable-desync-debug)        enable_desync_debug="1";;
286                         --enable-desync-debug=*)      enable_desync_debug="$optarg";;
287                         --enable-profiling)           enable_profiling="1";;
288                         --enable-profiling=*)         enable_profiling="$optarg";;
289                         --enable-lto)                 enable_lto="1";;
290                         --enable-lto=*)               enable_lto="$optarg";;
291                         --enable-ipo)                 enable_lto="1";;
292                         --enable-ipo=*)               enable_lto="$optarg";;
293                         --enable-dedicated)           enable_dedicated="1";;
294                         --enable-dedicated=*)         enable_dedicated="$optarg";;
295                         --enable-network)             enable_network="2";;
296                         --enable-network=*)           enable_network="$optarg";;
297                         --disable-network)            enable_network="0";;
298                         --disable-static)             enable_static="0";;
299                         --enable-static)              enable_static="2";;
300                         --enable-static=*)            enable_static="$optarg";;
301                         --disable-translator)         enable_translator="0";;
302                         --enable-translator)          enable_translator="2";;
303                         --enable-translator=*)        enable_translator="$optarg";;
304                         --disable-assert)             enable_assert="0";;
305                         --enable-assert)              enable_assert="2";;
306                         --enable-assert=*)            enable_assert="$optarg";;
307                         --disable-strip)              enable_strip="0";;
308                         --enable-strip)               enable_strip="2";;
309                         --enable-strip=*)             enable_strip="$optarg";;
310                         --disable-universal)          enable_universal="0";;
311                         --enable-universal)           enable_universal="i386 ppc";;
312                         --enable-universal=*)         enable_universal="$optarg";;
313                         --disable-osx-g5)             enable_osx_g5="0";;
314                         --enable-osx-g5)              enable_osx_g5="2";;
315                         --enable-osx-g5=*)            enable_osx_g5="$optarg";;
316                         --disable-unicode)            enable_unicode="0";;
317                         --enable-unicode)             enable_unicode="2";;
318                         --enable-unicode=*)           enable_unicode="$optarg";;
319                         --disable-console)            enable_console="0";;
320                         --enable-console)             enable_console="2";;
321                         --enable-console=*)           enable_console="$optarg";;
323                         --disable-cocoa-quartz)       enable_cocoa_quartz="0";;
324                         --enable-cocoa-quartz)        enable_cocoa_quartz="2";;
325                         --enable-cocoa-quartz=*)      enable_cocoa_quartz="$optarg";;
326                         --disable-cocoa-quickdraw)    enable_cocoa_quickdraw="0";;
327                         --enable-cocoa-quickdraw)     enable_cocoa_quickdraw="2";;
328                         --enable-cocoa-quickdraw=*)   enable_cocoa_quickdraw="$optarg";;
330                         --with-allegro)               with_allegro="2";;
331                         --without-allegro)            with_allegro="0";;
332                         --with-allegro=*)             with_allegro="$optarg";;
334                         --with-sdl)                   with_sdl="2";;
335                         --without-sdl)                with_sdl="0";;
336                         --with-sdl=*)                 with_sdl="$optarg";;
338                         --with-cocoa)                 with_cocoa="2";;
339                         --without-cocoa)              with_cocoa="0";;
340                         --with-cocoa=*)               with_cocoa="$optarg";;
342                         --with-zlib)                  with_zlib="2";;
343                         --without-zlib)               with_zlib="0";;
344                         --with-zlib=*)                with_zlib="$optarg";;
346                         --with-lzma)                  with_lzma="2";;
347                         --without-lzma)               with_lzma="0";;
348                         --with-lzma=*)                with_lzma="$optarg";;
349                         --with-liblzma)               with_lzma="2";;
350                         --without-liblzma)            with_lzma="0";;
351                         --with-liblzma=*)             with_lzma="$optarg";;
353                         --with-lzo2)                  with_lzo2="2";;
354                         --without-lzo2)               with_lzo2="0";;
355                         --with-lzo2=*)                with_lzo2="$optarg";;
356                         --with-liblzo2)               with_lzo2="2";;
357                         --without-liblzo2)            with_lzo2="0";;
358                         --with-liblzo2=*)             with_lzo2="$optarg";;
360                         --with-xdg-basedir)           with_xdg_basedir="2";;
361                         --without-xdg-basedir)        with_xdg_basedir="0";;
362                         --with-xdg-basedir=*)         with_xdg_basedir="$optarg";;
363                         --with-libxdg-basedir)        with_xdg_basedir="2";;
364                         --without-libxdg-basedir)     with_xdg_basedir="0";;
365                         --with-libxdg-basedir=*)      with_xdg_basedir="$optarg";;
367                         --with-png)                   with_png="2";;
368                         --without-png)                with_png="0";;
369                         --with-png=*)                 with_png="$optarg";;
370                         --with-libpng)                with_png="2";;
371                         --without-libpng)             with_png="0";;
372                         --with-libpng=*)              with_png="$optarg";;
374                         --with-libtimidity)           with_libtimidity="2";;
375                         --without-libtimidity)        with_libtimidity="0";;
376                         --with-libtimidity=*)         with_libtimidity="$optarg";;
378                         --with-freetype)              with_freetype="2";;
379                         --without-freetype)           with_freetype="0";;
380                         --with-freetype=*)            with_freetype="$optarg";;
381                         --with-libfreetype)           with_freetype="2";;
382                         --without-libfreetype)        with_freetype="0";;
383                         --with-libfreetype=*)         with_freetype="$optarg";;
385                         --with-fontconfig)            with_fontconfig="2";;
386                         --without-fontconfig)         with_fontconfig="0";;
387                         --with-fontconfig=*)          with_fontconfig="$optarg";;
388                         --with-libfontconfig)         with_fontconfig="2";;
389                         --without-libfontconfig)      with_fontconfig="0";;
390                         --with-libfontconfig=*)       with_fontconfig="$optarg";;
392                         --with-icu)                   with_icu_layout="2";with_icu_sort="2";;
393                         --without-icu)                with_icu_layout="0";with_icu_sort="0";;
394                         --with-icu=*)                 with_icu_layout="$optarg";with_icu_sort="$optarg";;
395                         --with-libicu)                with_icu_layout="2";with_icu_sort="2";;
396                         --without-libicu)             with_icu_layout="0";with_icu_sort="0";;
397                         --with-libicu=*)              with_icu_layout="$optarg";with_icu_sort="$optarg";;
398                         --with-icu-layout)            with_icu_layout="2";;
399                         --without-icu-layout)         with_icu_layout="0";;
400                         --with-icu-layout=*)          with_icu_layout="$optarg";;
401                         --with-icu-sort)              with_icu_sort="2";;
402                         --without-icu-sort)           with_icu_sort="0";;
403                         --with-icu-sort=*)            with_icu_sort="$optarg";;
404                         --static-icu)                 static_icu="1";;
405                         --static-icu=*)               static_icu="$optarg";;
406                         --static-libicu)              static_icu="1";;
407                         --static-libicu=*)            static_icu="$optarg";;
409                         --with-psp-config)            with_psp_config="2";;
410                         --without-psp-config)         with_psp_config="0";;
411                         --with-psp-config=*)          with_psp_config="$optarg";;
413                         --disable-builtin-depend)     enable_builtin_depend="0";;
414                         --enable-builtin-depend)      enable_builtin_depend="2";;
415                         --enable-builtin-depend=*)    enable_builtin_depend="$optarg";;
417                         --with-makedepend)            with_makedepend="2";;
418                         --without-makedepend)         with_makedepend="0";;
419                         --with-makedepend=*)          with_makedepend="$optarg";;
421                         --with-direct-music)          with_direct_music="2";;
422                         --without-direct-music)       with_direct_music="0";;
423                         --with-direct-music=*)        with_direct_music="$optarg";;
425                         --with-sort)                  with_sort="2";;
426                         --without-sort)               with_sort="0";;
427                         --with-sort=*)                with_sort="$optarg";;
429                         --with-iconv)                 with_iconv="2";;
430                         --without-iconv)              with_iconv="0";;
431                         --with-iconv=*)               with_iconv="$optarg";;
433                         --with-midi=*)                with_midi="$optarg";;
434                         --with-midi-arg=*)            with_midi_arg="$optarg";;
436                         --without-distcc)             with_distcc="0";;
437                         --with-distcc)                with_distcc="2";;
438                         --with-distcc=*)              with_distcc="$optarg";;
440                         --without-ccache)             with_ccache="0";;
441                         --with-ccache)                with_ccache="2";;
442                         --with-ccache=*)              with_ccache="$optarg";;
444                         --without-nforenum)           with_nforenum="0";;
445                         --with-nforenum)              with_nforenum="2";;
446                         --with-nforenum=*)            with_nforenum="$optarg";;
448                         --without-grfcodec)           with_grfcodec="0";;
449                         --with-grfcodec)              with_grfcodec="2";;
450                         --with-grfcodec=*)            with_grfcodec="$optarg";;
452                         --without-osx-sysroot)        with_osx_sysroot="0";;
453                         --with-osx-sysroot)           with_osx_sysroot="2";;
454                         --with-osx-sysroot=*)         with_osx_sysroot="$optarg";;
456                         --without-application-bundle) with_application_bundle="0";;
457                         --with-application-bundle)    with_application_bundle="1";;
458                         --with-application-bundle=*)  with_application_bundle="$optarg";;
460                         --without-threads)            with_threads="0";;
461                         --with-threads)               with_threads="1";;
462                         --with-threads=*)             with_threads="$optarg";;
464                         --without-sse)                with_sse="0";;
465                         --with-sse)                   with_sse="1";;
466                         --with-sse=*)                 with_sse="$optarg";;
468                         CC=* | --CC=*)                CC="$optarg";;
469                         CXX=* | --CXX=*)              CXX="$optarg";;
470                         CFLAGS=* | --CFLAGS=*)        CFLAGS="$optarg";;
471                         CXXFLAGS=* | --CXXFLAGS=*)    CXXFLAGS="$optarg";;
472                         LDFLAGS=* | --LDFLAGS=*)      LDFLAGS="$optarg";;
473                         CFLAGS_BUILD=* | --CFLAGS_BUILD=* | --CFLAGS-BUILD=*)     CFLAGS_BUILD="$optarg";;
474                         CXXFLAGS_BUILD=* | --CXXFLAGS_BUILD=* | --CXXFLAGS-BUILD=*) CXXFLAGS_BUILD="$optarg";;
475                         LDFLAGS_BUILD=* | --LDFLAGS_BUILD=* | --LDFLAGS-BUILD=*)   LDFLAGS_BUILD="$optarg";;
477                         --ignore-extra-parameters)    ignore_extra_parameters="1";;
479                         --* | -*)
480                                 if [ "$ignore_extra_parameters" = "0" ]; then
481                                         log 1 "Unknown option $p"
482                                         exit 1
483                                 else
484                                         log 1 "Unknown option $p ignored"
485                                 fi
486                                 ;;
487                 esac
488         done
490         if [ -n "$prev_p" ]; then
491                 log 1 "configure: error: missing argument to --$prev_p"
492                 exit 1
493         fi
495         # Clean the logfile
496         echo "" > $config_log
497         log 2 "Invocation: $0 $*"
500 save_params() {
501         # Here we save all params, so we can later on do an exact redo of this
502         #  configuration, without having the user to re-input stuff
504         echo "Running configure with following options:" >> $config_log
505         echo "" >> $config_log
507         configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters"
508         for p in $save_params_array; do
509                 eval "v=\"\$$p\""
510                 p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'`
511                 # Only save those params that aren't empty
512                 configure="$configure --$p=\"$v\""
513         done
515         echo "$configure" >> $config_log
516         echo "$configure" > config.cache
517         echo "" >> $config_log
520 check_params() {
521         # Some params want to be in full uppercase, else they might not work as
522         # expected.. fix that here
524         endian=`echo $endian | tr '[a-z]' '[A-Z]'`
525         os=`echo $os | tr '[a-z]' '[A-Z]'`
526         cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'`
528         # Check if all params have valid values
530         # Endian only allows AUTO, LE and, BE
531         if [ -z "`echo $endian | egrep '^(AUTO|LE|BE|PREPROCESSOR)$'`" ]; then
532                 log 1 "configure: error: invalid option --endian=$endian"
533                 log 1 " Available options are: --endian=[AUTO|LE|BE]"
534                 exit 1
535         fi
536         if [ "$endian" = "PREPROCESSOR" ] && [ "$os" != "OSX" ]; then
537                 log 1 "configure: error: invalid option --endian=$endian"
538                 log 1 " PREPROCESSOR is only available for OSX"
539                 exit 1
540         fi
541         # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
542         if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP)$'`" ]; then
543                 log 1 "configure: error: invalid option --os=$os"
544                 log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP]"
545                 exit 1
546         fi
547         # cpu_type can be either 32 or 64
548         if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then
549                 log 1 "configure: error: invalid option --cpu-type=$cpu_type"
550                 log 1 " Available options are: --cpu-type[=DETECT|32|64]"
551                 exit 1
552         fi
553         # enable_debug should be between 0 and 4
554         if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then
555                 log 1 "configure: error: invalid option --enable-debug=$enable_debug"
556                 log 1 " Available options are: --enable-debug[=0123]"
557                 exit 1
558         fi
560         # enable_desync_debug should be between 0 and 3
561         if [ -z "`echo $enable_desync_debug | egrep '^[012]$'`" ]; then
562                 log 1 "configure: error: invalid option --enable-desync-debug=$enable_desync_debug"
563                 log 1 " Available options are: --enable-desync-debug[=012]"
564                 exit 1
565         fi
567         detect_awk
569         detect_os
571         check_build
572         check_host
574         # Check for universal builds; they only make sense for OSX, so fail if enabled for another OS
575         if [ "$enable_universal" = "0" ]; then
576                 log 1 "checking universal build... no"
577         else
578                 if [ "$os" != "OSX" ]; then
579                         log 1 "configure: error: --enable-universal only works on OSX"
580                         exit 1
581                 fi
582                 log 1 "checking universal build... yes, for: $enable_universal"
583         fi
585         # Already detected by check_build
586         log 1 "checking build cc... $cc_build"
587         log 1 "checking host cc... $cc_host"
589         check_cxx_build
590         check_cxx_host
591         check_windres
592         if [ "$enable_strip" != "0" ]; then
593                 check_strip
594         else
595                 log 1 "checking strip... disabled"
596         fi
597         check_lipo
599         if [ "$enable_builtin_depend" != "0" ]; then
600                 log 1 "checking builtin depend... yes"
601                 makedepend="\$(SRC_OBJS_DIR)/\$(DEPEND)"
602         else
603                 log 1 "checking builtin depend... no"
604         fi
606         check_makedepend
607         detect_cputype
608         detect_sse_capable_architecture
610         if [ "$enable_static" = "1" ]; then
611                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "DOS" ]; then
612                         enable_static="2"
613                 else
614                         enable_static="0"
615                 fi
616         fi
618         if [ "$enable_static" != "0" ]; then
619                 log 1 "checking static... yes"
621                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "DOS" ]; then
622                         log 1 "WARNING: static is only known to work on Windows, DOS, MacOSX and MorphOS"
623                         log 1 "WARNING: use static at your own risk on this platform"
625                         sleep 5
626                 fi
627         else
628                 log 1 "checking static... no"
629         fi
631         if [ "$enable_unicode" = "1" ]; then
632                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then
633                         enable_unicode="2"
634                 else
635                         enable_unicode="0"
636                 fi
637         fi
639         if [ "$enable_unicode" != "0" ]; then
640                 log 1 "checking unicode... yes"
641         else
642                 log 1 "checking unicode... no"
643         fi
645         # Show what we configured
646         if [ "$enable_debug" = "0" ]; then
647                 log 1 "using debug level... no"
648         elif [ "$enable_profiling" != "0" ]; then
649                 log 1 "using debug level... profiling (debug level $enable_debug)"
650         else
651                 log 1 "using debug level... level $enable_debug"
652         fi
654         if [ "$enable_desync_debug" = "0" ]; then
655                 log 1 "using desync debug level... no"
656         else
657                 log 1 "using desync debug level... level $enable_desync_debug"
658                 log 1 "WARNING: desync debug functions slow down the game considerably."
659                 log 1 "WARNING: use only when you are instructed to do so"
660                 log 1 "         or when you know what you are doing."
662                 sleep 5
663         fi
665         if [ "$enable_lto" != "0" ]; then
666                 # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
667                 has_lto=`($cxx_build -dumpspecs 2>&1 | grep '\%{flto') || ($cxx_build -help ipo 2>&1 | grep '\-ipo')`
668                 if [ -n "$has_lto" ]; then
669                         log 1 "using link time optimization... yes"
670                 else
671                         enable_lto="0"
672                         log 1 "using link time optimization... no"
673                         log 1 "WARNING: you selected link time optimization but it is not found."
674                         sleep 5
675                 fi
676         else
677                 log 1 "using link time optimization... no"
678         fi
681         if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then
682                 if [ "$with_osx_sysroot" = "1" ]; then
683                         with_osx_sysroot="0"
685                         log 1 "checking OSX sysroot... not OSX, skipping"
686                 else
687                         log 1 "configure: error: --with-osx-sysroot only works if OSX is the target"
688                         exit 1
689                 fi
690         fi
692         if [ "$with_osx_sysroot" != "0" ]; then
693                 if [ "$enable_universal" = "0" ] && [ "$with_osx_sysroot" != "1" ] && [ "$with_osx_sysroot" != "2" ]; then
694                         # Sysroot manually specified? Check for usability
695                         log 1 "checking OSX sysroot... $with_osx_sysroot"
696                         if ! check_osx_sdk "$with_osx_sysroot"; then
697                                 log 1 "Passed sysroot not found/not functional"
698                                 exit 1
699                         fi
700                 else
701                         # If autodetect and no universal, use system default
702                         if [ "$with_osx_sysroot" = "1" ] && [ "$enable_universal" = "0" ]; then
703                                 log 1 "checking OSX sysroot... no (use system default)"
704                         else
705                                 log 1 "checking OSX sysroot... automatically"
706                                 detect_osx_sdk
707                         fi
708                 fi
710                 if [ -n "$osx_sdk_path" ]; then
711                         if [ "$enable_universal" != "0" ]; then
712                                 if [ -z "$osx_sdk_104_path" ]; then
713                                         log 1 "WARNING: Could not find a usable 10.4u SDK, the resulting"
714                                         log 1 "WARNING: binary will only run on OSX 10.5 or later"
715                                         osx_sdk_104_path="$osx_sdk_path"
716                                 fi
717                                 OSX_SYSROOT="-isysroot $osx_sdk_104_path"
718                                 OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_104_path"
719                         else
720                                 OSX_SYSROOT="-isysroot $osx_sdk_path"
721                                 OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_path"
722                         fi
723                 fi
724         else
725                 if [ "$os" = "OSX" ]; then
726                         log 1 "checking OSX sysroot... no (use system default)"
727                 fi
728         fi
730         detect_allegro
731         detect_sdl
732         detect_cocoa
734         if [ "$enable_dedicated" != "0" ]; then
735                 log 1 "checking GDI video driver... dedicated server, skipping"
736                 log 1 "checking dedicated... found"
738                 if [ "$enable_network" = "0" ]; then
739                         log 1 "configure: error: building a dedicated server without network support is pointless"
740                         exit 1
741                 fi
742         else
743                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
744                         log 1 "checking GDI video driver... found"
745                 else
746                         log 1 "checking GDI video driver... not Windows, skipping"
747                 fi
749                 if [ -z "$allegro_config" ] && [ -z "$sdl_config" ] && [ "$with_cocoa" = 0 ] && [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
750                         log 1 "configure: error: no video driver development files found"
751                         log 1 " If you want a dedicated server use --enable-dedicated as parameter"
752                         exit 1
753                 else
754                         log 1 "checking dedicated... not selected"
755                 fi
756         fi
758         if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
759                 log 1 "checking console application... not Windows, skipping"
760         elif [ "$enable_console" = "1" ] && [ "$enable_dedicated" != "0" ]; then
761                 log 1 "checking console application... dedicated server, enabled"
762                 enable_console="2"
763         elif [ "$enable_console" = "1" ]; then
764                 log 1 "checking console application... disabled (only used when forced)"
765                 enable_console="0"
766         elif [ "$enable_console" = "0" ]; then
767                 log 1 "checking console application... disabled"
768         else
769                 log 1 "checking console application... enabled"
770         fi
772         if [ "$enable_network" = "1" ] && [ "$os" = "DOS" ]; then
773                 log 1 "checking network... DOS, skipping"
774                 enable_network=0
775         elif [ "$enable_network" != "0" ]; then
776                 log 1 "checking network... found"
777         else
778                 log 1 "checking network... disabled"
779         fi
781         log 1 "checking squirrel... found"
782         SCRIPT_SRC_DIR="$ROOT_DIR/src/3rdparty/squirrel/include"
784         if [ "$enable_translator" != "0" ]; then
785                 log 1 "checking translator... debug"
786                 # -t shows TODO items, normally they are muted
787                 strgen_flags="-t"
788         else
789                 log 1 "checking translator... no"
790                 strgen_flags=""
791         fi
793         if [ "$enable_assert" != "0" ]; then
794                 log 1 "checking assert... enabled"
795         else
796                 log 1 "checking assert... disabled"
797         fi
799         pre_detect_with_zlib=$with_zlib
800         detect_zlib
802         if [ "$with_zlib" = "0" ] || [ -z "$zlib-config" ]; then
803                 log 1 "WARNING: zlib was not detected or disabled"
804                 log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features"
805                 log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps,"
806                 log 1 "WARNING: using PNG, or using fonts, ...) will be disabled."
807                 if [ "$pre_detect_with_zlib" = "0" ]; then
808                         log 1 "WARNING: We strongly suggest you to install zlib."
809                 else
810                         log 1 "configure: error: no zlib detected"
811                         log 1 " If you want to compile without zlib use --without-zlib as parameter"
812                         exit
813                 fi
814         fi
816         pre_detect_with_lzma=$with_lzma
817         detect_lzma
819         if [ "$with_lzma" = "0" ] || [ -z "$lzma_config" ]; then
820                 log 1 "WARNING: lzma was not detected or disabled"
821                 log 1 "WARNING: OpenTTD doesn't require lzma, but it does mean that many features"
822                 log 1 "WARNING: (like loading most savegames/scenarios and joining most servers)"
823                 log 1 "WARNING: will be disabled."
824                 if [ "$pre_detect_with_lzma" = "0" ]; then
825                         log 1 "WARNING: We strongly suggest you to install liblzma."
826                         log 1 "configure: error: no liblzma detected"
827                 else
828                         log 1 " If you want to compile without lzma use --without-lzma as parameter"
829                         exit
830                 fi
831         fi
833         pre_detect_with_lzo2=$with_lzo2
834         detect_lzo2
836         if [ "$with_lzo2" = "0" ] || [ -z "$lzo2" ]; then
837                 log 1 "WARNING: liblzo2 was not detected or disabled"
838                 log 1 "WARNING: OpenTTD doesn't require liblzo2, but it does mean that"
839                 log 1 "WARNING: loading old savegames/scenarios will be disabled."
840                 if [ "$pre_detect_with_lzo2" = "0" ]; then
841                         log 1 "WARNING: We strongly suggest you to install liblzo2."
842                 else
843                         log 1 "configure: error: no liblzo2 detected"
844                         log 1 " If you want to compile without liblzo2 use --without-liblzo2 as parameter"
845                         exit
846                 fi
847         fi
849         detect_xdg_basedir
850         detect_png
851         detect_freetype
852         detect_fontconfig
853         detect_icu_layout
854         detect_icu_sort
855         detect_pspconfig
856         detect_libtimidity
858         if [ "$with_direct_music" != "0" ]; then
859                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
860                         if [ "$with_direct_music" != "1" ]; then
861                                 log 1 "configure: error: direct-music is only supported on Win32 targets"
862                                 exit 1
863                         fi
864                         with_direct_music="0"
866                         log 1 "checking direct-music... not Windows, skipping"
867                 else
868                         check_direct_music
869                 fi
870         fi
872         detect_sort
874         if [ "$os" = "OSX" ] && [ "$endian" = "AUTO" ]; then
875                 endian="PREPROCESSOR"
876         fi
878         log 1 "checking endianness... $endian"
880         # Suppress language errors when there is a version defined, indicating a release
881         #  It just isn't pretty if any release produces warnings in the languages.
882         if [ -f "$ROOT_DIR/version" ]; then
883                 lang_suppress="yes"
884                 log 1 "suppress language errors... yes"
885         else
886                 lang_suppress=""
887                 log 1 "suppress language errors... no"
888         fi
890         if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then
891                 if [ "$os" = "MORPHOS" ]; then
892                         strip_arg="--strip-all --strip-unneeded --remove-section .comment"
893                 elif [ "$os" = "OSX" ]; then
894                         strip_arg=""
895                 elif [ "$os" = "OS2" ]; then
896                         strip_arg=""
897                         # OS2 uses strip via gcc, because it needs to be feed to emxbind
898                         LDFLAGS="$LDFLAGS -s"
899                 elif [ "$os" = "SUNOS" ]; then
900                         # The GNU strip does know -s, the non-GNU doesn't
901                         #  So try to detect it (in a bit of an ugly way)
902                         strip_arg="`$strip -s strip.test 2>/dev/null && echo \"-s\"`"
903                 else
904                         strip_arg="-s"
905                 fi
907                 log 1 "checking stripping... $strip $strip_arg"
908         else
909                 strip=""
910                 log 1 "checking stripping... skipped"
911         fi
913         if [ "$with_distcc" = "0" ]; then
914                 log 1 "checking distcc... no"
915         elif [ "$with_distcc" = "1" ]; then
916                 with_distcc="0"
918                 log 1 "checking distcc... no (only used when forced)"
919         elif [ "$with_distcc" = "2" ]; then
920                 distcc="distcc"
921         else
922                 distcc="$with_distcc"
923         fi
924         if [ "$with_distcc" != "0" ]; then
925                 res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 1-6`"
926                 if [ "$res" != "distcc" ]; then
927                         distcc=""
928                         log 1 "checking distcc... no"
929                         if [ "$with_distcc" = "2" ]; then
930                                 log 1 "configure: error: no distcc detected, but was forced to be used"
931                                 exit 1
932                         fi
933                         if [ "$with_distcc" != "1" ]; then
934                                 log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me"
935                                 exit 1
936                         fi
937                 fi
939                 log 1 "checking distcc... $distcc"
940         fi
942         if [ "$with_ccache" = "0" ]; then
943                 log 1 "checking ccache... no"
944         elif [ "$with_ccache" = "1" ]; then
945                 with_ccache="0"
947                 log 1 "checking ccache... no (only used when forced)"
948         elif [ "$with_ccache" = "2" ]; then
949                 ccache="ccache"
950         else
951                 ccache="$with_ccache"
952         fi
953         if [ "$with_ccache" != "0" ]; then
954                 res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 1-6`"
955                 if [ "$res" != "ccache" ]; then
956                         ccache=""
957                         log 1 "checking ccache... no"
958                         if [ "$with_ccache" = "2" ]; then
959                                 log 1 "configure: error: no ccache detected, but was forced to be used"
960                                 exit 1
961                         fi
962                         if [ "$with_ccache" != "1" ]; then
963                                 log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me"
964                                 exit 1
965                         fi
966                 fi
968                 log 1 "checking ccache... $ccache"
969         fi
971         detect_grfcodec
972         detect_nforenum
974         if [ -z "$grfcodec" ] && [ -n "$nforenum" ]; then
975                 log 1 "checking nforenum/grfcodec... nforenum needs grfcodec enabled, disabling nforenum"
976                 nforenum=""
977         fi
979         if [ -z "$nforenum" ] && [ -n "$grfcodec" ]; then
980                 log 1 "checking nforenum/grfcodec... grfcodec needs nforenum enabled, disabling grfcodec"
981                 grfcodec=""
982         fi
984         if [ "$os" = "DOS" ]; then
985                 with_threads="0"
986         fi
988         if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then
989                 if [ "$with_application_bundle" = "1" ]; then
990                         with_application_bundle="0"
992                         log 1 "checking OSX application bundle... not OSX, skipping"
993                 else
994                         log 1 "configure: error: --with-application-bundle only works if OSX is the target"
995                         exit 1
996                 fi
997         fi
999         if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then
1000                 OSXAPP="OpenTTD.app"
1001         else
1002                 OSXAPP=""
1003         fi
1005         if [ "$os" = "OSX" ]; then
1006                 # Test on ppc970 (G5) - we can optimize there
1008                 if [ "$enable_osx_g5" != "0" ]; then
1009                         log 1 "detecting ppc970 (G5)... yes (forced)"
1010                 else
1011                         # First, are we a real OSX system, else we can't detect it
1012                         native=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | grep darwin`
1013                         # If $host doesn't match $build , we are cross-compiling
1014                         if [ -n "$native" ] && [ "$build" = "$host" ]; then
1015                                 $cxx_build $SRC_DIR/os/macosx/G5_detector.cpp -o G5_detector
1016                                 res=`./G5_detector`
1017                                 rm -f G5_detector
1018                                 if [ -n "$res" ]; then
1019                                         # This is G5, add flags for it
1020                                         enable_osx_g5="2"
1022                                         log 1 "detecting ppc970 (G5)... yes"
1023                                 else
1024                                         enable_osx_g5="0"
1026                                         log 1 "detecting ppc970 (G5)... no"
1027                                 fi
1028                         else
1029                                 enable_osx_g5="0"
1031                                 log 1 "detecting ppc970 (G5)... no (cross-compiling)"
1032                         fi
1033                 fi
1034         else
1035                 if [ "$enable_osx_g5" != "0" ]; then
1036                         log 1 "configure: error: ppc970 (OSX G5) selected, but not compiling for OSX"
1037                         log 1 "configure: error: either select OSX as OS, or deselect ppc970"
1039                         exit 1
1040                 fi
1041         fi
1043         if [ -d "$ROOT_DIR/.svn" ] && [ -n "`svn help 2>/dev/null`" ]; then
1044                 log 1 "checking revision... svn detection"
1045         elif [ -d "$ROOT_DIR/../.svn" ] && [ -n "`svn help 2>/dev/null`" ] && [ -n "`LC_ALL=C svn info $ROOT_DIR/.. | grep '^URL:.*tags$'`" ]; then
1046                 # subversion changed its behaviour; now not all folders have a .svn folder,
1047                 # but only the root folder. Since making tags requires a (sparse) checkout
1048                 # of the tags folder, the folder of the tag does not have a .svn folder
1049                 # anymore and this fails to detect the subversion repository checkout.
1050                 log 1 "checking revision... svn detection (tag)"
1051         elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help 2>/dev/null`" ]; then
1052                 log 1 "checking revision... git detection"
1053         elif [ -d "$ROOT_DIR/.hg" ] && [ -n "`HGPLAIN= hg help 2>/dev/null`" ]; then
1054                 log 1 "checking revision... hg detection"
1055         elif [ -f "$ROOT_DIR/.ottdrev" ]; then
1056                 log 1 "checking revision... source tarball"
1057         else
1058                 log 1 "checking revision... no detection"
1059                 log 1 "WARNING: there is no means to determine the version."
1060                 log 1 "WARNING: please use a subversion, mercurial, or git checkout of OpenTTD."
1061                 log 1 "WARNING: you can only join game servers that have been compiled without"
1062                 log 1 "WARNING:   version detection."
1063                 log 1 "WARNING: there is a great chance you desync."
1064                 log 1 "WARNING: USE WITH CAUTION!"
1066                 sleep 5
1067         fi
1069         if [ "$doc_dir" = "1" ]; then
1070                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then
1071                         doc_dir="share/doc/openttd"
1072                 else
1073                         doc_dir="$data_dir/docs"
1074                 fi
1075         else
1076                 doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1077         fi
1079         if [ "$icon_theme_dir" = "1" ]; then
1080                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then
1081                         icon_theme_dir="share/icons/hicolor"
1082                 else
1083                         icon_theme_dir=""
1084                 fi
1085         else
1086                 icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1087         fi
1089         if [ "$personal_dir" = "1" ]; then
1090                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ] || [ "$os" = "DOS" ] || [ "$os" = "HAIKU" ]; then
1091                         personal_dir="OpenTTD"
1092                 elif [ "$os" = "OSX" ]; then
1093                         personal_dir="Documents/OpenTTD"
1094                 else
1095                         personal_dir=".openttd"
1096                 fi
1097         else
1098                 personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1099         fi
1101         if [ "$shared_dir" = "1" ]; then
1102                 # we are using default values
1103                 if [ "$os" = "OSX" ]; then
1104                         shared_dir="/Library/Application\\\\ Support/OpenTTD"
1105                 else
1106                         shared_dir=""
1107                 fi
1108         else
1109                 shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1110         fi
1112         if [ "$man_dir" = "1" ]; then
1113                 # add manpage on UNIX systems
1114                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OSX" ]; then
1115                         man_dir="share/man/man6"
1116                 else
1117                         man_dir=""
1118                 fi
1119         else
1120                 man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1121         fi
1123         if [ "$menu_dir" = "1" ]; then
1124                 # add a freedesktop menu item only for some UNIX systems
1125                 if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then
1126                         menu_dir="share/applications"
1127                 else
1128                         menu_dir=""
1129                 fi
1130         else
1131                 menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
1132         fi
1134         detect_iconv
1136         if [ -n "$personal_dir" ]
1137         then
1138                 log 1 "personal home directory... $personal_dir"
1139         else
1140                 log 1 "personal home directory... none"
1141         fi
1143         if [ -n "$shared_dir" ]
1144         then
1145                 log 1 "shared data directory... $shared_dir"
1146         else
1147                 log 1 "shared data directory... none"
1148         fi
1150         if [ -n "$install_dir" ]
1151         then
1152                 log 1 "installation directory... $install_dir"
1153         else
1154                 log 1 "installation directory... none"
1155         fi
1157         if [ -n "$icon_theme_dir" ]
1158         then
1159                 log 1 "icon theme directory... $icon_theme_dir"
1160         else
1161                 log 1 "icon theme directory... none"
1162         fi
1164         if [ -n "$man_dir" ]
1165         then
1166                 log 1 "manual page directory... $man_dir"
1167         else
1168                 log 1 "manual page directory... none"
1169         fi
1171         if [ -n "$menu_dir" ]
1172         then
1173                 log 1 "menu item directory... $menu_dir"
1174         else
1175                 log 1 "menu item directory... none"
1176         fi
1179 make_compiler_cflags() {
1180         # Params:
1181         # $1 - compiler
1182         # $2 - name of the cflags variable
1183         # $3 - name of the cxxflags variable
1184         # $4 - name of the ldflags variable
1185         # $5 - name of the features variable
1187         eval eval "flags=\\\$$2"
1188         eval eval "cxxflags=\\\$$3"
1189         eval eval "ldflags=\\\$$4"
1190         eval eval "features=\\\$$5"
1192         if [ `basename $1 | cut -c 1-3` = "icc" ]; then
1193                 # Enable some things only for certain ICC versions
1194                 cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g`
1196                 flags="$flags -rdynamic"
1197                 ldflags="$ldflags -rdynamic"
1199                 if [ -z "$first_time_icc_check" ]; then
1200                         first_time_icc_check=no
1201                         if [ $cc_version -lt 90 ]; then
1202                                 log 1 "WARNING: you seem to be using a very old version of ICC"
1203                                 log 1 "WARNING: OpenTTD hasn't been tested with this version"
1204                                 sleep 5
1205                         elif [ $cc_version -lt 120 ]; then
1206                                 log 1 "WARNING: you seem to be using an unsupported ICC version"
1207                                 log 1 "WARNING: ICC older than 12.0 is known to fail to compile OpenTTD"
1208                                 sleep 5
1209                         fi
1210                 fi
1212                 flags="$flags -Wall"
1213                 # remark #111: statement is unreachable
1214                 flags="$flags -wd111"
1215                 # remark #181: argument is incompatible with corresponding format string conversion
1216                 # ICC is very picky about signedness of operands, warnings provided by GCC are enough
1217                 flags="$flags -wd181"
1218                 # remark #271: trailing comma is nonstandard
1219                 flags="$flags -wd271"
1220                 # remark #280: selector expression is constant
1221                 flags="$flags -wd280"
1222                 # remark #304: access control not specified ("public" by default)
1223                 flags="$flags -wd304"
1224                 # remark #383: value copied to temporary, reference to temporary used
1225                 flags="$flags -wd383"
1226                 # remark #444: destructor for base class ... is not virtual
1227                 flags="$flags -wd444"
1228                 # remark #593: variable ... was set but never used
1229                 flags="$flags -wd593"
1230                 # warning #654: overloaded virtual function ... is only partially overridden in class ...
1231                 flags="$flags -wd654"
1232                 # remark #810: conversion from ... to ... may lose significant bits
1233                 flags="$flags -wd810"
1234                 # remark #869: parameter ... was never referenced
1235                 flags="$flags -wd869"
1236                 # warning #873: function ... ::operator new ... has no corresponding operator delete ...
1237                 flags="$flags -wd873"
1238                 # remark #981: operands are evaluated in unspecified order
1239                 flags="$flags -wd981"
1240                 # remark #1418: external function definition with no prior declaration
1241                 flags="$flags -wd1418"
1242                 # remark #1419: external declaration in primary source file
1243                 flags="$flags -wd1419"
1244                 # remark #1572: floating-point equality and inequality
1245                 flags="$flags -wd1572"
1246                 # remark #1599: declaration hides variable/parameter ...
1247                 flags="$flags -wd1599"
1248                 # remark #1720: function ... ::operator new ... has no corresponding member operator delete ...
1249                 flags="$flags -wd1720"
1251                 if [ $cc_version -lt 110 ]; then
1252                         # warns about system headers with recent glibc:
1253                         # warning #1292: attribute "__nonnull__" ignored
1254                         flags="$flags -wd1292"
1255                 fi
1257                 if [ $cc_version -ge 100 ]; then
1258                         # warning #1899: multicharacter character literal (potential portability problem)
1259                         flags="$flags -wd1899"
1260                         # vec report defaults to telling where it did loop vectorisation, which is not very important
1261                         flags="$flags -vec-report=0 "
1262                 fi
1264                 if [ $cc_version -ge 110 ]; then
1265                         # remark #2259: non-pointer conversion from ... to ... may lose significant bits
1266                         flags="$flags -wd2259"
1267                         # Use c++0x mode so static_assert() is available
1268                         cxxflags="$cxxflags -std=c++0x"
1269                 fi
1271                 if [ "$enable_lto" != "0" ]; then
1272                         has_ipo=`$1 -help ipo | grep '\-ipo'`
1273                         if [ -n "$has_ipo" ]; then
1274                                 # Use IPO (only if we see IPO exists and is requested)
1275                                 flags="$flags -ipo"
1276                                 features="$features lto"
1277                         fi
1278                 fi
1279         elif [ `basename $1 | grep 'clang'` ]; then
1280                 # Enable some things only for certain clang versions
1281                 cc_version="`$1 -v 2>&1 | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`"
1283                 # aliasing rules are not held in openttd code
1284                 flags="$flags -fno-strict-aliasing"
1286                 # -W alone doesn't enable all warnings enabled by -Wall; on the other hand,
1287                 # -Weverything enables too many useless warnings that can't be disabled (as of 3.0)
1288                 flags="$flags -Wall -W -Wextra"
1290                 # warning: unused parameter '...'
1291                 flags="$flags -Wno-unused-parameter"
1293                 # warning: expression result unused
1294                 flags="$flags -Wno-unused-value"
1296                 # warning: multi-character character constant
1297                 flags="$flags -Wno-multichar"
1299                 # warning: explicitly assigning a variable of type '...' to itself
1300                 # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro
1301                 flags="$flags -Wno-self-assign"
1303                 if [ "$cc_version" -lt "30" ]; then
1304                         # warning: equality comparison with extraneous parentheses
1305                         flags="$flags -Wno-parentheses"
1306                         # warning: operands of ? are integers of different signs: 'unsigned int' and 'int'
1307                         flags="$flags -Wno-sign-compare"
1308                 fi
1310                 if [ "$cc_version" -ge "30" ]; then
1311                         # warning: equality comparison with extraneous parentheses
1312                         # this warning could be useful, but it warns about code in squirrel
1313                         flags="$flags -Wno-parentheses-equality"
1314                 fi
1316                 if [ "$with_ccache" != "0" -o "$with_distcc" != "0" ]; then
1317                         # ccache and distcc run separate preprocess and compile passes,
1318                         # both are fed with the same CFLAGS. Unfortunately, clang
1319                         # complains about -I when compiling preprocessed files:
1320                         # "clang: warning: argument unused during compilation: '-I /usr/include'"
1321                         flags="$flags -Qunused-arguments"
1322                 fi
1324                 if [ "$enable_assert" -eq "0" ]; then
1325                         # do not warn about unused variables when building without asserts
1326                         flags="$flags -Wno-unused-variable"
1327                 fi
1329                 if [ "$cc_version" -ge "33" ]; then
1330                         # clang completed C++11 support in version 3.3
1331                         flags="$flags -std=c++11"
1332                 fi
1334                 # rdynamic is used to get useful stack traces from crash reports.
1335                 ldflags="$ldflags -rdynamic"
1336         else
1337                 # Enable some things only for certain GCC versions
1338                 # cc_version = major_version * 100 + minor_version
1339                 # For example: "3.3" -> 303, "4.9.2" -> 409, "6" -> 600, "23.5" -> 2305
1340                 cc_version=`$1 -dumpversion | $awk -F . '{printf "%d%02d", $1, $2}'`
1342                 if [ $cc_version -lt 303 ]; then
1343                         log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support"
1344                         exit 1
1345                 fi
1347                 flags="$flags -Wall -Wno-multichar -Wsign-compare -Wundef"
1348                 flags="$flags -Wwrite-strings -Wpointer-arith"
1349                 flags="$flags -W -Wno-unused-parameter -Wredundant-decls"
1350                 flags="$flags -Wformat=2 -Wformat-security"
1352                 if [ $enable_assert -eq 0 ]; then
1353                         # Do not warn about unused variables when building without asserts
1354                         flags="$flags -Wno-unused-variable"
1355                         if [ $cc_version -ge 406 ]; then
1356                                 # GCC 4.6 gives more warnings, disable them too
1357                                 flags="$flags -Wno-unused-but-set-variable"
1358                                 flags="$flags -Wno-unused-but-set-parameter"
1359                         fi
1360                 fi
1362                 if [ $cc_version -ge 304 ]; then
1363                         # Warn when a variable is used to initialise itself:
1364                         # int a = a;
1365                         flags="$flags -Winit-self"
1366                 fi
1368                 if [ $cc_version -ge 400 ]; then
1369                         # GCC 4.0+ complains about that we break strict-aliasing.
1370                         #  On most places we don't see how to fix it, and it doesn't
1371                         #  break anything. So disable strict-aliasing to make the
1372                         #  compiler all happy.
1373                         flags="$flags -fno-strict-aliasing"
1374                         # Warn about casting-out 'const' with regular C-style cast.
1375                         #  The preferred way is const_cast<>() which doesn't warn.
1376                         flags="$flags -Wcast-qual"
1377                 fi
1379                 if [ $cc_version -ge 402 ]; then
1380                         # GCC 4.2+ automatically assumes that signed overflows do
1381                         # not occur in signed arithmetics, whereas we are not
1382                         # sure that they will not happen. It furthermore complains
1383                         # about its own optimized code in some places.
1384                         flags="$flags -fno-strict-overflow"
1385                         # GCC 4.2 no longer includes -Wnon-virtual-dtor in -Wall.
1386                         # Enable it in order to be consistent with older GCC versions.
1387                         flags="$flags -Wnon-virtual-dtor"
1388                 fi
1390                 if [ $cc_version -ge 403 ] && [ $cc_version -lt 600 ]; then
1391                         # Use gnu++0x mode so static_assert() is available.
1392                         # Don't use c++0x, it breaks mingw (with gcc 4.4.0).
1393                         cxxflags="$cxxflags -std=gnu++0x"
1394                 fi
1396                 if [ $cc_version -eq 405 ]; then
1397                         # Prevent optimisation supposing enums are in a range specified by the standard
1398                         # For details, see http://gcc.gnu.org/PR43680
1399                         flags="$flags -fno-tree-vrp"
1400                 fi
1402                 if [ $cc_version -eq 407 ]; then
1403                         # Disable -Wnarrowing which gives many warnings, such as:
1404                         # warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing]
1405                         # They are valid according to the C++ standard, but useless.
1406                         cxxflags="$cxxflags -Wno-narrowing"
1407                         # Disable bogus 'attempt to free a non-heap object' warning
1408                         flags="$flags -Wno-free-nonheap-object"
1409                 fi
1411                 if [ $cc_version -ge 600 ]; then
1412                         # -flifetime-dse=2 (default since GCC 6) doesn't play
1413                         # well with our custom pool item allocator
1414                         cxxflags="$cxxflags -flifetime-dse=1 -std=gnu++14"
1415                 fi
1417                 if [ "$enable_lto" != "0" ]; then
1418                         # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
1419                         has_lto=`$1 -dumpspecs | grep '\%{flto'`
1420                         if [ -n "$has_lto" ]; then
1421                                 # Use LTO only if we see LTO exists and is requested
1422                                 if [ $cc_version -lt 406 ]; then
1423                                         flags="$flags -flto"
1424                                 else
1425                                         flags="$flags -flto=jobserver"
1426                                 fi
1427                                 ldflags="$ldflags -fwhole-program"
1428                                 features="$features lto"
1429                         fi
1430                 fi
1432                 has_rdynamic=`$1 -dumpspecs | grep rdynamic`
1433                 if [ -n "$has_rdynamic" ]; then
1434                         # rdynamic is used to get useful stack traces from crash reports.
1435                         flags="$flags -rdynamic"
1436                         ldflags="$ldflags -rdynamic"
1437                 fi
1438         fi
1440         eval "$2=\"$flags\""
1441         eval "$3=\"$cxxflags\""
1442         eval "$4=\"$ldflags\""
1443         eval "$5=\"$features\""
1446 make_cflags_and_ldflags() {
1447         # General CFlags for BUILD
1448         CFLAGS_BUILD="$CFLAGS_BUILD"
1449         # Special CXXFlags for BUILD
1450         CXXFLAGS_BUILD="$CXXFLAGS_BUILD"
1451         # LDFLAGS for BUILD
1452         LDFLAGS_BUILD="$LDFLAGS_BUILD"
1453         # FEATURES for BUILD (lto)
1454         FEATURES_BUILD=""
1455         # General CFlags for HOST
1456         CFLAGS="$CFLAGS"
1457         # Special CXXFlags for HOST
1458         CXXFLAGS="$CXXFLAGS"
1459         # Libs to compile. In fact this is just LDFLAGS
1460         LIBS="-lstdc++"
1461         # LDFLAGS used for HOST
1462         LDFLAGS="$LDFLAGS"
1463         # FEATURES for HOST (lto)
1464         FEATURES=""
1466         make_compiler_cflags "$cc_build" "CFLAGS_BUILD" "CXXFLAGS_BUILD" "LDFLAGS_BUILD" "FEATURES_BUILD"
1467         make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES"
1469         CFLAGS="$CFLAGS -D$os"
1470         CFLAGS_BUILD="$CFLAGS_BUILD -D$os"
1472         if [ "$enable_debug" = "0" ]; then
1473                 # No debug, add default stuff
1474                 OBJS_SUBDIR="release"
1475                 if [ "$os" = "MORPHOS" ]; then
1476                         CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS"
1477                         LDFLAGS="$LDFLAGS -noixemul"
1478                 fi
1480                 if [ "$enable_profiling" = "0" ]; then
1481                         # -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible)
1482                         CFLAGS="-fomit-frame-pointer $CFLAGS"
1483                 fi
1484                 CFLAGS="-O2 $CFLAGS"
1485         else
1486                 OBJS_SUBDIR="debug"
1488                 # Each debug level reduces the optimization by a bit
1489                 if [ $enable_debug -ge 1 ]; then
1490                         CFLAGS="$CFLAGS -g -D_DEBUG"
1491                         if [ "$os" = "PSP" ]; then
1492                                 CFLAGS="$CFLAGS -G0"
1493                         fi
1494                 fi
1495                 if [ $enable_debug -ge 2 ]; then
1496                         CFLAGS="$CFLAGS -fno-inline"
1497                 fi
1498                 if [ $enable_debug -ge 3 ]; then
1499                         CFLAGS="$CFLAGS -O0"
1500                 else
1501                         CFLAGS="$CFLAGS -O2"
1502                 fi
1503         fi
1505         if [ $enable_debug -le 2 ]; then
1506                 cc_host_is_gcc=`basename "$cc_host" | grep "gcc" 2>/dev/null`
1507                 if [ -n "$cc_host_is_gcc" ]; then
1508                         # Define only when compiling with GCC. Some GLIBC versions use GNU
1509                         # extensions in a way that breaks build with at least ICC.
1510                         # This requires -O1 or more, so debug level 3 (-O0) is excluded.
1511                         CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
1512                 fi
1514                 cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null`
1515                 if [ -n "$cc_build_is_gcc" ]; then
1516                         # Just add -O1 to the tools needed for building.
1517                         CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1"
1518                 fi
1519         fi
1521         if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then
1522                 # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization,
1523                 # wrongly optimizing ^= in loops. This disables the failing optimisation.
1524                 CFLAGS="$CFLAGS -fno-expensive-optimizations"
1525         fi
1527         if [ "$enable_profiling" != "0" ]; then
1528                 CFLAGS="$CFLAGS -pg"
1529                 LDFLAGS="$LDFLAGS -pg"
1530         fi
1532         if [ "$with_threads" = "0" ]; then
1533                 CFLAGS="$CFLAGS -DNO_THREADS"
1534         fi
1535         if [ "$with_sse" = "1" ]; then
1536                 CFLAGS="$CFLAGS -DWITH_SSE"
1537         fi
1539         if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then
1540                 if [ "$os" = "CYGWIN" ]; then
1541                         flags="$flags -mwin32"
1542                         LDFLAGS="$LDFLAGS -mwin32"
1543                 fi
1544                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
1545                         if [ $cc_version -lt 406 ]; then
1546                                 flags="$flags -mno-cygwin"
1547                                 LDFLAGS="$LDFLAGS -mno-cygwin"
1548                         fi
1550                         if [ "$enable_console" != "0" ]; then
1551                                 LDFLAGS="$LDFLAGS -Wl,--subsystem,console"
1552                         else
1553                                 LDFLAGS="$LDFLAGS -Wl,--subsystem,windows"
1554                         fi
1556                         LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32 -limm32"
1558                         if [ $cc_version -ge 404 ]; then
1559                                 LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++"
1560                         fi
1561                         if [ $cc_version -ge 407 ]; then
1562                                 CFLAGS="$CFLAGS -mno-ms-bitfields"
1563                         fi
1564                 fi
1565         fi
1567         if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
1568                 LIBS="$LIBS -lpthread"
1569         fi
1571         if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then
1572                 LIBS="$LIBS -lc"
1573         fi
1574         if [ "$os" = "WINCE" ]; then
1575                 LIBS="$LIBS -lcoredll -lcorelibc -laygshell -lws2 -e WinMainCRTStartup"
1576         fi
1577         if [ "$os" = "PSP" ]; then
1578                 CFLAGS="$CFLAGS -I`$psp_config -p`/include"
1579                 LDFLAGS="$LDFLAGS -L`$psp_config -p`/lib"
1581                 CFLAGS="$CFLAGS -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150"
1582                 LIBS="$LIBS -D_PSP_FW_VERSION=150 -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -lm"
1583         fi
1585         if [ "$os" = "MORPHOS" ]; then
1586                 # -Wstrict-prototypes generates much noise because of system headers
1587                 CFLAGS="$CFLAGS -Wno-strict-prototypes"
1588         fi
1590         if [ "$os" = "OPENBSD" ]; then
1591                 LIBS="$LIBS -pthread"
1592         fi
1594         if [ "$os" = "OSX" ]; then
1595                 LDFLAGS="$LDFLAGS -framework Cocoa"
1597                 # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings.
1598                 CFLAGS="$CFLAGS -isystem/opt/local/include"
1600                 if [ "$enable_dedicated" = "0" ] && ([ "$cpu_type" = "32" ] || [ "$enable_universal" != "0" ]); then
1601                         LIBS="$LIBS -framework QuickTime"
1602                 else
1603                         CFLAGS="$CFLAGS -DNO_QUICKTIME"
1604                 fi
1606                 if [ "$enable_universal" = "0" ]; then
1607                         # Universal builds set this elsewhere
1608                         CFLAGS="$OSX_SYSROOT $CFLAGS"
1609                         LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS"
1610                 fi
1612                 if [ "$enable_universal" = "0" ] && [ $cc_version -gt 400 ]; then
1613                         # Only set the min version when not doing an universal build.
1614                         # Universal builds set the version elsewhere.
1615                         if [ "$cpu_type" = "64" ]; then
1616                                 CFLAGS="$CFLAGS -mmacosx-version-min=10.5"
1617                         else
1618                                 gcc_cpu=`$cc_host -dumpmachine`
1619                                 if [ "`echo $gcc_cpu | cut -c 1-3`" = "ppc" -o "`echo $gcc_cpu | cut -c 1-7`" = "powerpc" ]; then
1620                                         # PowerPC build can run on 10.3
1621                                         CFLAGS="$CFLAGS -mmacosx-version-min=10.3"
1622                                 else
1623                                         # Intel is only available starting from 10.4
1624                                         CFLAGS="$CFLAGS -mmacosx-version-min=10.4"
1625                                 fi
1626                         fi
1627                 fi
1628         fi
1630         if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
1631                 LIBS="$LIBS -lmidi -lbe"
1632         fi
1634         # Most targets act like UNIX, just with some additions
1635         if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
1636                 CFLAGS="$CFLAGS -DUNIX"
1637         fi
1638         # And others like Windows
1639         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
1640                 CFLAGS="$CFLAGS -DWIN"
1641         fi
1643         if [ -n "$allegro_config" ]; then
1644                 CFLAGS="$CFLAGS -DWITH_ALLEGRO"
1645                 CFLAGS="$CFLAGS `$allegro_config --cflags`"
1646                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
1647                         if [ "$enable_static" != "0" ]; then
1648                                 LIBS="$LIBS `$allegro_config --static --libs`"
1649                         else
1650                                 LIBS="$LIBS `$allegro_config --libs`"
1651                         fi
1652                 fi
1653         fi
1655         if [ -n "$sdl_config" ]; then
1656                 CFLAGS="$CFLAGS -DWITH_SDL"
1657                 # SDL must not add _GNU_SOURCE as it breaks many platforms
1658                 CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
1659                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
1660                         if [ "$enable_static" != "0" ]; then
1661                                 LIBS="$LIBS `$sdl_config --static-libs`"
1662                         else
1663                                 LIBS="$LIBS `$sdl_config --libs`"
1664                         fi
1665                 fi
1666         fi
1668         if [ "$with_cocoa" != "0" ]; then
1669                 CFLAGS="$CFLAGS -DWITH_COCOA"
1670                 LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox"
1672                 if [ "$enable_cocoa_quartz" != "0" ]; then
1673                         CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ"
1674                 fi
1676                 if [ "$enable_cocoa_quickdraw" != "0" ]; then
1677                         CFLAGS="$CFLAGS -DENABLE_COCOA_QUICKDRAW"
1678                 fi
1679         fi
1681         if [ "$with_zlib" != "0" ]; then
1682                 CFLAGS="$CFLAGS -DWITH_ZLIB"
1683                 CFLAGS="$CFLAGS `$zlib_config --cflags | tr '\n\r' '  '`"
1684                 if [ "$enable_static" != "0" ]; then
1685                         LIBS="$LIBS `$zlib_config --libs --static | tr '\n\r' '  '`"
1686                 else
1687                         LIBS="$LIBS `$zlib_config --libs | tr '\n\r' '  '`"
1688                 fi
1689         fi
1691         if [ -n "$lzma_config" ]; then
1692                 CFLAGS="$CFLAGS -DWITH_LZMA"
1693                 CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' '  '`"
1695                 if [ "$enable_static" != "0" ]; then
1696                         CFLAGS="$CFLAGS -DLZMA_API_STATIC"
1697                         LIBS="$LIBS `$lzma_config --libs --static | tr '\n\r' '  '`"
1698                 else
1699                         LIBS="$LIBS `$lzma_config --libs | tr '\n\r' '  '`"
1700                 fi
1701         fi
1703         if [ "$with_lzo2" != "0" ]; then
1704                 if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
1705                         LIBS="$LIBS $lzo2"
1706                 else
1707                         LIBS="$LIBS -llzo2"
1708                 fi
1709                 CFLAGS="$CFLAGS -DWITH_LZO"
1710         fi
1712         if [ -n "$xdg_basedir_config" ]; then
1713                 CFLAGS="$CFLAGS -DWITH_XDG_BASEDIR"
1714                 CFLAGS="$CFLAGS `$xdg_basedir_config --cflags | tr '\n\r' '  '`"
1716                 if [ "$enable_static" != "0" ]; then
1717                         LIBS="$LIBS `$xdg_basedir_config --libs --static | tr '\n\r' '  '`"
1718                 else
1719                         LIBS="$LIBS `$xdg_basedir_config --libs | tr '\n\r' '  '`"
1720                 fi
1721         fi
1723         # 64bit machines need -D_SQ64
1724         if [ "$cpu_type" = "64" ] && [ "$enable_universal" = "0" ]; then
1725                 CFLAGS="$CFLAGS -D_SQ64"
1726         fi
1727         CFLAGS="$CFLAGS -I$SCRIPT_SRC_DIR"
1729         if [ -n "$png_config" ]; then
1730                 CFLAGS="$CFLAGS -DWITH_PNG"
1731                 CFLAGS="$CFLAGS `$png_config --cflags | tr '\n\r' '  '`"
1733                 if [ "$enable_static" != "0" ]; then
1734                         LIBS="$LIBS `$png_config --libs --static | tr '\n\r' '  '`"
1735                 else
1736                         LIBS="$LIBS `$png_config --libs | tr '\n\r' '  '`"
1737                 fi
1738         fi
1740         if [ -n "$fontconfig_config" ]; then
1741                 CFLAGS="$CFLAGS -DWITH_FONTCONFIG"
1742                 CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' '  '`"
1744                 if [ "$enable_static" != "0" ]; then
1745                         LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' '  '`"
1746                 else
1747                         LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' '  '`"
1748                 fi
1749         fi
1751         if [ -n "$freetype_config" ]; then
1752                 CFLAGS="$CFLAGS -DWITH_FREETYPE"
1753                 CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' '  '`"
1755                 if [ "$enable_static" != "0" ]; then
1756                         LIBS="$LIBS `$freetype_config --libs --static | tr '\n\r' '  '`"
1757                 else
1758                         LIBS="$LIBS `$freetype_config --libs | tr '\n\r' '  '`"
1759                 fi
1760         fi
1762         if [ -n "$icu_layout_config" ]; then
1763                 CFLAGS="$CFLAGS -DWITH_ICU_LAYOUT"
1764                 CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' '  '`"
1766                 if [ "$static_icu" != "0" ]; then
1767                         LIBS="$LIBS `$icu_layout_config --libs --static | tr '\n\r' '  ' | sed s/-licu/-lsicu/g`"
1768                 else
1769                         LIBS="$LIBS `$icu_layout_config --libs | tr '\n\r' '  '`"
1770                 fi
1771         fi
1773         if [ -n "$icu_sort_config" ]; then
1774                 CFLAGS="$CFLAGS -DWITH_ICU_SORT"
1775                 CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' '  '`"
1777                 if [ "$static_icu" != "0" ]; then
1778                         LIBS="$LIBS `$icu_sort_config --libs --static | tr '\n\r' '  ' | sed s/-licu/-lsicu/g`"
1779                 else
1780                         LIBS="$LIBS `$icu_sort_config --libs | tr '\n\r' '  '`"
1781                 fi
1782         fi
1785         if [ "$with_direct_music" != "0" ]; then
1786                 CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT"
1787                 # GCC 4.0+ doesn't like the DirectX includes (gives tons of
1788                 #  warnings on it we won't be able to fix). For now just
1789                 #  suppress those warnings.
1790                 if [ $cc_version -ge 400 ]; then
1791                         CFLAGS="$CFLAGS -Wno-non-virtual-dtor"
1792                 fi
1793         fi
1795         if [ -n "$libtimidity_config" ]; then
1796                 CFLAGS="$CFLAGS -DLIBTIMIDITY"
1797                 CFLAGS="$CFLAGS `$libtimidity_config --cflags | tr '\n\r' '  '`"
1799                 if [ "$enable_static" != "0" ]; then
1800                         LIBS="$LIBS `$libtimidity_config --libs --static | tr '\n\r' '  '`"
1801                 else
1802                         LIBS="$LIBS `$libtimidity_config --libs | tr '\n\r' '  '`"
1803                 fi
1804         fi
1806         if [ "$with_iconv" != "0" ]; then
1807                 CFLAGS="$CFLAGS -DWITH_ICONV"
1808                 if [ "$link_to_iconv" = "yes" ]; then
1809                         LIBS="$LIBS -liconv"
1810                         if [ "$with_iconv" != "2" ]; then
1811                                 CFLAGS="$CFLAGS -I$with_iconv/include"
1812                                 LIBS="$LIBS -L$with_iconv/lib"
1813                         fi
1814                 fi
1816                 if [ "$os" != "OSX" ] && [ "$have_non_const_iconv" != "no" ]; then
1817                         CFLAGS="$CFLAGS -DHAVE_NON_CONST_ICONV"
1818                 fi
1819         fi
1821         if [ -n "$with_midi" ]; then
1822                 CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\""
1823         fi
1824         if [ -n "$with_midi_arg" ]; then
1825                 CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\""
1826         fi
1828         if [ "$enable_dedicated" != "0" ]; then
1829                 CFLAGS="$CFLAGS -DDEDICATED"
1830         fi
1832         if [ "$enable_unicode" != "0" ]; then
1833                 CFLAGS="$CFLAGS -DUNICODE -D_UNICODE"
1834         fi
1836         if [ "$enable_network" != "0" ]; then
1837                 CFLAGS="$CFLAGS -DENABLE_NETWORK"
1839                 if [ "$os" = "BEOS" ]; then
1840                         LDFLAGS="$LDFLAGS -lbind -lsocket"
1841                 fi
1843                 if [ "$os" = "HAIKU" ]; then
1844                         LDFLAGS="$LDFLAGS -lnetwork"
1845                 fi
1847                 if [ "$os" = "SUNOS" ]; then
1848                         LDFLAGS="$LDFLAGS -lnsl -lsocket"
1849                 fi
1850         fi
1852         if [ "$enable_static" != "0" ]; then
1853                 # OSX can't handle -static in LDFLAGS
1854                 if [ "$os" != "OSX" ]; then
1855                         LDFLAGS="$LDFLAGS -static"
1856                 fi
1857         fi
1859         if [ "$enable_assert" = "0" ]; then
1860                 CFLAGS="$CFLAGS -DNDEBUG"
1861                 CFLAGS_BUILD="$CFLAGS_BUILD -DNDEBUG"
1862         fi
1864         if [ "$enable_desync_debug" != "0" ]; then
1865                 CFLAGS="$CFLAGS -DRANDOM_DEBUG"
1866         fi
1868         if [ "$enable_osx_g5" != "0" ]; then
1869                 CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
1870         fi
1872         if [ -n "$personal_dir" ]; then
1873                 CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\""
1874         fi
1876         if [ -n "$shared_dir" ]; then
1877                 CFLAGS="$CFLAGS -DWITH_SHARED_DIR -DSHARED_DIR=\\\\\"$shared_dir\\\\\""
1878         fi
1880         CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
1882         if [ "$enable_lto" != "0" ]; then
1883                 lto_build=`echo "$FEATURES_BUILD" | grep "lto"`
1884                 lto_host=`echo "$FEATURES" | grep "lto"`
1885                 if [ -z "$lto_build$lto_host" ]; then
1886                         log 1 "WARNING: you enabled LTO/IPO, but neither build nor host compiler supports it"
1887                         log 1 "WARNING: LTO/IPO has been disabled"
1888                 fi
1889                 if [ -n "$lto_build" ]; then
1890                         LDFLAGS_BUILD="$LDFLAGS_BUILD $CFLAGS_BUILD $CXXFLAGS_BUILD"
1891                 fi
1892                 if [ -n "$lto_host" ]; then
1893                         LDFLAGS="$LDFLAGS $CFLAGS $CXXFLAGS"
1894                 fi
1895         fi
1897         log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD"
1898         log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD"
1899         log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD"
1900         log 1 "using CFLAGS... $CFLAGS"
1901         log 1 "using CXXFLAGS... $CXXFLAGS"
1902         log 1 "using LDFLAGS... $LIBS $LDFLAGS"
1904         # Makedepend doesn't like something like: -isysroot /OSX/blabla
1905         #  so convert it to: -isysroot -OSX/blabla. makedepend just ignores
1906         #  any - command it doesn't know, so we are pretty save.
1907         # Lovely hackish, not?
1908         # Btw, this almost always comes from outside the configure, so it is
1909         #  not something we can control.
1910         # Also make makedepend aware of compiler's built-in defines.
1911         if [ "$with_makedepend" != "0" ] || [ "$enable_builtin_depend" != "0" ]; then
1912                 # Append CXXFLAGS possibly containing -std=c++0x
1913                 cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`"
1915                 # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations
1916                 cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`"
1917         else
1918                 makedepend=""
1919         fi
1921         if [ "$with_distcc" != "0" ]; then
1922                 cc_host="$distcc $cc_host"
1923                 cxx_host="$distcc $cxx_host"
1924                 log 1 ""
1925                 log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc"
1926                 log 1 ""
1927         fi
1929         if [ "$with_ccache" != "0" ]; then
1930                 cc_host="$ccache $cc_host"
1931                 cxx_host="$ccache $cxx_host"
1932         fi
1935 check_compiler() {
1936         # Params:
1937         # $1 - Type for message (build / host)
1938         # $2 - What to fill with the found compiler
1939         # $3 - System to try
1940         # $4 - Compiler to try
1941         # $5 - Env-setting to try
1942         # $6 - GCC alike to try
1943         # $7 - CC alike to try
1944         # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo
1945         # $9 - What the command is to check for
1947         if [ -n "$3" ]; then
1948                 # Check for system
1949                 if [ -z "$6" ]; then
1950                         compiler="$3"
1951                 else
1952                         compiler="$3-$6"
1953                 fi
1954                 machine=`eval $compiler $9 2>/dev/null`
1955                 ret=$?
1956                 eval "$2=\"$compiler\""
1958                 log 2 "executing $compiler $9"
1959                 log 2 "  returned $machine"
1960                 log 2 "  exit code $ret"
1962                 if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1963                         if [ -z "$5" ]; then
1964                                 log 1 "checking $1... $compiler not found"
1965                                 log 1 "I couldn't detect any $6 binary for $3"
1966                                 exit 1
1967                         else
1968                                 compiler="$3-$5"
1969                         fi
1970                         machine=`eval $compiler $9 2>/dev/null`
1971                         ret=$?
1972                         eval "$2=\"$compiler\""
1974                         log 2 "executing $compiler $9"
1975                         log 2 "  returned $machine"
1976                         log 2 "  exit code $ret"
1978                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1979                                 log 1 "checking $1... $compiler not found"
1980                                 log 1 "I couldn't detect any $5 binary for $3"
1981                                 exit 1
1982                         fi
1983                 fi
1985                 if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then
1986                         log 1 "checking $1... expected $3, found $machine"
1987                         log 1 "the compiler suggests it doesn't build code for the machine you specified"
1988                         exit 1
1989                 fi
1990         elif [ -n "$4" ]; then
1991                 # Check for manual compiler
1992                 machine=`$4 $9 2>/dev/null`
1993                 ret=$?
1994                 eval "$2=\"$4\""
1996                 log 2 "executing $4 $9"
1997                 log 2 "  returned $machine"
1998                 log 2 "  exit code $ret"
2000                 if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
2001                         log 1 "checking $1... $4 not found"
2002                         log 1 "the selected binary doesn't seem to be a $6 binary"
2003                         exit 1
2004                 fi
2005         else
2006                 # Nothing given, autodetect
2008                 if [ -n "$5" ]; then
2009                         machine=`$5 $9 2>/dev/null`
2010                         ret=$?
2011                         eval "$2=\"$5\""
2013                         log 2 "executing $5 $9"
2014                         log 2 "  returned $machine"
2015                         log 2 "  exit code $ret"
2017                         # The user defined a GCC that doesn't reply to $9.. abort
2018                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
2019                                 log 1 "checking $1... $5 unusable"
2020                                 log 1 "the CC environment variable is set, but it doesn't seem to be a $6 binary"
2021                                 log 1 "please redefine the CC/CXX environment to a $6 binary"
2022                                 exit 1
2023                         fi
2024                 else
2025                         log 2 "checking $1... CC/CXX not set (skipping)"
2027                         # No $5, so try '$6'
2028                         machine=`$6 $9 2>/dev/null`
2029                         ret=$?
2030                         eval "$2=\"$6\""
2032                         log 2 "executing $6 $9"
2033                         log 2 "  returned $machine"
2034                         log 2 "  exit code $ret"
2036                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
2037                                 # Maybe '$7'?
2038                                 machine=`$7 $9 2>/dev/null`
2039                                 ret=$?
2040                                 eval "$2=\"$7\""
2042                                 log 2 "executing $7 $9"
2043                                 log 2 "  returned $machine"
2044                                 log 2 "  exit code $ret"
2046                                 # All failed, abort
2047                                 if [ -z "$machine" ]; then
2048                                         log 1 "checking $1... $6 not found"
2049                                         log 1 "I couldn't detect any $6 binary on your system"
2050                                         log 1 "please define the CC/CXX environment to where it is located"
2052                                         exit 1
2053                                 fi
2054                         fi
2055                 fi
2056         fi
2058         if [ "$8" != "0" ]; then
2059                 eval "res=\$$2"
2060                 log 1 "checking $1... $res"
2061         else
2062                 log 1 "checking $1... $machine"
2063         fi
2066 check_build() {
2067         if [ "$os" = "FREEBSD" ]; then
2068                 # FreeBSD's C compiler does not support dump machine.
2069                 # However, removing C support is not possible because PSP must be linked with the C compiler.
2070                 check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CXX" "g++" "c++" "0" "-dumpmachine"
2071         else
2072                 check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine"
2073         fi
2076 check_host() {
2077         # By default the host is the build
2078         if [ -z "$host" ]; then host="$build"; fi
2080         if [ "$os" = "FREEBSD" ]; then
2081                 # FreeBSD's C compiler does not support dump machine.
2082                 # However, removing C support is not possible because PSP must be linked with the C compiler.
2083                 check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CXX" "g++" "c++" "0" "-dumpmachine"
2084         else
2085                 check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine"
2086         fi
2089 check_cxx_build() {
2090         check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "g++" "c++" 1 "-dumpmachine"
2093 check_cxx_host() {
2094         # By default the host is the build
2095         if [ -z "$host" ]; then host="$build"; fi
2096         check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "g++" "c++" 1 "-dumpmachine"
2099 check_windres() {
2100         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
2101                 check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V"
2102         fi
2105 check_strip() {
2106         if [ "$os" = "OS2" ]; then
2107                 # OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly
2108                 log 1 "checking host strip... using gcc -s option"
2109         elif [ "$os" = "OSX" ]; then
2110                 # Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something
2111                 echo "int main(int argc, char *argv[]) { }" > strip.test.c
2112                 $cxx_host strip.test.c -o strip.test
2113                 check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test"
2114                 rm -f strip.test.c strip.test
2115         else
2116                 check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V"
2117         fi
2120 check_lipo() {
2121         if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
2122                 echo "int main(int argc, char *argv[]) { }" > lipo.test.c
2123                 $cxx_host lipo.test.c -o lipo.test
2124                 check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test"
2125                 rm -f lipo.test.c lipo.test
2126         fi
2129 check_osx_sdk() {
2130         local sysroot=""
2131         if [ -n "$1" ]; then
2132                 if echo "$1" | grep -q / ; then
2133                         # Seems to be a file system path
2134                         osx_sdk_path="$1"
2135                 else
2136                         osx_sdk_path="/Developer/SDKs/MacOSX$1.sdk"
2137                 fi
2138                 if [ ! -d "$osx_sdk_path" ]; then
2139                         # No directory, not present or garbage
2140                         return 1
2141                 fi
2143                 # Set minimum version to 10.4 as that's when kCGBitmapByteOrder32Host was introduced
2144                 sysroot="-isysroot $osx_sdk_path -Wl,-syslibroot,$osx_sdk_path -mmacosx-version-min=10.4"
2145         fi
2147 cat > tmp.osx.mm << EOF
2148 #include <Cocoa/Cocoa.h>
2149 int main() {
2150         kCGBitmapByteOrder32Host;
2151         return 0;
2154         execute="$cxx_host $sysroot $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
2155         eval $execute > /dev/null
2156         ret=$?
2157         log 2 "executing $execute"
2158         log 2 "  exit code $ret"
2159         rm -f tmp.osx.mm tmp.osx
2160         return $ret
2163 check_direct_music() {
2164         echo "
2165                 #include <windows.h>
2166                 #include <dmksctrl.h>
2167                 #include <dmusici.h>
2168                 #include <dmusicc.h>
2169                 #include <dmusicf.h>
2170                 int main(int argc, char *argv[]) { }" > direct_music.test.c
2171         $cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null
2172         res=$?
2173         rm -f direct_music.test.c direct_music.test
2175         if [ "$res" != "0" ]; then
2176                 if [ "$with_direct_music" != "1" ]; then
2177                         log 1 "configure: error: direct-music is not available on this system"
2178                         exit 1
2179                 fi
2180                 with_direct_music="0"
2182                 log 1 "checking direct-music... not found"
2183         else
2184                 log 1 "checking direct-music... found"
2185         fi
2188 check_makedepend() {
2189         if [ "$enable_builtin_depend" != "0" ]; then
2190                 with_makedepend="0"
2191         fi
2193         if [ "$with_makedepend" = "0" ]; then
2194                 log 1 "checking makedepend... disabled"
2195                 return
2196         fi
2198         if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then
2199                 makedepend="makedepend"
2200         else
2201                 makedepend="$with_makedepend"
2202         fi
2204         rm -f makedepend.tmp
2205         touch makedepend.tmp
2206         res=`$makedepend -fmakedepend.tmp 2>/dev/null`
2207         res=$?
2208         log 2 "executing $makedepend -f makedepend.tmp"
2209         log 2 "  returned `cat makedepend.tmp`"
2210         log 2 "  exit code $ret"
2212         if [ ! -s makedepend.tmp ]; then
2213                 rm -f makedepend.tmp makedepend.tmp.bak
2215                 if [ "$with_makedepend" = "2" ]; then
2216                         log 1 "checking makedepend... not found"
2218                         log 1 "I couldn't detect any makedepend on your system"
2219                         log 1 "please locate it via --makedepend=[binary]"
2221                         exit 1
2222                 elif [ "$with_makedepend" != "1" ]; then
2223                         log 1 "checking makedepend... $makedepend not found"
2225                         log 1 "the selected file doesn't seem to be a valid makedepend binary"
2227                         exit 1
2228                 else
2229                         log 1 "checking makedepend... not found"
2231                         with_makedepend="0"
2232                         return
2233                 fi
2234         fi
2236         rm -f makedepend.tmp makedepend.tmp.bak
2238         log 1 "checking makedepend... $makedepend"
2241 check_version() {
2242         # $1 - requested version (major.minor)
2243         # $2 - version we got (major.minor)
2245         if [ -z "$2" ]; then
2246                 return 0
2247         fi
2249         req_major=`echo $1 | cut -d. -f1`
2250         got_major=`echo $2 | cut -d. -f1`
2251         if [ $got_major -lt $req_major ]; then
2252                 return 0
2253         elif [ $got_major -gt $req_major ]; then
2254                 return 1
2255         fi
2257         req_minor=`echo $1 | cut -d. -f2`
2258         got_minor=`echo $2 | cut -d. -f2`
2259         if [ $got_minor -lt $req_minor ]; then
2260                 return 0
2261         fi
2262         return 1
2265 detect_awk() {
2266         # Not all awks allow gsub(), so we test for that here! It is in fact all we need...
2268         # These awks are known to work. Test for them explicit
2269         awks="gawk mawk nawk"
2271         awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | "
2272         awk_param="' { ORS = \" \" } /\.c$/   { gsub(\".c$\",   \".o\", \$0); print \$0; }' 2>/dev/null"
2273         awk_result="a.o b.o c.o "
2274         log 2 "Detecing awk..."
2276         log 2 "Trying: $awk_prefix $awk $awk_param"
2277         res=`eval $awk_prefix $awk $awk_param`
2278         log 2 "Result: '$res'"
2279         if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then
2280                 # User didn't supply his own awk, so try to detect some other known working names for an awk
2281                 for awk in $awks; do
2282                         log 2 "Trying: $awk_prefix $awk $awk_param"
2283                         res=`eval $awk_prefix $awk $awk_param`
2284                         log 2 "Result: '$res'"
2285                         if [ "$res" = "$awk_result" ]; then break; fi
2286                 done
2288                 if [ "$res" != "$awk_result" ]; then
2289                         log 1 "checking awk... not found"
2290                         log 1 "configure: error: no awk found"
2291                         log 1 "configure: error: please install one of the following: $awks"
2292                         exit 1
2293                 fi
2294         fi
2295         if [ "$res" != "$awk_result" ]; then
2296                 log 1 "checking awk... not found"
2297                 log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk"
2298                 exit 1
2299         fi
2301         log 1 "checking awk... $awk"
2304 detect_os() {
2305         if [ "$os" = "DETECT" ]; then
2306                 # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
2308                 # Try first via dumpmachine, then via uname
2309                 os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk '
2310                                         /linux/        { print "UNIX";      exit}
2311                                         /darwin/       { print "OSX";       exit}
2312                                         /freebsd/      { print "FREEBSD";   exit}
2313                                         /dragonfly/    { print "DRAGONFLY"; exit}
2314                                         /openbsd/      { print "OPENBSD";   exit}
2315                                         /netbsd/       { print "NETBSD";    exit}
2316                                         /hp-ux/        { print "HPUX";      exit}
2317                                         /morphos/      { print "MORPHOS";   exit}
2318                                         /beos/         { print "BEOS";      exit}
2319                                         /haiku/        { print "HAIKU";     exit}
2320                                         /sunos/        { print "SUNOS";     exit}
2321                                         /solaris/      { print "SUNOS";     exit}
2322                                         /cygwin/       { print "CYGWIN";    exit}
2323                                         /mingw/        { print "MINGW";     exit}
2324                                         /os2/          { print "OS2";       exit}
2325                                         /dos/          { print "DOS";       exit}
2326                                         /wince/        { print "WINCE";     exit}
2327                                         /psp/          { print "PSP";       exit}
2328                 '`
2330                 if [ -z "$os" ]; then
2331                         os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk '
2332                                         /linux/        { print "UNIX";      exit}
2333                                         /darwin/       { print "OSX";       exit}
2334                                         /freebsd/      { print "FREEBSD";   exit}
2335                                         /dragonfly/    { print "DRAGONFLY"; exit}
2336                                         /openbsd/      { print "OPENBSD";   exit}
2337                                         /netbsd/       { print "NETBSD";    exit}
2338                                         /hp-ux/        { print "HPUX";      exit}
2339                                         /morphos/      { print "MORPHOS";   exit}
2340                                         /beos/         { print "BEOS";      exit}
2341                                         /haiku/        { print "HAIKU";     exit}
2342                                         /sunos/        { print "SUNOS";     exit}
2343                                         /cygwin/       { print "CYGWIN";    exit}
2344                                         /mingw/        { print "MINGW";     exit}
2345                                         /os\/2/        { print "OS2";       exit}
2346                                         /gnu/          { print "UNIX";      exit}
2347                         '`
2348                 fi
2350                 if [ -z "$os" ]; then
2351                         log 1 "detecting OS... none detected"
2352                         log 1 "I couldn't detect your OS. Please use --os=OS to force one"
2353                         log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP"
2354                         exit 1
2355                 fi
2357                 log 1 "detecting OS... $os"
2358         else
2359                 log 1 "forcing OS... $os"
2360         fi
2363 detect_allegro() {
2364         # 0 means no, 1 is auto-detect, 2 is force
2365         if [ "$with_allegro" = "0" ]; then
2366                 log 1 "checking Allegro... disabled"
2368                 allegro_config=""
2369                 return 0
2370         fi
2372         if [ "$with_allegro" = "2" ] && [ "$with_cocoa" = "2" ]; then
2373                 log 1 "configure: error: it is impossible to compile both Allegro and COCOA"
2374                 log 1 "configure: error: please deselect one of them and try again"
2375                 exit 1
2376         fi
2378         if [ "$with_allegro" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2379                 log 1 "configure: error: it is impossible to compile a dedicated with Allegro"
2380                 log 1 "configure: error: please deselect one of them and try again"
2381                 exit 1
2382         fi
2384         if [ "$enable_dedicated" != "0" ]; then
2385                 log 1 "checking Allegro... dedicated server, skipping"
2387                 allegro_config=""
2388                 return 0
2389         fi
2391         # By default on OSX we don't use Allegro. The rest is auto-detect
2392         if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
2393                 log 1 "checking Allegro... OSX, skipping"
2395                 allegro_config=""
2396                 return 0
2397         fi
2399         detect_pkg_config "$with_allegro" "allegro" "allegro_config" "4.4"
2403 detect_sdl() {
2404         # 0 means no, 1 is auto-detect, 2 is force
2405         if [ "$with_sdl" = "0" ]; then
2406                 log 1 "checking SDL... disabled"
2408                 sdl_config=""
2409                 return 0
2410         fi
2412         if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then
2413                 log 1 "configure: error: it is impossible to compile both SDL and COCOA"
2414                 log 1 "configure: error: please deselect one of them and try again"
2415                 exit 1
2416         fi
2418         if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2419                 log 1 "configure: error: it is impossible to compile a dedicated with SDL"
2420                 log 1 "configure: error: please deselect one of them and try again"
2421                 exit 1
2422         fi
2424         if [ "$enable_dedicated" != "0" ]; then
2425                 log 1 "checking SDL... dedicated server, skipping"
2427                 sdl_config=""
2428                 return 0
2429         fi
2431         # By default on OSX we don't use SDL. The rest is auto-detect
2432         if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
2433                 log 1 "checking SDL... OSX, skipping"
2435                 sdl_config=""
2436                 return 0
2437         fi
2439         if [ "$os" = "OSX" ]; then
2440                 log 1 "WARNING: sdl is known to fail on some versions of Mac OS X"
2441                 log 1 "WARNING: with some hardware configurations. Use at own risk!"
2442                 sleep 5
2443         fi
2445         detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2"
2448 detect_osx_sdk() {
2449         # Try to find the best SDK available. For a normal build this
2450         # is currently the 10.5 SDK as this is needed to compile all
2451         # optional code. Because such an executable won't run on 10.4
2452         # or lower, also check for the 10.4u SDK when doing an universal
2453         # build.
2455         # Check for the 10.5 SDK, but try 10.6 if that fails
2456         check_osx_sdk "10.5" || check_osx_sdk "10.6" || osx_sdk_path=""
2458         if [ -z "$osx_sdk_path" ] || [ "$enable_universal" != "0" ]; then
2459                 # No better SDK or universal build enabled? Check 10.4u SDK as well
2460                 local old_sdk="$osx_sdk_path"
2461                 if check_osx_sdk "10.4u"; then
2462                         osx_sdk_104_path="$osx_sdk_path"
2463                 else
2464                         osx_sdk_104_path=""
2465                 fi
2466                 if [ -z "$old_sdk" ]; then
2467                         osx_sdk_path="$osx_sdk_104_path"
2468                 else
2469                         osx_sdk_path="$old_sdk"
2470                 fi
2471         fi
2473         if [ -z "$osx_sdk_path" ]; then
2474                 log 1 "Your system SDK is probably too old"
2475                 log 1 "Please install/upgrade your Xcode to >= 2.5"
2477                 exit 1
2478         fi
2481 detect_cocoa() {
2482         # 0 means no, 1 is auto-detect, 2 is force
2483         if [ "$with_cocoa" = "0" ]; then
2484                 log 1 "checking COCOA... disabled"
2486                 return 0
2487         fi
2489         if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2490                 log 1 "configure: error: it is impossible to compile a dedicated with COCOA"
2491                 log 1 "configure: error: please deselect one of them and try again"
2492                 exit 1
2493         fi
2495         if [ "$enable_dedicated" != "0" ]; then
2496                 log 1 "checking COCOA... dedicated server, skipping"
2498                 with_cocoa="0"
2499                 return 0
2500         fi
2502         # By default on OSX we use COCOA. The rest doesn't support it
2503         if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then
2504                 log 1 "checking COCOA... not OSX, skipping"
2506                 with_cocoa="0"
2507                 return 0
2508         fi
2510         if [ "$os" != "OSX" ]; then
2511                 log 1 "checking COCOA... not OSX"
2513                 log 1 "configure: error: COCOA video driver is only supported for OSX"
2514                 exit 1
2515         fi
2517         log 1 "checking COCOA... found"
2520         if [ "$enable_cocoa_quartz" != "0" ]; then
2521                 log 1 "checking whether to enable the Quartz window subdriver... yes"
2522         else
2523                 log 1 "checking whether to enable the Quartz window subdriver... no"
2524         fi
2526         detect_quickdraw
2529 detect_quickdraw() {
2530         # 0 means no, 1 is auto-detect, 2 is force
2531         if [ "$enable_cocoa_quickdraw" = "0" ]; then
2532                 log 1 "checking Quickdraw window subdriver... disabled"
2533                 return 0
2534         fi
2536         # Assume QuickDraw is available when doing an universal build
2537         if [ "$enable_universal" != "0" ]; then
2538                 log 1 "checking Quickdraw window subdriver... found"
2539                 return 0
2540         fi
2542         # 64 bits doesn't have quickdraw
2543         if [ "$cpu_type" = "64" ]; then
2544                 enable_cocoa_quickdraw="0"
2545                 log 1 "checking Quickdraw window subdriver... disabled (64 bits)"
2546                 return 0
2547         fi
2549 cat > tmp.osx.mm << EOF
2550 #include <AvailabilityMacros.h>
2551 #import <Cocoa/Cocoa.h>
2552 int main(int argc, char *argv[]) { SetEmptyRgn(NULL); return 0; }
2554         execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS -mmacosx-version-min=10.3 tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
2555         eval $execute > /dev/null
2556         ret=$?
2557         log 2 "executing $execute"
2558         log 2 "  exit code $ret"
2559         rm -f tmp.osx.mm tmp.osx
2560         if [ "$ret" != "0" ]; then
2561                 log 1 "checking Quickdraw window subdriver... not found"
2563                 # It was forced, so it should be found.
2564                 if [ "$enable_cocoa_quickdraw" != "1" ]; then
2565                         log 1 "configure: error: Quickdraw window driver could not be found"
2566                         exit 1
2567                 fi
2569                 enable_cocoa_quickdraw=0
2570                 return 0
2571         fi
2573         enable_cocoa_quickdraw=1
2574         log 1 "checking Quickdraw window subdriver... found"
2577 detect_library() {
2578         # $1 - config-param ($with_zlib value)
2579         # $2 - library name ('zlib', sets $zlib)
2580         # $3 - static library name (libz.a)
2581         # $4 - header directory ()
2582         # $5 - header name (zlib.h)
2583         # $6 - force static (if non-empty)
2585         if [ -n "$6" ]; then force_static="1"; fi
2587         # 0 means no, 1 is auto-detect, 2 is force
2588         if [ "$1" = "0" ]; then
2589                 log 1 "checking $2... disabled"
2591                 eval "$2=\"\""
2592                 return 0
2593         fi
2595         log 2 "detecting $2"
2597         if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
2598                 eval "$2=`ls -1 /usr/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2599                 eval "res=\$$2"
2600                 if [ -z "$res" ]; then
2601                         log 2 "  trying /usr/include/$4$5... no"
2602                         eval "$2=`ls -1 /usr/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2603                 fi
2604                 eval "res=\$$2"
2605                 if [ -z "$res" ]; then
2606                         log 2 "  trying /usr/local/include/$4$5... no"
2607                         eval "$2=`ls -1 /mingw/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2608                 fi
2609                 eval "res=\$$2"
2610                 if [ -z "$res" ]; then
2611                         log 2 "  trying /mingw/include/$4$5... no"
2612                         eval "$2=`ls -1 /opt/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2613                 fi
2614                 eval "res=\$$2"
2615                 if [ -z "$res" ]; then
2616                         log 2 "  trying /opt/local/include/$4$5... no"
2617                 fi
2618                 if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then
2619                         eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2620                         eval "res=\$$2"
2621                         if [ -z "$res" ]; then
2622                                 log 2 "  trying /usr/pkg/include/$4$5... no"
2623                         fi
2624                 fi
2625                 if [ -z "$res" ] && [ "$os" = "HAIKU" ]; then
2626                         if [ -z "$includeDir" ]; then
2627                                 includeDir=`finddir B_SYSTEM_HEADERS_DIRECTORY`
2628                         fi
2629                         eval "$2=`ls -1 $includeDir/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2630                         eval "res=\$$2"
2631                         if [ -z "$res" ]; then
2632                                 log 2 "  trying $includeDir/$4$5... no"
2633                         fi
2634                 fi
2636                 eval "res=\$$2"
2637                 if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
2638                         eval "res=\$$2"
2639                         log 2 "  trying $res... found"
2640                         # Now find the static lib, if needed
2641                         eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2642                         eval "res=\$$2"
2643                         if [ -z "$res" ]; then
2644                                 log 2 "  trying /lib/$3... no"
2645                                 eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2646                         fi
2647                         eval "res=\$$2"
2648                         if [ -z "$res" ]; then
2649                                 log 2 "  trying /usr/lib/$3... no"
2650                                 eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2651                         fi
2652                         eval "res=\$$2"
2653                         if [ -z "$res" ]; then
2654                                 log 2 "  trying /usr/local/lib/$3... no"
2655                                 eval "$2=`ls /mingw/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2656                         fi
2657                         eval "res=\$$2"
2658                         if [ -z "$res" ]; then
2659                                 log 2 "  trying /mingw/lib/$3... no"
2660                                 log 1 "configure: error: $2 couldn't be found"
2661                                 log 1 "configure: error: you requested a static link, but I can't find $3"
2663                                 exit 1
2664                         fi
2665                 fi
2666         else
2667                 # Make sure it exists
2668                 if [ -f "$1" ]; then
2669                         eval "$2=`ls $1 2>/dev/null`"
2670                 else
2671                         eval "$2=`ls $1/$3 2>/dev/null`"
2672                 fi
2673         fi
2675         eval "res=\$$2"
2676         if [ -z "$res" ]; then
2677                 log 1 "checking $2... not found"
2678                 if [ "$1" = "2" ]; then
2679                         log 1 "configure: error: $2 couldn't be found"
2681                         exit 1
2682                 elif [ "$1" != "1" ]; then
2683                         log 1 "configure: error: $2 couldn't be found"
2684                         log 1 "configure: error: you supplied '$1', but it seems invalid"
2686                         exit 1
2687                 fi
2689                 eval "with_$2=0"
2691                 return 0
2692         fi
2694         eval "res=\$$2"
2695         log 2 "  trying $res... found"
2697         log 1 "checking $2... found"
2700 detect_zlib() {
2701         detect_pkg_config "$with_zlib" "zlib" "zlib_config" "1.2"
2704 detect_lzo2() {
2705         detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h"
2708 detect_libtimidity() {
2709         detect_pkg_config "$with_libtimidity" "libtimidity" "libtimidity_config" "0.1" "1"
2712 detect_pkg_config() {
2713         # $1 - config-param ($with_lzma value)
2714         # $2 - package name ('liblzma')
2715         # $3 - config name ('lzma_config', sets $lzma_config)
2716         # $4 - minimum module version ('2.3')
2717         # $5 - check for dedicated, 1 is "skif if dedicated"
2719         # 0 means no, 1 is auto-detect, 2 is force
2720         if [ "$1" = "0" ]; then
2721                 log 1 "checking $2... disabled"
2723                 eval "$3=\"\""
2724                 return 0
2725         fi
2727         if [ "$5" = "1" ] && [ "$1" = "1" ] && [ "$enable_dedicated" != "0" ]; then
2728                 log 1 "checking $2... dedicated server, skipping"
2730                 eval "$3=\"\""
2731                 return 0
2732         fi
2734         log 2 "detecting $2"
2736         if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
2737                 pkg_config_call="$pkg_config $2"
2738         else
2739                 pkg_config_call="$1"
2740         fi
2742         version=`$pkg_config_call --modversion 2>/dev/null`
2743         ret=$?
2744         check_version "$4" "$version"
2745         version_ok=$?
2746         log 2 "executing $pkg_config_call --modversion"
2747         log 2 "  returned $version"
2748         log 2 "  exit code $ret"
2750         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
2751                 if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
2752                         log 1 "checking $2... needs at least version $4, $2 NOT enabled"
2753                 else
2754                         log 1 "checking $2... not found"
2755                 fi
2757                 # It was forced, so it should be found.
2758                 if [ "$1" != "1" ]; then
2759                         log 1 "configure: error: $pkg_config $2 couldn't be found"
2760                         log 1 "configure: error: you supplied '$1', but it seems invalid"
2761                         exit 1
2762                 fi
2764                 eval "$3=\"\""
2765                 return 0
2766         fi
2768         eval "$3=\"$pkg_config_call\""
2769         log 1 "checking $2... found"
2772 detect_lzma() {
2773         detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0"
2776 detect_xdg_basedir() {
2777         detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2"
2780 detect_png() {
2781         detect_pkg_config "$with_png" "libpng" "png_config" "1.2"
2784 detect_freetype() {
2785         detect_pkg_config "$with_freetype" "freetype2" "freetype_config" "2.2" "1"
2788 detect_fontconfig() {
2789         # 0 means no, 1 is auto-detect, 2 is force
2790         if [ "$with_fontconfig" = "0" ]; then
2791                 log 1 "checking libfontconfig... disabled"
2793                 fontconfig_config=""
2794                 return 0
2795         fi
2796         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
2797                 log 1 "checking libfontconfig... WIN32, skipping"
2798                 fontconfig_config=""
2799                 return 0
2800         fi
2802         if [ "$os" = "OSX" ]; then
2803                 log 1 "checking libfontconfig... OSX, skipping"
2804                 fontconfig_config=""
2805                 return 0
2806         fi
2808         detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1"
2811 detect_icu_layout() {
2812         detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1"
2815 detect_icu_sort() {
2816         detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1"
2819 detect_pspconfig() {
2820         # 0 means no, 1 is auto-detect, 2 is force
2821         if [ "$with_psp_config" = "0" ]; then
2822                 log 1 "checking psp-config... disabled"
2824                 psp_config=""
2825                 return 0
2826         fi
2828         if [ "$with_psp_config" = "1" ] && [ "$os" != "PSP" ]; then
2829                 log 1 "checking psp-config... not PSP, skipping"
2831                 psp_config="";
2832                 return 0
2833         fi
2835         if [ "$os" != "PSP" ]; then
2836                 log 1 "checking psp-config... not PSP"
2838                 log 1 "configure: error: psp-config is only supported for PSP"
2839                 exit 1
2840         fi
2842         if [ "$with_psp_config" = "1" ] || [ "$with_psp_config" = "" ] || [ "$with_psp_config" = "2" ]; then
2843                 psp_config="psp-config"
2844         else
2845                 psp_config="$with_psp_config"
2846         fi
2848         version=`$psp_config -p 2>/dev/null`
2849         ret=$?
2850         log 2 "executing $psp_config -p"
2851         log 2 "  returned $version"
2852         log 2 "  exit code $ret"
2854         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2855                 log 1 "checking psp-config... not found"
2856                 log 1 "configure: error: psp-config couldn't be found"
2858                 # It was forced, so it should be found.
2859                 if [ "$with_psp_config" != "1" ]; then
2860                         log 1 "configure: error: you supplied '$with_psp_config', but it seems invalid"
2861                 fi
2862                 exit 1
2863         fi
2865         log 1 "checking psp-config... found"
2868 detect_iconv() {
2869         # 0 means no, 1 is auto-detect, 2 is force
2870         if [ "$with_iconv" = "0" ]; then
2871                 log 1 "checking iconv... disabled"
2873                 return 0
2874         fi
2876         if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then
2877                 log 1 "checking iconv... not OSX, skipping"
2878                 with_iconv="0"
2880                 return 0
2881         fi
2883         # Try to find iconv.h, seems to only thing to detect iconv with
2885         if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then
2886                 iconv=`ls -1 /usr/include 2>/dev/null | grep "iconv.h"`
2887                 if [ -z "$iconv" ]; then
2888                         iconv=`ls -1 /usr/local/include 2>/dev/null | grep "iconv.h"`
2889                 fi
2890         else
2891                 # Make sure it exists
2892                 iconv=`ls $with_iconv/include/iconv.h 2>/dev/null`
2893         fi
2895         if [ -z "$iconv" ]; then
2896                 log 1 "checking iconv... not found"
2897                 if [ "$with_iconv" = "2" ]; then
2898                         log 1 "configure: error: iconv couldn't be found"
2900                         exit 1
2901                 elif [ "$with_iconv" != "1" ]; then
2902                         log 1 "configure: error: iconv couldn't be found"
2903                         log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it"
2905                         exit 1
2906                 fi
2908                 return 0
2909         fi
2911         if [ "$with_iconv" = "1" ]; then
2912                 with_iconv="2"
2913         fi
2915         log 2 "found iconv in $iconv"
2917         log 1 "checking iconv... found"
2919         # There are different implementations of iconv. The older ones,
2920         # e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g.
2921         # IEEE 1003.1 (2004), pass a non-const pointer.
2923         cat > tmp.iconv.cpp << EOF
2924 #include "src/stdafx.h"
2925 #include <iconv.h>
2926 int main() {
2927         static char buf[1024];
2928         iconv_t convd = 0;
2929         const char *inbuf = "";
2930         char *outbuf  = buf;
2931         size_t outlen = 1023;
2932         size_t inlen  = 0;
2933         return iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
2936         execute="$cxx_host $OSX_SYSROOT $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
2937         eval $execute > /dev/null
2938         ret=$?
2939         log 2 "executing $execute"
2940         log 2 "  exit code $ret"
2941         if [ "$ret" = "0" ]; then have_non_const_iconv="no"; else have_non_const_iconv="yes"; fi
2942         log 1 "checking if iconv has non-const inbuf... $have_non_const_iconv"
2944         cat > tmp.iconv.cpp << EOF
2945 #include "src/stdafx.h"
2946 #include <iconv.h>
2947 int main() {
2948         static char buf[1024];
2949         iconv_t convd = 0;
2950         char *inbuf = "";
2951         char *outbuf  = buf;
2952         size_t outlen = 1023;
2953         size_t inlen  = 0;
2954         return iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
2957         execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
2958         eval $execute > /dev/null
2959         ret=$?
2960         log 2 "executing $execute"
2961         log 2 "  exit code $ret"
2962         if [ "$ret" = "0" ]; then link_to_iconv="no"; else link_to_iconv="yes"; fi
2963         log 1 "checking whether to link to iconv... $link_to_iconv"
2964         rm -f tmp.iconv tmp.iconv.cpp
2967 _detect_sort() {
2968         sort_test_in="d
2973         sort_test_out="a
2978         log 2 "running echo <array> | $1"
2980         if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then
2981                 sort="$1"
2982                 log 2 "  result was valid"
2983         else
2984                 log 2 "  result was invalid"
2985         fi
2988 detect_sort() {
2989         if [ "$with_sort" = "0" ]; then
2990                 log 1 "checking sort... disabled"
2992                 return
2993         fi
2995         if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then
2996                 _detect_sort "sort"
2997                 if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi
2998                 if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi
2999                 if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi
3000                 if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi
3001                 if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi
3002                 if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi
3003         else
3004                 _detect_sort "$with_sort"
3005         fi
3007         if [ -z "$sort" ]; then
3008                 if [ "$with_sort" = "2" ]; then
3009                         log 1 "checking sort... not found"
3011                         log 1 "configure: error: couldn't detect sort on your system"
3012                         exit 1
3013                 elif [ "$with_sort" != "1" ]; then
3014                         log 1 "checking sort... $with_sort not found"
3016                         log 1 "configure: error: '$with_sort' doesn't look like a sort to me"
3017                         log 1 "configure: error: please verify its location and function and try again"
3019                         exit 1
3020                 else
3021                         log 1 "checking sort... not found"
3022                 fi
3023         else
3024                 log 1 "checking sort... $sort"
3025         fi
3028 detect_grfcodec() {
3029         # 0 means no, 1 is auto-detect, 2 is force
3030         if [ "$with_grfcodec" = "0" ]; then
3031                 log 1 "checking grfcodec... disabled"
3033                 grfcodec=""
3034                 return 0
3035         fi
3037         if [ "$with_grfcodec" = "1" ] || [ "$with_grfcodec" = "" ] || [ "$with_grfcodec" = "2" ]; then
3038                 grfcodec="grfcodec"
3039         else
3040                 grfcodec="$with_grfcodec"
3041         fi
3043         version=`$grfcodec -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'`
3044         ret=$?
3045         log 2 "executing grfcodec -v"
3046         log 2 "  returned $version"
3047         log 2 "  exit code $ret"
3049         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then
3050                 if [ -n "$version" ] && [ "$version" -lt "985" ]; then
3051                         log 1 "checking grfcodec... needs at least version 6.0.5 (r985), disabled"
3052                 else
3053                         log 1 "checking grfcodec... not found"
3054                 fi
3056                 # It was forced, so it should be found.
3057                 if [ "$with_grfcodec" != "1" ]; then
3058                         log 1 "configure: error: grfcodec couldn't be found"
3059                         log 1 "configure: error: you supplied '$with_grfcodec', but it seems invalid"
3060                         exit 1
3061                 fi
3063                 grfcodec=""
3064                 return 0
3065         fi
3067         log 1 "checking grfcodec... found"
3070 detect_nforenum() {
3071         # 0 means no, 1 is auto-detect, 2 is force
3072         if [ "$with_nforenum" = "0" ]; then
3073                 log 1 "checking nforenum... disabled"
3075                 nforenum=""
3076                 return 0
3077         fi
3079         if [ "$with_nforenum" = "1" ] || [ "$with_nforenum" = "" ] || [ "$with_nforenum" = "2" ]; then
3080                 nforenum="nforenum"
3081         else
3082                 nforenum="$with_nforenum"
3083         fi
3085         version=`$nforenum -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'`
3086         ret=$?
3087         log 2 "executing nforenum -v"
3088         log 2 "  returned $version"
3089         log 2 "  exit code $ret"
3091         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then
3092                 if [ -n "$version" ] && [ "$version" -lt "985" ]; then
3093                         log 1 "checking nforenum... needs at least version 6.0.5 (r985), disabled"
3094                 else
3095                         log 1 "checking nforenum... not found"
3096                 fi
3098                 # It was forced, so it should be found.
3099                 if [ "$with_nforenum" != "1" ]; then
3100                         log 1 "configure: error: nforenum couldn't be found"
3101                         log 1 "configure: error: you supplied '$with_nforenum', but it seems invalid"
3102                         exit 1
3103                 fi
3105                 nforenum=""
3106                 return 0
3107         fi
3109         log 1 "checking nforenum... found"
3112 detect_cputype() {
3113         if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
3114                 log 1 "forcing cpu-type... $cpu_type bits"
3115                 return;
3116         fi
3117         echo "#define _SQ64 1" > tmp.64bit.cpp
3118         echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp
3119         echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
3120         echo "int main() { return 0; }" >> tmp.64bit.cpp
3121         execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
3122         cpu_type="`eval $execute 2>/dev/null`"
3123         ret=$?
3124         log 2 "executing $execute"
3125         log 2 "  returned $cpu_type"
3126         log 2 "  exit code $ret"
3127         if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
3128         log 1 "detecting cpu-type... $cpu_type bits"
3129         rm -f tmp.64bit tmp.64bit.cpp
3132 detect_sse_capable_architecture() {
3133         # 0 means no, 1 is auto-detect, 2 is force
3134         if [ "$with_sse" = "0" ]; then
3135                 log 1 "checking SSE... disabled"
3136                 return
3137         fi
3139         echo "#define _SQ64 1" > tmp.sse.cpp
3140         echo "#include <xmmintrin.h>" >> tmp.sse.cpp
3141         echo "#include <smmintrin.h>" >> tmp.sse.cpp
3142         echo "#include <tmmintrin.h>" >> tmp.sse.cpp
3143         echo "int main() { return 0; }" >> tmp.sse.cpp
3144         execute="$cxx_host -msse4.1 $CFLAGS tmp.sse.cpp -o tmp.sse 2>&1"
3145         sse="`eval $execute 2>/dev/null`"
3146         ret=$?
3147         log 2 "executing $execute"
3148         log 2 "  returned $sse"
3149         log 2 "  exit code $ret"
3150         if [ "$ret" = "0" ]; then
3151                 log 1 "detecting SSE... found"
3152         else
3153                 # It was forced, so it should be found.
3154                 if [ "$with_sse" != "1" ]; then
3155                         log 1 "configure: error: SSE couln't be found"
3156                         log 1 "configure: error: you force enabled SSE, but it seems unavailable"
3157                         exit 1
3158                 fi
3160                 log 1 "detecting SSE... not found"
3161                 with_sse="0"
3162         fi
3163         rm -f tmp.sse tmp.exe tmp.sse.cpp
3166 make_sed() {
3167         T_CFLAGS="$CFLAGS"
3168         T_CXXFLAGS="$CXXFLAGS"
3169         T_LDFLAGS="$LDFLAGS"
3171         SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR"
3173         # All the data needed to compile a single target
3174         #  Make sure if you compile multiple targets to
3175         #  use multiple OBJS_DIR, because all in-between
3176         #  binaries are stored in there, and nowhere else.
3177         SRC_REPLACE="
3178                 s@!!CC_HOST!!@$cc_host@g;
3179                 s@!!CXX_HOST!!@$cxx_host@g;
3180                 s@!!CC_BUILD!!@$cc_build@g;
3181                 s@!!CXX_BUILD!!@$cxx_build@g;
3182                 s@!!WINDRES!!@$windres@g;
3183                 s@!!STRIP!!@$strip $strip_arg@g;
3184                 s@!!LIPO!!@$lipo@g;
3185                 s@!!CFLAGS!!@$T_CFLAGS@g;
3186                 s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g;
3187                 s@!!CXXFLAGS!!@$T_CXXFLAGS@g;
3188                 s@!!CXXFLAGS_BUILD!!@$CXXFLAGS_BUILD@g;
3189                 s@!!STRGEN_FLAGS!!@$strgen_flags@g;
3190                 s@!!LIBS!!@$LIBS@g;
3191                 s@!!LDFLAGS!!@$T_LDFLAGS@g;
3192                 s@!!LDFLAGS_BUILD!!@$LDFLAGS_BUILD@g;
3193                 s@!!BIN_DIR!!@$BIN_DIR@g;
3194                 s@!!ROOT_DIR!!@$ROOT_DIR@g;
3195                 s@!!MEDIA_DIR!!@$MEDIA_DIR@g;
3196                 s@!!SOURCE_LIST!!@$SOURCE_LIST@g;
3197                 s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g;
3198                 s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g;
3199                 s@!!GRF_OBJS_DIR!!@$GRF_OBJS_DIR@g;
3200                 s@!!SETTING_OBJS_DIR!!@$SETTING_OBJS_DIR@g;
3201                 s@!!SRC_DIR!!@$SRC_DIR@g;
3202                 s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g;
3203                 s@!!OSXAPP!!@$OSXAPP@g;
3204                 s@!!LANG_DIR!!@$LANG_DIR@g;
3205                 s@!!TTD!!@$TTD@g;
3206                 s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g;
3207                 s@!!DATA_DIR!!@$prefix_dir/$data_dir@g;
3208                 s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g;
3209                 s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
3210                 s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g;
3211                 s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
3212                 s@!!PERSONAL_DIR!!@$personal_dir@g;
3213                 s@!!SHARED_DIR!!@$shared_dir@g;
3214                 s@!!INSTALL_DIR!!@$install_dir@g;
3215                 s@!!BINARY_NAME!!@$binary_name@g;
3216                 s@!!STRGEN!!@$STRGEN@g;
3217                 s@!!ENDIAN_CHECK!!@$ENDIAN_CHECK@g;
3218                 s@!!DEPEND!!@$DEPEND@g;
3219                 s@!!SETTINGSGEN!!@$SETTINGSGEN@g;
3220                 s@!!ENDIAN_FORCE!!@$endian@g;
3221                 s@!!STAGE!!@$STAGE@g;
3222                 s@!!MAKEDEPEND!!@$makedepend@g;
3223                 s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g;
3224                 s@!!SORT!!@$sort@g;
3225                 s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g;
3226                 s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g;
3227                 s@!!CONFIG_CACHE_ENDIAN!!@config.cache.endian@g;
3228                 s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g;
3229                 s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g;
3230                 s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g;
3231                 s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g;
3232                 s@!!LANG_SUPPRESS!!@$lang_suppress@g;
3233                 s@!!OBJS_C!!@$OBJS_C@g;
3234                 s@!!OBJS_CPP!!@$OBJS_CPP@g;
3235                 s@!!OBJS_MM!!@$OBJS_MM@g;
3236                 s@!!OBJS_RC!!@$OBJS_RC@g;
3237                 s@!!SRCS!!@$SRCS@g;
3238                 s@!!OS!!@$os@g;
3239                 s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g;
3240                 s@!!AWK!!@$awk@g;
3241                 s@!!DISTCC!!@$distcc@g;
3242                 s@!!NFORENUM!!@$nforenum@g;
3243                 s@!!GRFCODEC!!@$grfcodec@g;
3244         "
3246         if [ "$icon_theme_dir" != "" ]; then
3247                 SRC_REPLACE="$SRC_REPLACE
3248                         s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
3249                 "
3250         else
3251                 SRC_REPLACE="$SRC_REPLACE
3252                         s@!!ICON_THEME_DIR!!@@g;
3253                 "
3254         fi
3256         if [ "$man_dir" != "" ]; then
3257                 SRC_REPLACE="$SRC_REPLACE
3258                         s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
3259                 "
3260         else
3261                 SRC_REPLACE="$SRC_REPLACE
3262                         s@!!MAN_DIR!!@@g;
3263                 "
3264         fi
3266         if [ "$menu_dir" != "" ]; then
3267                 SRC_REPLACE="$SRC_REPLACE
3268                         s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g;
3269                 "
3270         else
3271                 SRC_REPLACE="$SRC_REPLACE
3272                         s@!!MENU_DIR!!@@g;
3273                 "
3274         fi
3277 generate_menu_item() {
3278         MENU_REPLACE="
3279                 s@!!TTD!!@$TTD@g;
3280                 s@!!MENU_GROUP!!@$menu_group@g;
3281                 s@!!MENU_NAME!!@$menu_name@g
3282         "
3283         log 1 "Generating menu item..."
3284         mkdir -p media
3285         < $ROOT_DIR/media/openttd.desktop.in sed "$MENU_REPLACE" > media/openttd.desktop
3288 generate_main() {
3289         STAGE="[MAIN]"
3291         make_sed
3293         # Create the main Makefile
3294         log 1 "Generating Makefile..."
3295         echo "# Auto-generated file from 'Makefile.in' -- DO NOT EDIT" > Makefile
3296         < $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" >> Makefile
3297         cp $ROOT_DIR/Makefile.bundle.in Makefile.bundle
3298         echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am
3299         echo >> Makefile.am
3300         # Make the copy of the source-list, so we don't trigger an unwanted recompile
3301         cp $SOURCE_LIST config.cache.source.list
3302         # Add the current directory, so we don't trigger an unwanted recompile
3303         echo "`pwd`" > config.cache.pwd
3304         # Make sure config.cache is OLDER then config.cache.source.list
3305         touch config.cache
3306         touch config.pwd
3308         if [ "$menu_dir" != "" ]; then
3309                 generate_menu_item
3310         fi
3313 generate_lang() {
3314         STAGE="[LANG]"
3316         make_sed
3318         # Create the language file
3319         mkdir -p $LANG_OBJS_DIR
3321         log 1 "Generating lang/Makefile..."
3322         echo "# Auto-generated file from 'Makefile.lang.in' -- DO NOT EDIT" > $LANG_OBJS_DIR/Makefile
3323         < $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" >> $LANG_OBJS_DIR/Makefile
3324         echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am
3325         echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am
3328 generate_settings() {
3329         STAGE="[SETTING]"
3331         make_sed
3333         # Create the language file
3334         mkdir -p $SETTING_OBJS_DIR
3336         log 1 "Generating setting/Makefile..."
3337         echo "# Auto-generated file from 'Makefile.settings.in' -- DO NOT EDIT" > $SETTING_OBJS_DIR/Makefile
3338         < $ROOT_DIR/Makefile.setting.in sed "$SRC_REPLACE" >> $SETTING_OBJS_DIR/Makefile
3339         echo "DIRS += $SETTING_OBJS_DIR" >> Makefile.am
3342 generate_grf() {
3343         STAGE="[BASESET]"
3345         make_sed
3347         # Create the language file
3348         mkdir -p $GRF_OBJS_DIR
3350         log 1 "Generating grf/Makefile..."
3351         echo "# Auto-generated file from 'Makefile.grf.in' -- DO NOT EDIT" > $GRF_OBJS_DIR/Makefile
3352         < $ROOT_DIR/Makefile.grf.in sed "$SRC_REPLACE" >> $GRF_OBJS_DIR/Makefile
3353         echo "DIRS += $GRF_OBJS_DIR" >> Makefile.am
3356 generate_src_normal() {
3357         STAGE=$1
3359         make_sed
3361         # Create the source file
3362         mkdir -p $SRC_OBJS_DIR
3364         log 1 "Generating $2/Makefile..."
3365         echo "# Auto-generated file from 'Makefile.src.in' -- DO NOT EDIT" > $SRC_OBJS_DIR/Makefile
3366         < $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" >> $SRC_OBJS_DIR/Makefile
3367         echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am
3368         echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am
3371 generate_src_osx() {
3372         cc_host_orig="$cc_host"
3373         cxx_host_orig="$cxx_host"
3374         CFLAGS_orig="$CFLAGS"
3375         LDFLAGS_orig="$LDFLAGS"
3377         for type in $enable_universal; do
3379                 if [ -n "$osx_sdk_104_path" ]; then
3380                         # Use 10.4 SDK for 32-bit targets
3381                         CFLAGS="-isysroot $osx_sdk_104_path $CFLAGS_orig"
3382                         LDFLAGS="-Wl,-syslibroot,$osx_sdk_104_path $LDFLAGS_orig"
3383                 fi
3385                 # We don't want to duplicate the x86_64 stuff for each target, so do it once here
3386                 if [ "$type" = "ppc64" ] || [ "$type" = "x86_64" ]; then
3387                         # 64 bits is always 10.5 or higher. Furthermore it has a non const ICONV
3388                         # and they also removed support for QuickTime/QuickDraw
3389                         if [ -n "$osx_sdk_path" ]; then
3390                                 CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig"
3391                                 LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig"
3392                         fi
3393                         CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME -UENABLE_COCOA_QUICKDRAW"
3394                         LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`"
3395                 fi
3397                 case $type in
3398                         ppc)
3399                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc"
3400                                 cc_host="$cc_host_orig -arch ppc -mmacosx-version-min=10.3"
3401                                 cxx_host="$cxx_host_orig -arch ppc -mmacosx-version-min=10.3"
3402                                 generate_src_normal "[ppc]" "objs/ppc";;
3403                         ppc970)
3404                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970"
3405                                 cc_host="$cc_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
3406                                 cxx_host="$cxx_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
3407                                 generate_src_normal "[ppc970]" "objs/ppc970";;
3408                         i386)
3409                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/i386"
3410                                 cc_host="$cc_host_orig -arch i386 -mmacosx-version-min=10.4"
3411                                 cxx_host="$cxx_host_orig -arch i386 -mmacosx-version-min=10.4"
3412                                 generate_src_normal "[i386]" "objs/i386";;
3413                         ppc64)
3414                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc64"
3415                                 cc_host="$cc_host_orig -arch ppc64 -mmacosx-version-min=10.5"
3416                                 cxx_host="$cxx_host_orig -arch ppc64 -mmacosx-version-min=10.5"
3417                                 generate_src_normal "[ppc64]" "objs/ppc64";;
3418                         x86_64)
3419                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/x86_64"
3420                                 cc_host="$cc_host_orig -arch x86_64 -mmacosx-version-min=10.5"
3421                                 cxx_host="$cxx_host_orig -arch x86_64 -mmacosx-version-min=10.5"
3422                                 generate_src_normal "[x86_64]" "objs/x86_64";;
3423                         *) log 1 "Unknown architecture requested for universal build: $type";;
3424                 esac
3425         done
3428 generate_src() {
3429         if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
3430                 generate_src_osx
3431         else
3432                 generate_src_normal "[SRC]" "objs"
3433         fi
3436 showhelp() {
3437         echo "'configure' configures OpenTTD."
3438         echo ""
3439         echo "Usage: $0 [OPTION]... [VAR=VALUE]..."
3440         echo ""
3441         echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as"
3442         echo "VAR=VALUE.  See below for descriptions of some of the useful variables."
3443         echo ""
3444         echo "Defaults for the options are specified in brackets."
3445         echo ""
3446         echo "Configuration:"
3447         echo "  -h, --help                     display this help and exit"
3448         echo ""
3449         echo "System types:"
3450         echo "  --build=BUILD                  configure for building on BUILD [guessed]"
3451         echo "  --host=HOST                    cross-compile to build programs to run"
3452         echo "                                 on HOST [BUILD]"
3453         echo "  --windres=WINDRES              the windres to use [HOST-windres]"
3454         echo "  --strip=STRIP                  the strip to use [HOST-strip]"
3455         echo "  --awk=AWK                      the awk to use in configure [awk]"
3456         echo "  --pkg-config=PKG-CONFIG        the pkg-config to use in configure [pkg-config]"
3457         echo "  --lipo=LIPO                    the lipo to use (OSX ONLY) [HOST-lipo]"
3458         echo "  --os=OS                        the OS we are compiling for [DETECT]"
3459         echo "                                 DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/"
3460         echo "                                 NETBSD/MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/"
3461         echo "                                 MINGW/OS2/DOS/WINCE/PSP/HAIKU"
3462         echo "  --endian=ENDIAN                set the endian of the HOST (AUTO/LE/BE)"
3463         echo ""
3464         echo "Paths:"
3465         echo "  --prefix-dir=dir               specifies the prefix for all installed"
3466         echo "                                 files [/usr/local]"
3467         echo "  --binary-dir=dir               location of the binary. Will be prefixed"
3468         echo "                                 with the prefix-dir [games]"
3469         echo "  --data-dir=dir                 location of data files (lang, data, gm)."
3470         echo "                                 Will be prefixed with the prefix-dir"
3471         echo "                                 [share/games/openttd]"
3472         echo "  --doc-dir=dir                  location of the doc files"
3473         echo "                                 Will be prefixed with the prefix-dir"
3474         echo "                                 [$doc_dir]"
3475         echo "  --icon-dir=dir                 location of icons. Will be prefixed"
3476         echo "                                 with the prefix-dir [share/pixmaps]"
3477         echo "  --icon-theme-dir=dir           location of icon theme."
3478         echo "                                 Will be prefixed with the prefix-dir"
3479         echo "                                 and postfixed with size-dirs [$icon_theme_dir]"
3480         echo "  --man-dir=dir                  location of the manual page (UNIX only)"
3481         echo "                                 Will be prefixed with the prefix-dir"
3482         echo "                                 [$man_dir]"
3483         echo "  --menu-dir=dir                 location of the menu item. (UNIX only, except OSX)"
3484         echo "                                 Will be prefixed with the prefix-dir"
3485         echo "                                 [share/applications]"
3486         echo "  --personal-dir=dir             location of the personal directory"
3487         echo "                                 [os-dependent default]"
3488         echo "  --shared-dir=dir               location of shared data files"
3489         echo "                                 [os-dependent default]"
3490         echo "  --install-dir=dir              specifies the root to install to."
3491         echo "                                 Useful to install into jails [/]"
3492         echo "  --binary-name                  the name used for the binary, icons,"
3493         echo "                                 desktop file, etc. when installing [openttd]"
3494         echo ""
3495         echo "Features and packages:"
3496         echo "  --enable-debug[=LVL]           enable debug-mode (LVL=[0123], 0 is release)"
3497         echo "  --enable-desync-debug=[LVL]    enable desync debug options (LVL=[012], 0 is none"
3498         echo "  --enable-profiling             enables profiling"
3499         echo "  --enable-lto                   enables GCC's Link Time Optimization (LTO)/ICC's"
3500         echo "                                 Interprocedural Optimization if available"
3501         echo "  --enable-dedicated             compile a dedicated server (without video)"
3502         echo "  --enable-static                enable static compile (doesn't work for"
3503         echo "                                 all HOSTs)"
3504         echo "  --enable-translator            enable extra output for translators"
3505         echo "  --enable-universal[=ARCH]      enable universal builds (OSX ONLY). Allowed is any combination"
3506         echo "                                 of architectures: i386 ppc ppc970 ppc64 x86_64"
3507         echo "                                 Default architectures are: i386 ppc"
3508         echo "  --enable-osx-g5                enables optimizations for ppc970 (G5) (OSX ONLY)"
3509         echo "  --disable-cocoa-quartz         disable the quartz window mode driver for Cocoa (OSX ONLY)"
3510         echo "  --disable-cocoa-quickdraw      disable the quickdraw window mode driver for Cocoa (OSX ONLY)"
3511         echo "  --disable-unicode              disable unicode support to build win9x"
3512         echo "                                 version (Win32 ONLY)"
3513         echo "  --enable-console               compile as a console application instead of as a GUI application."
3514         echo "                                 If this setting is active, debug output will appear in the same"
3515         echo "                                 console instead of opening a new window. (Win32 ONLY)"
3516         echo "  --disable-network              disable network support"
3517         echo "  --disable-assert               disable asserts (continue on errors)"
3518         echo "  --enable-strip                 enable any possible stripping"
3519         echo "  --without-osx-sysroot          disable the automatic adding of sysroot "
3520         echo "                                 (OSX ONLY)"
3521         echo "  --without-application-bundle   disable generation of application bundle"
3522         echo "                                 (OSX ONLY)"
3523         echo "  --without-menu-entry           Don't generate a menu item (Freedesktop based only)"
3524         echo "  --menu-group=group             Category in which the menu item will be placed (Freedesktop based only)"
3525         echo "  --menu-name=name               Name of the menu item when placed [OpenTTD]"
3526         echo "  --with-direct-music            enable direct music support (Win32 ONLY)"
3527         echo "  --with-sort=sort               define a non-default location for sort"
3528         echo "  --with-midi=midi               define which midi-player to use"
3529         echo "  --with-midi-arg=arg            define which args to use for the"
3530         echo "                                 midi-player"
3531         echo "  --with-libtimidity[=\"pkg-config libtimidity\"]"
3532         echo "                                 enables libtimidity support"
3533         echo "  --with-allegro[=\"pkg-config allegro\"]"
3534         echo "                                 enables Allegro video driver support"
3535         echo "  --with-cocoa                   enables COCOA video driver (OSX ONLY)"
3536         echo "  --with-sdl[=\"pkg-config sdl\"]  enables SDL video driver support"
3537         echo "  --with-zlib[=\"pkg-config zlib\"]"
3538         echo "                                 enables zlib support"
3539         echo "  --with-liblzma[=\"pkg-config liblzma\"]"
3540         echo "                                 enables liblzma support"
3541         echo "  --with-liblzo2[=liblzo2.a]     enables liblzo2 support"
3542         echo "  --with-png[=\"pkg-config libpng\"]"
3543         echo "                                 enables libpng support"
3544         echo "  --with-freetype[=\"pkg-config freetype2\"]"
3545         echo "                                 enables libfreetype support"
3546         echo "  --with-fontconfig[=\"pkg-config fontconfig\"]"
3547         echo "                                 enables fontconfig support"
3548         echo "  --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]"
3549         echo "                                 enables XDG base directory support"
3550         echo "  --with-icu                     enables icu components for layout and sorting"
3551         echo "  --with-icu-layout[=\"pkg-config icu-lx\"]"
3552         echo "                                 enables icu components for layouting (right-to-left support)"
3553         echo "  --with-icu-sort[=\"pkg-config icu-i18n\"]"
3554         echo "                                 enables icu components for locale specific string sorting"
3555         echo "  --static-icu                   try to link statically (libsicu instead of"
3556         echo "                                 libicu; can fail as the new name is guessed)"
3557         echo "  --with-iconv[=iconv-path]      enables iconv support"
3558         echo "  --with-psp-config[=psp-config] enables psp-config support (PSP ONLY)"
3559         echo "  --disable-builtin-depend       disable use of builtin deps finder"
3560         echo "  --with-makedepend[=makedepend] enables makedepend support"
3561         echo "  --with-ccache                  enables ccache support"
3562         echo "  --with-distcc                  enables distcc support"
3563         echo "  --without-grfcodec             disable usage of grfcodec and re-generation of base sets"
3564         echo "  --without-threads              disable threading support"
3565         echo "  --without-sse                  disable SSE support (x86/x86_64 only)"
3566         echo ""
3567         echo "Some influential environment variables:"
3568         echo "  CC                             C compiler command"
3569         echo "  CXX                            C++ compiler command"
3570         echo "  CFLAGS                         C compiler flags"
3571         echo "  CXXFLAGS                       C++ compiler flags"
3572         echo "  WINDRES                        windres command"
3573         echo "  LDFLAGS                        linker flags, e.g. -L<lib dir> if you"
3574         echo "                                 have libraries in a nonstandard"
3575         echo "                                 directory <lib dir>"
3576         echo "  CFLAGS_BUILD                   C compiler flags for build time tool generation"
3577         echo "  CXXFLAGS_BUILD                 C++ compiler flags for build time tool generation"
3578         echo "  LDFLAGS_BUILD                  linker flags for build time tool generation"
3579         echo ""
3580         echo "Use these variables to override the choices made by 'configure' or to help"
3581         echo "it to find libraries and programs with nonstandard names/locations."