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