(svn r27723) -Codechange: Simplify tests by using GCF_SYSTEM.
[openttd.git] / config.lib
blob196e908f5f78bbd29c2e2dc4bc57d632f38a5d1c
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                 fi
1409                 if [ $cc_version -ge 407 ]; then
1410                         # Disable bogus 'attempt to free a non-heap object' warning
1411                         flags="$flags -Wno-free-nonheap-object"
1412                 fi
1414                 if [ $cc_version -ge 600 ]; then
1415                         # -flifetime-dse=2 (default since GCC 6) doesn't play
1416                         # well with our custom pool item allocator
1417                         cxxflags="$cxxflags -flifetime-dse=1 -std=gnu++14"
1418                 fi
1420                 if [ "$enable_lto" != "0" ]; then
1421                         # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
1422                         has_lto=`$1 -dumpspecs | grep '\%{flto'`
1423                         if [ -n "$has_lto" ]; then
1424                                 # Use LTO only if we see LTO exists and is requested
1425                                 if [ $cc_version -lt 406 ]; then
1426                                         flags="$flags -flto"
1427                                 else
1428                                         flags="$flags -flto=jobserver"
1429                                 fi
1430                                 ldflags="$ldflags -fwhole-program"
1431                                 features="$features lto"
1432                         fi
1433                 fi
1435                 has_rdynamic=`$1 -dumpspecs | grep rdynamic`
1436                 if [ -n "$has_rdynamic" ]; then
1437                         # rdynamic is used to get useful stack traces from crash reports.
1438                         flags="$flags -rdynamic"
1439                         ldflags="$ldflags -rdynamic"
1440                 fi
1441         fi
1443         eval "$2=\"$flags\""
1444         eval "$3=\"$cxxflags\""
1445         eval "$4=\"$ldflags\""
1446         eval "$5=\"$features\""
1449 make_cflags_and_ldflags() {
1450         # General CFlags for BUILD
1451         CFLAGS_BUILD="$CFLAGS_BUILD"
1452         # Special CXXFlags for BUILD
1453         CXXFLAGS_BUILD="$CXXFLAGS_BUILD"
1454         # LDFLAGS for BUILD
1455         LDFLAGS_BUILD="$LDFLAGS_BUILD"
1456         # FEATURES for BUILD (lto)
1457         FEATURES_BUILD=""
1458         # General CFlags for HOST
1459         CFLAGS="$CFLAGS"
1460         # Special CXXFlags for HOST
1461         CXXFLAGS="$CXXFLAGS"
1462         # Libs to compile. In fact this is just LDFLAGS
1463         LIBS="-lstdc++"
1464         # LDFLAGS used for HOST
1465         LDFLAGS="$LDFLAGS"
1466         # FEATURES for HOST (lto)
1467         FEATURES=""
1469         make_compiler_cflags "$cc_build" "CFLAGS_BUILD" "CXXFLAGS_BUILD" "LDFLAGS_BUILD" "FEATURES_BUILD"
1470         make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES"
1472         CFLAGS="$CFLAGS -D$os"
1473         CFLAGS_BUILD="$CFLAGS_BUILD -D$os"
1475         if [ "$enable_debug" = "0" ]; then
1476                 # No debug, add default stuff
1477                 OBJS_SUBDIR="release"
1478                 if [ "$os" = "MORPHOS" ]; then
1479                         CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS"
1480                         LDFLAGS="$LDFLAGS -noixemul"
1481                 fi
1483                 if [ "$enable_profiling" = "0" ]; then
1484                         # -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible)
1485                         CFLAGS="-fomit-frame-pointer $CFLAGS"
1486                 fi
1487                 CFLAGS="-O2 $CFLAGS"
1488         else
1489                 OBJS_SUBDIR="debug"
1491                 # Each debug level reduces the optimization by a bit
1492                 if [ $enable_debug -ge 1 ]; then
1493                         CFLAGS="$CFLAGS -g -D_DEBUG"
1494                         if [ "$os" = "PSP" ]; then
1495                                 CFLAGS="$CFLAGS -G0"
1496                         fi
1497                 fi
1498                 if [ $enable_debug -ge 2 ]; then
1499                         CFLAGS="$CFLAGS -fno-inline"
1500                 fi
1501                 if [ $enable_debug -ge 3 ]; then
1502                         CFLAGS="$CFLAGS -O0"
1503                 else
1504                         CFLAGS="$CFLAGS -O2"
1505                 fi
1506         fi
1508         if [ $enable_debug -le 2 ]; then
1509                 cc_host_is_gcc=`basename "$cc_host" | grep "gcc" 2>/dev/null`
1510                 if [ -n "$cc_host_is_gcc" ]; then
1511                         # Define only when compiling with GCC. Some GLIBC versions use GNU
1512                         # extensions in a way that breaks build with at least ICC.
1513                         # This requires -O1 or more, so debug level 3 (-O0) is excluded.
1514                         CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
1515                 fi
1517                 cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null`
1518                 if [ -n "$cc_build_is_gcc" ]; then
1519                         # Just add -O1 to the tools needed for building.
1520                         CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1"
1521                 fi
1522         fi
1524         if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then
1525                 # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization,
1526                 # wrongly optimizing ^= in loops. This disables the failing optimisation.
1527                 CFLAGS="$CFLAGS -fno-expensive-optimizations"
1528         fi
1530         if [ "$enable_profiling" != "0" ]; then
1531                 CFLAGS="$CFLAGS -pg"
1532                 LDFLAGS="$LDFLAGS -pg"
1533         fi
1535         if [ "$with_threads" = "0" ]; then
1536                 CFLAGS="$CFLAGS -DNO_THREADS"
1537         fi
1538         if [ "$with_sse" = "1" ]; then
1539                 CFLAGS="$CFLAGS -DWITH_SSE"
1540         fi
1542         if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then
1543                 if [ "$os" = "CYGWIN" ]; then
1544                         flags="$flags -mwin32"
1545                         LDFLAGS="$LDFLAGS -mwin32"
1546                 fi
1547                 if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
1548                         if [ $cc_version -lt 406 ]; then
1549                                 flags="$flags -mno-cygwin"
1550                                 LDFLAGS="$LDFLAGS -mno-cygwin"
1551                         fi
1553                         if [ "$enable_console" != "0" ]; then
1554                                 LDFLAGS="$LDFLAGS -Wl,--subsystem,console"
1555                         else
1556                                 LDFLAGS="$LDFLAGS -Wl,--subsystem,windows"
1557                         fi
1559                         LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32 -limm32"
1561                         if [ $cc_version -ge 404 ]; then
1562                                 LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++"
1563                         fi
1564                         if [ $cc_version -ge 407 ]; then
1565                                 CFLAGS="$CFLAGS -mno-ms-bitfields"
1566                         fi
1567                 fi
1568         fi
1570         if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
1571                 LIBS="$LIBS -lpthread"
1572         fi
1574         if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then
1575                 LIBS="$LIBS -lc"
1576         fi
1577         if [ "$os" = "WINCE" ]; then
1578                 LIBS="$LIBS -lcoredll -lcorelibc -laygshell -lws2 -e WinMainCRTStartup"
1579         fi
1580         if [ "$os" = "PSP" ]; then
1581                 CFLAGS="$CFLAGS -I`$psp_config -p`/include"
1582                 LDFLAGS="$LDFLAGS -L`$psp_config -p`/lib"
1584                 CFLAGS="$CFLAGS -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150"
1585                 LIBS="$LIBS -D_PSP_FW_VERSION=150 -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -lm"
1586         fi
1588         if [ "$os" = "MORPHOS" ]; then
1589                 # -Wstrict-prototypes generates much noise because of system headers
1590                 CFLAGS="$CFLAGS -Wno-strict-prototypes"
1591         fi
1593         if [ "$os" = "OPENBSD" ]; then
1594                 LIBS="$LIBS -pthread"
1595         fi
1597         if [ "$os" = "OSX" ]; then
1598                 LDFLAGS="$LDFLAGS -framework Cocoa"
1600                 # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings.
1601                 CFLAGS="$CFLAGS -isystem/opt/local/include"
1603                 if [ "$enable_dedicated" = "0" ] && ([ "$cpu_type" = "32" ] || [ "$enable_universal" != "0" ]); then
1604                         LIBS="$LIBS -framework QuickTime"
1605                 else
1606                         CFLAGS="$CFLAGS -DNO_QUICKTIME"
1607                 fi
1609                 if [ "$enable_universal" = "0" ]; then
1610                         # Universal builds set this elsewhere
1611                         CFLAGS="$OSX_SYSROOT $CFLAGS"
1612                         LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS"
1613                 fi
1615                 if [ "$enable_universal" = "0" ] && [ $cc_version -gt 400 ]; then
1616                         # Only set the min version when not doing an universal build.
1617                         # Universal builds set the version elsewhere.
1618                         if [ "$cpu_type" = "64" ]; then
1619                                 CFLAGS="$CFLAGS -mmacosx-version-min=10.5"
1620                         else
1621                                 gcc_cpu=`$cc_host -dumpmachine`
1622                                 if [ "`echo $gcc_cpu | cut -c 1-3`" = "ppc" -o "`echo $gcc_cpu | cut -c 1-7`" = "powerpc" ]; then
1623                                         # PowerPC build can run on 10.3
1624                                         CFLAGS="$CFLAGS -mmacosx-version-min=10.3"
1625                                 else
1626                                         # Intel is only available starting from 10.4
1627                                         CFLAGS="$CFLAGS -mmacosx-version-min=10.4"
1628                                 fi
1629                         fi
1630                 fi
1631         fi
1633         if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then
1634                 LIBS="$LIBS -lmidi -lbe"
1635         fi
1637         # Most targets act like UNIX, just with some additions
1638         if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
1639                 CFLAGS="$CFLAGS -DUNIX"
1640         fi
1641         # And others like Windows
1642         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
1643                 CFLAGS="$CFLAGS -DWIN"
1644         fi
1646         if [ -n "$allegro_config" ]; then
1647                 CFLAGS="$CFLAGS -DWITH_ALLEGRO"
1648                 CFLAGS="$CFLAGS `$allegro_config --cflags`"
1649                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
1650                         if [ "$enable_static" != "0" ]; then
1651                                 LIBS="$LIBS `$allegro_config --static --libs`"
1652                         else
1653                                 LIBS="$LIBS `$allegro_config --libs`"
1654                         fi
1655                 fi
1656         fi
1658         if [ -n "$sdl_config" ]; then
1659                 CFLAGS="$CFLAGS -DWITH_SDL"
1660                 # SDL must not add _GNU_SOURCE as it breaks many platforms
1661                 CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
1662                 if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
1663                         if [ "$enable_static" != "0" ]; then
1664                                 LIBS="$LIBS `$sdl_config --static-libs`"
1665                         else
1666                                 LIBS="$LIBS `$sdl_config --libs`"
1667                         fi
1668                 fi
1669         fi
1671         if [ "$with_cocoa" != "0" ]; then
1672                 CFLAGS="$CFLAGS -DWITH_COCOA"
1673                 LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox"
1675                 if [ "$enable_cocoa_quartz" != "0" ]; then
1676                         CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ"
1677                 fi
1679                 if [ "$enable_cocoa_quickdraw" != "0" ]; then
1680                         CFLAGS="$CFLAGS -DENABLE_COCOA_QUICKDRAW"
1681                 fi
1682         fi
1684         if [ "$with_zlib" != "0" ]; then
1685                 CFLAGS="$CFLAGS -DWITH_ZLIB"
1686                 CFLAGS="$CFLAGS `$zlib_config --cflags | tr '\n\r' '  '`"
1687                 if [ "$enable_static" != "0" ]; then
1688                         LIBS="$LIBS `$zlib_config --libs --static | tr '\n\r' '  '`"
1689                 else
1690                         LIBS="$LIBS `$zlib_config --libs | tr '\n\r' '  '`"
1691                 fi
1692         fi
1694         if [ -n "$lzma_config" ]; then
1695                 CFLAGS="$CFLAGS -DWITH_LZMA"
1696                 CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' '  '`"
1698                 if [ "$enable_static" != "0" ]; then
1699                         CFLAGS="$CFLAGS -DLZMA_API_STATIC"
1700                         LIBS="$LIBS `$lzma_config --libs --static | tr '\n\r' '  '`"
1701                 else
1702                         LIBS="$LIBS `$lzma_config --libs | tr '\n\r' '  '`"
1703                 fi
1704         fi
1706         if [ "$with_lzo2" != "0" ]; then
1707                 if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
1708                         LIBS="$LIBS $lzo2"
1709                 else
1710                         LIBS="$LIBS -llzo2"
1711                 fi
1712                 CFLAGS="$CFLAGS -DWITH_LZO"
1713         fi
1715         if [ -n "$xdg_basedir_config" ]; then
1716                 CFLAGS="$CFLAGS -DWITH_XDG_BASEDIR"
1717                 CFLAGS="$CFLAGS `$xdg_basedir_config --cflags | tr '\n\r' '  '`"
1719                 if [ "$enable_static" != "0" ]; then
1720                         LIBS="$LIBS `$xdg_basedir_config --libs --static | tr '\n\r' '  '`"
1721                 else
1722                         LIBS="$LIBS `$xdg_basedir_config --libs | tr '\n\r' '  '`"
1723                 fi
1724         fi
1726         # 64bit machines need -D_SQ64
1727         if [ "$cpu_type" = "64" ] && [ "$enable_universal" = "0" ]; then
1728                 CFLAGS="$CFLAGS -D_SQ64"
1729         fi
1730         CFLAGS="$CFLAGS -I$SCRIPT_SRC_DIR"
1732         if [ -n "$png_config" ]; then
1733                 CFLAGS="$CFLAGS -DWITH_PNG"
1734                 CFLAGS="$CFLAGS `$png_config --cflags | tr '\n\r' '  '`"
1736                 if [ "$enable_static" != "0" ]; then
1737                         LIBS="$LIBS `$png_config --libs --static | tr '\n\r' '  '`"
1738                 else
1739                         LIBS="$LIBS `$png_config --libs | tr '\n\r' '  '`"
1740                 fi
1741         fi
1743         if [ -n "$fontconfig_config" ]; then
1744                 CFLAGS="$CFLAGS -DWITH_FONTCONFIG"
1745                 CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' '  '`"
1747                 if [ "$enable_static" != "0" ]; then
1748                         LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' '  '`"
1749                 else
1750                         LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' '  '`"
1751                 fi
1752         fi
1754         if [ -n "$freetype_config" ]; then
1755                 CFLAGS="$CFLAGS -DWITH_FREETYPE"
1756                 CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' '  '`"
1758                 if [ "$enable_static" != "0" ]; then
1759                         LIBS="$LIBS `$freetype_config --libs --static | tr '\n\r' '  '`"
1760                 else
1761                         LIBS="$LIBS `$freetype_config --libs | tr '\n\r' '  '`"
1762                 fi
1763         fi
1765         if [ -n "$icu_layout_config" ]; then
1766                 CFLAGS="$CFLAGS -DWITH_ICU_LAYOUT"
1767                 CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' '  '`"
1769                 if [ "$static_icu" != "0" ]; then
1770                         LIBS="$LIBS `$icu_layout_config --libs --static | tr '\n\r' '  ' | sed s/-licu/-lsicu/g`"
1771                 else
1772                         LIBS="$LIBS `$icu_layout_config --libs | tr '\n\r' '  '`"
1773                 fi
1774         fi
1776         if [ -n "$icu_sort_config" ]; then
1777                 CFLAGS="$CFLAGS -DWITH_ICU_SORT"
1778                 CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' '  '`"
1780                 if [ "$static_icu" != "0" ]; then
1781                         LIBS="$LIBS `$icu_sort_config --libs --static | tr '\n\r' '  ' | sed s/-licu/-lsicu/g`"
1782                 else
1783                         LIBS="$LIBS `$icu_sort_config --libs | tr '\n\r' '  '`"
1784                 fi
1785         fi
1788         if [ "$with_direct_music" != "0" ]; then
1789                 CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT"
1790                 # GCC 4.0+ doesn't like the DirectX includes (gives tons of
1791                 #  warnings on it we won't be able to fix). For now just
1792                 #  suppress those warnings.
1793                 if [ $cc_version -ge 400 ]; then
1794                         CFLAGS="$CFLAGS -Wno-non-virtual-dtor"
1795                 fi
1796         fi
1798         if [ -n "$libtimidity_config" ]; then
1799                 CFLAGS="$CFLAGS -DLIBTIMIDITY"
1800                 CFLAGS="$CFLAGS `$libtimidity_config --cflags | tr '\n\r' '  '`"
1802                 if [ "$enable_static" != "0" ]; then
1803                         LIBS="$LIBS `$libtimidity_config --libs --static | tr '\n\r' '  '`"
1804                 else
1805                         LIBS="$LIBS `$libtimidity_config --libs | tr '\n\r' '  '`"
1806                 fi
1807         fi
1809         if [ "$with_iconv" != "0" ]; then
1810                 CFLAGS="$CFLAGS -DWITH_ICONV"
1811                 if [ "$link_to_iconv" = "yes" ]; then
1812                         LIBS="$LIBS -liconv"
1813                         if [ "$with_iconv" != "2" ]; then
1814                                 CFLAGS="$CFLAGS -I$with_iconv/include"
1815                                 LIBS="$LIBS -L$with_iconv/lib"
1816                         fi
1817                 fi
1819                 if [ "$os" != "OSX" ] && [ "$have_non_const_iconv" != "no" ]; then
1820                         CFLAGS="$CFLAGS -DHAVE_NON_CONST_ICONV"
1821                 fi
1822         fi
1824         if [ -n "$with_midi" ]; then
1825                 CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\""
1826         fi
1827         if [ -n "$with_midi_arg" ]; then
1828                 CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\""
1829         fi
1831         if [ "$enable_dedicated" != "0" ]; then
1832                 CFLAGS="$CFLAGS -DDEDICATED"
1833         fi
1835         if [ "$enable_unicode" != "0" ]; then
1836                 CFLAGS="$CFLAGS -DUNICODE -D_UNICODE"
1837         fi
1839         if [ "$enable_network" != "0" ]; then
1840                 CFLAGS="$CFLAGS -DENABLE_NETWORK"
1842                 if [ "$os" = "BEOS" ]; then
1843                         LDFLAGS="$LDFLAGS -lbind -lsocket"
1844                 fi
1846                 if [ "$os" = "HAIKU" ]; then
1847                         LDFLAGS="$LDFLAGS -lnetwork"
1848                 fi
1850                 if [ "$os" = "SUNOS" ]; then
1851                         LDFLAGS="$LDFLAGS -lnsl -lsocket"
1852                 fi
1853         fi
1855         if [ "$enable_static" != "0" ]; then
1856                 # OSX can't handle -static in LDFLAGS
1857                 if [ "$os" != "OSX" ]; then
1858                         LDFLAGS="$LDFLAGS -static"
1859                 fi
1860         fi
1862         if [ "$enable_assert" = "0" ]; then
1863                 CFLAGS="$CFLAGS -DNDEBUG"
1864                 CFLAGS_BUILD="$CFLAGS_BUILD -DNDEBUG"
1865         fi
1867         if [ "$enable_desync_debug" != "0" ]; then
1868                 CFLAGS="$CFLAGS -DRANDOM_DEBUG"
1869         fi
1871         if [ "$enable_osx_g5" != "0" ]; then
1872                 CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
1873         fi
1875         if [ -n "$personal_dir" ]; then
1876                 CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\""
1877         fi
1879         if [ -n "$shared_dir" ]; then
1880                 CFLAGS="$CFLAGS -DWITH_SHARED_DIR -DSHARED_DIR=\\\\\"$shared_dir\\\\\""
1881         fi
1883         CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
1885         if [ "$enable_lto" != "0" ]; then
1886                 lto_build=`echo "$FEATURES_BUILD" | grep "lto"`
1887                 lto_host=`echo "$FEATURES" | grep "lto"`
1888                 if [ -z "$lto_build$lto_host" ]; then
1889                         log 1 "WARNING: you enabled LTO/IPO, but neither build nor host compiler supports it"
1890                         log 1 "WARNING: LTO/IPO has been disabled"
1891                 fi
1892                 if [ -n "$lto_build" ]; then
1893                         LDFLAGS_BUILD="$LDFLAGS_BUILD $CFLAGS_BUILD $CXXFLAGS_BUILD"
1894                 fi
1895                 if [ -n "$lto_host" ]; then
1896                         LDFLAGS="$LDFLAGS $CFLAGS $CXXFLAGS"
1897                 fi
1898         fi
1900         log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD"
1901         log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD"
1902         log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD"
1903         log 1 "using CFLAGS... $CFLAGS"
1904         log 1 "using CXXFLAGS... $CXXFLAGS"
1905         log 1 "using LDFLAGS... $LIBS $LDFLAGS"
1907         # Makedepend doesn't like something like: -isysroot /OSX/blabla
1908         #  so convert it to: -isysroot -OSX/blabla. makedepend just ignores
1909         #  any - command it doesn't know, so we are pretty save.
1910         # Lovely hackish, not?
1911         # Btw, this almost always comes from outside the configure, so it is
1912         #  not something we can control.
1913         # Also make makedepend aware of compiler's built-in defines.
1914         if [ "$with_makedepend" != "0" ] || [ "$enable_builtin_depend" != "0" ]; then
1915                 # Append CXXFLAGS possibly containing -std=c++0x
1916                 cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`"
1918                 # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations
1919                 cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`"
1920         else
1921                 makedepend=""
1922         fi
1924         if [ "$with_distcc" != "0" ]; then
1925                 cc_host="$distcc $cc_host"
1926                 cxx_host="$distcc $cxx_host"
1927                 log 1 ""
1928                 log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc"
1929                 log 1 ""
1930         fi
1932         if [ "$with_ccache" != "0" ]; then
1933                 cc_host="$ccache $cc_host"
1934                 cxx_host="$ccache $cxx_host"
1935         fi
1938 check_compiler() {
1939         # Params:
1940         # $1 - Type for message (build / host)
1941         # $2 - What to fill with the found compiler
1942         # $3 - System to try
1943         # $4 - Compiler to try
1944         # $5 - Env-setting to try
1945         # $6 - GCC alike to try
1946         # $7 - CC alike to try
1947         # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo
1948         # $9 - What the command is to check for
1950         if [ -n "$3" ]; then
1951                 # Check for system
1952                 if [ -z "$6" ]; then
1953                         compiler="$3"
1954                 else
1955                         compiler="$3-$6"
1956                 fi
1957                 machine=`eval $compiler $9 2>/dev/null`
1958                 ret=$?
1959                 eval "$2=\"$compiler\""
1961                 log 2 "executing $compiler $9"
1962                 log 2 "  returned $machine"
1963                 log 2 "  exit code $ret"
1965                 if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1966                         if [ -z "$5" ]; then
1967                                 log 1 "checking $1... $compiler not found"
1968                                 log 1 "I couldn't detect any $6 binary for $3"
1969                                 exit 1
1970                         else
1971                                 compiler="$3-$5"
1972                         fi
1973                         machine=`eval $compiler $9 2>/dev/null`
1974                         ret=$?
1975                         eval "$2=\"$compiler\""
1977                         log 2 "executing $compiler $9"
1978                         log 2 "  returned $machine"
1979                         log 2 "  exit code $ret"
1981                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
1982                                 log 1 "checking $1... $compiler not found"
1983                                 log 1 "I couldn't detect any $5 binary for $3"
1984                                 exit 1
1985                         fi
1986                 fi
1988                 if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then
1989                         log 1 "checking $1... expected $3, found $machine"
1990                         log 1 "the compiler suggests it doesn't build code for the machine you specified"
1991                         exit 1
1992                 fi
1993         elif [ -n "$4" ]; then
1994                 # Check for manual compiler
1995                 machine=`$4 $9 2>/dev/null`
1996                 ret=$?
1997                 eval "$2=\"$4\""
1999                 log 2 "executing $4 $9"
2000                 log 2 "  returned $machine"
2001                 log 2 "  exit code $ret"
2003                 if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
2004                         log 1 "checking $1... $4 not found"
2005                         log 1 "the selected binary doesn't seem to be a $6 binary"
2006                         exit 1
2007                 fi
2008         else
2009                 # Nothing given, autodetect
2011                 if [ -n "$5" ]; then
2012                         machine=`$5 $9 2>/dev/null`
2013                         ret=$?
2014                         eval "$2=\"$5\""
2016                         log 2 "executing $5 $9"
2017                         log 2 "  returned $machine"
2018                         log 2 "  exit code $ret"
2020                         # The user defined a GCC that doesn't reply to $9.. abort
2021                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
2022                                 log 1 "checking $1... $5 unusable"
2023                                 log 1 "the CC environment variable is set, but it doesn't seem to be a $6 binary"
2024                                 log 1 "please redefine the CC/CXX environment to a $6 binary"
2025                                 exit 1
2026                         fi
2027                 else
2028                         log 2 "checking $1... CC/CXX not set (skipping)"
2030                         # No $5, so try '$6'
2031                         machine=`$6 $9 2>/dev/null`
2032                         ret=$?
2033                         eval "$2=\"$6\""
2035                         log 2 "executing $6 $9"
2036                         log 2 "  returned $machine"
2037                         log 2 "  exit code $ret"
2039                         if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
2040                                 # Maybe '$7'?
2041                                 machine=`$7 $9 2>/dev/null`
2042                                 ret=$?
2043                                 eval "$2=\"$7\""
2045                                 log 2 "executing $7 $9"
2046                                 log 2 "  returned $machine"
2047                                 log 2 "  exit code $ret"
2049                                 # All failed, abort
2050                                 if [ -z "$machine" ]; then
2051                                         log 1 "checking $1... $6 not found"
2052                                         log 1 "I couldn't detect any $6 binary on your system"
2053                                         log 1 "please define the CC/CXX environment to where it is located"
2055                                         exit 1
2056                                 fi
2057                         fi
2058                 fi
2059         fi
2061         if [ "$8" != "0" ]; then
2062                 eval "res=\$$2"
2063                 log 1 "checking $1... $res"
2064         else
2065                 log 1 "checking $1... $machine"
2066         fi
2069 check_build() {
2070         if [ "$os" = "FREEBSD" ]; then
2071                 # FreeBSD's C compiler does not support dump machine.
2072                 # However, removing C support is not possible because PSP must be linked with the C compiler.
2073                 check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CXX" "g++" "c++" "0" "-dumpmachine"
2074         else
2075                 check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine"
2076         fi
2079 check_host() {
2080         # By default the host is the build
2081         if [ -z "$host" ]; then host="$build"; fi
2083         if [ "$os" = "FREEBSD" ]; then
2084                 # FreeBSD's C compiler does not support dump machine.
2085                 # However, removing C support is not possible because PSP must be linked with the C compiler.
2086                 check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CXX" "g++" "c++" "0" "-dumpmachine"
2087         else
2088                 check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine"
2089         fi
2092 check_cxx_build() {
2093         check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "g++" "c++" 1 "-dumpmachine"
2096 check_cxx_host() {
2097         # By default the host is the build
2098         if [ -z "$host" ]; then host="$build"; fi
2099         check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "g++" "c++" 1 "-dumpmachine"
2102 check_windres() {
2103         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
2104                 check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V"
2105         fi
2108 check_strip() {
2109         if [ "$os" = "OS2" ]; then
2110                 # OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly
2111                 log 1 "checking host strip... using gcc -s option"
2112         elif [ "$os" = "OSX" ]; then
2113                 # Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something
2114                 echo "int main(int argc, char *argv[]) { }" > strip.test.c
2115                 $cxx_host strip.test.c -o strip.test
2116                 check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test"
2117                 rm -f strip.test.c strip.test
2118         else
2119                 check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V"
2120         fi
2123 check_lipo() {
2124         if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
2125                 echo "int main(int argc, char *argv[]) { }" > lipo.test.c
2126                 $cxx_host lipo.test.c -o lipo.test
2127                 check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test"
2128                 rm -f lipo.test.c lipo.test
2129         fi
2132 check_osx_sdk() {
2133         local sysroot=""
2134         if [ -n "$1" ]; then
2135                 if echo "$1" | grep -q / ; then
2136                         # Seems to be a file system path
2137                         osx_sdk_path="$1"
2138                 else
2139                         osx_sdk_path="/Developer/SDKs/MacOSX$1.sdk"
2140                 fi
2141                 if [ ! -d "$osx_sdk_path" ]; then
2142                         # No directory, not present or garbage
2143                         return 1
2144                 fi
2146                 # Set minimum version to 10.4 as that's when kCGBitmapByteOrder32Host was introduced
2147                 sysroot="-isysroot $osx_sdk_path -Wl,-syslibroot,$osx_sdk_path -mmacosx-version-min=10.4"
2148         fi
2150 cat > tmp.osx.mm << EOF
2151 #include <Cocoa/Cocoa.h>
2152 int main() {
2153         kCGBitmapByteOrder32Host;
2154         return 0;
2157         execute="$cxx_host $sysroot $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
2158         eval $execute > /dev/null
2159         ret=$?
2160         log 2 "executing $execute"
2161         log 2 "  exit code $ret"
2162         rm -f tmp.osx.mm tmp.osx
2163         return $ret
2166 check_direct_music() {
2167         echo "
2168                 #include <windows.h>
2169                 #include <dmksctrl.h>
2170                 #include <dmusici.h>
2171                 #include <dmusicc.h>
2172                 #include <dmusicf.h>
2173                 int main(int argc, char *argv[]) { }" > direct_music.test.c
2174         $cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null
2175         res=$?
2176         rm -f direct_music.test.c direct_music.test
2178         if [ "$res" != "0" ]; then
2179                 if [ "$with_direct_music" != "1" ]; then
2180                         log 1 "configure: error: direct-music is not available on this system"
2181                         exit 1
2182                 fi
2183                 with_direct_music="0"
2185                 log 1 "checking direct-music... not found"
2186         else
2187                 log 1 "checking direct-music... found"
2188         fi
2191 check_makedepend() {
2192         if [ "$enable_builtin_depend" != "0" ]; then
2193                 with_makedepend="0"
2194         fi
2196         if [ "$with_makedepend" = "0" ]; then
2197                 log 1 "checking makedepend... disabled"
2198                 return
2199         fi
2201         if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then
2202                 makedepend="makedepend"
2203         else
2204                 makedepend="$with_makedepend"
2205         fi
2207         rm -f makedepend.tmp
2208         touch makedepend.tmp
2209         res=`$makedepend -fmakedepend.tmp 2>/dev/null`
2210         res=$?
2211         log 2 "executing $makedepend -f makedepend.tmp"
2212         log 2 "  returned `cat makedepend.tmp`"
2213         log 2 "  exit code $ret"
2215         if [ ! -s makedepend.tmp ]; then
2216                 rm -f makedepend.tmp makedepend.tmp.bak
2218                 if [ "$with_makedepend" = "2" ]; then
2219                         log 1 "checking makedepend... not found"
2221                         log 1 "I couldn't detect any makedepend on your system"
2222                         log 1 "please locate it via --makedepend=[binary]"
2224                         exit 1
2225                 elif [ "$with_makedepend" != "1" ]; then
2226                         log 1 "checking makedepend... $makedepend not found"
2228                         log 1 "the selected file doesn't seem to be a valid makedepend binary"
2230                         exit 1
2231                 else
2232                         log 1 "checking makedepend... not found"
2234                         with_makedepend="0"
2235                         return
2236                 fi
2237         fi
2239         rm -f makedepend.tmp makedepend.tmp.bak
2241         log 1 "checking makedepend... $makedepend"
2244 check_version() {
2245         # $1 - requested version (major.minor)
2246         # $2 - version we got (major.minor)
2248         if [ -z "$2" ]; then
2249                 return 0
2250         fi
2252         req_major=`echo $1 | cut -d. -f1`
2253         got_major=`echo $2 | cut -d. -f1`
2254         if [ $got_major -lt $req_major ]; then
2255                 return 0
2256         elif [ $got_major -gt $req_major ]; then
2257                 return 1
2258         fi
2260         req_minor=`echo $1 | cut -d. -f2`
2261         got_minor=`echo $2 | cut -d. -f2`
2262         if [ $got_minor -lt $req_minor ]; then
2263                 return 0
2264         fi
2265         return 1
2268 detect_awk() {
2269         # Not all awks allow gsub(), so we test for that here! It is in fact all we need...
2271         # These awks are known to work. Test for them explicit
2272         awks="gawk mawk nawk"
2274         awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | "
2275         awk_param="' { ORS = \" \" } /\.c$/   { gsub(\".c$\",   \".o\", \$0); print \$0; }' 2>/dev/null"
2276         awk_result="a.o b.o c.o "
2277         log 2 "Detecing awk..."
2279         log 2 "Trying: $awk_prefix $awk $awk_param"
2280         res=`eval $awk_prefix $awk $awk_param`
2281         log 2 "Result: '$res'"
2282         if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then
2283                 # User didn't supply his own awk, so try to detect some other known working names for an awk
2284                 for awk in $awks; do
2285                         log 2 "Trying: $awk_prefix $awk $awk_param"
2286                         res=`eval $awk_prefix $awk $awk_param`
2287                         log 2 "Result: '$res'"
2288                         if [ "$res" = "$awk_result" ]; then break; fi
2289                 done
2291                 if [ "$res" != "$awk_result" ]; then
2292                         log 1 "checking awk... not found"
2293                         log 1 "configure: error: no awk found"
2294                         log 1 "configure: error: please install one of the following: $awks"
2295                         exit 1
2296                 fi
2297         fi
2298         if [ "$res" != "$awk_result" ]; then
2299                 log 1 "checking awk... not found"
2300                 log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk"
2301                 exit 1
2302         fi
2304         log 1 "checking awk... $awk"
2307 detect_os() {
2308         if [ "$os" = "DETECT" ]; then
2309                 # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP
2311                 # Try first via dumpmachine, then via uname
2312                 os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk '
2313                                         /linux/        { print "UNIX";      exit}
2314                                         /darwin/       { print "OSX";       exit}
2315                                         /freebsd/      { print "FREEBSD";   exit}
2316                                         /dragonfly/    { print "DRAGONFLY"; exit}
2317                                         /openbsd/      { print "OPENBSD";   exit}
2318                                         /netbsd/       { print "NETBSD";    exit}
2319                                         /hp-ux/        { print "HPUX";      exit}
2320                                         /morphos/      { print "MORPHOS";   exit}
2321                                         /beos/         { print "BEOS";      exit}
2322                                         /haiku/        { print "HAIKU";     exit}
2323                                         /sunos/        { print "SUNOS";     exit}
2324                                         /solaris/      { print "SUNOS";     exit}
2325                                         /cygwin/       { print "CYGWIN";    exit}
2326                                         /mingw/        { print "MINGW";     exit}
2327                                         /os2/          { print "OS2";       exit}
2328                                         /dos/          { print "DOS";       exit}
2329                                         /wince/        { print "WINCE";     exit}
2330                                         /psp/          { print "PSP";       exit}
2331                 '`
2333                 if [ -z "$os" ]; then
2334                         os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk '
2335                                         /linux/        { print "UNIX";      exit}
2336                                         /darwin/       { print "OSX";       exit}
2337                                         /freebsd/      { print "FREEBSD";   exit}
2338                                         /dragonfly/    { print "DRAGONFLY"; exit}
2339                                         /openbsd/      { print "OPENBSD";   exit}
2340                                         /netbsd/       { print "NETBSD";    exit}
2341                                         /hp-ux/        { print "HPUX";      exit}
2342                                         /morphos/      { print "MORPHOS";   exit}
2343                                         /beos/         { print "BEOS";      exit}
2344                                         /haiku/        { print "HAIKU";     exit}
2345                                         /sunos/        { print "SUNOS";     exit}
2346                                         /cygwin/       { print "CYGWIN";    exit}
2347                                         /mingw/        { print "MINGW";     exit}
2348                                         /os\/2/        { print "OS2";       exit}
2349                                         /gnu/          { print "UNIX";      exit}
2350                         '`
2351                 fi
2353                 if [ -z "$os" ]; then
2354                         log 1 "detecting OS... none detected"
2355                         log 1 "I couldn't detect your OS. Please use --os=OS to force one"
2356                         log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP"
2357                         exit 1
2358                 fi
2360                 log 1 "detecting OS... $os"
2361         else
2362                 log 1 "forcing OS... $os"
2363         fi
2366 detect_allegro() {
2367         # 0 means no, 1 is auto-detect, 2 is force
2368         if [ "$with_allegro" = "0" ]; then
2369                 log 1 "checking Allegro... disabled"
2371                 allegro_config=""
2372                 return 0
2373         fi
2375         if [ "$with_allegro" = "2" ] && [ "$with_cocoa" = "2" ]; then
2376                 log 1 "configure: error: it is impossible to compile both Allegro and COCOA"
2377                 log 1 "configure: error: please deselect one of them and try again"
2378                 exit 1
2379         fi
2381         if [ "$with_allegro" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2382                 log 1 "configure: error: it is impossible to compile a dedicated with Allegro"
2383                 log 1 "configure: error: please deselect one of them and try again"
2384                 exit 1
2385         fi
2387         if [ "$enable_dedicated" != "0" ]; then
2388                 log 1 "checking Allegro... dedicated server, skipping"
2390                 allegro_config=""
2391                 return 0
2392         fi
2394         # By default on OSX we don't use Allegro. The rest is auto-detect
2395         if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
2396                 log 1 "checking Allegro... OSX, skipping"
2398                 allegro_config=""
2399                 return 0
2400         fi
2402         detect_pkg_config "$with_allegro" "allegro" "allegro_config" "4.4"
2406 detect_sdl() {
2407         # 0 means no, 1 is auto-detect, 2 is force
2408         if [ "$with_sdl" = "0" ]; then
2409                 log 1 "checking SDL... disabled"
2411                 sdl_config=""
2412                 return 0
2413         fi
2415         if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then
2416                 log 1 "configure: error: it is impossible to compile both SDL and COCOA"
2417                 log 1 "configure: error: please deselect one of them and try again"
2418                 exit 1
2419         fi
2421         if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2422                 log 1 "configure: error: it is impossible to compile a dedicated with SDL"
2423                 log 1 "configure: error: please deselect one of them and try again"
2424                 exit 1
2425         fi
2427         if [ "$enable_dedicated" != "0" ]; then
2428                 log 1 "checking SDL... dedicated server, skipping"
2430                 sdl_config=""
2431                 return 0
2432         fi
2434         # By default on OSX we don't use SDL. The rest is auto-detect
2435         if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
2436                 log 1 "checking SDL... OSX, skipping"
2438                 sdl_config=""
2439                 return 0
2440         fi
2442         if [ "$os" = "OSX" ]; then
2443                 log 1 "WARNING: sdl is known to fail on some versions of Mac OS X"
2444                 log 1 "WARNING: with some hardware configurations. Use at own risk!"
2445                 sleep 5
2446         fi
2448         detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2"
2451 detect_osx_sdk() {
2452         # Try to find the best SDK available. For a normal build this
2453         # is currently the 10.5 SDK as this is needed to compile all
2454         # optional code. Because such an executable won't run on 10.4
2455         # or lower, also check for the 10.4u SDK when doing an universal
2456         # build.
2458         # Check for the 10.5 SDK, but try 10.6 if that fails
2459         check_osx_sdk "10.5" || check_osx_sdk "10.6" || osx_sdk_path=""
2461         if [ -z "$osx_sdk_path" ] || [ "$enable_universal" != "0" ]; then
2462                 # No better SDK or universal build enabled? Check 10.4u SDK as well
2463                 local old_sdk="$osx_sdk_path"
2464                 if check_osx_sdk "10.4u"; then
2465                         osx_sdk_104_path="$osx_sdk_path"
2466                 else
2467                         osx_sdk_104_path=""
2468                 fi
2469                 if [ -z "$old_sdk" ]; then
2470                         osx_sdk_path="$osx_sdk_104_path"
2471                 else
2472                         osx_sdk_path="$old_sdk"
2473                 fi
2474         fi
2476         if [ -z "$osx_sdk_path" ]; then
2477                 log 1 "Your system SDK is probably too old"
2478                 log 1 "Please install/upgrade your Xcode to >= 2.5"
2480                 exit 1
2481         fi
2484 detect_cocoa() {
2485         # 0 means no, 1 is auto-detect, 2 is force
2486         if [ "$with_cocoa" = "0" ]; then
2487                 log 1 "checking COCOA... disabled"
2489                 return 0
2490         fi
2492         if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then
2493                 log 1 "configure: error: it is impossible to compile a dedicated with COCOA"
2494                 log 1 "configure: error: please deselect one of them and try again"
2495                 exit 1
2496         fi
2498         if [ "$enable_dedicated" != "0" ]; then
2499                 log 1 "checking COCOA... dedicated server, skipping"
2501                 with_cocoa="0"
2502                 return 0
2503         fi
2505         # By default on OSX we use COCOA. The rest doesn't support it
2506         if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then
2507                 log 1 "checking COCOA... not OSX, skipping"
2509                 with_cocoa="0"
2510                 return 0
2511         fi
2513         if [ "$os" != "OSX" ]; then
2514                 log 1 "checking COCOA... not OSX"
2516                 log 1 "configure: error: COCOA video driver is only supported for OSX"
2517                 exit 1
2518         fi
2520         log 1 "checking COCOA... found"
2523         if [ "$enable_cocoa_quartz" != "0" ]; then
2524                 log 1 "checking whether to enable the Quartz window subdriver... yes"
2525         else
2526                 log 1 "checking whether to enable the Quartz window subdriver... no"
2527         fi
2529         detect_quickdraw
2532 detect_quickdraw() {
2533         # 0 means no, 1 is auto-detect, 2 is force
2534         if [ "$enable_cocoa_quickdraw" = "0" ]; then
2535                 log 1 "checking Quickdraw window subdriver... disabled"
2536                 return 0
2537         fi
2539         # Assume QuickDraw is available when doing an universal build
2540         if [ "$enable_universal" != "0" ]; then
2541                 log 1 "checking Quickdraw window subdriver... found"
2542                 return 0
2543         fi
2545         # 64 bits doesn't have quickdraw
2546         if [ "$cpu_type" = "64" ]; then
2547                 enable_cocoa_quickdraw="0"
2548                 log 1 "checking Quickdraw window subdriver... disabled (64 bits)"
2549                 return 0
2550         fi
2552 cat > tmp.osx.mm << EOF
2553 #include <AvailabilityMacros.h>
2554 #import <Cocoa/Cocoa.h>
2555 int main(int argc, char *argv[]) { SetEmptyRgn(NULL); return 0; }
2557         execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS -mmacosx-version-min=10.3 tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
2558         eval $execute > /dev/null
2559         ret=$?
2560         log 2 "executing $execute"
2561         log 2 "  exit code $ret"
2562         rm -f tmp.osx.mm tmp.osx
2563         if [ "$ret" != "0" ]; then
2564                 log 1 "checking Quickdraw window subdriver... not found"
2566                 # It was forced, so it should be found.
2567                 if [ "$enable_cocoa_quickdraw" != "1" ]; then
2568                         log 1 "configure: error: Quickdraw window driver could not be found"
2569                         exit 1
2570                 fi
2572                 enable_cocoa_quickdraw=0
2573                 return 0
2574         fi
2576         enable_cocoa_quickdraw=1
2577         log 1 "checking Quickdraw window subdriver... found"
2580 detect_library() {
2581         # $1 - config-param ($with_zlib value)
2582         # $2 - library name ('zlib', sets $zlib)
2583         # $3 - static library name (libz.a)
2584         # $4 - header directory ()
2585         # $5 - header name (zlib.h)
2586         # $6 - force static (if non-empty)
2588         if [ -n "$6" ]; then force_static="1"; fi
2590         # 0 means no, 1 is auto-detect, 2 is force
2591         if [ "$1" = "0" ]; then
2592                 log 1 "checking $2... disabled"
2594                 eval "$2=\"\""
2595                 return 0
2596         fi
2598         log 2 "detecting $2"
2600         if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
2601                 eval "$2=`ls -1 /usr/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2602                 eval "res=\$$2"
2603                 if [ -z "$res" ]; then
2604                         log 2 "  trying /usr/include/$4$5... no"
2605                         eval "$2=`ls -1 /usr/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2606                 fi
2607                 eval "res=\$$2"
2608                 if [ -z "$res" ]; then
2609                         log 2 "  trying /usr/local/include/$4$5... no"
2610                         eval "$2=`ls -1 /mingw/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2611                 fi
2612                 eval "res=\$$2"
2613                 if [ -z "$res" ]; then
2614                         log 2 "  trying /mingw/include/$4$5... no"
2615                         eval "$2=`ls -1 /opt/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2616                 fi
2617                 eval "res=\$$2"
2618                 if [ -z "$res" ]; then
2619                         log 2 "  trying /opt/local/include/$4$5... no"
2620                 fi
2621                 if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then
2622                         eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2623                         eval "res=\$$2"
2624                         if [ -z "$res" ]; then
2625                                 log 2 "  trying /usr/pkg/include/$4$5... no"
2626                         fi
2627                 fi
2628                 if [ -z "$res" ] && [ "$os" = "HAIKU" ]; then
2629                         if [ -z "$includeDir" ]; then
2630                                 includeDir=`finddir B_SYSTEM_HEADERS_DIRECTORY`
2631                         fi
2632                         eval "$2=`ls -1 $includeDir/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
2633                         eval "res=\$$2"
2634                         if [ -z "$res" ]; then
2635                                 log 2 "  trying $includeDir/$4$5... no"
2636                         fi
2637                 fi
2639                 eval "res=\$$2"
2640                 if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
2641                         eval "res=\$$2"
2642                         log 2 "  trying $res... found"
2643                         # Now find the static lib, if needed
2644                         eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2645                         eval "res=\$$2"
2646                         if [ -z "$res" ]; then
2647                                 log 2 "  trying /lib/$3... no"
2648                                 eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2649                         fi
2650                         eval "res=\$$2"
2651                         if [ -z "$res" ]; then
2652                                 log 2 "  trying /usr/lib/$3... no"
2653                                 eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2654                         fi
2655                         eval "res=\$$2"
2656                         if [ -z "$res" ]; then
2657                                 log 2 "  trying /usr/local/lib/$3... no"
2658                                 eval "$2=`ls /mingw/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
2659                         fi
2660                         eval "res=\$$2"
2661                         if [ -z "$res" ]; then
2662                                 log 2 "  trying /mingw/lib/$3... no"
2663                                 log 1 "configure: error: $2 couldn't be found"
2664                                 log 1 "configure: error: you requested a static link, but I can't find $3"
2666                                 exit 1
2667                         fi
2668                 fi
2669         else
2670                 # Make sure it exists
2671                 if [ -f "$1" ]; then
2672                         eval "$2=`ls $1 2>/dev/null`"
2673                 else
2674                         eval "$2=`ls $1/$3 2>/dev/null`"
2675                 fi
2676         fi
2678         eval "res=\$$2"
2679         if [ -z "$res" ]; then
2680                 log 1 "checking $2... not found"
2681                 if [ "$1" = "2" ]; then
2682                         log 1 "configure: error: $2 couldn't be found"
2684                         exit 1
2685                 elif [ "$1" != "1" ]; then
2686                         log 1 "configure: error: $2 couldn't be found"
2687                         log 1 "configure: error: you supplied '$1', but it seems invalid"
2689                         exit 1
2690                 fi
2692                 eval "with_$2=0"
2694                 return 0
2695         fi
2697         eval "res=\$$2"
2698         log 2 "  trying $res... found"
2700         log 1 "checking $2... found"
2703 detect_zlib() {
2704         detect_pkg_config "$with_zlib" "zlib" "zlib_config" "1.2"
2707 detect_lzo2() {
2708         detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h"
2711 detect_libtimidity() {
2712         detect_pkg_config "$with_libtimidity" "libtimidity" "libtimidity_config" "0.1" "1"
2715 detect_pkg_config() {
2716         # $1 - config-param ($with_lzma value)
2717         # $2 - package name ('liblzma')
2718         # $3 - config name ('lzma_config', sets $lzma_config)
2719         # $4 - minimum module version ('2.3')
2720         # $5 - check for dedicated, 1 is "skif if dedicated"
2722         # 0 means no, 1 is auto-detect, 2 is force
2723         if [ "$1" = "0" ]; then
2724                 log 1 "checking $2... disabled"
2726                 eval "$3=\"\""
2727                 return 0
2728         fi
2730         if [ "$5" = "1" ] && [ "$1" = "1" ] && [ "$enable_dedicated" != "0" ]; then
2731                 log 1 "checking $2... dedicated server, skipping"
2733                 eval "$3=\"\""
2734                 return 0
2735         fi
2737         log 2 "detecting $2"
2739         if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
2740                 pkg_config_call="$pkg_config $2"
2741         else
2742                 pkg_config_call="$1"
2743         fi
2745         version=`$pkg_config_call --modversion 2>/dev/null`
2746         ret=$?
2747         check_version "$4" "$version"
2748         version_ok=$?
2749         log 2 "executing $pkg_config_call --modversion"
2750         log 2 "  returned $version"
2751         log 2 "  exit code $ret"
2753         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then
2754                 if [ -n "$version" ] && [ "$version_ok" != "1" ]; then
2755                         log 1 "checking $2... needs at least version $4, $2 NOT enabled"
2756                 else
2757                         log 1 "checking $2... not found"
2758                 fi
2760                 # It was forced, so it should be found.
2761                 if [ "$1" != "1" ]; then
2762                         log 1 "configure: error: $pkg_config $2 couldn't be found"
2763                         log 1 "configure: error: you supplied '$1', but it seems invalid"
2764                         exit 1
2765                 fi
2767                 eval "$3=\"\""
2768                 return 0
2769         fi
2771         eval "$3=\"$pkg_config_call\""
2772         log 1 "checking $2... found"
2775 detect_lzma() {
2776         detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0"
2779 detect_xdg_basedir() {
2780         detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2"
2783 detect_png() {
2784         detect_pkg_config "$with_png" "libpng" "png_config" "1.2"
2787 detect_freetype() {
2788         detect_pkg_config "$with_freetype" "freetype2" "freetype_config" "2.2" "1"
2791 detect_fontconfig() {
2792         # 0 means no, 1 is auto-detect, 2 is force
2793         if [ "$with_fontconfig" = "0" ]; then
2794                 log 1 "checking libfontconfig... disabled"
2796                 fontconfig_config=""
2797                 return 0
2798         fi
2799         if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
2800                 log 1 "checking libfontconfig... WIN32, skipping"
2801                 fontconfig_config=""
2802                 return 0
2803         fi
2805         if [ "$os" = "OSX" ]; then
2806                 log 1 "checking libfontconfig... OSX, skipping"
2807                 fontconfig_config=""
2808                 return 0
2809         fi
2811         detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1"
2814 detect_icu_layout() {
2815         detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1"
2818 detect_icu_sort() {
2819         detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1"
2822 detect_pspconfig() {
2823         # 0 means no, 1 is auto-detect, 2 is force
2824         if [ "$with_psp_config" = "0" ]; then
2825                 log 1 "checking psp-config... disabled"
2827                 psp_config=""
2828                 return 0
2829         fi
2831         if [ "$with_psp_config" = "1" ] && [ "$os" != "PSP" ]; then
2832                 log 1 "checking psp-config... not PSP, skipping"
2834                 psp_config="";
2835                 return 0
2836         fi
2838         if [ "$os" != "PSP" ]; then
2839                 log 1 "checking psp-config... not PSP"
2841                 log 1 "configure: error: psp-config is only supported for PSP"
2842                 exit 1
2843         fi
2845         if [ "$with_psp_config" = "1" ] || [ "$with_psp_config" = "" ] || [ "$with_psp_config" = "2" ]; then
2846                 psp_config="psp-config"
2847         else
2848                 psp_config="$with_psp_config"
2849         fi
2851         version=`$psp_config -p 2>/dev/null`
2852         ret=$?
2853         log 2 "executing $psp_config -p"
2854         log 2 "  returned $version"
2855         log 2 "  exit code $ret"
2857         if [ -z "$version" ] || [ "$ret" != "0" ]; then
2858                 log 1 "checking psp-config... not found"
2859                 log 1 "configure: error: psp-config couldn't be found"
2861                 # It was forced, so it should be found.
2862                 if [ "$with_psp_config" != "1" ]; then
2863                         log 1 "configure: error: you supplied '$with_psp_config', but it seems invalid"
2864                 fi
2865                 exit 1
2866         fi
2868         log 1 "checking psp-config... found"
2871 detect_iconv() {
2872         # 0 means no, 1 is auto-detect, 2 is force
2873         if [ "$with_iconv" = "0" ]; then
2874                 log 1 "checking iconv... disabled"
2876                 return 0
2877         fi
2879         if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then
2880                 log 1 "checking iconv... not OSX, skipping"
2881                 with_iconv="0"
2883                 return 0
2884         fi
2886         # Try to find iconv.h, seems to only thing to detect iconv with
2888         if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then
2889                 iconv=`ls -1 /usr/include 2>/dev/null | grep "iconv.h"`
2890                 if [ -z "$iconv" ]; then
2891                         iconv=`ls -1 /usr/local/include 2>/dev/null | grep "iconv.h"`
2892                 fi
2893         else
2894                 # Make sure it exists
2895                 iconv=`ls $with_iconv/include/iconv.h 2>/dev/null`
2896         fi
2898         if [ -z "$iconv" ]; then
2899                 log 1 "checking iconv... not found"
2900                 if [ "$with_iconv" = "2" ]; then
2901                         log 1 "configure: error: iconv couldn't be found"
2903                         exit 1
2904                 elif [ "$with_iconv" != "1" ]; then
2905                         log 1 "configure: error: iconv couldn't be found"
2906                         log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it"
2908                         exit 1
2909                 fi
2911                 return 0
2912         fi
2914         if [ "$with_iconv" = "1" ]; then
2915                 with_iconv="2"
2916         fi
2918         log 2 "found iconv in $iconv"
2920         log 1 "checking iconv... found"
2922         # There are different implementations of iconv. The older ones,
2923         # e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g.
2924         # IEEE 1003.1 (2004), pass a non-const pointer.
2926         cat > tmp.iconv.cpp << EOF
2927 #include "src/stdafx.h"
2928 #include <iconv.h>
2929 int main() {
2930         static char buf[1024];
2931         iconv_t convd = 0;
2932         const char *inbuf = "";
2933         char *outbuf  = buf;
2934         size_t outlen = 1023;
2935         size_t inlen  = 0;
2936         return iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
2939         execute="$cxx_host $OSX_SYSROOT $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
2940         eval $execute > /dev/null
2941         ret=$?
2942         log 2 "executing $execute"
2943         log 2 "  exit code $ret"
2944         if [ "$ret" = "0" ]; then have_non_const_iconv="no"; else have_non_const_iconv="yes"; fi
2945         log 1 "checking if iconv has non-const inbuf... $have_non_const_iconv"
2947         cat > tmp.iconv.cpp << EOF
2948 #include "src/stdafx.h"
2949 #include <iconv.h>
2950 int main() {
2951         static char buf[1024];
2952         iconv_t convd = 0;
2953         char *inbuf = "";
2954         char *outbuf  = buf;
2955         size_t outlen = 1023;
2956         size_t inlen  = 0;
2957         return iconv(convd, &inbuf, &inlen, &outbuf, &outlen);
2960         execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
2961         eval $execute > /dev/null
2962         ret=$?
2963         log 2 "executing $execute"
2964         log 2 "  exit code $ret"
2965         if [ "$ret" = "0" ]; then link_to_iconv="no"; else link_to_iconv="yes"; fi
2966         log 1 "checking whether to link to iconv... $link_to_iconv"
2967         rm -f tmp.iconv tmp.iconv.cpp
2970 _detect_sort() {
2971         sort_test_in="d
2976         sort_test_out="a
2981         log 2 "running echo <array> | $1"
2983         if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then
2984                 sort="$1"
2985                 log 2 "  result was valid"
2986         else
2987                 log 2 "  result was invalid"
2988         fi
2991 detect_sort() {
2992         if [ "$with_sort" = "0" ]; then
2993                 log 1 "checking sort... disabled"
2995                 return
2996         fi
2998         if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then
2999                 _detect_sort "sort"
3000                 if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi
3001                 if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi
3002                 if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi
3003                 if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi
3004                 if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi
3005                 if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi
3006         else
3007                 _detect_sort "$with_sort"
3008         fi
3010         if [ -z "$sort" ]; then
3011                 if [ "$with_sort" = "2" ]; then
3012                         log 1 "checking sort... not found"
3014                         log 1 "configure: error: couldn't detect sort on your system"
3015                         exit 1
3016                 elif [ "$with_sort" != "1" ]; then
3017                         log 1 "checking sort... $with_sort not found"
3019                         log 1 "configure: error: '$with_sort' doesn't look like a sort to me"
3020                         log 1 "configure: error: please verify its location and function and try again"
3022                         exit 1
3023                 else
3024                         log 1 "checking sort... not found"
3025                 fi
3026         else
3027                 log 1 "checking sort... $sort"
3028         fi
3031 detect_grfcodec() {
3032         # 0 means no, 1 is auto-detect, 2 is force
3033         if [ "$with_grfcodec" = "0" ]; then
3034                 log 1 "checking grfcodec... disabled"
3036                 grfcodec=""
3037                 return 0
3038         fi
3040         if [ "$with_grfcodec" = "1" ] || [ "$with_grfcodec" = "" ] || [ "$with_grfcodec" = "2" ]; then
3041                 grfcodec="grfcodec"
3042         else
3043                 grfcodec="$with_grfcodec"
3044         fi
3046         version=`$grfcodec -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'`
3047         ret=$?
3048         log 2 "executing grfcodec -v"
3049         log 2 "  returned $version"
3050         log 2 "  exit code $ret"
3052         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then
3053                 if [ -n "$version" ] && [ "$version" -lt "985" ]; then
3054                         log 1 "checking grfcodec... needs at least version 6.0.5 (r985), disabled"
3055                 else
3056                         log 1 "checking grfcodec... not found"
3057                 fi
3059                 # It was forced, so it should be found.
3060                 if [ "$with_grfcodec" != "1" ]; then
3061                         log 1 "configure: error: grfcodec couldn't be found"
3062                         log 1 "configure: error: you supplied '$with_grfcodec', but it seems invalid"
3063                         exit 1
3064                 fi
3066                 grfcodec=""
3067                 return 0
3068         fi
3070         log 1 "checking grfcodec... found"
3073 detect_nforenum() {
3074         # 0 means no, 1 is auto-detect, 2 is force
3075         if [ "$with_nforenum" = "0" ]; then
3076                 log 1 "checking nforenum... disabled"
3078                 nforenum=""
3079                 return 0
3080         fi
3082         if [ "$with_nforenum" = "1" ] || [ "$with_nforenum" = "" ] || [ "$with_nforenum" = "2" ]; then
3083                 nforenum="nforenum"
3084         else
3085                 nforenum="$with_nforenum"
3086         fi
3088         version=`$nforenum -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'`
3089         ret=$?
3090         log 2 "executing nforenum -v"
3091         log 2 "  returned $version"
3092         log 2 "  exit code $ret"
3094         if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then
3095                 if [ -n "$version" ] && [ "$version" -lt "985" ]; then
3096                         log 1 "checking nforenum... needs at least version 6.0.5 (r985), disabled"
3097                 else
3098                         log 1 "checking nforenum... not found"
3099                 fi
3101                 # It was forced, so it should be found.
3102                 if [ "$with_nforenum" != "1" ]; then
3103                         log 1 "configure: error: nforenum couldn't be found"
3104                         log 1 "configure: error: you supplied '$with_nforenum', but it seems invalid"
3105                         exit 1
3106                 fi
3108                 nforenum=""
3109                 return 0
3110         fi
3112         log 1 "checking nforenum... found"
3115 detect_cputype() {
3116         if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
3117                 log 1 "forcing cpu-type... $cpu_type bits"
3118                 return;
3119         fi
3120         echo "#define _SQ64 1" > tmp.64bit.cpp
3121         echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp
3122         echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
3123         echo "int main() { return 0; }" >> tmp.64bit.cpp
3124         execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
3125         cpu_type="`eval $execute 2>/dev/null`"
3126         ret=$?
3127         log 2 "executing $execute"
3128         log 2 "  returned $cpu_type"
3129         log 2 "  exit code $ret"
3130         if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
3131         log 1 "detecting cpu-type... $cpu_type bits"
3132         rm -f tmp.64bit tmp.64bit.cpp
3135 detect_sse_capable_architecture() {
3136         # 0 means no, 1 is auto-detect, 2 is force
3137         if [ "$with_sse" = "0" ]; then
3138                 log 1 "checking SSE... disabled"
3139                 return
3140         fi
3142         echo "#define _SQ64 1" > tmp.sse.cpp
3143         echo "#include <xmmintrin.h>" >> tmp.sse.cpp
3144         echo "#include <smmintrin.h>" >> tmp.sse.cpp
3145         echo "#include <tmmintrin.h>" >> tmp.sse.cpp
3146         echo "int main() { return 0; }" >> tmp.sse.cpp
3147         execute="$cxx_host -msse4.1 $CFLAGS tmp.sse.cpp -o tmp.sse 2>&1"
3148         sse="`eval $execute 2>/dev/null`"
3149         ret=$?
3150         log 2 "executing $execute"
3151         log 2 "  returned $sse"
3152         log 2 "  exit code $ret"
3153         if [ "$ret" = "0" ]; then
3154                 log 1 "detecting SSE... found"
3155         else
3156                 # It was forced, so it should be found.
3157                 if [ "$with_sse" != "1" ]; then
3158                         log 1 "configure: error: SSE couln't be found"
3159                         log 1 "configure: error: you force enabled SSE, but it seems unavailable"
3160                         exit 1
3161                 fi
3163                 log 1 "detecting SSE... not found"
3164                 with_sse="0"
3165         fi
3166         rm -f tmp.sse tmp.exe tmp.sse.cpp
3169 make_sed() {
3170         T_CFLAGS="$CFLAGS"
3171         T_CXXFLAGS="$CXXFLAGS"
3172         T_LDFLAGS="$LDFLAGS"
3174         SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR"
3176         # All the data needed to compile a single target
3177         #  Make sure if you compile multiple targets to
3178         #  use multiple OBJS_DIR, because all in-between
3179         #  binaries are stored in there, and nowhere else.
3180         SRC_REPLACE="
3181                 s@!!CC_HOST!!@$cc_host@g;
3182                 s@!!CXX_HOST!!@$cxx_host@g;
3183                 s@!!CC_BUILD!!@$cc_build@g;
3184                 s@!!CXX_BUILD!!@$cxx_build@g;
3185                 s@!!WINDRES!!@$windres@g;
3186                 s@!!STRIP!!@$strip $strip_arg@g;
3187                 s@!!LIPO!!@$lipo@g;
3188                 s@!!CFLAGS!!@$T_CFLAGS@g;
3189                 s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g;
3190                 s@!!CXXFLAGS!!@$T_CXXFLAGS@g;
3191                 s@!!CXXFLAGS_BUILD!!@$CXXFLAGS_BUILD@g;
3192                 s@!!STRGEN_FLAGS!!@$strgen_flags@g;
3193                 s@!!LIBS!!@$LIBS@g;
3194                 s@!!LDFLAGS!!@$T_LDFLAGS@g;
3195                 s@!!LDFLAGS_BUILD!!@$LDFLAGS_BUILD@g;
3196                 s@!!BIN_DIR!!@$BIN_DIR@g;
3197                 s@!!ROOT_DIR!!@$ROOT_DIR@g;
3198                 s@!!MEDIA_DIR!!@$MEDIA_DIR@g;
3199                 s@!!SOURCE_LIST!!@$SOURCE_LIST@g;
3200                 s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g;
3201                 s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g;
3202                 s@!!GRF_OBJS_DIR!!@$GRF_OBJS_DIR@g;
3203                 s@!!SETTING_OBJS_DIR!!@$SETTING_OBJS_DIR@g;
3204                 s@!!SRC_DIR!!@$SRC_DIR@g;
3205                 s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g;
3206                 s@!!OSXAPP!!@$OSXAPP@g;
3207                 s@!!LANG_DIR!!@$LANG_DIR@g;
3208                 s@!!TTD!!@$TTD@g;
3209                 s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g;
3210                 s@!!DATA_DIR!!@$prefix_dir/$data_dir@g;
3211                 s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g;
3212                 s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
3213                 s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g;
3214                 s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
3215                 s@!!PERSONAL_DIR!!@$personal_dir@g;
3216                 s@!!SHARED_DIR!!@$shared_dir@g;
3217                 s@!!INSTALL_DIR!!@$install_dir@g;
3218                 s@!!BINARY_NAME!!@$binary_name@g;
3219                 s@!!STRGEN!!@$STRGEN@g;
3220                 s@!!ENDIAN_CHECK!!@$ENDIAN_CHECK@g;
3221                 s@!!DEPEND!!@$DEPEND@g;
3222                 s@!!SETTINGSGEN!!@$SETTINGSGEN@g;
3223                 s@!!ENDIAN_FORCE!!@$endian@g;
3224                 s@!!STAGE!!@$STAGE@g;
3225                 s@!!MAKEDEPEND!!@$makedepend@g;
3226                 s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g;
3227                 s@!!SORT!!@$sort@g;
3228                 s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g;
3229                 s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g;
3230                 s@!!CONFIG_CACHE_ENDIAN!!@config.cache.endian@g;
3231                 s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g;
3232                 s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g;
3233                 s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g;
3234                 s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g;
3235                 s@!!LANG_SUPPRESS!!@$lang_suppress@g;
3236                 s@!!OBJS_C!!@$OBJS_C@g;
3237                 s@!!OBJS_CPP!!@$OBJS_CPP@g;
3238                 s@!!OBJS_MM!!@$OBJS_MM@g;
3239                 s@!!OBJS_RC!!@$OBJS_RC@g;
3240                 s@!!SRCS!!@$SRCS@g;
3241                 s@!!OS!!@$os@g;
3242                 s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g;
3243                 s@!!AWK!!@$awk@g;
3244                 s@!!DISTCC!!@$distcc@g;
3245                 s@!!NFORENUM!!@$nforenum@g;
3246                 s@!!GRFCODEC!!@$grfcodec@g;
3247         "
3249         if [ "$icon_theme_dir" != "" ]; then
3250                 SRC_REPLACE="$SRC_REPLACE
3251                         s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
3252                 "
3253         else
3254                 SRC_REPLACE="$SRC_REPLACE
3255                         s@!!ICON_THEME_DIR!!@@g;
3256                 "
3257         fi
3259         if [ "$man_dir" != "" ]; then
3260                 SRC_REPLACE="$SRC_REPLACE
3261                         s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
3262                 "
3263         else
3264                 SRC_REPLACE="$SRC_REPLACE
3265                         s@!!MAN_DIR!!@@g;
3266                 "
3267         fi
3269         if [ "$menu_dir" != "" ]; then
3270                 SRC_REPLACE="$SRC_REPLACE
3271                         s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g;
3272                 "
3273         else
3274                 SRC_REPLACE="$SRC_REPLACE
3275                         s@!!MENU_DIR!!@@g;
3276                 "
3277         fi
3280 generate_menu_item() {
3281         MENU_REPLACE="
3282                 s@!!TTD!!@$TTD@g;
3283                 s@!!MENU_GROUP!!@$menu_group@g;
3284                 s@!!MENU_NAME!!@$menu_name@g
3285         "
3286         log 1 "Generating menu item..."
3287         mkdir -p media
3288         < $ROOT_DIR/media/openttd.desktop.in sed "$MENU_REPLACE" > media/openttd.desktop
3291 generate_main() {
3292         STAGE="[MAIN]"
3294         make_sed
3296         # Create the main Makefile
3297         log 1 "Generating Makefile..."
3298         echo "# Auto-generated file from 'Makefile.in' -- DO NOT EDIT" > Makefile
3299         < $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" >> Makefile
3300         cp $ROOT_DIR/Makefile.bundle.in Makefile.bundle
3301         echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am
3302         echo >> Makefile.am
3303         # Make the copy of the source-list, so we don't trigger an unwanted recompile
3304         cp $SOURCE_LIST config.cache.source.list
3305         # Add the current directory, so we don't trigger an unwanted recompile
3306         echo "`pwd`" > config.cache.pwd
3307         # Make sure config.cache is OLDER then config.cache.source.list
3308         touch config.cache
3309         touch config.pwd
3311         if [ "$menu_dir" != "" ]; then
3312                 generate_menu_item
3313         fi
3316 generate_lang() {
3317         STAGE="[LANG]"
3319         make_sed
3321         # Create the language file
3322         mkdir -p $LANG_OBJS_DIR
3324         log 1 "Generating lang/Makefile..."
3325         echo "# Auto-generated file from 'Makefile.lang.in' -- DO NOT EDIT" > $LANG_OBJS_DIR/Makefile
3326         < $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" >> $LANG_OBJS_DIR/Makefile
3327         echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am
3328         echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am
3331 generate_settings() {
3332         STAGE="[SETTING]"
3334         make_sed
3336         # Create the language file
3337         mkdir -p $SETTING_OBJS_DIR
3339         log 1 "Generating setting/Makefile..."
3340         echo "# Auto-generated file from 'Makefile.settings.in' -- DO NOT EDIT" > $SETTING_OBJS_DIR/Makefile
3341         < $ROOT_DIR/Makefile.setting.in sed "$SRC_REPLACE" >> $SETTING_OBJS_DIR/Makefile
3342         echo "DIRS += $SETTING_OBJS_DIR" >> Makefile.am
3345 generate_grf() {
3346         STAGE="[BASESET]"
3348         make_sed
3350         # Create the language file
3351         mkdir -p $GRF_OBJS_DIR
3353         log 1 "Generating grf/Makefile..."
3354         echo "# Auto-generated file from 'Makefile.grf.in' -- DO NOT EDIT" > $GRF_OBJS_DIR/Makefile
3355         < $ROOT_DIR/Makefile.grf.in sed "$SRC_REPLACE" >> $GRF_OBJS_DIR/Makefile
3356         echo "DIRS += $GRF_OBJS_DIR" >> Makefile.am
3359 generate_src_normal() {
3360         STAGE=$1
3362         make_sed
3364         # Create the source file
3365         mkdir -p $SRC_OBJS_DIR
3367         log 1 "Generating $2/Makefile..."
3368         echo "# Auto-generated file from 'Makefile.src.in' -- DO NOT EDIT" > $SRC_OBJS_DIR/Makefile
3369         < $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" >> $SRC_OBJS_DIR/Makefile
3370         echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am
3371         echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am
3374 generate_src_osx() {
3375         cc_host_orig="$cc_host"
3376         cxx_host_orig="$cxx_host"
3377         CFLAGS_orig="$CFLAGS"
3378         LDFLAGS_orig="$LDFLAGS"
3380         for type in $enable_universal; do
3382                 if [ -n "$osx_sdk_104_path" ]; then
3383                         # Use 10.4 SDK for 32-bit targets
3384                         CFLAGS="-isysroot $osx_sdk_104_path $CFLAGS_orig"
3385                         LDFLAGS="-Wl,-syslibroot,$osx_sdk_104_path $LDFLAGS_orig"
3386                 fi
3388                 # We don't want to duplicate the x86_64 stuff for each target, so do it once here
3389                 if [ "$type" = "ppc64" ] || [ "$type" = "x86_64" ]; then
3390                         # 64 bits is always 10.5 or higher. Furthermore it has a non const ICONV
3391                         # and they also removed support for QuickTime/QuickDraw
3392                         if [ -n "$osx_sdk_path" ]; then
3393                                 CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig"
3394                                 LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig"
3395                         fi
3396                         CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME -UENABLE_COCOA_QUICKDRAW"
3397                         LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`"
3398                 fi
3400                 case $type in
3401                         ppc)
3402                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc"
3403                                 cc_host="$cc_host_orig -arch ppc -mmacosx-version-min=10.3"
3404                                 cxx_host="$cxx_host_orig -arch ppc -mmacosx-version-min=10.3"
3405                                 generate_src_normal "[ppc]" "objs/ppc";;
3406                         ppc970)
3407                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970"
3408                                 cc_host="$cc_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
3409                                 cxx_host="$cxx_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
3410                                 generate_src_normal "[ppc970]" "objs/ppc970";;
3411                         i386)
3412                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/i386"
3413                                 cc_host="$cc_host_orig -arch i386 -mmacosx-version-min=10.4"
3414                                 cxx_host="$cxx_host_orig -arch i386 -mmacosx-version-min=10.4"
3415                                 generate_src_normal "[i386]" "objs/i386";;
3416                         ppc64)
3417                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc64"
3418                                 cc_host="$cc_host_orig -arch ppc64 -mmacosx-version-min=10.5"
3419                                 cxx_host="$cxx_host_orig -arch ppc64 -mmacosx-version-min=10.5"
3420                                 generate_src_normal "[ppc64]" "objs/ppc64";;
3421                         x86_64)
3422                                 BASE_SRC_OBJS_DIR="$OBJS_DIR/x86_64"
3423                                 cc_host="$cc_host_orig -arch x86_64 -mmacosx-version-min=10.5"
3424                                 cxx_host="$cxx_host_orig -arch x86_64 -mmacosx-version-min=10.5"
3425                                 generate_src_normal "[x86_64]" "objs/x86_64";;
3426                         *) log 1 "Unknown architecture requested for universal build: $type";;
3427                 esac
3428         done
3431 generate_src() {
3432         if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
3433                 generate_src_osx
3434         else
3435                 generate_src_normal "[SRC]" "objs"
3436         fi
3439 showhelp() {
3440         echo "'configure' configures OpenTTD."
3441         echo ""
3442         echo "Usage: $0 [OPTION]... [VAR=VALUE]..."
3443         echo ""
3444         echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as"
3445         echo "VAR=VALUE.  See below for descriptions of some of the useful variables."
3446         echo ""
3447         echo "Defaults for the options are specified in brackets."
3448         echo ""
3449         echo "Configuration:"
3450         echo "  -h, --help                     display this help and exit"
3451         echo ""
3452         echo "System types:"
3453         echo "  --build=BUILD                  configure for building on BUILD [guessed]"
3454         echo "  --host=HOST                    cross-compile to build programs to run"
3455         echo "                                 on HOST [BUILD]"
3456         echo "  --windres=WINDRES              the windres to use [HOST-windres]"
3457         echo "  --strip=STRIP                  the strip to use [HOST-strip]"
3458         echo "  --awk=AWK                      the awk to use in configure [awk]"
3459         echo "  --pkg-config=PKG-CONFIG        the pkg-config to use in configure [pkg-config]"
3460         echo "  --lipo=LIPO                    the lipo to use (OSX ONLY) [HOST-lipo]"
3461         echo "  --os=OS                        the OS we are compiling for [DETECT]"
3462         echo "                                 DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/"
3463         echo "                                 NETBSD/MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/"
3464         echo "                                 MINGW/OS2/DOS/WINCE/PSP/HAIKU"
3465         echo "  --endian=ENDIAN                set the endian of the HOST (AUTO/LE/BE)"
3466         echo ""
3467         echo "Paths:"
3468         echo "  --prefix-dir=dir               specifies the prefix for all installed"
3469         echo "                                 files [/usr/local]"
3470         echo "  --binary-dir=dir               location of the binary. Will be prefixed"
3471         echo "                                 with the prefix-dir [games]"
3472         echo "  --data-dir=dir                 location of data files (lang, data, gm)."
3473         echo "                                 Will be prefixed with the prefix-dir"
3474         echo "                                 [share/games/openttd]"
3475         echo "  --doc-dir=dir                  location of the doc files"
3476         echo "                                 Will be prefixed with the prefix-dir"
3477         echo "                                 [$doc_dir]"
3478         echo "  --icon-dir=dir                 location of icons. Will be prefixed"
3479         echo "                                 with the prefix-dir [share/pixmaps]"
3480         echo "  --icon-theme-dir=dir           location of icon theme."
3481         echo "                                 Will be prefixed with the prefix-dir"
3482         echo "                                 and postfixed with size-dirs [$icon_theme_dir]"
3483         echo "  --man-dir=dir                  location of the manual page (UNIX only)"
3484         echo "                                 Will be prefixed with the prefix-dir"
3485         echo "                                 [$man_dir]"
3486         echo "  --menu-dir=dir                 location of the menu item. (UNIX only, except OSX)"
3487         echo "                                 Will be prefixed with the prefix-dir"
3488         echo "                                 [share/applications]"
3489         echo "  --personal-dir=dir             location of the personal directory"
3490         echo "                                 [os-dependent default]"
3491         echo "  --shared-dir=dir               location of shared data files"
3492         echo "                                 [os-dependent default]"
3493         echo "  --install-dir=dir              specifies the root to install to."
3494         echo "                                 Useful to install into jails [/]"
3495         echo "  --binary-name                  the name used for the binary, icons,"
3496         echo "                                 desktop file, etc. when installing [openttd]"
3497         echo ""
3498         echo "Features and packages:"
3499         echo "  --enable-debug[=LVL]           enable debug-mode (LVL=[0123], 0 is release)"
3500         echo "  --enable-desync-debug=[LVL]    enable desync debug options (LVL=[012], 0 is none"
3501         echo "  --enable-profiling             enables profiling"
3502         echo "  --enable-lto                   enables GCC's Link Time Optimization (LTO)/ICC's"
3503         echo "                                 Interprocedural Optimization if available"
3504         echo "  --enable-dedicated             compile a dedicated server (without video)"
3505         echo "  --enable-static                enable static compile (doesn't work for"
3506         echo "                                 all HOSTs)"
3507         echo "  --enable-translator            enable extra output for translators"
3508         echo "  --enable-universal[=ARCH]      enable universal builds (OSX ONLY). Allowed is any combination"
3509         echo "                                 of architectures: i386 ppc ppc970 ppc64 x86_64"
3510         echo "                                 Default architectures are: i386 ppc"
3511         echo "  --enable-osx-g5                enables optimizations for ppc970 (G5) (OSX ONLY)"
3512         echo "  --disable-cocoa-quartz         disable the quartz window mode driver for Cocoa (OSX ONLY)"
3513         echo "  --disable-cocoa-quickdraw      disable the quickdraw window mode driver for Cocoa (OSX ONLY)"
3514         echo "  --disable-unicode              disable unicode support to build win9x"
3515         echo "                                 version (Win32 ONLY)"
3516         echo "  --enable-console               compile as a console application instead of as a GUI application."
3517         echo "                                 If this setting is active, debug output will appear in the same"
3518         echo "                                 console instead of opening a new window. (Win32 ONLY)"
3519         echo "  --disable-network              disable network support"
3520         echo "  --disable-assert               disable asserts (continue on errors)"
3521         echo "  --enable-strip                 enable any possible stripping"
3522         echo "  --without-osx-sysroot          disable the automatic adding of sysroot "
3523         echo "                                 (OSX ONLY)"
3524         echo "  --without-application-bundle   disable generation of application bundle"
3525         echo "                                 (OSX ONLY)"
3526         echo "  --without-menu-entry           Don't generate a menu item (Freedesktop based only)"
3527         echo "  --menu-group=group             Category in which the menu item will be placed (Freedesktop based only)"
3528         echo "  --menu-name=name               Name of the menu item when placed [OpenTTD]"
3529         echo "  --with-direct-music            enable direct music support (Win32 ONLY)"
3530         echo "  --with-sort=sort               define a non-default location for sort"
3531         echo "  --with-midi=midi               define which midi-player to use"
3532         echo "  --with-midi-arg=arg            define which args to use for the"
3533         echo "                                 midi-player"
3534         echo "  --with-libtimidity[=\"pkg-config libtimidity\"]"
3535         echo "                                 enables libtimidity support"
3536         echo "  --with-allegro[=\"pkg-config allegro\"]"
3537         echo "                                 enables Allegro video driver support"
3538         echo "  --with-cocoa                   enables COCOA video driver (OSX ONLY)"
3539         echo "  --with-sdl[=\"pkg-config sdl\"]  enables SDL video driver support"
3540         echo "  --with-zlib[=\"pkg-config zlib\"]"
3541         echo "                                 enables zlib support"
3542         echo "  --with-liblzma[=\"pkg-config liblzma\"]"
3543         echo "                                 enables liblzma support"
3544         echo "  --with-liblzo2[=liblzo2.a]     enables liblzo2 support"
3545         echo "  --with-png[=\"pkg-config libpng\"]"
3546         echo "                                 enables libpng support"
3547         echo "  --with-freetype[=\"pkg-config freetype2\"]"
3548         echo "                                 enables libfreetype support"
3549         echo "  --with-fontconfig[=\"pkg-config fontconfig\"]"
3550         echo "                                 enables fontconfig support"
3551         echo "  --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]"
3552         echo "                                 enables XDG base directory support"
3553         echo "  --with-icu                     enables icu components for layout and sorting"
3554         echo "  --with-icu-layout[=\"pkg-config icu-lx\"]"
3555         echo "                                 enables icu components for layouting (right-to-left support)"
3556         echo "  --with-icu-sort[=\"pkg-config icu-i18n\"]"
3557         echo "                                 enables icu components for locale specific string sorting"
3558         echo "  --static-icu                   try to link statically (libsicu instead of"
3559         echo "                                 libicu; can fail as the new name is guessed)"
3560         echo "  --with-iconv[=iconv-path]      enables iconv support"
3561         echo "  --with-psp-config[=psp-config] enables psp-config support (PSP ONLY)"
3562         echo "  --disable-builtin-depend       disable use of builtin deps finder"
3563         echo "  --with-makedepend[=makedepend] enables makedepend support"
3564         echo "  --with-ccache                  enables ccache support"
3565         echo "  --with-distcc                  enables distcc support"
3566         echo "  --without-grfcodec             disable usage of grfcodec and re-generation of base sets"
3567         echo "  --without-threads              disable threading support"
3568         echo "  --without-sse                  disable SSE support (x86/x86_64 only)"
3569         echo ""
3570         echo "Some influential environment variables:"
3571         echo "  CC                             C compiler command"
3572         echo "  CXX                            C++ compiler command"
3573         echo "  CFLAGS                         C compiler flags"
3574         echo "  CXXFLAGS                       C++ compiler flags"
3575         echo "  WINDRES                        windres command"
3576         echo "  LDFLAGS                        linker flags, e.g. -L<lib dir> if you"
3577         echo "                                 have libraries in a nonstandard"
3578         echo "                                 directory <lib dir>"
3579         echo "  CFLAGS_BUILD                   C compiler flags for build time tool generation"
3580         echo "  CXXFLAGS_BUILD                 C++ compiler flags for build time tool generation"
3581         echo "  LDFLAGS_BUILD                  linker flags for build time tool generation"
3582         echo ""
3583         echo "Use these variables to override the choices made by 'configure' or to help"
3584         echo "it to find libraries and programs with nonstandard names/locations."