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)
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,
9 [pre\|alpha\|beta\|rc], [prerelease],
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
18 AC_MSG_CHECKING([for build type])
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)]),
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]);;
31 [build_type=LYX_BUILD_TYPE])
32 AC_MSG_RESULT([$build_type])
33 lyx_flags="$lyx_flags build=$build_type"
35 development) lyx_devel_version=yes
36 LYX_DATE="not released yet" ;;
37 prerelease) lyx_prerelease=yes ;;
40 AC_SUBST(lyx_devel_version)
44 dnl Define the option to set a LyX version on installed executables and directories
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";
55 withval="-"AC_PACKAGE_VERSION
56 ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
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])
66 dnl Check whether to configure for Qt4 or Qt5. Default is Qt5.
68 AC_DEFUN([LYX_CHECK_QT5],[
69 AC_MSG_CHECKING([whether Qt5 is disabled])
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
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
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.])])
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
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)
112 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
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
130 if test -n "[$]$1"; then
136 test -n "[$]$1" && break
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],
145 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
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],
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
160 clang_version=$clang_major.$clang_minor.$clang_patchlevel
162 lyx_cv_clang_version=$clang_version])
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
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>
186 static_assert(sizeof(int) <= sizeof(T), "not big enough");
189 typedef check<check<bool>> right_angle_brackets;
194 TestDeleted() = delete;
201 typedef check<int> check_type;
203 check_type&& cr = static_cast<check_type&&>(c);
205 auto d = a;]], [[]])],[lyx_cv_cxx11_flags=$flag; break],[])
206 CXXFLAGS=$save_CXXFLAGS
207 CPPFLAGS=$save_CPPFLAGS
209 if test x$lyx_cv_cxx11_flags = xnone ; then
210 AC_MSG_ERROR([Cannot find suitable mode for compiler $CXX])
212 AM_CXXFLAGS="$lyx_cv_cxx11_flags $AM_CXXFLAGS"
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([[
236 typedef std::regex_iterator<const char *> Myiter;
238 const char *pat = "axayaz";
239 Myiter::regex_type rx("a");
240 Myiter next(pat, pat + strlen(pat), rx);
242 ]])],[lyx_std_regex=yes],[lyx_std_regex=no])
243 CXXFLAGS=$save_CXXFLAGS
244 CPPFLAGS=$save_CPPFLAGS
245 AC_MSG_RESULT([$lyx_std_regex])
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])
252 AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
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([[
267 static std::once_flag flag;
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])
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])
278 AM_CONDITIONAL([LYX_USE_STD_CALL_ONCE], test $lyx_std_call_once = yes)
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++],
286 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
287 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
288 this is not libstdc++
290 ]])],[lyx_cv_lib_stdcxx=yes],[lyx_cv_lib_stdcxx=no])])
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
303 ]])],[lyx_cv_lib_stdcxx_cxx11_abi=yes],[lyx_cv_lib_stdcxx_cxx11_abi=no])])
307 AC_DEFUN([LYX_PROG_CXX],
308 [AC_REQUIRE([AC_PROG_CXX])
309 AC_REQUIRE([AC_PROG_CXXCPP])
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}]
319 LYX_CXX_CXX11_FLAGS($enable_cxx_mode)
321 LYX_LIB_STDCXX_CXX11_ABI
323 LYX_CXX_USE_CALL_ONCE
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])
330 AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
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++])
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
346 if test x$enable_warnings = xyes ; then
347 lyx_flags="$lyx_flags warnings"
350 ### We might want to disable debug
352 AS_HELP_STRING([--enable-debug],[enable debug information]),,
353 [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
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])]
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
368 if test $lyx_devel_version = yes ; then
374 *) lyx_optim=${enable_optimization};;
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])]
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])
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`
396 *) gxx_version=`${CXX} -dumpfullversion` ;;
398 CXX_VERSION="($gxx_version)"
400 gxx_version=clang-$clang_version
401 CXX_VERSION="($clang_version)"
404 AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
405 if test x$enable_debug = xyes ; then
406 AM_CXXFLAGS="-g $AM_CXXFLAGS"
408 if test $build_type = gprof ; then
409 AM_CXXFLAGS="$AM_CXXFLAGS -pg"
410 AM_LDFLAGS="$AM_LDFLAGS -pg"
412 if test $build_type = profiling ; then
413 AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
416 if test x$USE_QT5 = xyes ; then
417 AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
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.
425 AX_CHECK_COMPILE_FLAG([-Wno-deprecated-copy],
426 [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-copy"], [], [-Werror])
430 2.*|3.*|4.@<:@0-6@:>@) AC_MSG_ERROR([gcc >= 4.7 is required]);;
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")
441 enable_stdlib_debug=no
446 # Some additional flags may be needed
447 if test x$GXX = xyes; then
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";;
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";;
460 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
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
476 BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
480 if test $lyx_std_regex = yes ; then
486 AC_MSG_CHECKING([for multithreaded boost libraries])
487 LIBS="$save_LIBS -lboost_regex-mt $LIBTHREAD"
489 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
490 [boost::regex reg;])],
491 [AC_MSG_RESULT([yes])
494 AC_MSG_CHECKING([for plain boost libraries])
495 LIBS="$save_LIBS -lboost_regex"
497 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
498 [boost::regex reg;])],
499 [AC_MSG_RESULT([yes])
502 AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
508 dnl In general, system boost libraries are incompatible with
509 dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
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.])
517 BOOST_LIBS="-lboost_regex${BOOST_MT}"
520 AC_SUBST(BOOST_INCLUDES)
525 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
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"
538 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
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
548 AC_SUBST([USE_MBSTATE_T])
549 AC_CACHE_CHECK([whether <wchar.h> is standalone],
550 [gl_cv_header_wchar_h_standalone],
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
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.])
568 AC_SUBST([ICONV_CONST])
569 dnl we build a static lib
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
578 if test "$am_cv_func_iconv" = no; then
579 AC_MSG_ERROR([cannot find required library iconv.])
581 ICONV_LIBS="$LIBICONV"
585 AC_SUBST(ICONV_INCLUDES)
587 AC_SUBST(ICONV_ICONV_H_IN)
591 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
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
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)])
617 AC_SUBST(ZLIB_INCLUDES)
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"
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)
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>
652 size_t size = backtrace(array, 200);
653 backtrace_symbols(array, size);
655 abi::__cxa_demangle("abcd", 0, 0, &status);
656 ]])],[],[lyx_cv_callstack_printing=no])])
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"
667 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
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
676 use_included_mythes=yes
677 AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
678 [mythes_h_location="<$ac_header>"
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"
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])
690 if test $use_included_mythes != no ; then
691 AC_MSG_RESULT([not found])
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"
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])
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)
721 test "x$with_$3" = xyes && with_$3=$5
724 AC_MSG_RESULT($lyx_cv_$3)
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])
743 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
745 AC_DEFUN([LYX_ADD_LIB_DIR],[
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"
757 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
759 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
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
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
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"
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"
790 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
792 ### end of LYX_PATH_HEADER
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"], [
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 ;;
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
840 *cygwin*) lyx_install_cygwin=true ;;
841 *apple-darwin*) lyx_install_macosx=true ;;
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.]) ;;
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)
857 AC_SUBST(program_suffix)
861 ## ------------------------------------------------------------------------
862 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
863 ## one or two arguments.
865 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
866 ## ------------------------------------------------------------------------
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>
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.])
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
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).
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],
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`
901 ac_dir=`AS_DIRNAME(["$ac_dir"])`
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/?"'
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`
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)
921 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
922 AC_EGREP_HEADER($1, $ac_header,
924 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
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'
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"
945 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$2>]], [[$3]])],[lyx_have_def_name=yes],[lyx_have_def_name=no])
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))
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")