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.in 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="auto"
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="auto"
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="auto"
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 \
606                            "$TOOLKIT" != "msw" -a "$TOOLKIT" != "motif" -a \
607                            "$TOOLKIT" != "osx_carbon" -a "$TOOLKIT" != "osx_cocoa" -a \
608                            "$TOOLKIT" != "dfb" -a "$TOOLKIT" != "x11"; then
609                        AC_MSG_ERROR([
610    Unrecognized option value (allowed values: auto, gtk1, gtk2, msw, motif, osx_carbon, osx_cocoa, dfb, x11)
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="auto"
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 are different from "auto".
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 "$TOOLKIT" != "auto" ; then
734            WXCONFIG_FLAGS="$WXCONFIG_FLAGS""--toolkit=$TOOLKIT "
735        fi
736
737        if test "$WX_RELEASE" != "auto" ; 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                             [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
753dnl
754dnl Outputs the given MSG. Then searches the given STRING in the wxWidgets
755dnl additional CPP flags and put the result of the search in WX_$RESULTVAR
756dnl also adding the "yes" or "no" message result to MSG.
757dnl ---------------------------------------------------------------------------
758AC_DEFUN([_WX_SELECTEDCONFIG_CHECKFOR],
759        [
760        if test "$$1" = "auto" ; 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                ifelse([$4], , :, [$4])
776            else
777                WX_$1=0
778                AC_MSG_RESULT([no])
779                ifelse([$5], , :, [$5])
780            fi
781        else
782
783            dnl Use the setting given by the user
784            WX_$1=$$1
785        fi
786    ])
787
788dnl ---------------------------------------------------------------------------
789dnl WX_DETECT_STANDARD_OPTION_VALUES
790dnl
791dnl Detects the values of the following variables:
792dnl 1) WX_RELEASE
793dnl 2) WX_UNICODE
794dnl 3) WX_DEBUG
795dnl 4) WX_SHARED    (and also WX_STATIC)
796dnl 5) WX_PORT
797dnl from the previously selected wxWidgets build; this macro in fact must be
798dnl called *after* calling the WX_CONFIG_CHECK macro.
799dnl
800dnl Note that the WX_VERSION_MAJOR, WX_VERSION_MINOR symbols are already set
801dnl by WX_CONFIG_CHECK macro
802dnl ---------------------------------------------------------------------------
803AC_DEFUN([WX_DETECT_STANDARD_OPTION_VALUES],
804        [
805        dnl IMPORTANT: WX_VERSION contains all three major.minor.micro digits,
806        dnl            while WX_RELEASE only the major.minor ones.
807        WX_RELEASE="$WX_VERSION_MAJOR""$WX_VERSION_MINOR"
808        if test $WX_RELEASE -lt 26 ; then
809
810            AC_MSG_ERROR([
811    Cannot detect the wxWidgets configuration for the selected wxWidgets build
812    since its version is $WX_VERSION < 2.6.0; please install a newer
813    version of wxWidgets.
814                         ])
815        fi
816
817        dnl The wx-config we are using understands the "--selected_config"
818        dnl option which returns an easy-parseable string !
819        WX_SELECTEDCONFIG=$($WX_CONFIG_WITH_ARGS --selected_config)
820
821        if test "$WX_DEBUG_CONFIGURE" = "1"; then
822            echo "[[dbg]] Using wx-config --selected-config"
823            echo "[[dbg]] WX_SELECTEDCONFIG: $WX_SELECTEDCONFIG"
824        fi
825
826
827        dnl we could test directly for WX_SHARED with a line like:
828        dnl    _WX_SELECTEDCONFIG_CHECKFOR([SHARED], [shared],
829        dnl                                [if wxWidgets was built in SHARED mode])
830        dnl but wx-config --selected-config DOES NOT outputs the 'shared'
831        dnl word when wx was built in shared mode; it rather outputs the
832        dnl 'static' word when built in static mode.
833        if test $WX_SHARED = "1"; then
834            STATIC=0
835        elif test $WX_SHARED = "0"; then
836            STATIC=1
837        elif test $WX_SHARED = "auto"; then
838            STATIC="auto"
839        fi
840
841        dnl Now set the WX_UNICODE, WX_DEBUG, WX_STATIC variables
842        _WX_SELECTEDCONFIG_CHECKFOR([UNICODE], [unicode],
843                                    [if wxWidgets was built with UNICODE enabled])
844        _WX_SELECTEDCONFIG_CHECKFOR([DEBUG], [debug],
845                                    [if wxWidgets was built in DEBUG mode])
846        _WX_SELECTEDCONFIG_CHECKFOR([STATIC], [static],
847                                    [if wxWidgets was built in STATIC mode])
848
849        dnl init WX_SHARED from WX_STATIC
850        if test "$WX_STATIC" != "0"; then
851            WX_SHARED=0
852        else
853            WX_SHARED=1
854        fi
855
856        AC_SUBST(WX_UNICODE)
857        AC_SUBST(WX_DEBUG)
858        AC_SUBST(WX_SHARED)
859
860        dnl detect the WX_PORT to use
861        if test "$TOOLKIT" = "auto" ; then
862
863            dnl The user does not have particular preferences for this option;
864            dnl so we will detect the wxWidgets relative build setting and use it
865            AC_MSG_CHECKING([which wxWidgets toolkit was selected])
866
867            WX_GTKPORT1=$(expr "$WX_SELECTEDCONFIG" : ".*gtk1.*")
868            WX_GTKPORT2=$(expr "$WX_SELECTEDCONFIG" : ".*gtk2.*")
869            WX_MSWPORT=$(expr "$WX_SELECTEDCONFIG" : ".*msw.*")
870            WX_MOTIFPORT=$(expr "$WX_SELECTEDCONFIG" : ".*motif.*")
871            WX_OSXCOCOAPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_cocoa.*")
872            WX_OSXCARBONPORT=$(expr "$WX_SELECTEDCONFIG" : ".*osx_carbon.*")
873            WX_X11PORT=$(expr "$WX_SELECTEDCONFIG" : ".*x11.*")
874            WX_DFBPORT=$(expr "$WX_SELECTEDCONFIG" : ".*dfb.*")
875
876            WX_PORT="unknown"
877            if test "$WX_GTKPORT1" != "0"; then WX_PORT="gtk1"; fi
878            if test "$WX_GTKPORT2" != "0"; then WX_PORT="gtk2"; fi
879            if test "$WX_MSWPORT" != "0"; then WX_PORT="msw"; fi
880            if test "$WX_MOTIFPORT" != "0"; then WX_PORT="motif"; fi
881            if test "$WX_OSXCOCOAPORT" != "0"; then WX_PORT="osx_cocoa"; fi
882            if test "$WX_OSXCARBONPORT" != "0"; then WX_PORT="osx_carbon"; fi
883            if test "$WX_X11PORT" != "0"; then WX_PORT="x11"; fi
884            if test "$WX_DFBPORT" != "0"; then WX_PORT="dfb"; fi
885
886            dnl NOTE: backward-compatible check for wx2.8; in wx2.9 the mac
887            dnl       ports are called 'osx_cocoa' and 'osx_carbon' (see above)
888            WX_MACPORT=$(expr "$WX_SELECTEDCONFIG" : ".*mac.*")
889            if test "$WX_MACPORT" != "0"; then WX_PORT="mac"; fi
890
891            dnl check at least one of the WX_*PORT has been set !
892
893            if test "$WX_PORT" = "unknown" ; then
894                AC_MSG_ERROR([
895        Cannot detect the currently installed wxWidgets port !
896        Please check your 'wx-config --cxxflags'...
897                            ])
898            fi
899
900            AC_MSG_RESULT([$WX_PORT])
901        else
902
903            dnl Use the setting given by the user
904            if test -z "$TOOLKIT" ; then
905                WX_PORT=$TOOLKIT
906            else
907                dnl try with PORT
908                WX_PORT=$PORT
909            fi
910        fi
911
912        AC_SUBST(WX_PORT)
913
914        if test "$WX_DEBUG_CONFIGURE" = "1"; then
915            echo "[[dbg]] Values of all WX_* options after final detection:"
916            echo "[[dbg]] WX_DEBUG: $WX_DEBUG"
917            echo "[[dbg]] WX_UNICODE: $WX_UNICODE"
918            echo "[[dbg]] WX_SHARED: $WX_SHARED"
919            echo "[[dbg]] WX_RELEASE: $WX_RELEASE"
920            echo "[[dbg]] WX_PORT: $WX_PORT"
921        fi
922
923        dnl Avoid problem described in the WX_STANDARD_OPTIONS which happens when
924        dnl the user gives the options:
925        dnl      ./configure --enable-shared --without-wxshared
926        dnl or just do
927        dnl      ./configure --enable-shared
928        dnl but there is only a static build of wxWidgets available.
929        if test "$WX_SHARED" = "0" -a "$SHARED" = "1"; then
930            AC_MSG_ERROR([
931    Cannot build shared library against a static build of wxWidgets !
932    This error happens because the wxWidgets build which was selected
933    has been detected as static while you asked to build $PACKAGE_NAME
934    as shared library and this is not possible.
935    Use the '--disable-shared' option to build $PACKAGE_NAME
936    as static library or '--with-wxshared' to use wxWidgets as shared library.
937                         ])
938        fi
939
940        dnl now we can finally update the DEBUG,UNICODE,SHARED options
941        dnl to their final values if they were set to 'auto'
942        if test "$DEBUG" = "auto"; then
943            DEBUG=$WX_DEBUG
944        fi
945        if test "$UNICODE" = "auto"; then
946            UNICODE=$WX_UNICODE
947        fi
948        if test "$SHARED" = "auto"; then
949            SHARED=$WX_SHARED
950        fi
951        if test "$TOOLKIT" = "auto"; then
952            TOOLKIT=$WX_PORT
953        fi
954
955        dnl in case the user needs a BUILD=debug/release var...
956        if test "$DEBUG" = "1"; then
957            BUILD="debug"
958        elif test "$DEBUG" = "0" -o "$DEBUG" = ""; then
959            BUILD="release"
960        fi
961
962        dnl respect the DEBUG variable adding the optimize/debug flags
963        dnl NOTE: the CXXFLAGS are merged together with the CPPFLAGS so we
964        dnl       don't need to set them, too
965        if test "$DEBUG" = "1"; then
966            CXXFLAGS="$CXXFLAGS -g -O0"
967            CFLAGS="$CFLAGS -g -O0"
968        else
969            CXXFLAGS="$CXXFLAGS -O2"
970            CFLAGS="$CFLAGS -O2"
971        fi
972    ])
973
974dnl ---------------------------------------------------------------------------
975dnl WX_BOOLOPT_SUMMARY([name of the boolean variable to show summary for],
976dnl                   [what to print when var is 1],
977dnl                   [what to print when var is 0])
978dnl
979dnl Prints $2 when variable $1 == 1 and prints $3 when variable $1 == 0.
980dnl This macro mainly exists just to make configure.ac scripts more readable.
981dnl
982dnl NOTE: you need to use the [" my message"] syntax for 2nd and 3rd arguments
983dnl       if you want that m4 avoid to throw away the spaces prefixed to the
984dnl       argument value.
985dnl ---------------------------------------------------------------------------
986AC_DEFUN([WX_BOOLOPT_SUMMARY],
987        [
988        if test "x$$1" = "x1" ; then
989            echo $2
990        elif test "x$$1" = "x0" ; then
991            echo $3
992        else
993            echo "$1 is $$1"
994        fi
995    ])
996
997dnl ---------------------------------------------------------------------------
998dnl WX_STANDARD_OPTIONS_SUMMARY_MSG
999dnl
1000dnl Shows a summary message to the user about the WX_* variable contents.
1001dnl This macro is used typically at the end of the configure script.
1002dnl ---------------------------------------------------------------------------
1003AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG],
1004        [
1005        echo
1006        echo "  The wxWidgets build which will be used by $PACKAGE_NAME $PACKAGE_VERSION"
1007        echo "  has the following settings:"
1008        WX_BOOLOPT_SUMMARY([WX_DEBUG],   ["  - DEBUG build"],  ["  - RELEASE build"])
1009        WX_BOOLOPT_SUMMARY([WX_UNICODE], ["  - UNICODE mode"], ["  - ANSI mode"])
1010        WX_BOOLOPT_SUMMARY([WX_SHARED],  ["  - SHARED mode"],  ["  - STATIC mode"])
1011        echo "  - VERSION: $WX_VERSION"
1012        echo "  - PORT: $WX_PORT"
1013    ])
1014
1015
1016dnl ---------------------------------------------------------------------------
1017dnl WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN, WX_STANDARD_OPTIONS_SUMMARY_MSG_END
1018dnl
1019dnl Like WX_STANDARD_OPTIONS_SUMMARY_MSG macro but these two macros also gives info
1020dnl about the configuration of the package which used the wxpresets.
1021dnl
1022dnl Typical usage:
1023dnl    WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN
1024dnl    echo "   - Package setting 1: $SETTING1"
1025dnl    echo "   - Package setting 2: $SETTING1"
1026dnl    ...
1027dnl    WX_STANDARD_OPTIONS_SUMMARY_MSG_END
1028dnl
1029dnl ---------------------------------------------------------------------------
1030AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_BEGIN],
1031        [
1032        echo
1033        echo " ----------------------------------------------------------------"
1034        echo "  Configuration for $PACKAGE_NAME $PACKAGE_VERSION successfully completed."
1035        echo "  Summary of main configuration settings for $PACKAGE_NAME:"
1036        WX_BOOLOPT_SUMMARY([DEBUG], ["  - DEBUG build"], ["  - RELEASE build"])
1037        WX_BOOLOPT_SUMMARY([UNICODE], ["  - UNICODE mode"], ["  - ANSI mode"])
1038        WX_BOOLOPT_SUMMARY([SHARED], ["  - SHARED mode"], ["  - STATIC mode"])
1039    ])
1040
1041AC_DEFUN([WX_STANDARD_OPTIONS_SUMMARY_MSG_END],
1042        [
1043        WX_STANDARD_OPTIONS_SUMMARY_MSG
1044        echo
1045        echo "  Now, just run make."
1046        echo " ----------------------------------------------------------------"
1047        echo
1048    ])
1049
1050
1051dnl ---------------------------------------------------------------------------
1052dnl Deprecated macro wrappers
1053dnl ---------------------------------------------------------------------------
1054
1055AC_DEFUN([AM_OPTIONS_WXCONFIG], [WX_CONFIG_OPTIONS])
1056AC_DEFUN([AM_PATH_WXCONFIG], [
1057    WX_CONFIG_CHECK([$1],[$2],[$3],[$4],[$5])
1058])
1059AC_DEFUN([AM_PATH_WXRC], [WXRC_CHECK([$1],[$2])])
1060