]> git.lyx.org Git - lyx.git/blob - config/lyxinclude.m4
Fix some thinkos in the revert_quotes routine
[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             BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
453             if test $lyx_std_regex = yes ; then
454               BOOST_LIBS=""
455             else
456               BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
457             fi
458         else
459             BOOST_INCLUDES=
460             if test $lyx_std_regex = yes ; then
461               BOOST_LIBS=""
462             else
463               AC_LANG_PUSH(C++)
464               save_LIBS=$LIBS
465
466               AC_MSG_CHECKING([for multithreaded boost libraries])
467               LIBS="$save_LIBS -lboost_regex-mt $LIBTHREAD"
468               AC_LINK_IFELSE(
469                 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
470                         [boost::regex reg;])],
471                 [AC_MSG_RESULT([yes])
472                  BOOST_MT="-mt"],
473                 [AC_MSG_RESULT([no])
474                  AC_MSG_CHECKING([for plain boost libraries])
475                  LIBS="$save_LIBS -lboost_regex"
476                  AC_LINK_IFELSE(
477                      [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
478                              [boost::regex reg;])],
479                      [AC_MSG_RESULT([yes])
480                       BOOST_MT=""],
481                      [AC_MSG_RESULT([no])
482                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
483                  ])
484               ])
485               LIBS=$save_LIBS
486               AC_LANG_POP(C++)
487
488               dnl In general, system boost libraries are incompatible with
489               dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
490               dnl details.
491               if test $enable_stdlib_debug = "yes" ; then
492                 LYX_WARNING([Compiling LyX with stdlib-debug and system boost libraries may lead to
493    crashes. Consider using --disable-stdlib-debug or removing
494    --without-included-boost.])
495               fi
496
497               BOOST_LIBS="-lboost_regex${BOOST_MT}"
498             fi
499         fi
500         AC_SUBST(BOOST_INCLUDES)
501         AC_SUBST(BOOST_LIBS)
502 ])
503
504
505 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
506 dnl        be used.
507 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
508   AC_MSG_CHECKING([whether to use included iconv library])
509   AC_ARG_WITH(included-iconv,
510     [AC_HELP_STRING([--without-included-iconv], [do not use the iconv lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
511     [lyx_cv_with_included_iconv=$withval],
512     [lyx_cv_with_included_iconv=no])
513   AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
514   AC_MSG_RESULT([$lyx_cv_with_included_iconv])
515   if test x$lyx_cv_with_included_iconv = xyes ; then
516 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
517     AC_EILSEQ
518     AC_TYPE_MBSTATE_T
519     AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
520 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.14/lib/loop_wchar.h.
521     if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
522       USE_MBSTATE_T=1
523     else
524       USE_MBSTATE_T=0
525     fi
526     AC_SUBST([USE_MBSTATE_T])
527     AC_CACHE_CHECK([whether <wchar.h> is standalone],
528       [gl_cv_header_wchar_h_standalone],
529       [AC_COMPILE_IFELSE(
530         [AC_LANG_PROGRAM(
531           [[#include <wchar.h>
532             wchar_t w;]],
533           [[]])],
534         [gl_cv_header_wchar_h_standalone=yes],
535         [gl_cv_header_wchar_h_standalone=no])])
536     if test $gl_cv_header_wchar_h_standalone = yes; then
537       BROKEN_WCHAR_H=0
538     else
539       BROKEN_WCHAR_H=1
540     fi
541     AC_SUBST([BROKEN_WCHAR_H])
542 dnl we want const correctness
543     AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
544       [Define as const if the declaration of iconv() needs const.])
545     ICONV_CONST=const
546     AC_SUBST([ICONV_CONST])
547 dnl we build a static lib
548     DLL_VARIABLE=
549     AC_SUBST([DLL_VARIABLE])
550     ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.14 -I$(top_builddir)/3rdparty/libiconv'
551     ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
552     ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.14/include/iconv.h.in
553   else
554     ICONV_INCLUDES=
555     AM_ICONV
556     if test "$am_cv_func_iconv" = no; then
557       AC_MSG_ERROR([cannot find required library iconv.])
558     else
559       ICONV_LIBS="$LIBICONV"
560     fi
561     ICONV_ICONV_H_IN=
562   fi
563   AC_SUBST(ICONV_INCLUDES)
564   AC_SUBST(ICONV_LIBS)
565   AC_SUBST(ICONV_ICONV_H_IN)
566 ])
567
568
569 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
570 dnl        be used.
571 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
572   AC_MSG_CHECKING([whether to use included zlib library])
573   AC_ARG_WITH(included-zlib,
574     [AC_HELP_STRING([--without-included-zlib], [do not use the zlib lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
575     [lyx_cv_with_included_zlib=$withval],
576     [lyx_cv_with_included_zlib=no])
577   AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
578   AC_MSG_RESULT([$lyx_cv_with_included_zlib])
579   if test x$lyx_cv_with_included_zlib = xyes ; then
580     ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
581     ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
582     mkdir -p 3rdparty/zlib
583 dnl include standard config.h for HAVE_UNISTD_H
584     echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
585 dnl prevent clash with system zlib that might be dragged in by other libs
586     echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
587     cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
588   else
589     ZLIB_INCLUDES=
590     AC_CHECK_HEADERS(zlib.h,
591       [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
592       [LYX_LIB_ERROR(zlib.h,zlib)])
593   fi
594   AC_SUBST(ZLIB_INCLUDES)
595   AC_SUBST(ZLIB_LIBS)
596 ])
597
598
599 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
600 dnl        necessary APIs are available to print callstacks.
601 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
602 [AC_CACHE_CHECK([whether printing callstack is possible],
603                [lyx_cv_callstack_printing],
604 [AC_TRY_COMPILE([
605 #include <execinfo.h>
606 #include <cxxabi.h>
607 ], [
608         void* array[200];
609         size_t size = backtrace(array, 200);
610         backtrace_symbols(array, size);
611         int status = 0;
612         abi::__cxa_demangle("abcd", 0, 0, &status);
613 ],
614 [lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
615 if test x"$lyx_cv_callstack_printing" = xyes; then
616   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
617             [Define if callstack can be printed])
618 fi
619 ])
620
621
622 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
623 dnl        be used.
624 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
625         AC_MSG_CHECKING([whether to use included MyThes library])
626         AC_ARG_WITH(included-mythes,
627             [AC_HELP_STRING([--without-included-mythes], [do not use the MyThes lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
628             [lyx_cv_with_included_mythes=$withval],
629             [lyx_cv_with_included_mythes=yes])
630         AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
631         AC_MSG_RESULT([$lyx_cv_with_included_mythes])
632         if test x$lyx_cv_with_included_mythes != xyes ; then
633                 AC_LANG_PUSH(C++)
634                 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
635                 if test x$ac_cv_header_mythes_h != xyes; then
636                         AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
637                 fi
638                 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no])
639                 if test x$lyx_mythes != xyes; then
640                         AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no])
641                 fi
642                 AC_LANG_POP(C++)
643                 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
644                         AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
645                 fi
646                 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
647                 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
648                 AC_SUBST(MYTHES_LIBS)
649         fi
650 ])
651
652
653 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
654 dnl                       [default-yes-value])
655 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
656 dnl  resulting directory name in 'dir-var-name'.
657 AC_DEFUN([LYX_WITH_DIR],[
658   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
659   AC_MSG_CHECKING([for $2])
660   if test -z "$with_$3"; then
661      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
662   else
663     test "x$with_$3" = xyes && with_$3=$5
664     lyx_cv_$3="$with_$3"
665   fi
666   AC_MSG_RESULT($lyx_cv_$3)])
667
668
669 dnl Usage: LYX_LOOP_DIR(value,action)
670 dnl Executes action for values of variable `dir' in `values'. `values' can
671 dnl use ":" as a separator.
672 AC_DEFUN([LYX_LOOP_DIR],[
673 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
674 for dir in `eval "echo $1"`; do
675   if test ! "$dir" = NONE; then
676     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
677     $2
678   fi
679 done
680 IFS=$ac_save_ifs
681 ])
682
683
684 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
685 dnl var-name.
686 AC_DEFUN([LYX_ADD_LIB_DIR],[
687 $1="${$1} -L$2"
688 if test "`(uname) 2>/dev/null`" = SunOS &&
689     uname -r | grep '^5' >/dev/null; then
690   if test $ac_cv_prog_gxx = yes ; then
691     $1="${$1} -Wl[,]-R$2"
692   else
693     $1="${$1} -R$2"
694   fi
695 fi])
696
697
698 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
699 dnl var-name.
700 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
701
702 ### Check for a headers existence and location iff it exists
703 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
704 ## It almost works.  I've tried a few variations but they give errors
705 ## of one sort or other: bad substitution or file not found etc.  The
706 ## actual header _is_ found though and the cache variable is set however
707 ## the reported setting (on screen) is equal to $ac_safe for some unknown
708 ## reason.
709 ## Additionally, autoheader can't figure out what to use as the name in
710 ## the config.h.in file so we need to write our own entries there -- one for
711 ## each header in the form PATH_HEADER_NAME_H
712 ##
713 AC_DEFUN([LYX_PATH_HEADER],
714 [ AC_CHECK_HEADER($1,[
715   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
716 ### the only remaining problem is getting the second parameter to this
717 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
718 ### of $ac_safe being printed.
719   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
720   [ cat > conftest.$ac_ext <<EOF
721 #line __oline__ "configure"
722 #include "confdefs.h"
723
724 #include <$1>
725 EOF
726 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
727   grep $1  2>/dev/null | \
728   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
729 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
730 rm -f conftest*])
731   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
732 ])
733 ### end of LYX_PATH_HEADER
734
735 ## Check what kind of packaging should be used at install time.
736 ## The default is autodetected.
737 AC_DEFUN([LYX_USE_PACKAGING],
738 [AC_MSG_CHECKING([what packaging should be used])
739 AC_ARG_WITH(packaging,
740   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
741                             Possible values: posix, windows, macosx, haiku])],
742   [lyx_use_packaging="$withval"], [
743   case $host in
744     *-apple-darwin*) lyx_use_packaging=macosx ;;
745     *-pc-mingw*) lyx_use_packaging=windows ;;
746     *-mingw32*) lyx_use_packaging=windows ;;
747     *haiku*) lyx_use_packaging=haiku ;;
748     *) lyx_use_packaging=posix ;;
749   esac])
750 AC_MSG_RESULT($lyx_use_packaging)
751 lyx_install_posix=false
752 lyx_install_macosx=false
753 lyx_install_cygwin=false
754 lyx_install_windows=false
755 case $lyx_use_packaging in
756    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
757            PACKAGE=LyX${version_suffix}
758            default_prefix="/Applications/${PACKAGE}.app"
759            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
760            bindir='${prefix}/Contents/MacOS'
761            libdir='${prefix}/Contents/Resources'
762            datarootdir='${prefix}/Contents/Resources'
763            pkgdatadir='${datadir}'
764            mandir='${datadir}/man'
765            lyx_install_macosx=true ;;
766   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
767            PACKAGE=LyX${version_suffix}
768            default_prefix="C:/Program Files/${PACKAGE}"
769            bindir='${prefix}/bin'
770            libdir='${prefix}/Resources'
771            datarootdir='${prefix}/Resources'
772            pkgdatadir='${datadir}'
773            mandir='${prefix}/Resources/man'
774            lyx_install_windows=true ;;
775     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
776            PACKAGE=lyx${version_suffix}
777            program_suffix=$version_suffix
778            pkgdatadir='${datadir}/${PACKAGE}'
779            default_prefix=$ac_default_prefix
780            case ${host} in
781              *cygwin*) lyx_install_cygwin=true ;;
782              *apple-darwin*) lyx_install_macosx=true ;;
783            esac
784            lyx_install_posix=true ;;
785         haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
786            PACKAGE=lyx${version_suffix}
787            program_suffix=$version_suffix
788            pkgdatadir='${datadir}/${PACKAGE}'
789            default_prefix=$ac_default_prefix
790            lyx_install_posix=true ;;
791     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
792 esac
793 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
794 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
795 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
796 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
797 AC_SUBST(pkgdatadir)
798 AC_SUBST(program_suffix)
799 ])
800
801
802 ## ------------------------------------------------------------------------
803 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
804 ## one or two arguments.
805 ##
806 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
807 ## ------------------------------------------------------------------------
808 ##
809 AC_DEFUN([AC_FUNC_MKDIR],
810 [AC_CHECK_FUNCS([mkdir _mkdir])
811 AC_CACHE_CHECK([whether mkdir takes one argument],
812                [ac_cv_mkdir_takes_one_arg],
813 [AC_TRY_COMPILE([
814 #include <sys/stat.h>
815 #if HAVE_UNISTD_H
816 #  include <unistd.h>
817 #endif
818 ], [mkdir (".");],
819 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
820 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
821   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
822             [Define if mkdir takes only one argument.])
823 fi
824 ])
825
826
827 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
828 dnl (which may be a relative path, and need not refer to any existing
829 dnl entity).
830
831 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
832 dnl native Win32 path name, (but with slashes, not backslashes).
833
834 dnl On any other system, it is simply the result which would be obtained
835 dnl if PATHNAME represented an existing directory, and the pwd command was
836 dnl executed in that directory.
837 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
838 [ac_dir="$2"
839  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
840     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
841  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
842  do
843    ac_dir=`AS_DIRNAME(["$ac_dir"])`
844  done
845  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
846  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
847  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
848    s?/*$[]??'`
849 ])
850
851 dnl this is used by the macro blow to general a proper config.h.in entry
852 m4_define([LYX_AH_CHECK_DECL],
853 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
854   [Define if you have the prototype for function `$1'])])
855
856 dnl Check things are declared in headers to avoid errors or warnings.
857 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
858 dnl Defines HAVE_DECL_{FUNCTION}
859 AC_DEFUN([LYX_CHECK_DECL],
860 [LYX_AH_CHECK_DECL($1)
861 for ac_header in $2
862 do
863   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
864   AC_EGREP_HEADER($1, $ac_header,
865       [AC_MSG_RESULT(yes)
866        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
867        break],
868       [AC_MSG_RESULT(no)])
869 done])
870
871 dnl this is used by the macro below to generate a proper config.h.in entry
872 m4_define([LYX_AH_CHECK_DEF],
873 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
874   [Define to 1 if `$1' is defined in `$2'])])
875
876 dnl Check whether name is defined in header by using it in codesnippet.
877 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
878 dnl Defines HAVE_DEF_{NAME}
879 AC_DEFUN([LYX_CHECK_DEF],
880 [LYX_AH_CHECK_DEF($1, $2)
881  AC_MSG_CHECKING([whether $1 is defined by header $2])
882  save_CPPFLAGS=$CPPFLAGS
883  CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
884  save_CXXFLAGS=$CXXFLAGS
885  CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
886  AC_LANG_PUSH(C++)
887  AC_TRY_COMPILE([#include <$2>], [$3],
888      lyx_have_def_name=yes,
889      lyx_have_def_name=no)
890  AC_LANG_POP(C++)
891  CXXFLAGS=$save_CXXFLAGS
892  CPPFLAGS=$save_CPPFLAGS
893  AC_MSG_RESULT($lyx_have_def_name)
894  if test "x$lyx_have_def_name" = xyes; then
895    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
896  fi
897 ])
898
899 dnl Extract the single digits from PACKAGE_VERSION and make them available.
900 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
901 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
902 AC_DEFUN([LYX_SET_VERSION_INFO],
903 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
904  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
905  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
906  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
907  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
908  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
909  test "x$lyx_patch" = "x" && lyx_patch=0
910  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
911  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
912  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
913  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
914  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
915  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
916  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
917  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
918 ])
919
920 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
921 # ---------------------------------------------------------------------------
922 # Copied from autoconf 2.68, added a check that python version is < 3.0
923 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
924 # Run ACTION-IF-FALSE otherwise.
925 # This test uses sys.hexversion instead of the string equivalent (first
926 # word of sys.version), in order to cope with versions such as 2.2c1.
927 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
928 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
929  [prog="import sys
930 # split strings by '.' and convert to numeric.  Append some zeros
931 # because we need at least 4 digits for the hex conversion.
932 # map returns an iterator in Python 3.0 and a list in 2.x
933 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
934 minverhex = 0
935 maxverhex = 50331648 # = 3.0.0.0
936 # xrange is not present in Python 3.0 and range returns an iterator
937 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
938 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
939   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])