]> git.lyx.org Git - lyx.git/blob - config/lyxinclude.m4
585cb7f8f08184bccfbeb05963aab35c286c0bac
[lyx.git] / config / lyxinclude.m4
1 dnl Some useful functions for LyXs configure.in                 -*- sh -*-
2 dnl Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
3 dnl         Lars Gullik Bjønnes (larsbj@lyx.org)
4 dnl         Allan Rae (rae@lyx.org)
5
6
7 dnl Usage LYX_CHECK_VERSION   Displays version of LyX being built and
8 dnl sets variable "build_type"
9 AC_DEFUN([LYX_CHECK_VERSION],[
10 echo "configuring LyX version" AC_PACKAGE_VERSION
11
12 AC_MSG_CHECKING([for build type])
13 lyx_devel_version=no
14 lyx_prerelease=no
15 AC_ARG_ENABLE(build-type,
16   AC_HELP_STRING([--enable-build-type=TYPE],[set build setting according to TYPE=rel(ease), pre(release), dev(elopment), prof(iling), gprof]),
17   [case $enableval in
18     dev*) build_type=development;;
19     pre*) build_type=prerelease;;
20     prof*)  build_type=profiling;;
21     gprof*) build_type=gprof;;
22     rel*) build_type=release;;
23     *) AC_MSG_ERROR([bad build type specification \"$enableval\". Please use one of rel(ease), pre(release), dev(elopment), prof(iling), or gprof]);;
24    esac],
25   [case AC_PACKAGE_VERSION in
26     *dev*) build_type=development;;
27     *pre*|*alpha*|*beta*|*rc*) build_type=prerelease;;
28     *) build_type=release ;;
29    esac])
30 AC_MSG_RESULT([$build_type])
31 lyx_flags="$lyx_flags build=$build_type"
32 case $build_type in
33     development) lyx_devel_version=yes
34                  AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
35                  LYX_DATE="not released yet" ;;
36     prerelease) lyx_prerelease=yes ;;
37 esac
38
39 AC_SUBST(lyx_devel_version)
40 ])
41
42
43 dnl Define the option to set a LyX version on installed executables and directories
44 dnl
45 dnl
46 AC_DEFUN([LYX_VERSION_SUFFIX],[
47 AC_MSG_CHECKING([for version suffix])
48 dnl We need the literal double quotes in the rpm spec file
49 RPM_VERSION_SUFFIX='""'
50 AC_ARG_WITH(version-suffix,
51   [AC_HELP_STRING([--with-version-suffix@<:@=VERSION@:>@], install lyx files as lyxVERSION (VERSION=-AC_PACKAGE_VERSION))],
52   [if test "x$withval" = "xyes";
53    then
54      withval="-"AC_PACKAGE_VERSION
55      ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
56    fi
57    AC_SUBST(version_suffix,$withval)
58    RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
59 AC_SUBST(RPM_VERSION_SUFFIX)
60 AC_SUBST(program_base_name,"lyx")
61 AC_MSG_RESULT([$withval])
62 ])
63
64
65 dnl Check whether to configure for Qt5. Default is Qt4.
66 dnl
67 AC_DEFUN([LYX_CHECK_QT5],[
68 AC_MSG_CHECKING([whether Qt5 is requested])
69 AC_ARG_ENABLE([qt5],
70   [  --enable-qt5            use Qt5 for building],
71   USE_QT5=$enableval, USE_QT5=no)
72 AC_MSG_RESULT([$USE_QT5])
73 AC_SUBST([USE_QT5])
74 ])
75
76
77 dnl Usage: LYX_WARNING(message)  Displays the warning "message" and sets the
78 dnl flag lyx_warning to yes.
79 AC_DEFUN([LYX_WARNING],[
80 lyx_warning_txt="$lyx_warning_txt
81 == $1
82 "
83 lyx_warning=yes])
84
85
86 dnl Usage: LYX_LIB_ERROR(file,library)  Displays an error message indication
87 dnl  that 'file' cannot be found because 'lib' may be uncorrectly installed.
88 AC_DEFUN([LYX_LIB_ERROR],[
89 AC_MSG_ERROR([cannot find $1. Please check that the $2 library
90    is correctly installed on your system.])])
91
92
93 dnl Usage: LYX_CHECK_WARNINGS  Displays a warning message if a LYX_WARNING
94 dnl   has occurred previously.
95 AC_DEFUN([LYX_CHECK_WARNINGS],[
96 if test x$lyx_warning = xyes; then
97 cat <<EOF
98 === The following minor problems have been detected by configure.
99 === Please check the messages below before running 'make'.
100 === (see the section 'Problems' in the INSTALL file)
101 $lyx_warning_txt
102
103 EOF
104 fi])
105
106
107 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
108 dnl
109 define(LYX_SEARCH_PROG,[dnl
110 for ac_prog in $2 ; do
111 # Extract the first word of "$ac_prog", so it can be a program name with args.
112   set dummy $ac_prog ; ac_word=$[2]
113   if test -z "[$]$1"; then
114     IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
115     for ac_dir in $PATH; do
116       test -z "$ac_dir" && ac_dir=.
117       if test -f [$ac_dir/$ac_word]; then
118         $1="$ac_prog"
119         break
120       fi
121     done
122     IFS="$ac_save_ifs"
123   fi
124
125   if test -n "[$]$1"; then
126     ac_result=yes
127   else
128     ac_result=no
129   fi
130   ifelse($3,,,[$3])
131   test -n "[$]$1" && break
132 done
133 ])dnl
134
135
136 dnl Usage: LYX_PROG_CLANG: set CLANG to yes if the compiler is clang.
137 AC_DEFUN([LYX_PROG_CLANG],
138 [AC_CACHE_CHECK([whether the compiler is clang],
139                [lyx_cv_prog_clang],
140 [AC_TRY_COMPILE([], [
141 #ifndef __clang__
142             this is not clang
143 #endif
144 ],
145 [lyx_cv_prog_clang=yes ; CLANG=yes], [lyx_cv_prog_clang=no ; CLANG=no])])
146 if test $CLANG = yes ; then
147   AC_CACHE_CHECK([for clang version],
148     [lyx_cv_clang_version],
149     [clang_noversion=no
150      AC_COMPUTE_INT(clang_major,__clang_major__,,[clang_noversion_=yes])
151      AC_COMPUTE_INT(clang_minor,__clang_minor__,,[clang_noversion_=yes])
152      AC_COMPUTE_INT(clang_patchlevel,__clang_patchlevel__,,[clang_noversion_=yes])
153      if test $clang_noversion = yes ; then
154        clang_version=unknown
155      else
156        clang_version=$clang_major.$clang_minor.$clang_patchlevel
157      fi
158      lyx_cv_clang_version=$clang_version])
159 fi
160 ])
161
162
163 dnl Usage: LYX_CXX_CXX11_FLAGS: add to AM_CXXFLAGS the best flag that
164 selects C++11 mode; gives an error when C++11 mode is not found.
165 AC_DEFUN([LYX_CXX_CXX11_FLAGS],
166 [AC_CACHE_CHECK([for at least C++11 mode], [lyx_cv_cxx11_flags],
167  [lyx_cv_cxx11_flags=none
168   for flag in -std=c++14 -std=c++11 "" -std=c++0x -std=gnu++14 -std=gnu++11 -std=gnu++0x ; do
169     save_CPPFLAGS=$CPPFLAGS
170     CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
171     save_CXXFLAGS=$CXXFLAGS
172     CXXFLAGS="$flag $AM_CXXFLAGS $CXXFLAGS"
173     dnl sample openmp source code to test
174     AC_TRY_COMPILE([
175        template <typename T>
176        struct check
177        {
178            static_assert(sizeof(int) <= sizeof(T), "not big enough");
179        };
180
181        typedef check<check<bool>> right_angle_brackets;
182
183        class TestDeleted
184        {
185        public:
186            TestDeleted() = delete;
187        };
188
189
190        int a;
191        decltype(a) b;
192
193        typedef check<int> check_type;
194        check_type c;
195        check_type&& cr = static_cast<check_type&&>(c);
196
197        auto d = a;], [],
198     [lyx_cv_cxx11_flags=$flag; break])
199    CXXFLAGS=$save_CXXFLAGS
200    CPPFLAGS=$save_CPPFLAGS
201   done])
202   if test $lyx_cv_cxx11_flags = none ; then
203     AC_ERROR([Cannot find suitable C++11 mode for compiler $CXX])
204   fi
205   AM_CXXFLAGS="$lyx_cv_cxx11_flags $AM_CXXFLAGS"
206 ])
207
208
209 dnl Usage: LYX_CXX_USE_REGEX
210 dnl decide whether we want to use std::regex and set the
211 dnl LYX_USE_STD_REGEX macro and conditional accordingly.
212 AC_DEFUN([LYX_CXX_USE_REGEX],
213 [AC_ARG_ENABLE(std-regex,
214   AC_HELP_STRING([--enable-std-regex],[use std::regex instead of boost::regex (default is autodetected)]),
215   [lyx_std_regex=$enableval],
216   [AC_MSG_CHECKING([for correct regex implementation])
217    save_CPPFLAGS=$CPPFLAGS
218    CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
219    save_CXXFLAGS=$CXXFLAGS
220    CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
221    # The following code snippet has been taken taken from example in
222    #   http://stackoverflow.com/questions/8561850/compile-stdregex-iterator-with-gcc
223    AC_TRY_LINK(
224      [
225         #include <regex>
226         #include <iostream>
227
228         #include <string.h>
229
230         typedef std::regex_iterator<const char *> Myiter;
231      ], [
232         const char *pat = "axayaz";
233         Myiter::regex_type rx("a");
234         Myiter next(pat, pat + strlen(pat), rx);
235         Myiter end;
236    ], [lyx_std_regex=yes], [lyx_std_regex=no])
237    CXXFLAGS=$save_CXXFLAGS
238    CPPFLAGS=$save_CPPFLAGS
239    AC_MSG_RESULT([$lyx_std_regex])
240  ])
241
242  if test $lyx_std_regex = yes ; then
243   lyx_flags="$lyx_flags std-regex"
244   AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex])
245  fi
246  AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
247 ])
248
249
250 dnl Usage: LYX_CXX_USE_CALL_ONCE
251 dnl check whether we can use std::call_once and set the
252 dnl LYX_USE_STD_CALL_ONCE macro and conditional accordingly.
253 AC_DEFUN([LYX_CXX_USE_CALL_ONCE],
254 [AC_MSG_CHECKING([for std::call_once availability])
255    save_CPPFLAGS=$CPPFLAGS
256    CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
257    save_CXXFLAGS=$CXXFLAGS
258    CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
259    AC_TRY_LINK(
260      [
261         #include <mutex>
262         static std::once_flag flag;
263      ], [
264         std::call_once(flag, [](){ return; });
265    ], [lyx_std_call_once=yes], [lyx_std_call_once=no])
266    CXXFLAGS=$save_CXXFLAGS
267    CPPFLAGS=$save_CPPFLAGS
268    AC_MSG_RESULT([$lyx_std_call_once])
269
270  if test $lyx_std_call_once = yes ; then
271   AC_DEFINE([LYX_USE_STD_CALL_ONCE], 1, [define to 1 if std::call_once is supported by the compiler])
272  fi
273  AM_CONDITIONAL([LYX_USE_STD_CALL_ONCE], test $lyx_std_call_once = yes)
274 ])
275
276
277 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
278 AC_DEFUN([LYX_LIB_STDCXX],
279 [AC_CACHE_CHECK([whether STL is libstdc++],
280                [lyx_cv_lib_stdcxx],
281 [AC_TRY_COMPILE([#include<vector>], [
282 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
283             this is not libstdc++
284 #endif
285 ],
286 [lyx_cv_lib_stdcxx=yes], [lyx_cv_lib_stdcxx=no])])
287 ])
288
289
290 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
291 dnl        if the STL library is GNU libstdc++ and the C++11 ABI is used.
292 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
293 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
294                [lyx_cv_lib_stdcxx_cxx11_abi],
295 [AC_TRY_COMPILE([#include<vector>], [
296 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
297             this is not libstdc++ using the C++11 ABI
298 #endif
299 ],
300 [lyx_cv_lib_stdcxx_cxx11_abi=yes], [lyx_cv_lib_stdcxx_cxx11_abi=no])])
301 ])
302
303
304 AC_DEFUN([LYX_PROG_CXX],
305 [AC_REQUIRE([AC_PROG_CXX])
306 AC_REQUIRE([AC_PROG_CXXCPP])
307
308 AC_LANG_PUSH(C++)
309 LYX_PROG_CLANG
310 LYX_CXX_CXX11_FLAGS
311 LYX_LIB_STDCXX
312 LYX_LIB_STDCXX_CXX11_ABI
313 LYX_CXX_USE_REGEX
314 LYX_CXX_USE_CALL_ONCE
315 AC_LANG_POP(C++)
316
317 if test $lyx_cv_lib_stdcxx = "yes" ; then
318   if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
319     AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
320   else
321     AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
322   fi
323 else
324   if test $lyx_cv_prog_clang = "yes" ; then
325     AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
326   fi
327 fi
328
329 ### We might want to get or shut warnings.
330 AC_ARG_ENABLE(warnings,
331   AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
332   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
333         enable_warnings=yes;
334     else
335         enable_warnings=no;
336     fi;])
337 if test x$enable_warnings = xyes ; then
338   lyx_flags="$lyx_flags warnings"
339 fi
340
341 ### We might want to disable debug
342 AC_ARG_ENABLE(debug,
343   AC_HELP_STRING([--enable-debug],[enable debug information]),,
344   [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
345 )
346
347 AC_ARG_ENABLE(stdlib-debug,
348   AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
349   [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes], 
350           [enable_stdlib_debug=no])]
351 )
352
353 ### set up optimization
354 AC_ARG_ENABLE(optimization,
355     AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
356     enable_optimization=yes;)
357 case $enable_optimization in
358     yes)
359         if test $lyx_devel_version = yes ; then
360             lyx_optim=-O
361         else
362             lyx_optim=-O2
363         fi;;
364     no) lyx_optim=;;
365     *) lyx_optim=${enable_optimization};;
366 esac
367
368 AC_ARG_ENABLE(assertions,
369   AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
370   [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
371           [enable_assertions=no])]
372 )
373 if test "x$enable_assertions" = xyes ; then
374    lyx_flags="$lyx_flags assertions"
375    AC_DEFINE(ENABLE_ASSERTIONS,1,
376     [Define if you want assertions to be enabled in the code])
377 fi
378
379 # set the compiler options correctly.
380 if test x$GXX = xyes; then
381   dnl clang++ pretends to be g++ 4.2.1; this is not useful
382   if test x$CLANG = xno; then
383     dnl Useful for global version info
384     gxx_version=`${CXX} -dumpversion`
385     CXX_VERSION="($gxx_version)"
386   else
387     gxx_version=clang-$clang_version
388     CXX_VERSION="($clang_version)"
389   fi
390
391   AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
392   if test x$enable_debug = xyes ; then
393       AM_CXXFLAGS="-g $AM_CXXFLAGS"
394   fi
395   if test $build_type = gprof ; then
396     AM_CXXFLAGS="$AM_CXXFLAGS -pg"
397     AM_LDFLAGS="$AM_LDFLAGS -pg"
398   fi
399   if test $build_type = profiling ; then
400     AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
401   fi
402
403   if test x$USE_QT5 = xyes ; then
404       AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
405   fi
406   dnl Warnings are for preprocessor too
407   if test x$enable_warnings = xyes ; then
408       AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
409   fi
410   case $gxx_version in
411       2.*|3.*) AC_ERROR([gcc >= 4.6 is required]);;
412       4.0*|4.1*|4.2*|4.3*|4.4*|4.5*) AC_ERROR([gcc >= 4.6 is required]);;
413   esac
414   if test x$enable_stdlib_debug = xyes ; then
415     dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
416     dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
417     case $gxx_version in
418       *)
419         lyx_flags="$lyx_flags stdlib-debug"
420         AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
421         AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
422         ;;
423     esac
424   fi
425 fi
426
427 # Some additional flags may be needed
428 if test x$GXX = xyes; then
429     case $gxx_version in
430       clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
431         dnl boost contains pragmas that are annoying on older clang versions
432         AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
433       clang*)
434         dnl the more recent versions support the deprecated-register warning,
435         dnl which  is very annoying with Qt4.x right now.
436         AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-register";;
437     esac
438 fi
439 ])
440
441 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
442 dnl        be used.
443 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
444         AC_MSG_CHECKING([whether to use included boost library])
445         AC_ARG_WITH(included-boost,
446             [AC_HELP_STRING([--without-included-boost], [do not use the boost lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
447             [lyx_cv_with_included_boost=$withval],
448             [lyx_cv_with_included_boost=yes])
449         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
450         AC_MSG_RESULT([$lyx_cv_with_included_boost])
451         if test x$lyx_cv_with_included_boost = xyes ; then
452             lyx_included_libs="$lyx_included_libs boost"
453             BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
454             if test $lyx_std_regex = yes ; then
455               BOOST_LIBS=""
456             else
457               BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
458             fi
459         else
460             BOOST_INCLUDES=
461             if test $lyx_std_regex = yes ; then
462               BOOST_LIBS=""
463             else
464               AC_LANG_PUSH(C++)
465               save_LIBS=$LIBS
466
467               AC_MSG_CHECKING([for multithreaded boost libraries])
468               LIBS="$save_LIBS -lboost_regex-mt $LIBTHREAD"
469               AC_LINK_IFELSE(
470                 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
471                         [boost::regex reg;])],
472                 [AC_MSG_RESULT([yes])
473                  BOOST_MT="-mt"],
474                 [AC_MSG_RESULT([no])
475                  AC_MSG_CHECKING([for plain boost libraries])
476                  LIBS="$save_LIBS -lboost_regex"
477                  AC_LINK_IFELSE(
478                      [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
479                              [boost::regex reg;])],
480                      [AC_MSG_RESULT([yes])
481                       BOOST_MT=""],
482                      [AC_MSG_RESULT([no])
483                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
484                  ])
485               ])
486               LIBS=$save_LIBS
487               AC_LANG_POP(C++)
488
489               dnl In general, system boost libraries are incompatible with
490               dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
491               dnl details.
492               if test $enable_stdlib_debug = "yes" ; then
493                 LYX_WARNING([Compiling LyX with stdlib-debug and system boost libraries may lead to
494    crashes. Consider using --disable-stdlib-debug or removing
495    --without-included-boost.])
496               fi
497
498               BOOST_LIBS="-lboost_regex${BOOST_MT}"
499             fi
500         fi
501         AC_SUBST(BOOST_INCLUDES)
502         AC_SUBST(BOOST_LIBS)
503 ])
504
505
506 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
507 dnl        be used.
508 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
509   AC_MSG_CHECKING([whether to use included iconv library])
510   AC_ARG_WITH(included-iconv,
511     [AC_HELP_STRING([--with-included-iconv], [use the iconv lib supplied with LyX instead of the system one])],
512     [lyx_cv_with_included_iconv=$withval],
513     [lyx_cv_with_included_iconv=no])
514   AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
515   AC_MSG_RESULT([$lyx_cv_with_included_iconv])
516   if test x$lyx_cv_with_included_iconv = xyes ; then
517   lyx_included_libs="$lyx_included_libs iconv"
518
519 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
520     AC_EILSEQ
521     AC_TYPE_MBSTATE_T
522     AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
523 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.14/lib/loop_wchar.h.
524     if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
525       USE_MBSTATE_T=1
526     else
527       USE_MBSTATE_T=0
528     fi
529     AC_SUBST([USE_MBSTATE_T])
530     AC_CACHE_CHECK([whether <wchar.h> is standalone],
531       [gl_cv_header_wchar_h_standalone],
532       [AC_COMPILE_IFELSE(
533         [AC_LANG_PROGRAM(
534           [[#include <wchar.h>
535             wchar_t w;]],
536           [[]])],
537         [gl_cv_header_wchar_h_standalone=yes],
538         [gl_cv_header_wchar_h_standalone=no])])
539     if test $gl_cv_header_wchar_h_standalone = yes; then
540       BROKEN_WCHAR_H=0
541     else
542       BROKEN_WCHAR_H=1
543     fi
544     AC_SUBST([BROKEN_WCHAR_H])
545 dnl we want const correctness
546     AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
547       [Define as const if the declaration of iconv() needs const.])
548     ICONV_CONST=const
549     AC_SUBST([ICONV_CONST])
550 dnl we build a static lib
551     DLL_VARIABLE=
552     AC_SUBST([DLL_VARIABLE])
553     ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.14 -I$(top_builddir)/3rdparty/libiconv'
554     ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
555     ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.14/include/iconv.h.in
556   else
557     ICONV_INCLUDES=
558     AM_ICONV
559     if test "$am_cv_func_iconv" = no; then
560       AC_MSG_ERROR([cannot find required library iconv.])
561     else
562       ICONV_LIBS="$LIBICONV"
563     fi
564     ICONV_ICONV_H_IN=
565   fi
566   AC_SUBST(ICONV_INCLUDES)
567   AC_SUBST(ICONV_LIBS)
568   AC_SUBST(ICONV_ICONV_H_IN)
569 ])
570
571
572 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
573 dnl        be used.
574 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
575   AC_MSG_CHECKING([whether to use included zlib library])
576   AC_ARG_WITH(included-zlib,
577     [AC_HELP_STRING([--with-included-zlib], [use the zlib lib supplied with LyX instead of the system one])],
578     [lyx_cv_with_included_zlib=$withval],
579     [lyx_cv_with_included_zlib=no])
580   AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
581   AC_MSG_RESULT([$lyx_cv_with_included_zlib])
582   if test x$lyx_cv_with_included_zlib = xyes ; then
583     lyx_included_libs="$lyx_included_libs zlib"
584     ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
585     ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
586     mkdir -p 3rdparty/zlib
587 dnl include standard config.h for HAVE_UNISTD_H
588     echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
589 dnl prevent clash with system zlib that might be dragged in by other libs
590     echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
591     cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
592   else
593     ZLIB_INCLUDES=
594     AC_CHECK_HEADERS(zlib.h,
595       [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
596       [LYX_LIB_ERROR(zlib.h,zlib)])
597   fi
598   AC_SUBST(ZLIB_INCLUDES)
599   AC_SUBST(ZLIB_LIBS)
600 ])
601
602
603 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
604 dnl        necessary APIs are available to print callstacks.
605 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
606 [AC_CACHE_CHECK([whether printing callstack is possible],
607                [lyx_cv_callstack_printing],
608 [AC_TRY_COMPILE([
609 #include <execinfo.h>
610 #include <cxxabi.h>
611 ], [
612         void* array[200];
613         size_t size = backtrace(array, 200);
614         backtrace_symbols(array, size);
615         int status = 0;
616         abi::__cxa_demangle("abcd", 0, 0, &status);
617 ],
618 [lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
619 if test x"$lyx_cv_callstack_printing" = xyes; then
620   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
621             [Define if callstack can be printed])
622 fi
623 ])
624
625
626 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
627 dnl        be used.
628 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
629         AC_MSG_CHECKING([whether to use included MyThes library])
630         AC_ARG_WITH(included-mythes,
631             [AC_HELP_STRING([--without-included-mythes], [use the system MyThes lib instead of the one supplied with LyX])],
632             [lyx_cv_with_included_mythes=$withval],
633             [lyx_cv_with_included_mythes=yes])
634         AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
635         AC_MSG_RESULT([$lyx_cv_with_included_mythes])
636         if test x$lyx_cv_with_included_mythes != xyes ; then
637                 AC_LANG_PUSH(C++)
638                 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
639                 if test x$ac_cv_header_mythes_h != xyes; then
640                         AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
641                 fi
642                 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no])
643                 if test x$lyx_mythes != xyes; then
644                         AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no])
645                 fi
646                 AC_LANG_POP(C++)
647                 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
648                         AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
649                 fi
650                 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
651                 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
652                 AC_SUBST(MYTHES_LIBS)
653         else
654                 lyx_included_libs="$lyx_included_libs mythes"
655         fi
656
657 ])
658
659
660 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
661 dnl                       [default-yes-value])
662 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
663 dnl  resulting directory name in 'dir-var-name'.
664 AC_DEFUN([LYX_WITH_DIR],[
665   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
666   AC_MSG_CHECKING([for $2])
667   if test -z "$with_$3"; then
668      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
669   else
670     test "x$with_$3" = xyes && with_$3=$5
671     lyx_cv_$3="$with_$3"
672   fi
673   AC_MSG_RESULT($lyx_cv_$3)])
674
675
676 dnl Usage: LYX_LOOP_DIR(value,action)
677 dnl Executes action for values of variable `dir' in `values'. `values' can
678 dnl use ":" as a separator.
679 AC_DEFUN([LYX_LOOP_DIR],[
680 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
681 for dir in `eval "echo $1"`; do
682   if test ! "$dir" = NONE; then
683     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
684     $2
685   fi
686 done
687 IFS=$ac_save_ifs
688 ])
689
690
691 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
692 dnl var-name.
693 AC_DEFUN([LYX_ADD_LIB_DIR],[
694 $1="${$1} -L$2"
695 if test "`(uname) 2>/dev/null`" = SunOS &&
696     uname -r | grep '^5' >/dev/null; then
697   if test $ac_cv_prog_gxx = yes ; then
698     $1="${$1} -Wl[,]-R$2"
699   else
700     $1="${$1} -R$2"
701   fi
702 fi])
703
704
705 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
706 dnl var-name.
707 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
708
709 ### Check for a headers existence and location iff it exists
710 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
711 ## It almost works.  I've tried a few variations but they give errors
712 ## of one sort or other: bad substitution or file not found etc.  The
713 ## actual header _is_ found though and the cache variable is set however
714 ## the reported setting (on screen) is equal to $ac_safe for some unknown
715 ## reason.
716 ## Additionally, autoheader can't figure out what to use as the name in
717 ## the config.h.in file so we need to write our own entries there -- one for
718 ## each header in the form PATH_HEADER_NAME_H
719 ##
720 AC_DEFUN([LYX_PATH_HEADER],
721 [ AC_CHECK_HEADER($1,[
722   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
723 ### the only remaining problem is getting the second parameter to this
724 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
725 ### of $ac_safe being printed.
726   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
727   [ cat > conftest.$ac_ext <<EOF
728 #line __oline__ "configure"
729 #include "confdefs.h"
730
731 #include <$1>
732 EOF
733 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
734   grep $1  2>/dev/null | \
735   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
736 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
737 rm -f conftest*])
738   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
739 ])
740 ### end of LYX_PATH_HEADER
741
742 ## Check what kind of packaging should be used at install time.
743 ## The default is autodetected.
744 AC_DEFUN([LYX_USE_PACKAGING],
745 [AC_MSG_CHECKING([what packaging should be used])
746 AC_ARG_WITH(packaging,
747   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
748                             Possible values: posix, windows, macosx, haiku])],
749   [lyx_use_packaging="$withval"], [
750   case $host in
751     *-apple-darwin*) lyx_use_packaging=macosx ;;
752     *-pc-mingw*) lyx_use_packaging=windows ;;
753     *-mingw32*) lyx_use_packaging=windows ;;
754     *haiku*) lyx_use_packaging=haiku ;;
755     *) lyx_use_packaging=posix ;;
756   esac])
757 AC_MSG_RESULT($lyx_use_packaging)
758 lyx_install_posix=false
759 lyx_install_macosx=false
760 lyx_install_cygwin=false
761 lyx_install_windows=false
762 case $lyx_use_packaging in
763    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
764            PACKAGE=LyX${version_suffix}
765            default_prefix="/Applications/${PACKAGE}.app"
766            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
767            bindir='${prefix}/Contents/MacOS'
768            libdir='${prefix}/Contents/Resources'
769            datarootdir='${prefix}/Contents/Resources'
770            pkgdatadir='${datadir}'
771            mandir='${datadir}/man'
772            lyx_install_macosx=true ;;
773   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
774            PACKAGE=LyX${version_suffix}
775            default_prefix="C:/Program Files/${PACKAGE}"
776            bindir='${prefix}/bin'
777            libdir='${prefix}/Resources'
778            datarootdir='${prefix}/Resources'
779            pkgdatadir='${datadir}'
780            mandir='${prefix}/Resources/man'
781            lyx_install_windows=true ;;
782     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
783            PACKAGE=lyx${version_suffix}
784            program_suffix=$version_suffix
785            pkgdatadir='${datadir}/${PACKAGE}'
786            default_prefix=$ac_default_prefix
787            case ${host} in
788              *cygwin*) lyx_install_cygwin=true ;;
789              *apple-darwin*) lyx_install_macosx=true ;;
790            esac
791            lyx_install_posix=true ;;
792         haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
793            PACKAGE=lyx${version_suffix}
794            program_suffix=$version_suffix
795            pkgdatadir='${datadir}/${PACKAGE}'
796            default_prefix=$ac_default_prefix
797            lyx_install_posix=true ;;
798     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
799 esac
800 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
801 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
802 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
803 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
804 AC_SUBST(pkgdatadir)
805 AC_SUBST(program_suffix)
806 ])
807
808
809 ## ------------------------------------------------------------------------
810 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
811 ## one or two arguments.
812 ##
813 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
814 ## ------------------------------------------------------------------------
815 ##
816 AC_DEFUN([AC_FUNC_MKDIR],
817 [AC_CHECK_FUNCS([mkdir _mkdir])
818 AC_CACHE_CHECK([whether mkdir takes one argument],
819                [ac_cv_mkdir_takes_one_arg],
820 [AC_TRY_COMPILE([
821 #include <sys/stat.h>
822 #if HAVE_UNISTD_H
823 #  include <unistd.h>
824 #endif
825 ], [mkdir (".");],
826 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
827 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
828   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
829             [Define if mkdir takes only one argument.])
830 fi
831 ])
832
833
834 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
835 dnl (which may be a relative path, and need not refer to any existing
836 dnl entity).
837
838 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
839 dnl native Win32 path name, (but with slashes, not backslashes).
840
841 dnl On any other system, it is simply the result which would be obtained
842 dnl if PATHNAME represented an existing directory, and the pwd command was
843 dnl executed in that directory.
844 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
845 [ac_dir="$2"
846  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
847     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
848  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
849  do
850    ac_dir=`AS_DIRNAME(["$ac_dir"])`
851  done
852  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
853  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
854  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
855    s?/*$[]??'`
856 ])
857
858 dnl this is used by the macro blow to general a proper config.h.in entry
859 m4_define([LYX_AH_CHECK_DECL],
860 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
861   [Define if you have the prototype for function `$1'])])
862
863 dnl Check things are declared in headers to avoid errors or warnings.
864 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
865 dnl Defines HAVE_DECL_{FUNCTION}
866 AC_DEFUN([LYX_CHECK_DECL],
867 [LYX_AH_CHECK_DECL($1)
868 for ac_header in $2
869 do
870   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
871   AC_EGREP_HEADER($1, $ac_header,
872       [AC_MSG_RESULT(yes)
873        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
874        break],
875       [AC_MSG_RESULT(no)])
876 done])
877
878 dnl this is used by the macro below to generate a proper config.h.in entry
879 m4_define([LYX_AH_CHECK_DEF],
880 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
881   [Define to 1 if `$1' is defined in `$2'])])
882
883 dnl Check whether name is defined in header by using it in codesnippet.
884 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
885 dnl Defines HAVE_DEF_{NAME}
886 AC_DEFUN([LYX_CHECK_DEF],
887 [LYX_AH_CHECK_DEF($1, $2)
888  AC_MSG_CHECKING([whether $1 is defined by header $2])
889  save_CPPFLAGS=$CPPFLAGS
890  CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
891  save_CXXFLAGS=$CXXFLAGS
892  CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
893  AC_LANG_PUSH(C++)
894  AC_TRY_COMPILE([#include <$2>], [$3],
895      lyx_have_def_name=yes,
896      lyx_have_def_name=no)
897  AC_LANG_POP(C++)
898  CXXFLAGS=$save_CXXFLAGS
899  CPPFLAGS=$save_CPPFLAGS
900  AC_MSG_RESULT($lyx_have_def_name)
901  if test "x$lyx_have_def_name" = xyes; then
902    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
903  fi
904 ])
905
906 dnl Extract the single digits from PACKAGE_VERSION and make them available.
907 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
908 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
909 AC_DEFUN([LYX_SET_VERSION_INFO],
910 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
911  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
912  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
913  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
914  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
915  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
916  test "x$lyx_patch" = "x" && lyx_patch=0
917  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
918  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
919  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
920  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
921  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
922  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
923  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
924  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
925 ])
926
927 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
928 # ---------------------------------------------------------------------------
929 # Copied from autoconf 2.68, added a check that python version is < 3.0
930 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
931 # Run ACTION-IF-FALSE otherwise.
932 # This test uses sys.hexversion instead of the string equivalent (first
933 # word of sys.version), in order to cope with versions such as 2.2c1.
934 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
935 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
936  [prog="import sys
937 # split strings by '.' and convert to numeric.  Append some zeros
938 # because we need at least 4 digits for the hex conversion.
939 # map returns an iterator in Python 3.0 and a list in 2.x
940 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
941 minverhex = 0
942 maxverhex = 50331648 # = 3.0.0.0
943 # xrange is not present in Python 3.0 and range returns an iterator
944 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
945 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
946   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])