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