1dnl ---------------------------------------------------------------------------
2dnl Author:          wxWidgets development team,
3dnl                  Francesco Montorsi,
4dnl                  Bob McCown (Mac-testing)
5dnl Creation date:   24/11/2001
6dnl ---------------------------------------------------------------------------
7
8dnl ===========================================================================
9dnl Table of Contents of this macro file:
10dnl -------------------------------------
11dnl
12dnl SECTION A: wxWidgets main macros
13dnl  - WX_CONFIG_OPTIONS
14dnl  - WX_CONFIG_CHECK
15dnl  - WXRC_CHECK
16dnl  - WX_STANDARD_OPTIONS
17dnl  - WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS
18dnl  - WX_DETECT_STANDARD_OPTION_VALUES
19dnl
20dnl SECTION B: wxWidgets-related utilities
21dnl  - WX_LIKE_LIBNAME
22dnl  - WX_ARG_ENABLE_YESNOAUTO
23dnl  - WX_ARG_WITH_YESNOAUTO
24dnl
25dnl SECTION C: messages to the user
26dnl  - WX_STANDARD_OPTIONS_SUMMARY_MSG
27dnl  - WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN
28dnl  - WX_STANDARD_OPTIONS_SUMMARY_MSG_END
29dnl  - WX_BOOLOPT_SUMMARY
30dnl
31dnl The special "WX_DEBUG_CONFIGURE" variable can be set to 1 to enable extra
32dnl debug output on stdout from these macros.
33dnl ===========================================================================
34
35
36dnl ---------------------------------------------------------------------------
37dnl Macros for wxWidgets detection. Typically used in configure.ac as:
38dnl
39dnl     AC_ARG_ENABLE(...)
40dnl     AC_ARG_WITH(...)
41dnl        ...
42dnl     WX_CONFIG_OPTIONS
43dnl        ...
44dnl        ...
45dnl     WX_CONFIG_CHECK([2.6.0], [wxWin=1])
46dnl     if test "$wxWin" != 1; then
47dnl        AC_MSG_ERROR([
48dnl                wxWidgets must be installed on your system
49dnl                but wx-config script couldn't be found.
50dnl
51dnl                Please check that wx-config is in path, the directory
52dnl                where wxWidgets libraries are installed (returned by
53dnl                'wx-config --libs' command) is in LD_LIBRARY_PATH or
54dnl                equivalent variable and wxWidgets version is 2.3.4 or above.
55dnl        ])
56dnl     fi
57dnl     CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS"
58dnl     CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY"
59dnl     CFLAGS="$CFLAGS $WX_CFLAGS_ONLY"
60dnl
61dnl     LIBS="$LIBS $WX_LIBS"
62dnl
63dnl If you want to support standard --enable-debug/unicode/shared options, you
64dnl may do the following:
65dnl
66dnl     ...
67dnl     AC_CANONICAL_SYSTEM
68dnl
69dnl     # define configure options
70dnl     WX_CONFIG_OPTIONS
71dnl     WX_STANDARD_OPTIONS([debug,unicode,shared,toolkit,wxshared])
72dnl
73dnl     # basic configure checks
74dnl     ...
75dnl
76dnl     # we want to always have DEBUG==WX_DEBUG and UNICODE==WX_UNICODE
77dnl     WX_DEBUG=$DEBUG
78dnl     WX_UNICODE=$UNICODE
79dnl
80dnl     WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS
81dnl     WX_CONFIG_CHECK([2.8.0], [wxWin=1],,[html,core,net,base],[$WXCONFIG_FLAGS])
82dnl     WX_DETECT_STANDARD_OPTION_VALUES
83dnl
84dnl     # write the output files
85dnl     AC_CONFIG_FILES([Makefile ...])
86dnl     AC_OUTPUT
87dnl
88dnl     # optional: just to show a message to the user
89dnl     WX_STANDARD_OPTIONS_SUMMARY_MSG
90dnl
91dnl ---------------------------------------------------------------------------
92
93
94dnl ---------------------------------------------------------------------------
95dnl WX_CONFIG_OPTIONS
96dnl
97dnl adds support for --wx-prefix, --wx-exec-prefix, --with-wxdir and
98dnl --wx-config command line options
99dnl ---------------------------------------------------------------------------
100
101AC_DEFUN([WX_CONFIG_OPTIONS],
102[
103    AC_ARG_WITH(wxdir,
104                [  --with-wxdir=PATH       Use uninstalled version of wxWidgets in PATH],
105                [ wx_config_name="$withval/wx-config"
106                  wx_config_args="--inplace"])
107    AC_ARG_WITH(wx-config,
108                [  --with-wx-config=CONFIG wx-config script to use (optional)],
109                wx_config_name="$withval" )
110    AC_ARG_WITH(wx-prefix,
111                [  --with-wx-prefix=PREFIX Prefix where wxWidgets is installed (optional)],
112                wx_config_prefix="$withval", wx_config_prefix="")
113    AC_ARG_WITH(wx-exec-prefix,
114                [  --with-wx-exec-prefix=PREFIX
115                          Exec prefix where wxWidgets is installed (optional)],
116                wx_config_exec_prefix="$withval", wx_config_exec_prefix="")
117])
118
119dnl Helper macro for checking if wx version is at least $1.$2.$3, set's
120dnl wx_ver_ok=yes if it is:
121AC_DEFUN([_WX_PRIVATE_CHECK_VERSION],
122[
123    wx_ver_ok=""
124    if test "x$WX_VERSION" != x ; then
125      if test $wx_config_major_version -gt $1; then
126        wx_ver_ok=yes
127      else
128        if test $wx_config_major_version -eq $1; then
129           if test $wx_config_minor_version -gt $2; then
130              wx_ver_ok=yes
131           else
132              if test $wx_config_minor_version -eq $2; then
133                 if test $wx_config_micro_version -ge $3; then
134                    wx_ver_ok=yes
135                 fi
136              fi
137           fi
138        fi
139      fi
140    fi
141])
142
143dnl ---------------------------------------------------------------------------
144dnl WX_CONFIG_CHECK(VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND
145dnl                  [, WX-LIBS [, ADDITIONAL-WX-CONFIG-FLAGS]]]])
146dnl
147dnl Test for wxWidgets, and define WX_C*FLAGS, WX_LIBS and WX_LIBS_STATIC
148dnl (the latter is for static linking against wxWidgets). Set WX_CONFIG_NAME
149dnl environment variable to override the default name of the wx-config script
150dnl to use. Set WX_CONFIG_PATH to specify the full path to wx-config - in this
151dnl case the macro won't even waste time on tests for its existence.
152dnl
153dnl Optional WX-LIBS argument contains comma- or space-separated list of
154dnl wxWidgets libraries to link against. If it is not specified then WX_LIBS
155dnl and WX_LIBS_STATIC will contain flags to link with all of the core
156dnl wxWidgets libraries.
157dnl
158dnl Optional ADDITIONAL-WX-CONFIG-FLAGS argument is appended to wx-config
159dnl invocation command in present. It can be used to fine-tune lookup of
160dnl best wxWidgets build available.
161dnl
162dnl Example use:
163dnl   WX_CONFIG_CHECK([2.6.0], [wxWin=1], [wxWin=0], [html,core,net]
164dnl                    [--unicode --debug])
165dnl ---------------------------------------------------------------------------
166
167dnl
168dnl Get the cflags and libraries from the wx-config script
169dnl
170AC_DEFUN([WX_CONFIG_CHECK],
171[
172  dnl do we have wx-config name: it can be wx-config or wxd-config or ...
173  if test x${WX_CONFIG_NAME+set} != xset ; then
174     WX_CONFIG_NAME=wx-config
175  fi
176
177  if test "x$wx_config_name" != x ; then
178     WX_CONFIG_NAME="$wx_config_name"
179  fi
180
181  dnl deal with optional prefixes
182  if test x$wx_config_exec_prefix != x ; then
183     wx_config_args="$wx_config_args --exec-prefix=$wx_config_exec_prefix"
184     WX_LOOKUP_PATH="$wx_config_exec_prefix/bin"
185  fi
186  if test x$wx_config_prefix != x ; then
187     wx_config_args="$wx_config_args --prefix=$wx_config_prefix"
188     WX_LOOKUP_PATH="$WX_LOOKUP_PATH:$wx_config_prefix/bin"
189  fi
190  if test "$cross_compiling" = "yes"; then
191     wx_config_args="$wx_config_args --host=$host_alias"
192  fi
193
194  dnl don't search the PATH if WX_CONFIG_NAME is absolute filename
195  if test -x "$WX_CONFIG_NAME" ; then
196     AC_MSG_CHECKING(for wx-config)
197     WX_CONFIG_PATH="$WX_CONFIG_NAME"
198     AC_MSG_RESULT($WX_CONFIG_PATH)
199  else
200     AC_PATH_PROG(WX_CONFIG_PATH, $WX_CONFIG_NAME, no, "$WX_LOOKUP_PATH:$PATH")
201  fi
202
203  if test "$WX_CONFIG_PATH" != "no" ; then
204    WX_VERSION=""
205
206    min_wx_version=ifelse([$1], ,2.2.1,$1)
207    if test -z "$5" ; then
208      AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version])
209    else
210      AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version ($5)])
211    fi
212
213    dnl don't add the libraries ($4) to this variable as this would result in
214    dnl an error when it's used with --version below
215    WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args $5"
216
217    WX_VERSION=`$WX_CONFIG_WITH_ARGS --version 2>/dev/null`
218    wx_config_major_version=`echo $WX_VERSION | \
219           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
220    wx_config_minor_version=`echo $WX_VERSION | \
221           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
222    wx_config_micro_version=`echo $WX_VERSION | \
223           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
224
225    wx_requested_major_version=`echo $min_wx_version | \
226           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
227    wx_requested_minor_version=`echo $min_wx_version | \
228           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
229    wx_requested_micro_version=`echo $min_wx_version | \
230           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
231
232    _WX_PRIVATE_CHECK_VERSION([$wx_requested_major_version],
233                              [$wx_requested_minor_version],
234                              [$wx_requested_micro_version])
235
236    if test -n "$wx_ver_ok"; then
237      AC_MSG_RESULT(yes (version $WX_VERSION))
238      WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs $4`
239
240      dnl is this even still appropriate?  --static is a real option now
241      dnl and WX_CONFIG_WITH_ARGS is likely to contain it if that is
242      dnl what the user actually wants, making this redundant at best.
243      dnl For now keep it in case anyone actually used it in the past.
244      AC_MSG_CHECKING([for wxWidgets static library])
245      WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs $4 2>/dev/null`
246      if test "x$WX_LIBS_STATIC" = "x"; then
247        AC_MSG_RESULT(no)
248      else
249        AC_MSG_RESULT(yes)
250      fi
251
252      dnl starting with version 2.2.6 wx-config has --cppflags argument
253      wx_has_cppflags=""
254      if test $wx_config_major_version -gt 2; then
255        wx_has_cppflags=yes
256      else
257        if test $wx_config_major_version -eq 2; then
258           if test $wx_config_minor_version -gt 2; then
259              wx_has_cppflags=yes
260           else
261              if test $wx_config_minor_version -eq 2; then
262                 if test $wx_config_micro_version -ge 6; then
263                    wx_has_cppflags=yes
264                 fi
265              fi
266           fi
267        fi
268      fi
269
270      dnl starting with version 2.7.0 wx-config has --rescomp option
271      wx_has_rescomp=""
272      if test $wx_config_major_version -gt 2; then
273        wx_has_rescomp=yes
274      else
275        if test $wx_config_major_version -eq 2; then
276           if test $wx_config_minor_version -ge 7; then
277              wx_has_rescomp=yes
278           fi
279        fi
280      fi
281      if test "x$wx_has_rescomp" = x ; then
282         dnl cannot give any useful info for resource compiler
283         WX_RESCOMP=
284      else
285         WX_RESCOMP=`$WX_CONFIG_WITH_ARGS --rescomp`
286      fi
287
288      if test "x$wx_has_cppflags" = x ; then
289         dnl no choice but to define all flags like CFLAGS
290         WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags $4`
291         WX_CPPFLAGS=$WX_CFLAGS
292         WX_CXXFLAGS=$WX_CFLAGS
293
294         WX_CFLAGS_ONLY=$WX_CFLAGS
295         WX_CXXFLAGS_ONLY=$WX_CFLAGS
296      else
297         dnl we have CPPFLAGS included in CFLAGS included in CXXFLAGS
298         WX_CPPFLAGS=`$WX_CONFIG_WITH_ARGS --cppflags $4`
299         WX_CXXFLAGS=`$WX_CONFIG_WITH_ARGS --cxxflags $4`
300         WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags $4`
301
302         WX_CFLAGS_ONLY=`echo $WX_CFLAGS | sed "s@^$WX_CPPFLAGS *@@"`
303         WX_CXXFLAGS_ONLY=`echo $WX_CXXFLAGS | sed "s@^$WX_CFLAGS *@@"`
304      fi
305
306      ifelse([$2], , :, [$2])
307
308    else
309
310       if test "x$WX_VERSION" = x; then
311          dnl no wx-config at all
312          AC_MSG_RESULT(no)
313       else
314          AC_MSG_RESULT(no (version $WX_VERSION is not new enough))
315       fi
316
317       WX_CFLAGS=""
318       WX_CPPFLAGS=""
319       WX_CXXFLAGS=""
320       WX_LIBS=""
321       WX_LIBS_STATIC=""
322       WX_RESCOMP=""
323
324       if test ! -z "$5"; then
325
326          wx_error_message="
327    The configuration you asked for $PACKAGE_NAME requires a wxWidgets
328    build with the following settings:
329        $5
330    but such build is not available.
331
332    To see the wxWidgets builds available on this system, please use
333    'wx-config --list' command. To use the default build, returned by
334    'wx-config --selected-config', use the options with their 'auto'
335    default values."
336
337       fi
338
339       wx_error_message="
340    The requested wxWidgets build couldn't be found.
341    $wx_error_message
342
343    If you still get this error, then check that 'wx-config' is
344    in path, the directory where wxWidgets libraries are installed
345    (returned by 'wx-config --libs' command) is in LD_LIBRARY_PATH
346    or equivalent variable and wxWidgets version is $1 or above."
347
348       ifelse([$3], , AC_MSG_ERROR([$wx_error_message]), [$3])
349
350    fi
351  else
352
353    WX_CFLAGS=""
354    WX_CPPFLAGS=""
355    WX_CXXFLAGS=""
356    WX_LIBS=""
357    WX_LIBS_STATIC=""
358    WX_RESCOMP=""
359
360    ifelse([$3], , :, [$3])
361
362  fi
363
364  AC_SUBST(WX_CPPFLAGS)
365  AC_SUBST(WX_CFLAGS)
366  AC_SUBST(WX_CXXFLAGS)
367  AC_SUBST(WX_CFLAGS_ONLY)
368  AC_SUBST(WX_CXXFLAGS_ONLY)
369  AC_SUBST(WX_LIBS)
370  AC_SUBST(WX_LIBS_STATIC)
371  AC_SUBST(WX_VERSION)
372  AC_SUBST(WX_RESCOMP)
373
374  dnl need to export also WX_VERSION_MINOR and WX_VERSION_MAJOR symbols
375  dnl to support wxpresets bakefiles (we export also WX_VERSION_MICRO for completeness):
376  WX_VERSION_MAJOR="$wx_config_major_version"
377  WX_VERSION_MINOR="$wx_config_minor_version"
378  WX_VERSION_MICRO="$wx_config_micro_version"
379  AC_SUBST(WX_VERSION_MAJOR)
380  AC_SUBST(WX_VERSION_MINOR)
381  AC_SUBST(WX_VERSION_MICRO)
382])
383
384dnl ---------------------------------------------------------------------------
385dnl Get information on the wxrc program for making C++, Python and xrs
386dnl resource files.
387dnl
388dnl     AC_ARG_ENABLE(...)
389dnl     AC_ARG_WITH(...)
390dnl        ...
391dnl     WX_CONFIG_OPTIONS
392dnl        ...
393dnl     WX_CONFIG_CHECK(2.6.0, wxWin=1)
394dnl     if test "$wxWin" != 1; then
395dnl        AC_MSG_ERROR([
396dnl                wxWidgets must be installed on your system
397dnl                but wx-config script couldn't be found.
398dnl
399dnl                Please check that wx-config is in path, the directory
400dnl                where wxWidgets libraries are installed (returned by
401dnl                'wx-config --libs' command) is in LD_LIBRARY_PATH or
402dnl                equivalent variable and wxWidgets version is 2.6.0 or above.
403dnl        ])
404dnl     fi
405dnl
406dnl     WXRC_CHECK([HAVE_WXRC=1], [HAVE_WXRC=0])
407dnl     if test "x$HAVE_WXRC" != x1; then
408dnl         AC_MSG_ERROR([
409dnl                The wxrc program was not installed or not found.
410dnl
411dnl                Please check the wxWidgets installation.
412dnl         ])
413dnl     fi
414dnl
415dnl     CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS"
416dnl     CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY"
417dnl     CFLAGS="$CFLAGS $WX_CFLAGS_ONLY"
418dnl
419dnl     LDFLAGS="$LDFLAGS $WX_LIBS"
420dnl ---------------------------------------------------------------------------
421
422dnl ---------------------------------------------------------------------------
423dnl WXRC_CHECK([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
424dnl
425dnl Test for wxWidgets' wxrc program for creating either C++, Python or XRS
426dnl resources.  The variable WXRC will be set and substituted in the configure
427dnl script and Makefiles.
428dnl
429dnl Example use:
430dnl   WXRC_CHECK([wxrc=1], [wxrc=0])
431dnl ---------------------------------------------------------------------------
432
433dnl
434dnl wxrc program from the wx-config script
435dnl
436AC_DEFUN([WXRC_CHECK],
437[
438  AC_ARG_VAR([WXRC], [Path to wxWidget's wxrc resource compiler])
439
440  if test "x$WX_CONFIG_NAME" = x; then
441    AC_MSG_ERROR([The wxrc tests must run after wxWidgets test.])
442  else
443
444    AC_MSG_CHECKING([for wxrc])
445
446    if test "x$WXRC" = x ; then
447      dnl wx-config --utility is a new addition to wxWidgets:
448      _WX_PRIVATE_CHECK_VERSION(2,5,3)
449      if test -n "$wx_ver_ok"; then
450        WXRC=`$WX_CONFIG_WITH_ARGS --utility=wxrc`
451      fi
452    fi
453
454    if test "x$WXRC" = x ; then
455      AC_MSG_RESULT([not found])
456      ifelse([$2], , :, [$2])
457    else
458      AC_MSG_RESULT([$WXRC])
459      ifelse([$1], , :, [$1])
460    fi
461
462    AC_SUBST(WXRC)
463  fi
464])
465
466dnl ---------------------------------------------------------------------------
467dnl WX_LIKE_LIBNAME([output-var] [prefix], [name])
468dnl
469dnl Sets the "output-var" variable to the name of a library named with same
470dnl wxWidgets rule.
471dnl E.g. for output-var=='lib', name=='test', prefix='mine', sets
472dnl      the $lib variable to:
473dnl          'mine_gtk2ud_test-2.8'
474dnl      if WX_PORT=gtk2, WX_UNICODE=1, WX_DEBUG=1 and WX_RELEASE=28
475dnl ---------------------------------------------------------------------------
476AC_DEFUN([WX_LIKE_LIBNAME],
477    [
478        wx_temp="$2""_""$WX_PORT"
479
480        dnl add the [u][d] string
481        if test "$WX_UNICODE" = "1"; then
482            wx_temp="$wx_temp""u"
483        fi
484        if test "$WX_DEBUG" = "1"; then
485            wx_temp="$wx_temp""d"
486        fi
487
488        dnl complete the name of the lib
489        wx_temp="$wx_temp""_""$3""-$WX_VERSION_MAJOR.$WX_VERSION_MINOR"
490
491        dnl save it in the user's variable
492        $1=$wx_temp
493    ])
494
495dnl ---------------------------------------------------------------------------
496dnl WX_ARG_ENABLE_YESNOAUTO/WX_ARG_WITH_YESNOAUTO
497dnl
498dnl Two little custom macros which define the ENABLE/WITH configure arguments.
499dnl Macro arguments:
500dnl $1 = the name of the --enable / --with  feature
501dnl $2 = the name of the variable associated
502dnl $3 = the description of that feature
503dnl $4 = the default value for that feature
504dnl $5 = additional action to do in case option is given with "yes" value
505dnl ---------------------------------------------------------------------------
506AC_DEFUN([WX_ARG_ENABLE_YESNOAUTO],
507         [AC_ARG_ENABLE($1,
508            AC_HELP_STRING([--enable-$1], [$3 (default is $4)]),
509            [], [enableval="$4"])
510
511            dnl Show a message to the user about this option
512            AC_MSG_CHECKING([for the --enable-$1 option])
513            if test "$enableval" = "yes" ; then
514                AC_MSG_RESULT([yes])
515                $2=1
516                $5
517            elif test "$enableval" = "no" ; then
518                AC_MSG_RESULT([no])
519                $2=0
520            elif test "$enableval" = "auto" ; then
521                AC_MSG_RESULT([will be automatically detected])
522                $2=""
523            else
524                AC_MSG_ERROR([
525    Unrecognized option value (allowed values: yes, no, auto)
526                ])
527            fi
528         ])
529
530AC_DEFUN([WX_ARG_WITH_YESNOAUTO],
531         [AC_ARG_WITH($1,
532            AC_HELP_STRING([--with-$1], [$3 (default is $4)]),
533            [], [withval="$4"])
534
535            dnl Show a message to the user about this option
536            AC_MSG_CHECKING([for the --with-$1 option])
537            if test "$withval" = "yes" ; then
538                AC_MSG_RESULT([yes])
539                $2=1
540                $5
541            dnl NB: by default we don't allow --with-$1=no option
542            dnl     since it does not make much sense !
543            elif test "$6" = "1" -a "$withval" = "no" ; then
544                AC_MSG_RESULT([no])
545                $2=0
546            elif test "$withval" = "auto" ; then
547                AC_MSG_RESULT([will be automatically detected])
548                $2=""
549            else
550                AC_MSG_ERROR([
551    Unrecognized option value (allowed values: yes, auto)
552                ])
553            fi
554         ])
555
556
557dnl ---------------------------------------------------------------------------
558dnl WX_STANDARD_OPTIONS([options-to-add])
559dnl
560dnl Adds to the configure script one or more of the following options:
561dnl   --enable-[debug|unicode|shared|wxshared|wxdebug]
562dnl   --with-[gtk|msw|motif|x11|mac|dfb]
563dnl   --with-wxversion
564dnl Then checks for their presence and eventually set the DEBUG, UNICODE, SHARED,
565dnl PORT, WX_SHARED, WX_DEBUG, variables to one of the "yes", "no", "auto" values.
566dnl
567dnl Note that e.g. UNICODE != WX_UNICODE; the first is the value of the
568dnl --enable-unicode option (in boolean format) while the second indicates
569dnl if wxWidgets was built in Unicode mode (and still is in boolean format).
570dnl ---------------------------------------------------------------------------
571AC_DEFUN([WX_STANDARD_OPTIONS],
572        [
573
574        dnl the following lines will expand to WX_ARG_ENABLE_YESNOAUTO calls if and only if
575        dnl the $1 argument contains respectively the debug,unicode or shared options.
576
577        dnl be careful here not to set debug flag if only "wxdebug" was specified
578        ifelse(regexp([$1], [\bdebug]), [-1],,
579               [WX_ARG_ENABLE_YESNOAUTO([debug], [DEBUG], [Build in debug mode], [auto])])
580
581        ifelse(index([$1], [unicode]), [-1],,
582               [WX_ARG_ENABLE_YESNOAUTO([unicode], [UNICODE], [Build in Unicode mode], [auto])])
583
584        ifelse(regexp([$1], [\bshared]), [-1],,
585               [WX_ARG_ENABLE_YESNOAUTO([shared], [SHARED], [Build as shared library], [auto])])
586
587        dnl WX_ARG_WITH_YESNOAUTO cannot be used for --with-toolkit since it's an option
588        dnl which must be able to accept the auto|gtk1|gtk2|msw|... values
589        ifelse(index([$1], [toolkit]), [-1],,
590               [
591                AC_ARG_WITH([toolkit],
592                            AC_HELP_STRING([--with-toolkit],
593                                           [Build against a specific wxWidgets toolkit (default is auto)]),
594                            [], [withval="auto"])
595
596                dnl Show a message to the user about this option
597                AC_MSG_CHECKING([for the --with-toolkit option])
598                if test "$withval" = "auto" ; then
599                    AC_MSG_RESULT([will be automatically detected])
600                    TOOLKIT=""
601                else
602                    TOOLKIT="$withval"
603
604                    dnl PORT must be one of the allowed values
605                    if test "$TOOLKIT" != "gtk1" -a "$TOOLKIT" != "gtk2" -a "$TOOLKIT" != "gtk3" -a \
606                            "$TOOLKIT" != "msw" -a "$TOOLKIT" != "motif" -a \
607                            "$TOOLKIT" != "osx_carbon" -a "$TOOLKIT" != "osx_cocoa" -a \
608                            "$TOOLKIT" != "dfb" -a "$TOOLKIT" != "x11" -a "$TOOLKIT" != "base"; then
609                        AC_MSG_ERROR([
610    Unrecognized option value (allowed values: auto, gtk1, gtk2, gtk3, msw, motif, osx_carbon, osx_cocoa, dfb, x11, base)
611                        ])
612                    fi
613
614                    AC_MSG_RESULT([$TOOLKIT])
615                fi
616               ])
617
618        dnl ****** IMPORTANT *******
619        dnl   Unlike for the UNICODE setting, you can build your program in
620        dnl   shared mode against a static build of wxWidgets. Thus we have the
621        dnl   following option which allows these mixtures. E.g.
622        dnl
623        dnl      ./configure --disable-shared --with-wxshared
624        dnl
625        dnl   will build your library in static mode against the first available
626        dnl   shared build of wxWidgets.
627        dnl
628        dnl   Note that's not possible to do the viceversa:
629        dnl
630        dnl      ./configure --enable-shared --without-wxshared
631        dnl
632        dnl   Doing so you would try to build your library in shared mode against a static
633        dnl   build of wxWidgets. This is not possible (you would mix PIC and non PIC code) !
634        dnl   A check for this combination of options is in WX_DETECT_STANDARD_OPTION_VALUES
635        dnl   (where we know what 'auto' should be expanded to).
636        dnl
637        dnl   If you try to build something in ANSI mode against a UNICODE build
638        dnl   of wxWidgets or in RELEASE mode against a DEBUG build of wxWidgets,
639        dnl   then at best you'll get ton of linking errors !
640        dnl ************************
641
642        ifelse(index([$1], [wxshared]), [-1],,
643               [
644                WX_ARG_WITH_YESNOAUTO(
645                    [wxshared], [WX_SHARED],
646                    [Force building against a shared build of wxWidgets, even if --disable-shared is given],
647                    [auto], [], [1])
648               ])
649
650        dnl Just like for SHARED and WX_SHARED it may happen that some adventurous
651        dnl peoples will want to mix a wxWidgets release build with a debug build of
652        dnl his app/lib. So, we have both DEBUG and WX_DEBUG variables.
653        ifelse(index([$1], [wxdebug]), [-1],,
654               [
655                WX_ARG_WITH_YESNOAUTO(
656                    [wxdebug], [WX_DEBUG],
657                    [Force building against a debug build of wxWidgets, even if --disable-debug is given],
658                    [auto], [], [1])
659               ])
660
661        dnl WX_ARG_WITH_YESNOAUTO cannot be used for --with-wxversion since it's an option
662        dnl which accepts the "auto|2.6|2.7|2.8|2.9|3.0" etc etc values
663        ifelse(index([$1], [wxversion]), [-1],,
664               [
665                AC_ARG_WITH([wxversion],
666                            AC_HELP_STRING([--with-wxversion],
667                                           [Build against a specific version of wxWidgets (default is auto)]),
668                            [], [withval="auto"])
669
670                dnl Show a message to the user about this option
671                AC_MSG_CHECKING([for the --with-wxversion option])
672                if test "$withval" = "auto" ; then
673                    AC_MSG_RESULT([will be automatically detected])
674                    WX_RELEASE=""
675                else
676
677                    wx_requested_major_version=`echo $withval | \
678                        sed 's/\([[0-9]]*\).\([[0-9]]*\).*/\1/'`
679                    wx_requested_minor_version=`echo $withval | \
680                        sed 's/\([[0-9]]*\).\([[0-9]]*\).*/\2/'`
681
682                    dnl both vars above must be exactly 1 digit
683                    if test "${#wx_requested_major_version}" != "1" -o \
684                            "${#wx_requested_minor_version}" != "1" ; then
685                        AC_MSG_ERROR([
686    Unrecognized option value (allowed values: auto, 2.6, 2.7, 2.8, 2.9, 3.0)
687                        ])
688                    fi
689
690                    WX_RELEASE="$wx_requested_major_version"".""$wx_requested_minor_version"
691                    AC_MSG_RESULT([$WX_RELEASE])
692                fi
693               ])
694
695        if test "$WX_DEBUG_CONFIGURE" = "1"; then
696            echo "[[dbg]] DEBUG: $DEBUG, WX_DEBUG: $WX_DEBUG"
697            echo "[[dbg]] UNICODE: $UNICODE, WX_UNICODE: $WX_UNICODE"
698            echo "[[dbg]] SHARED: $SHARED, WX_SHARED: $WX_SHARED"
699            echo "[[dbg]] TOOLKIT: $TOOLKIT, WX_TOOLKIT: $WX_TOOLKIT"
700            echo "[[dbg]] VERSION: $VERSION, WX_RELEASE: $WX_RELEASE"
701        fi
702    ])
703
704
705dnl ---------------------------------------------------------------------------
706dnl WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS
707dnl
708dnl Sets the WXCONFIG_FLAGS string using the SHARED,DEBUG,UNICODE variable values
709dnl which were specified.
710dnl Thus this macro needs to be called only once all options have been set.
711dnl ---------------------------------------------------------------------------
712AC_DEFUN([WX_CONVERT_STANDARD_OPTIONS_TO_WXCONFIG_FLAGS],
713        [
714        if test "$WX_SHARED" = "1" ; then
715            WXCONFIG_FLAGS="--static=no "
716        elif test "$WX_SHARED" = "0" ; then
717            WXCONFIG_FLAGS="--static=yes "
718        fi
719
720        if test "$WX_DEBUG" = "1" ; then
721            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--debug=yes "
722        elif test "$WX_DEBUG" = "0" ; then
723            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--debug=no "
724        fi
725
726        dnl The user should have set WX_UNICODE=UNICODE
727        if test "$WX_UNICODE" = "1" ; then
728            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--unicode=yes "
729        elif test "$WX_UNICODE" = "0" ; then
730            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--unicode=no "
731        fi
732
733        if test -n "$TOOLKIT" ; then
734            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--toolkit=$TOOLKIT "
735        fi
736
737        if test -n "$WX_RELEASE" ; then
738            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--version=$WX_RELEASE "
739        fi
740
741        dnl strip out the last space of the string
742        WXCONFIG_FLAGS=${WXCONFIG_FLAGS% }
743
744        if test "$WX_DEBUG_CONFIGURE" = "1"; then
745            echo "[[dbg]] WXCONFIG_FLAGS: $WXCONFIG_FLAGS"
746        fi
747    ])
748
749
750dnl ---------------------------------------------------------------------------
751dnl _WX_SELECTEDCONFIG_CHECKFOR([RESULTVAR], [STRING], [MSG])
752dnl
753dnl Sets WX_$RESULTVAR to the value of $RESULTVAR if it's defined. Otherwise,
754dnl auto-detect the value by checking for the presence of STRING in
755dnl $WX_SELECTEDCONFIG (which is supposed to be set by caller) and set
756dnl WX_$RESULTVAR to either 0 or 1, also outputting "yes" or "no" after MSG.
757dnl ---------------------------------------------------------------------------
758AC_DEFUN([_WX_SELECTEDCONFIG_CHECKFOR],
759        [
760        if test -z "$$1" ; then
761
762            dnl The user does not have particular preferences for this option;
763            dnl so we will detect the wxWidgets relative build setting and use it
764            AC_MSG_CHECKING([$3])
765
766            dnl set WX_$1 variable to 1 if the $WX_SELECTEDCONFIG contains the $2
767            dnl string or to 0 otherwise.
768            dnl NOTE: 'expr match STRING REGEXP' cannot be used since on Mac it
769            dnl       doesn't work; we use 'expr STRING : REGEXP' instead
770            WX_$1=$(expr "$WX_SELECTEDCONFIG" : ".*$2.*")
771
772            if test "$WX_$1" != "0"; then
773                WX_$1=1
774                AC_MSG_RESULT([yes])
775            else
776                WX_$1=0
777                AC_MSG_RESULT([no])
778            fi
779        else
780
781            dnl Use the setting given by the user
782            WX_$1=$$1
783        fi
784    ])
785
786dnl ---------------------------------------------------------------------------
787dnl WX_DETECT_STANDARD_OPTION_VALUES
788dnl
789dnl Detects the values of the following variables:
790dnl 1) WX_RELEASE
791dnl 2) WX_UNICODE
792dnl 3) WX_DEBUG
793dnl 4) WX_SHARED    (and also WX_STATIC)
794dnl 5) WX_PORT
795dnl from the previously selected wxWidgets build; this macro in fact must be
796dnl called *after* calling the WX_CONFIG_CHECK macro.
797dnl
798dnl Note that the WX_VERSION_MAJOR, WX_VERSION_MINOR symbols are already set
799dnl by WX_CONFIG_CHECK macro
800dnl ---------------------------------------------------------------------------
801AC_DEFUN([WX_DETECT_STANDARD_OPTION_VALUES],
802        [
803        dnl IMPORTANT: WX_VERSION contains all three major.minor.micro digits,
804        dnl            while WX_RELEASE only the major.minor ones.
805        WX_RELEASE="$WX_VERSION_MAJOR""$WX_VERSION_MINOR"
806        if test $WX_RELEASE -lt 26 ; then
807
808            AC_MSG_ERROR([
809    Cannot detect the wxWidgets configuration for the selected wxWidgets build
810    since its version is $WX_VERSION < 2.6.0; please install a newer
811    version of wxWidgets.
812                         ])
813        fi
814
815        dnl The wx-config we are using understands the "--selected_config"
816        dnl option which returns an easy-parseable string !
817        WX_SELECTEDCONFIG=$($WX_CONFIG_WITH_ARGS --selected_config)
818
819        if test "$WX_DEBUG_CONFIGURE" = "1"; then
820            echo "[[dbg]] Using wx-config --selected-config"
821            echo "[[dbg]] WX_SELECTEDCONFIG: $WX_SELECTEDCONFIG"
822        fi
823
824        dnl we could test directly for WX_SHARED with a line like:
825        dnl    _WX_SELECTEDCONFIG_CHECKFOR([SHARED], [shared],
826        dnl                                [if wxWidgets was built in SHARED mode])
827        dnl but wx-config --selected-config DOES NOT outputs the 'shared'
828        dnl word when wx was built in shared mode; it rather outputs the
829        dnl 'static' word when built in static mode.
830        if test "$WX_SHARED" = "1"; then
831            STATIC=0
832        elif test "$WX_SHARED" = "0"; then
833            STATIC=1
834        fi
835
836        dnl Now set the WX_UNICODE, WX_DEBUG, WX_STATIC variables
837        _WX_SELECTEDCONFIG_CHECKFOR([UNICODE], [unicode],
838                                    [if wxWidgets was built with UNICODE enabled])
839        _WX_SELECTEDCONFIG_CHECKFOR([DEBUG], [debug],
840                                    [if wxWidgets was built in DEBUG mode])
841        _WX_SELECTEDCONFIG_CHECKFOR([STATIC], [static],
842                                    [if wxWidgets was built in STATIC mode])
843
844        dnl init WX_SHARED from WX_STATIC
845        if test "$WX_STATIC" != "0"; then
846            WX_SHARED=0
847        else
848            WX_SHARED=1
849        fi
850
851        AC_SUBST(WX_UNICODE)
852        AC_SUBST(WX_DEBUG)
853        AC_SUBST(WX_SHARED)
854
855        dnl detect the WX_PORT to use
856        if test -z "$TOOLKIT" ; then
857
858            dnl The user does not have particular preferences for this option;
859            dnl so we will detect the wxWidgets relative build setting and use it
860            AC_MSG_CHECKING([which wxWidgets toolkit was selected])
861
862            WX_GTKPORT1=$(expr "$WX_SELECTEDCONFIG" : ".*gtk1.*")
863            WX_GTKPORT2=$(expr "$WX_SELECTEDCONFIG" : ".*gtk2.*")
864            WX_GTKPORT3=$(expr "$WX_SELECTEDCONFIG" : ".*gtk3.*")
865            WX_MSWPORT=$(expr "$WX_SELECTEDCONFIG" : ".*msw.*")
866            WX_MOTIFPORT=$(expr "$WX_SELECTEDCONFIG" : ".*motif.*")
867            WX_OSXCOCOAPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_cocoa.*")
868            WX_OSXCARBONPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_carbon.*")
869            WX_X11PORT=$(expr "$WX_SELECTEDCONFIG" : ".*x11.*")
870            WX_DFBPORT=$(expr "$WX_SELECTEDCONFIG" : ".*dfb.*")
871            WX_BASEPORT=$(expr "$WX_SELECTEDCONFIG" : ".*base.*")
872
873            WX_PORT="unknown"
874            if test "$WX_GTKPORT1" != "0"; then WX_PORT="gtk1"; fi
875            if test "$WX_GTKPORT2" != "0"; then WX_PORT="gtk2"; fi
876            if test "$WX_GTKPORT3" != "0"; then WX_PORT="gtk3"; fi
877            if test "$WX_MSWPORT" != "0"; then WX_PORT="msw"; fi
878            if test "$WX_MOTIFPORT" != "0"; then WX_PORT="motif"; fi
879            if test "$WX_OSXCOCOAPORT" != "0"; then WX_PORT="osx_cocoa"; fi
880            if test "$WX_OSXCARBONPORT" != "0"; then WX_PORT="osx_carbon"; fi
881            if test "$WX_X11PORT" != "0"; then WX_PORT="x11"; fi
882            if test "$WX_DFBPORT" != "0"; then WX_PORT="dfb"; fi
883            if test "$WX_BASEPORT" != "0"; then WX_PORT="base"; fi
884
885            dnl NOTE: backward-compatible check for wx2.8; in wx2.9 the mac
886            dnl       ports are called 'osx_cocoa' and 'osx_carbon' (see above)
887            WX_MACPORT=$(expr "$WX_SELECTEDCONFIG" : ".*mac.*")
888            if test "$WX_MACPORT" != "0"; then WX_PORT="mac"; fi
889
890            dnl check at least one of the WX_*PORT has been set !
891
892            if test "$WX_PORT" = "unknown" ; then
893                AC_MSG_ERROR([
894        Cannot detect the currently installed wxWidgets port !
895        Please check your 'wx-config --cxxflags'...
896                            ])
897            fi
898
899            AC_MSG_RESULT([$WX_PORT])
900        else
901            dnl Use the setting given by the user
902            WX_PORT=$TOOLKIT
903        fi
904
905        AC_SUBST(WX_PORT)
906
907        if test "$WX_DEBUG_CONFIGURE" = "1"; then
908            echo "[[dbg]] Values of all WX_* options after final detection:"
909            echo "[[dbg]] WX_DEBUG: $WX_DEBUG"
910            echo "[[dbg]] WX_UNICODE: $WX_UNICODE"
911            echo "[[dbg]] WX_SHARED: $WX_SHARED"
912            echo "[[dbg]] WX_RELEASE: $WX_RELEASE"
913            echo "[[dbg]] WX_PORT: $WX_PORT"
914        fi
915
916        dnl Avoid problem described in the WX_STANDARD_OPTIONS which happens when
917        dnl the user gives the options:
918        dnl      ./configure --enable-shared --without-wxshared
919        dnl or just do
920        dnl      ./configure --enable-shared
921        dnl but there is only a static build of wxWidgets available.
922        if test "$WX_SHARED" = "0" -a "$SHARED" = "1"; then
923            AC_MSG_ERROR([
924    Cannot build shared library against a static build of wxWidgets !
925    This error happens because the wxWidgets build which was selected
926    has been detected as static while you asked to build $PACKAGE_NAME
927    as shared library and this is not possible.
928    Use the '--disable-shared' option to build $PACKAGE_NAME
929    as static library or '--with-wxshared' to use wxWidgets as shared library.
930                         ])
931        fi
932
933        dnl now we can finally update the options to their final values if they
934        dnl were not already set
935        if test -z "$UNICODE" ; then
936            UNICODE=$WX_UNICODE
937        fi
938        if test -z "$SHARED" ; then
939            SHARED=$WX_SHARED
940        fi
941        if test -z "$TOOLKIT" ; then
942            TOOLKIT=$WX_PORT
943        fi
944
945        dnl respect the DEBUG variable adding the optimize/debug flags and also
946        dnl define a BUILD variable in case the user wants to use it
947        dnl
948        dnl NOTE: the CXXFLAGS are merged together with the CPPFLAGS so we
949        dnl       don't need to set them, too
950        if test "$DEBUG" = "1"; then
951            BUILD="debug"
952            CXXFLAGS="$CXXFLAGS -g -O0"
953            CFLAGS="$CFLAGS -g -O0"
954        elif test "$DEBUG" = "0"; then
955            BUILD="release"
956            CXXFLAGS="$CXXFLAGS -O2"
957            CFLAGS="$CFLAGS -O2"
958        fi
959    ])
960
961dnl ---------------------------------------------------------------------------
962dnl WX_BOOLOPT_SUMMARY([name of the boolean variable to show summary for],
963dnl                   [what to print when var is 1],
964dnl                   [what to print when var is 0])
965dnl
966dnl Prints $2 when variable $1 == 1 and prints $3 when variable $1 == 0.
967dnl This macro mainly exists just to make configure.ac scripts more readable.
968dnl
969dnl NOTE: you need to use the [" my message"] syntax for 2nd and 3rd arguments
970dnl       if you want that m4 avoid to throw away the spaces prefixed to the
971dnl       argument value.
972dnl ---------------------------------------------------------------------------
973AC_DEFUN([WX_BOOLOPT_SUMMARY],
974        [
975        if test "x$$1" = "x1" ; then
976            echo $2
977        elif test "x$$1" = "x0" ; then
978            echo $3
979        else
980            echo "$1 is $$1"
981        fi
982    ])
983
984dnl ---------------------------------------------------------------------------
985dnl WX_STANDARD_OPTIONS_SUMMARY_MSG
986dnl
987dnl Shows a summary message to the user about the WX_* variable contents.
988dnl This macro is used typically at the end of the configure script.
989dnl ---------------------------------------------------------------------------
990AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG],
991        [
992        echo
993        echo "  The wxWidgets build which will be used by $PACKAGE_NAME $PACKAGE_VERSION"
994        echo "  has the following settings:"
995        WX_BOOLOPT_SUMMARY([WX_DEBUG],   ["  - DEBUG build"],  ["  - RELEASE build"])
996        WX_BOOLOPT_SUMMARY([WX_UNICODE], ["  - UNICODE mode"], ["  - ANSI mode"])
997        WX_BOOLOPT_SUMMARY([WX_SHARED],  ["  - SHARED mode"],  ["  - STATIC mode"])
998        echo "  - VERSION: $WX_VERSION"
999        echo "  - PORT: $WX_PORT"
1000    ])
1001
1002
1003dnl ---------------------------------------------------------------------------
1004dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN, WX_STANDARD_OPTIONS_SUMMARY_MSG_END
1005dnl
1006dnl Like WX_STANDARD_OPTIONS_SUMMARY_MSG macro but these two macros also gives info
1007dnl about the configuration of the package which used the wxpresets.
1008dnl
1009dnl Typical usage:
1010dnl    WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN
1011dnl    echo "   - Package setting 1: $SETTING1"
1012dnl    echo "   - Package setting 2: $SETTING1"
1013dnl    ...
1014dnl    WX_STANDARD_OPTIONS_SUMMARY_MSG_END
1015dnl
1016dnl ---------------------------------------------------------------------------
1017AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN],
1018        [
1019        echo
1020        echo " ----------------------------------------------------------------"
1021        echo "  Configuration for $PACKAGE_NAME $PACKAGE_VERSION successfully completed."
1022        echo "  Summary of main configuration settings for $PACKAGE_NAME:"
1023        WX_BOOLOPT_SUMMARY([DEBUG], ["  - DEBUG build"], ["  - RELEASE build"])
1024        WX_BOOLOPT_SUMMARY([UNICODE], ["  - UNICODE mode"], ["  - ANSI mode"])
1025        WX_BOOLOPT_SUMMARY([SHARED], ["  - SHARED mode"], ["  - STATIC mode"])
1026    ])
1027
1028AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_END],
1029        [
1030        WX_STANDARD_OPTIONS_SUMMARY_MSG
1031        echo
1032        echo "  Now, just run make."
1033        echo " ----------------------------------------------------------------"
1034        echo
1035    ])
1036
1037
1038dnl ---------------------------------------------------------------------------
1039dnl Deprecated macro wrappers
1040dnl ---------------------------------------------------------------------------
1041
1042AC_DEFUN([AM_OPTIONS_WXCONFIG], [WX_CONFIG_OPTIONS])
1043AC_DEFUN([AM_PATH_WXCONFIG], [
1044    WX_CONFIG_CHECK([$1],[$2],[$3],[$4],[$5])
1045])
1046AC_DEFUN([AM_PATH_WXRC], [WXRC_CHECK([$1],[$2])])
1047