]> git.lyx.org Git - lyx.git/blob - config/lyxinclude.m4
Let InsetSpecialChar draw its background when necessary
[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_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
251 AC_DEFUN([LYX_LIB_STDCXX],
252 [AC_CACHE_CHECK([whether STL is libstdc++],
253                [lyx_cv_lib_stdcxx],
254 [AC_TRY_COMPILE([#include<vector>], [
255 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
256             this is not libstdc++
257 #endif
258 ],
259 [lyx_cv_lib_stdcxx=yes], [lyx_cv_lib_stdcxx=no])])
260 ])
261
262
263 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
264 dnl        if the STL library is GNU libstdc++ and the C++11 ABI is used.
265 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
266 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
267                [lyx_cv_lib_stdcxx_cxx11_abi],
268 [AC_TRY_COMPILE([#include<vector>], [
269 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
270             this is not libstdc++ using the C++11 ABI
271 #endif
272 ],
273 [lyx_cv_lib_stdcxx_cxx11_abi=yes], [lyx_cv_lib_stdcxx_cxx11_abi=no])])
274 ])
275
276
277 AC_DEFUN([LYX_PROG_CXX],
278 [AC_REQUIRE([AC_PROG_CXX])
279 AC_REQUIRE([AC_PROG_CXXCPP])
280
281 AC_LANG_PUSH(C++)
282 LYX_PROG_CLANG
283 LYX_CXX_CXX11_FLAGS
284 LYX_LIB_STDCXX
285 LYX_LIB_STDCXX_CXX11_ABI
286 LYX_CXX_USE_REGEX
287 AC_LANG_POP(C++)
288
289 if test $lyx_cv_lib_stdcxx = "yes" ; then
290   if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
291     AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
292   else
293     AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
294   fi
295 else
296   if test $lyx_cv_prog_clang = "yes" ; then
297     AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
298   fi
299 fi
300
301 ### We might want to get or shut warnings.
302 AC_ARG_ENABLE(warnings,
303   AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
304   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
305         enable_warnings=yes;
306     else
307         enable_warnings=no;
308     fi;])
309 if test x$enable_warnings = xyes ; then
310   lyx_flags="$lyx_flags warnings"
311 fi
312
313 ### We might want to disable debug
314 AC_ARG_ENABLE(debug,
315   AC_HELP_STRING([--enable-debug],[enable debug information]),,
316   [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
317 )
318
319 AC_ARG_ENABLE(stdlib-debug,
320   AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
321   [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes], 
322           [enable_stdlib_debug=no])]
323 )
324
325 ### set up optimization
326 AC_ARG_ENABLE(optimization,
327     AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
328     enable_optimization=yes;)
329 case $enable_optimization in
330     yes)
331         if test $lyx_devel_version = yes ; then
332             lyx_optim=-O
333         else
334             lyx_optim=-O2
335         fi;;
336     no) lyx_optim=;;
337     *) lyx_optim=${enable_optimization};;
338 esac
339
340 AC_ARG_ENABLE(assertions,
341   AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
342   [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
343           [enable_assertions=no])]
344 )
345 if test "x$enable_assertions" = xyes ; then
346    lyx_flags="$lyx_flags assertions"
347    AC_DEFINE(ENABLE_ASSERTIONS,1,
348     [Define if you want assertions to be enabled in the code])
349 fi
350
351 # set the compiler options correctly.
352 if test x$GXX = xyes; then
353   dnl clang++ pretends to be g++ 4.2.1; this is not useful
354   if test x$CLANG = xno; then
355     dnl Useful for global version info
356     gxx_version=`${CXX} -dumpversion`
357     CXX_VERSION="($gxx_version)"
358   else
359     gxx_version=clang-$clang_version
360     CXX_VERSION="($clang_version)"
361   fi
362
363   AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
364   if test x$enable_debug = xyes ; then
365       AM_CXXFLAGS="-g $AM_CXXFLAGS"
366   fi
367   if test $build_type = gprof ; then
368     AM_CXXFLAGS="$AM_CXXFLAGS -pg"
369     AM_LDFLAGS="$AM_LDFLAGS -pg"
370   fi
371   if test $build_type = profiling ; then
372     AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
373   fi
374
375   if test x$USE_QT5 = xyes ; then
376       AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
377   fi
378   dnl Warnings are for preprocessor too
379   if test x$enable_warnings = xyes ; then
380       AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
381   fi
382   case $gxx_version in
383       2.*|3.*) AC_ERROR([gcc >= 4.6 is required]);;
384       4.0*|4.1*|4.2*|4.3*|4.4*|4.5*) AC_ERROR([gcc >= 4.6 is required]);;
385   esac
386   if test x$enable_stdlib_debug = xyes ; then
387     dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
388     dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
389     case $gxx_version in
390       *)
391         lyx_flags="$lyx_flags stdlib-debug"
392         AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
393         AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
394         ;;
395     esac
396   fi
397 fi
398
399 # Some additional flags may be needed
400 if test x$GXX = xyes; then
401     case $gxx_version in
402       clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
403         dnl boost contains pragmas that are annoying on older clang versions
404         AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
405       clang*)
406         dnl the more recent versions support the deprecated-register warning,
407         dnl which  is very annoying with Qt4.x right now.
408         AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-register";;
409     esac
410 fi
411 ])
412
413 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
414 dnl        be used.
415 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
416         AC_MSG_CHECKING([whether to use included boost library])
417         AC_ARG_WITH(included-boost,
418             [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])],
419             [lyx_cv_with_included_boost=$withval],
420             [lyx_cv_with_included_boost=yes])
421         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
422         AC_MSG_RESULT([$lyx_cv_with_included_boost])
423         if test x$lyx_cv_with_included_boost = xyes ; then
424             BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
425             if test $lyx_std_regex = yes ; then
426               BOOST_LIBS=""
427             else
428               BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
429             fi
430         else
431             BOOST_INCLUDES=
432             if test $lyx_std_regex = yes ; then
433               BOOST_LIBS=""
434             else
435               AC_LANG_PUSH(C++)
436               save_LIBS=$LIBS
437
438               AC_MSG_CHECKING([for multithreaded boost libraries])
439               LIBS="$save_LIBS -lboost_regex-mt $LIBTHREAD"
440               AC_LINK_IFELSE(
441                 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
442                         [boost::regex reg;])],
443                 [AC_MSG_RESULT([yes])
444                  BOOST_MT="-mt"],
445                 [AC_MSG_RESULT([no])
446                  AC_MSG_CHECKING([for plain boost libraries])
447                  LIBS="$save_LIBS -lboost_regex"
448                  AC_LINK_IFELSE(
449                      [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
450                              [boost::regex reg;])],
451                      [AC_MSG_RESULT([yes])
452                       BOOST_MT=""],
453                      [AC_MSG_RESULT([no])
454                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
455                  ])
456               ])
457               LIBS=$save_LIBS
458               AC_LANG_POP(C++)
459
460               dnl In general, system boost libraries are incompatible with
461               dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
462               dnl details.
463               if test $enable_stdlib_debug = "yes" ; then
464                 LYX_WARNING([Compiling LyX with stdlib-debug and system boost libraries may lead to
465    crashes. Consider using --disable-stdlib-debug or removing
466    --without-included-boost.])
467               fi
468
469               BOOST_LIBS="-lboost_regex${BOOST_MT}"
470             fi
471         fi
472         AC_SUBST(BOOST_INCLUDES)
473         AC_SUBST(BOOST_LIBS)
474 ])
475
476
477 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
478 dnl        be used.
479 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
480   AC_MSG_CHECKING([whether to use included iconv library])
481   AC_ARG_WITH(included-iconv,
482     [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])],
483     [lyx_cv_with_included_iconv=$withval],
484     [lyx_cv_with_included_iconv=no])
485   AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
486   AC_MSG_RESULT([$lyx_cv_with_included_iconv])
487   if test x$lyx_cv_with_included_iconv = xyes ; then
488 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
489     AC_EILSEQ
490     AC_TYPE_MBSTATE_T
491     AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
492 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.14/lib/loop_wchar.h.
493     if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
494       USE_MBSTATE_T=1
495     else
496       USE_MBSTATE_T=0
497     fi
498     AC_SUBST([USE_MBSTATE_T])
499     AC_CACHE_CHECK([whether <wchar.h> is standalone],
500       [gl_cv_header_wchar_h_standalone],
501       [AC_COMPILE_IFELSE(
502         [AC_LANG_PROGRAM(
503           [[#include <wchar.h>
504             wchar_t w;]],
505           [[]])],
506         [gl_cv_header_wchar_h_standalone=yes],
507         [gl_cv_header_wchar_h_standalone=no])])
508     if test $gl_cv_header_wchar_h_standalone = yes; then
509       BROKEN_WCHAR_H=0
510     else
511       BROKEN_WCHAR_H=1
512     fi
513     AC_SUBST([BROKEN_WCHAR_H])
514 dnl we want const correctness
515     AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
516       [Define as const if the declaration of iconv() needs const.])
517     ICONV_CONST=const
518     AC_SUBST([ICONV_CONST])
519 dnl we build a static lib
520     DLL_VARIABLE=
521     AC_SUBST([DLL_VARIABLE])
522     ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.14 -I$(top_builddir)/3rdparty/libiconv'
523     ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
524     ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.14/include/iconv.h.in
525   else
526     ICONV_INCLUDES=
527     AM_ICONV
528     if test "$am_cv_func_iconv" = no; then
529       AC_MSG_ERROR([cannot find required library iconv.])
530     else
531       ICONV_LIBS="$LIBICONV"
532     fi
533     ICONV_ICONV_H_IN=
534   fi
535   AC_SUBST(ICONV_INCLUDES)
536   AC_SUBST(ICONV_LIBS)
537   AC_SUBST(ICONV_ICONV_H_IN)
538 ])
539
540
541 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
542 dnl        be used.
543 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
544   AC_MSG_CHECKING([whether to use included zlib library])
545   AC_ARG_WITH(included-zlib,
546     [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])],
547     [lyx_cv_with_included_zlib=$withval],
548     [lyx_cv_with_included_zlib=no])
549   AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
550   AC_MSG_RESULT([$lyx_cv_with_included_zlib])
551   if test x$lyx_cv_with_included_zlib = xyes ; then
552     ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
553     ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
554     mkdir -p 3rdparty/zlib
555 dnl include standard config.h for HAVE_UNISTD_H
556     echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
557 dnl prevent clash with system zlib that might be dragged in by other libs
558     echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
559     cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
560   else
561     ZLIB_INCLUDES=
562     AC_CHECK_HEADERS(zlib.h,
563       [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
564       [LYX_LIB_ERROR(zlib.h,zlib)])
565   fi
566   AC_SUBST(ZLIB_INCLUDES)
567   AC_SUBST(ZLIB_LIBS)
568 ])
569
570
571 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
572 dnl        necessary APIs are available to print callstacks.
573 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
574 [AC_CACHE_CHECK([whether printing callstack is possible],
575                [lyx_cv_callstack_printing],
576 [AC_TRY_COMPILE([
577 #include <execinfo.h>
578 #include <cxxabi.h>
579 ], [
580         void* array[200];
581         size_t size = backtrace(array, 200);
582         backtrace_symbols(array, size);
583         int status = 0;
584         abi::__cxa_demangle("abcd", 0, 0, &status);
585 ],
586 [lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
587 if test x"$lyx_cv_callstack_printing" = xyes; then
588   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
589             [Define if callstack can be printed])
590 fi
591 ])
592
593
594 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
595 dnl        be used.
596 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
597         AC_MSG_CHECKING([whether to use included MyThes library])
598         AC_ARG_WITH(included-mythes,
599             [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])],
600             [lyx_cv_with_included_mythes=$withval],
601             [lyx_cv_with_included_mythes=yes])
602         AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
603         AC_MSG_RESULT([$lyx_cv_with_included_mythes])
604         if test x$lyx_cv_with_included_mythes != xyes ; then
605                 AC_LANG_PUSH(C++)
606                 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
607                 if test x$ac_cv_header_mythes_h != xyes; then
608                         AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
609                 fi
610                 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no])
611                 if test x$lyx_mythes != xyes; then
612                         AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no])
613                 fi
614                 AC_LANG_POP(C++)
615                 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
616                         AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
617                 fi
618                 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
619                 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
620                 AC_SUBST(MYTHES_LIBS)
621         fi
622 ])
623
624
625 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
626 dnl                       [default-yes-value])
627 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
628 dnl  resulting directory name in 'dir-var-name'.
629 AC_DEFUN([LYX_WITH_DIR],[
630   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
631   AC_MSG_CHECKING([for $2])
632   if test -z "$with_$3"; then
633      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
634   else
635     test "x$with_$3" = xyes && with_$3=$5
636     lyx_cv_$3="$with_$3"
637   fi
638   AC_MSG_RESULT($lyx_cv_$3)])
639
640
641 dnl Usage: LYX_LOOP_DIR(value,action)
642 dnl Executes action for values of variable `dir' in `values'. `values' can
643 dnl use ":" as a separator.
644 AC_DEFUN([LYX_LOOP_DIR],[
645 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
646 for dir in `eval "echo $1"`; do
647   if test ! "$dir" = NONE; then
648     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
649     $2
650   fi
651 done
652 IFS=$ac_save_ifs
653 ])
654
655
656 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
657 dnl var-name.
658 AC_DEFUN([LYX_ADD_LIB_DIR],[
659 $1="${$1} -L$2"
660 if test "`(uname) 2>/dev/null`" = SunOS &&
661     uname -r | grep '^5' >/dev/null; then
662   if test $ac_cv_prog_gxx = yes ; then
663     $1="${$1} -Wl[,]-R$2"
664   else
665     $1="${$1} -R$2"
666   fi
667 fi])
668
669
670 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
671 dnl var-name.
672 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
673
674 ### Check for a headers existence and location iff it exists
675 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
676 ## It almost works.  I've tried a few variations but they give errors
677 ## of one sort or other: bad substitution or file not found etc.  The
678 ## actual header _is_ found though and the cache variable is set however
679 ## the reported setting (on screen) is equal to $ac_safe for some unknown
680 ## reason.
681 ## Additionally, autoheader can't figure out what to use as the name in
682 ## the config.h.in file so we need to write our own entries there -- one for
683 ## each header in the form PATH_HEADER_NAME_H
684 ##
685 AC_DEFUN([LYX_PATH_HEADER],
686 [ AC_CHECK_HEADER($1,[
687   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
688 ### the only remaining problem is getting the second parameter to this
689 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
690 ### of $ac_safe being printed.
691   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
692   [ cat > conftest.$ac_ext <<EOF
693 #line __oline__ "configure"
694 #include "confdefs.h"
695
696 #include <$1>
697 EOF
698 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
699   grep $1  2>/dev/null | \
700   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
701 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
702 rm -f conftest*])
703   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
704 ])
705 ### end of LYX_PATH_HEADER
706
707 ## Check what kind of packaging should be used at install time.
708 ## The default is autodetected.
709 AC_DEFUN([LYX_USE_PACKAGING],
710 [AC_MSG_CHECKING([what packaging should be used])
711 AC_ARG_WITH(packaging,
712   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
713                             Possible values: posix, windows, macosx, haiku])],
714   [lyx_use_packaging="$withval"], [
715   case $host in
716     *-apple-darwin*) lyx_use_packaging=macosx ;;
717     *-pc-mingw*) lyx_use_packaging=windows ;;
718     *-mingw32*) lyx_use_packaging=windows ;;
719     *haiku*) lyx_use_packaging=haiku ;;
720     *) lyx_use_packaging=posix ;;
721   esac])
722 AC_MSG_RESULT($lyx_use_packaging)
723 lyx_install_posix=false
724 lyx_install_macosx=false
725 lyx_install_cygwin=false
726 lyx_install_windows=false
727 case $lyx_use_packaging in
728    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
729            PACKAGE=LyX${version_suffix}
730            default_prefix="/Applications/${PACKAGE}.app"
731            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
732            bindir='${prefix}/Contents/MacOS'
733            libdir='${prefix}/Contents/Resources'
734            datarootdir='${prefix}/Contents/Resources'
735            pkgdatadir='${datadir}'
736            mandir='${datadir}/man'
737            lyx_install_macosx=true ;;
738   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
739            PACKAGE=LyX${version_suffix}
740            default_prefix="C:/Program Files/${PACKAGE}"
741            bindir='${prefix}/bin'
742            libdir='${prefix}/Resources'
743            datarootdir='${prefix}/Resources'
744            pkgdatadir='${datadir}'
745            mandir='${prefix}/Resources/man'
746            lyx_install_windows=true ;;
747     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
748            PACKAGE=lyx${version_suffix}
749            program_suffix=$version_suffix
750            pkgdatadir='${datadir}/${PACKAGE}'
751            default_prefix=$ac_default_prefix
752            case ${host} in
753              *cygwin*) lyx_install_cygwin=true ;;
754              *apple-darwin*) lyx_install_macosx=true ;;
755            esac
756            lyx_install_posix=true ;;
757         haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
758            PACKAGE=lyx${version_suffix}
759            program_suffix=$version_suffix
760            pkgdatadir='${datadir}/${PACKAGE}'
761            default_prefix=$ac_default_prefix
762            lyx_install_posix=true ;;
763     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
764 esac
765 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
766 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
767 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
768 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
769 AC_SUBST(pkgdatadir)
770 AC_SUBST(program_suffix)
771 ])
772
773
774 ## ------------------------------------------------------------------------
775 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
776 ## one or two arguments.
777 ##
778 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
779 ## ------------------------------------------------------------------------
780 ##
781 AC_DEFUN([AC_FUNC_MKDIR],
782 [AC_CHECK_FUNCS([mkdir _mkdir])
783 AC_CACHE_CHECK([whether mkdir takes one argument],
784                [ac_cv_mkdir_takes_one_arg],
785 [AC_TRY_COMPILE([
786 #include <sys/stat.h>
787 #if HAVE_UNISTD_H
788 #  include <unistd.h>
789 #endif
790 ], [mkdir (".");],
791 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
792 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
793   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
794             [Define if mkdir takes only one argument.])
795 fi
796 ])
797
798
799 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
800 dnl (which may be a relative path, and need not refer to any existing
801 dnl entity).
802
803 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
804 dnl native Win32 path name, (but with slashes, not backslashes).
805
806 dnl On any other system, it is simply the result which would be obtained
807 dnl if PATHNAME represented an existing directory, and the pwd command was
808 dnl executed in that directory.
809 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
810 [ac_dir="$2"
811  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
812     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
813  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
814  do
815    ac_dir=`AS_DIRNAME(["$ac_dir"])`
816  done
817  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
818  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
819  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
820    s?/*$[]??'`
821 ])
822
823 dnl this is used by the macro blow to general a proper config.h.in entry
824 m4_define([LYX_AH_CHECK_DECL],
825 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
826   [Define if you have the prototype for function `$1'])])
827
828 dnl Check things are declared in headers to avoid errors or warnings.
829 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
830 dnl Defines HAVE_DECL_{FUNCTION}
831 AC_DEFUN([LYX_CHECK_DECL],
832 [LYX_AH_CHECK_DECL($1)
833 for ac_header in $2
834 do
835   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
836   AC_EGREP_HEADER($1, $ac_header,
837       [AC_MSG_RESULT(yes)
838        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
839        break],
840       [AC_MSG_RESULT(no)])
841 done])
842
843 dnl this is used by the macro below to generate a proper config.h.in entry
844 m4_define([LYX_AH_CHECK_DEF],
845 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
846   [Define to 1 if `$1' is defined in `$2'])])
847
848 dnl Check whether name is defined in header by using it in codesnippet.
849 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
850 dnl Defines HAVE_DEF_{NAME}
851 AC_DEFUN([LYX_CHECK_DEF],
852 [LYX_AH_CHECK_DEF($1, $2)
853  AC_MSG_CHECKING([whether $1 is defined by header $2])
854  save_CPPFLAGS=$CPPFLAGS
855  CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
856  save_CXXFLAGS=$CXXFLAGS
857  CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
858  AC_LANG_PUSH(C++)
859  AC_TRY_COMPILE([#include <$2>], [$3],
860      lyx_have_def_name=yes,
861      lyx_have_def_name=no)
862  AC_LANG_POP(C++)
863  CXXFLAGS=$save_CXXFLAGS
864  CPPFLAGS=$save_CPPFLAGS
865  AC_MSG_RESULT($lyx_have_def_name)
866  if test "x$lyx_have_def_name" = xyes; then
867    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
868  fi
869 ])
870
871 dnl Extract the single digits from PACKAGE_VERSION and make them available.
872 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
873 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
874 AC_DEFUN([LYX_SET_VERSION_INFO],
875 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
876  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
877  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
878  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
879  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
880  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
881  test "x$lyx_patch" = "x" && lyx_patch=0
882  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
883  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
884  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
885  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
886  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
887  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
888  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
889  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
890 ])
891
892 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
893 # ---------------------------------------------------------------------------
894 # Copied from autoconf 2.68, added a check that python version is < 3.0
895 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
896 # Run ACTION-IF-FALSE otherwise.
897 # This test uses sys.hexversion instead of the string equivalent (first
898 # word of sys.version), in order to cope with versions such as 2.2c1.
899 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
900 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
901  [prog="import sys
902 # split strings by '.' and convert to numeric.  Append some zeros
903 # because we need at least 4 digits for the hex conversion.
904 # map returns an iterator in Python 3.0 and a list in 2.x
905 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
906 minverhex = 0
907 maxverhex = 50331648 # = 3.0.0.0
908 # xrange is not present in Python 3.0 and range returns an iterator
909 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
910 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
911   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])