]> git.lyx.org Git - features.git/blob - config/lyxinclude.m4
9a0bef81a2eff196a0143db3bfe13ff5845e2f06
[features.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_ARG_WITH(included-mythes,
630     [AC_HELP_STRING([--with-included-mythes], [force to use the MyThes lib supplied with LyX])],
631     [use_included_mythes=$withval],
632     [use_included_mythes=no])
633   if test x$use_included_mythes != xyes ; then
634     AC_LANG_PUSH(C++)
635     use_included_mythes=yes
636     AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
637       [mythes_h_location="<$ac_header>"
638        save_LIBS=$LIBS
639        AC_MSG_CHECKING([checking for MyThes library])
640        for ac_lib in mythes mythes-1.2 ; do
641          LIBS="-l$ac_lib $save_LIBS"
642          AC_LINK_IFELSE(
643            [AC_LANG_PROGRAM([#include <cstdio>]
644               [#include $mythes_h_location], [MyThes dummy("idx","dat")])],
645            [MYTHES_LIBS=-l$ac_lib
646             AC_MSG_RESULT([$MYTHES_LIBS])
647             use_included_mythes=no])
648        done
649        if test $use_included_mythes != no ; then
650          AC_MSG_RESULT([not found])
651        fi
652        break])
653     AC_LANG_POP(C++)
654   fi
655   if test $use_included_mythes = yes ; then
656     mythes_h_location="<mythes.hxx>"
657     MYTHES_INCLUDES='-I$(top_srcdir)/3rdparty/mythes/1.2.5/'
658     MYTHES_LIBS='$(top_builddir)/3rdparty/mythes/liblyxmythes.a'
659     lyx_included_libs="$lyx_included_libs mythes"
660   fi
661   AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$use_included_mythes = xyes)
662   AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$mythes_h_location,[Location of mythes.hxx])
663   AC_SUBST(MYTHES_INCLUDES)
664   AC_SUBST(MYTHES_LIBS)
665   AC_MSG_CHECKING([whether to use included MyThes library])
666   AC_MSG_RESULT([$use_included_mythes])
667 ])
668
669
670 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
671 dnl                       [default-yes-value])
672 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
673 dnl  resulting directory name in 'dir-var-name'.
674 AC_DEFUN([LYX_WITH_DIR],[
675   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
676   AC_MSG_CHECKING([for $2])
677   if test -z "$with_$3"; then
678      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
679   else
680     test "x$with_$3" = xyes && with_$3=$5
681     lyx_cv_$3="$with_$3"
682   fi
683   AC_MSG_RESULT($lyx_cv_$3)
684 ])
685
686
687 dnl Usage: LYX_LOOP_DIR(value,action)
688 dnl Executes action for values of variable `dir' in `values'. `values' can
689 dnl use ":" as a separator.
690 AC_DEFUN([LYX_LOOP_DIR],[
691 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
692 for dir in `eval "echo $1"`; do
693   if test ! "$dir" = NONE; then
694     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
695     $2
696   fi
697 done
698 IFS=$ac_save_ifs
699 ])
700
701
702 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
703 dnl var-name.
704 AC_DEFUN([LYX_ADD_LIB_DIR],[
705 $1="${$1} -L$2"
706 if test "`(uname) 2>/dev/null`" = SunOS &&
707     uname -r | grep '^5' >/dev/null; then
708   if test $ac_cv_prog_gxx = yes ; then
709     $1="${$1} -Wl[,]-R$2"
710   else
711     $1="${$1} -R$2"
712   fi
713 fi])
714
715
716 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
717 dnl var-name.
718 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
719
720 ### Check for a headers existence and location iff it exists
721 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
722 ## It almost works.  I've tried a few variations but they give errors
723 ## of one sort or other: bad substitution or file not found etc.  The
724 ## actual header _is_ found though and the cache variable is set however
725 ## the reported setting (on screen) is equal to $ac_safe for some unknown
726 ## reason.
727 ## Additionally, autoheader can't figure out what to use as the name in
728 ## the config.h.in file so we need to write our own entries there -- one for
729 ## each header in the form PATH_HEADER_NAME_H
730 ##
731 AC_DEFUN([LYX_PATH_HEADER],
732 [ AC_CHECK_HEADER($1,[
733   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
734 ### the only remaining problem is getting the second parameter to this
735 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
736 ### of $ac_safe being printed.
737   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
738   [ cat > conftest.$ac_ext <<EOF
739 #line __oline__ "configure"
740 #include "confdefs.h"
741
742 #include <$1>
743 EOF
744 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
745   grep $1  2>/dev/null | \
746   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
747 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
748 rm -f conftest*])
749   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
750 ])
751 ### end of LYX_PATH_HEADER
752
753 ## Check what kind of packaging should be used at install time.
754 ## The default is autodetected.
755 AC_DEFUN([LYX_USE_PACKAGING],
756 [AC_MSG_CHECKING([what packaging should be used])
757 AC_ARG_WITH(packaging,
758   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
759                             Possible values: posix, windows, macosx, haiku])],
760   [lyx_use_packaging="$withval"], [
761   case $host in
762     *-apple-darwin*) lyx_use_packaging=macosx ;;
763     *-pc-mingw*) lyx_use_packaging=windows ;;
764     *-mingw32*) lyx_use_packaging=windows ;;
765     *haiku*) lyx_use_packaging=haiku ;;
766     *) lyx_use_packaging=posix ;;
767   esac])
768 AC_MSG_RESULT($lyx_use_packaging)
769 lyx_install_posix=false
770 lyx_install_macosx=false
771 lyx_install_cygwin=false
772 lyx_install_windows=false
773 case $lyx_use_packaging in
774    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
775            PACKAGE=LyX${version_suffix}
776            default_prefix="/Applications/${PACKAGE}.app"
777            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
778            bindir='${prefix}/Contents/MacOS'
779            libdir='${prefix}/Contents/Resources'
780            datarootdir='${prefix}/Contents/Resources'
781            pkgdatadir='${datadir}'
782            mandir='${datadir}/man'
783            lyx_install_macosx=true ;;
784   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
785            PACKAGE=LyX${version_suffix}
786            default_prefix="C:/Program Files/${PACKAGE}"
787            bindir='${prefix}/bin'
788            libdir='${prefix}/Resources'
789            datarootdir='${prefix}/Resources'
790            pkgdatadir='${datadir}'
791            mandir='${prefix}/Resources/man'
792            lyx_install_windows=true ;;
793     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
794            PACKAGE=lyx${version_suffix}
795            program_suffix=$version_suffix
796            pkgdatadir='${datadir}/${PACKAGE}'
797            default_prefix=$ac_default_prefix
798            case ${host} in
799              *cygwin*) lyx_install_cygwin=true ;;
800              *apple-darwin*) lyx_install_macosx=true ;;
801            esac
802            lyx_install_posix=true ;;
803         haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
804            PACKAGE=lyx${version_suffix}
805            program_suffix=$version_suffix
806            pkgdatadir='${datadir}/${PACKAGE}'
807            default_prefix=$ac_default_prefix
808            lyx_install_posix=true ;;
809     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
810 esac
811 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
812 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
813 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
814 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
815 AC_SUBST(pkgdatadir)
816 AC_SUBST(program_suffix)
817 ])
818
819
820 ## ------------------------------------------------------------------------
821 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
822 ## one or two arguments.
823 ##
824 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
825 ## ------------------------------------------------------------------------
826 ##
827 AC_DEFUN([AC_FUNC_MKDIR],
828 [AC_CHECK_FUNCS([mkdir _mkdir])
829 AC_CACHE_CHECK([whether mkdir takes one argument],
830                [ac_cv_mkdir_takes_one_arg],
831 [AC_TRY_COMPILE([
832 #include <sys/stat.h>
833 #if HAVE_UNISTD_H
834 #  include <unistd.h>
835 #endif
836 ], [mkdir (".");],
837 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
838 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
839   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
840             [Define if mkdir takes only one argument.])
841 fi
842 ])
843
844
845 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
846 dnl (which may be a relative path, and need not refer to any existing
847 dnl entity).
848
849 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
850 dnl native Win32 path name, (but with slashes, not backslashes).
851
852 dnl On any other system, it is simply the result which would be obtained
853 dnl if PATHNAME represented an existing directory, and the pwd command was
854 dnl executed in that directory.
855 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
856 [ac_dir="$2"
857  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
858     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
859  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
860  do
861    ac_dir=`AS_DIRNAME(["$ac_dir"])`
862  done
863  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
864  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
865  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
866    s?/*$[]??'`
867 ])
868
869 dnl this is used by the macro blow to general a proper config.h.in entry
870 m4_define([LYX_AH_CHECK_DECL],
871 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
872   [Define if you have the prototype for function `$1'])])
873
874 dnl Check things are declared in headers to avoid errors or warnings.
875 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
876 dnl Defines HAVE_DECL_{FUNCTION}
877 AC_DEFUN([LYX_CHECK_DECL],
878 [LYX_AH_CHECK_DECL($1)
879 for ac_header in $2
880 do
881   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
882   AC_EGREP_HEADER($1, $ac_header,
883       [AC_MSG_RESULT(yes)
884        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
885        break],
886       [AC_MSG_RESULT(no)])
887 done])
888
889 dnl this is used by the macro below to generate a proper config.h.in entry
890 m4_define([LYX_AH_CHECK_DEF],
891 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
892   [Define to 1 if `$1' is defined in `$2'])])
893
894 dnl Check whether name is defined in header by using it in codesnippet.
895 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
896 dnl Defines HAVE_DEF_{NAME}
897 AC_DEFUN([LYX_CHECK_DEF],
898 [LYX_AH_CHECK_DEF($1, $2)
899  AC_MSG_CHECKING([whether $1 is defined by header $2])
900  save_CPPFLAGS=$CPPFLAGS
901  CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
902  save_CXXFLAGS=$CXXFLAGS
903  CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
904  AC_LANG_PUSH(C++)
905  AC_TRY_COMPILE([#include <$2>], [$3],
906      lyx_have_def_name=yes,
907      lyx_have_def_name=no)
908  AC_LANG_POP(C++)
909  CXXFLAGS=$save_CXXFLAGS
910  CPPFLAGS=$save_CPPFLAGS
911  AC_MSG_RESULT($lyx_have_def_name)
912  if test "x$lyx_have_def_name" = xyes; then
913    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
914  fi
915 ])
916
917 dnl Extract the single digits from PACKAGE_VERSION and make them available.
918 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
919 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
920 AC_DEFUN([LYX_SET_VERSION_INFO],
921 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
922  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
923  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
924  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
925  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
926  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
927  test "x$lyx_patch" = "x" && lyx_patch=0
928  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
929  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
930  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
931  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
932  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
933  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
934  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
935  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
936 ])
937
938 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
939 # ---------------------------------------------------------------------------
940 # Copied from autoconf 2.68, added a check that python version is < 3.0
941 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
942 # Run ACTION-IF-FALSE otherwise.
943 # This test uses sys.hexversion instead of the string equivalent (first
944 # word of sys.version), in order to cope with versions such as 2.2c1.
945 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
946 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
947  [prog="import sys
948 # split strings by '.' and convert to numeric.  Append some zeros
949 # because we need at least 4 digits for the hex conversion.
950 # map returns an iterator in Python 3.0 and a list in 2.x
951 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
952 minverhex = 0
953 maxverhex = 50331648 # = 3.0.0.0
954 # xrange is not present in Python 3.0 and range returns an iterator
955 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
956 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
957   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])