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 This is hardcoded to make it compile
539 AC_DEFINE([HAVE_WORKING_O_NOFOLLOW], 0, [Define to 1 if O_NOFOLLOW works.])
541 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
544 AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
545 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.15/lib/loop_wchar.h.
546 if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
551 AC_SUBST([USE_MBSTATE_T])
552 AC_CACHE_CHECK([whether <wchar.h> is standalone],
553 [gl_cv_header_wchar_h_standalone],
559 [gl_cv_header_wchar_h_standalone=yes],
560 [gl_cv_header_wchar_h_standalone=no])])
561 if test $gl_cv_header_wchar_h_standalone = yes; then
566 AC_SUBST([BROKEN_WCHAR_H])
567 dnl we want const correctness
568 AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
569 [Define as const if the declaration of iconv() needs const.])
571 AC_SUBST([ICONV_CONST])
572 dnl we build a static lib
574 AC_SUBST([DLL_VARIABLE])
575 ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.15 -I$(top_builddir)/3rdparty/libiconv'
576 ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
577 ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.15/include/iconv.h.in
581 if test "$am_cv_func_iconv" = no; then
582 AC_MSG_ERROR([cannot find required library iconv.])
584 ICONV_LIBS="$LIBICONV"
588 AC_SUBST(ICONV_INCLUDES)
590 AC_SUBST(ICONV_ICONV_H_IN)
594 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
596 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
597 AC_MSG_CHECKING([whether to use included zlib library])
598 AC_ARG_WITH(included-zlib,
599 [AS_HELP_STRING([--with-included-zlib], [use the zlib lib supplied with LyX instead of the system one])],
600 [lyx_cv_with_included_zlib=$withval],
601 [lyx_cv_with_included_zlib=no])
602 AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
603 AC_MSG_RESULT([$lyx_cv_with_included_zlib])
604 if test x$lyx_cv_with_included_zlib = xyes ; then
605 lyx_included_libs="$lyx_included_libs zlib"
606 ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
607 ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
608 mkdir -p 3rdparty/zlib
609 dnl include standard config.h for HAVE_UNISTD_H
610 echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
611 dnl prevent clash with system zlib that might be dragged in by other libs
612 echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
613 cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
616 AC_CHECK_HEADERS(zlib.h,
617 [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
618 [LYX_LIB_ERROR(zlib.h,zlib)])
620 AC_SUBST(ZLIB_INCLUDES)
625 dnl Usage: LYX_BUILD_INCLUDED_DTL : select if the included dtl should
626 dnl be built and installed.
627 AC_DEFUN([LYX_BUILD_INCLUDED_DTL],[
628 AC_MSG_CHECKING([whether to build dv2dt and dt2dv])
629 AC_ARG_WITH(included-dtl,
630 [AS_HELP_STRING([--with-included-dtl], [build and install the dv2dt and dt2dv programs supplied with LyX])],
631 [lyx_cv_with_included_dtl=$withval],
632 [lyx_cv_with_included_dtl=no])
633 AM_CONDITIONAL(BUILD_INCLUDED_DTL, test x$lyx_cv_with_included_dtl = xyes)
634 AC_MSG_RESULT([$lyx_cv_with_included_dtl])
635 if test x$lyx_cv_with_included_dtl = xyes ; then
636 lyx_flags="$lyx_flags build-dtl"
640 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
641 dnl necessary APIs are available to print callstacks.
642 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
643 [AC_ARG_ENABLE([callstack-printing],
644 [AS_HELP_STRING([--disable-callstack-printing],[do not print a callstack when crashing])],
645 lyx_cv_callstack_printing=$enableval, lyx_cv_callstack_printing=yes)
647 if test x"$lyx_cv_callstack_printing" = xyes; then
648 AC_CACHE_CHECK([whether printing callstack is possible],
649 [lyx_cv_callstack_printing],
650 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
651 #include <execinfo.h>
655 size_t size = backtrace(array, 200);
656 backtrace_symbols(array, size);
658 abi::__cxa_demangle("abcd", 0, 0, &status);
659 ]])],[],[lyx_cv_callstack_printing=no])])
661 if test x"$lyx_cv_callstack_printing" = xyes; then
662 AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
663 [Define if callstack can be printed])
664 lyx_flags="$lyx_flags callback-printing"
665 AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"
670 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
672 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
673 AC_ARG_WITH(included-mythes,
674 [AS_HELP_STRING([--with-included-mythes], [force to use the MyThes lib supplied with LyX])],
675 [use_included_mythes=$withval],
676 [use_included_mythes=no])
677 if test x$use_included_mythes != xyes ; then
679 use_included_mythes=yes
680 AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
681 [mythes_h_location="<$ac_header>"
683 AC_MSG_CHECKING([checking for MyThes library])
684 for ac_lib in mythes mythes-1.2 ; do
685 LIBS="-l$ac_lib $save_LIBS"
687 [AC_LANG_PROGRAM([#include <cstdio>]
688 [#include $mythes_h_location], [MyThes dummy("idx","dat")])],
689 [MYTHES_LIBS=-l$ac_lib
690 AC_MSG_RESULT([$MYTHES_LIBS])
691 use_included_mythes=no])
693 if test $use_included_mythes != no ; then
694 AC_MSG_RESULT([not found])
699 if test $use_included_mythes = yes ; then
700 mythes_h_location="<mythes.hxx>"
701 MYTHES_INCLUDES='-I$(top_srcdir)/3rdparty/mythes/1.2.5/'
702 MYTHES_LIBS='$(top_builddir)/3rdparty/mythes/liblyxmythes.a'
703 lyx_included_libs="$lyx_included_libs mythes"
705 AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$use_included_mythes = xyes)
706 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$mythes_h_location,[Location of mythes.hxx])
707 AC_SUBST(MYTHES_INCLUDES)
708 AC_SUBST(MYTHES_LIBS)
709 AC_MSG_CHECKING([whether to use included MyThes library])
710 AC_MSG_RESULT([$use_included_mythes])
714 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
715 dnl [default-yes-value])
716 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
717 dnl resulting directory name in 'dir-var-name'.
718 AC_DEFUN([LYX_WITH_DIR],[
719 AC_ARG_WITH($1,[AS_HELP_STRING([--with-$1],[specify $2])])
720 AC_MSG_CHECKING([for $2])
721 if test -z "$with_$3"; then
722 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
724 test "x$with_$3" = xyes && with_$3=$5
727 AC_MSG_RESULT($lyx_cv_$3)
731 dnl Usage: LYX_LOOP_DIR(value,action)
732 dnl Executes action for values of variable `dir' in `values'. `values' can
733 dnl use ":" as a separator.
734 AC_DEFUN([LYX_LOOP_DIR],[
735 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
736 for dir in `eval "echo $1"`; do
737 if test ! "$dir" = NONE; then
738 test ! -d "$dir" && AC_MSG_ERROR(['$dir' is not a directory])
746 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
748 AC_DEFUN([LYX_ADD_LIB_DIR],[
750 if test "`(uname) 2>/dev/null`" = SunOS &&
751 uname -r | grep '^5' >/dev/null; then
752 if test $GXX = yes ; then
753 $1="${$1} -Wl[,]-R$2"
760 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
762 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
764 ### Check for a headers existence and location iff it exists
765 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
766 ## It almost works. I've tried a few variations but they give errors
767 ## of one sort or other: bad substitution or file not found etc. The
768 ## actual header _is_ found though and the cache variable is set however
769 ## the reported setting (on screen) is equal to $ac_safe for some unknown
771 ## Additionally, autoheader can't figure out what to use as the name in
772 ## the config.h.in file so we need to write our own entries there -- one for
773 ## each header in the form PATH_HEADER_NAME_H
775 AC_DEFUN([LYX_PATH_HEADER],
776 [ AC_CHECK_HEADER($1,[
777 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
778 ### the only remaining problem is getting the second parameter to this
779 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
780 ### of $ac_safe being printed.
781 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
782 [ cat > conftest.$ac_ext <<EOF
783 #line __oline__ "configure"
784 #include "confdefs.h"
788 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
789 grep $1 2>/dev/null | \
790 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
791 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
793 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
795 ### end of LYX_PATH_HEADER
797 ## Check what kind of packaging should be used at install time.
798 ## The default is autodetected.
799 AC_DEFUN([LYX_USE_PACKAGING],
800 [AC_MSG_CHECKING([what packaging should be used])
801 AC_ARG_WITH(packaging,
802 [AS_HELP_STRING([--with-packaging=STR], [set packaging for installation among:
803 posix, windows, macosx, haiku (default is autodetected)])],
804 [lyx_use_packaging="$withval"], [
806 *-apple-darwin*) lyx_use_packaging=macosx ;;
807 *-pc-mingw*) lyx_use_packaging=windows ;;
808 *-mingw32*) lyx_use_packaging=windows ;;
809 *haiku*) lyx_use_packaging=haiku ;;
810 *) lyx_use_packaging=posix ;;
812 AC_MSG_RESULT($lyx_use_packaging)
813 lyx_install_posix=false
814 lyx_install_macosx=false
815 lyx_install_cygwin=false
816 lyx_install_windows=false
817 case $lyx_use_packaging in
818 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
819 PACKAGE=LyX${version_suffix}
820 default_prefix="/Applications/${PACKAGE}.app"
821 AC_SUBST(osx_bundle_program_name,"${program_base_name}")
822 bindir='${prefix}/Contents/MacOS'
823 libdir='${prefix}/Contents/Resources'
824 datarootdir='${prefix}/Contents/Resources'
825 pkgdatadir='${datadir}'
826 mandir='${datadir}/man'
827 lyx_install_macosx=true ;;
828 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
829 PACKAGE=LyX${version_suffix}
830 default_prefix="C:/Program Files/${PACKAGE}"
831 bindir='${prefix}/bin'
832 libdir='${prefix}/Resources'
833 datarootdir='${prefix}/Resources'
834 pkgdatadir='${datadir}'
835 mandir='${prefix}/Resources/man'
836 lyx_install_windows=true ;;
837 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
838 PACKAGE=lyx${version_suffix}
839 program_suffix=$version_suffix
840 pkgdatadir='${datadir}/${PACKAGE}'
841 default_prefix=$ac_default_prefix
843 *cygwin*) lyx_install_cygwin=true ;;
844 *apple-darwin*) lyx_install_macosx=true ;;
846 lyx_install_posix=true ;;
847 haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
848 PACKAGE=lyx${version_suffix}
849 program_suffix=$version_suffix
850 pkgdatadir='${datadir}/${PACKAGE}'
851 default_prefix=$ac_default_prefix
852 lyx_install_posix=true ;;
853 *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
855 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
856 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
857 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
858 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
860 AC_SUBST(program_suffix)
864 ## ------------------------------------------------------------------------
865 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
866 ## one or two arguments.
868 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
869 ## ------------------------------------------------------------------------
871 AC_DEFUN([AC_FUNC_MKDIR],
872 [AC_CHECK_FUNCS([mkdir _mkdir])
873 AC_CACHE_CHECK([whether mkdir takes one argument],
874 [ac_cv_mkdir_takes_one_arg],
875 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
876 #include <sys/stat.h>
880 ]], [[mkdir (".");]])],[ac_cv_mkdir_takes_one_arg=yes],[ac_cv_mkdir_takes_one_arg=no])])
881 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
882 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
883 [Define if mkdir takes only one argument.])
888 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
889 dnl (which may be a relative path, and need not refer to any existing
892 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
893 dnl native Win32 path name, (but with slashes, not backslashes).
895 dnl On any other system, it is simply the result which would be obtained
896 dnl if PATHNAME represented an existing directory, and the pwd command was
897 dnl executed in that directory.
898 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
900 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
901 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
902 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
904 ac_dir=`AS_DIRNAME(["$ac_dir"])`
906 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
907 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
908 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
912 dnl this is used by the macro blow to general a proper config.h.in entry
913 m4_define([LYX_AH_CHECK_DECL],
914 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
915 [Define if you have the prototype for function `$1'])])dnl`
917 dnl Check things are declared in headers to avoid errors or warnings.
918 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
919 dnl Defines HAVE_DECL_{FUNCTION}
920 AC_DEFUN([LYX_CHECK_DECL],
921 [LYX_AH_CHECK_DECL($1)
924 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
925 AC_EGREP_HEADER($1, $ac_header,
927 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
932 dnl this is used by the macro below to generate a proper config.h.in entry
933 m4_define([LYX_AH_CHECK_DEF],
934 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
935 [Define to 1 if `$1' is defined in `$2'])])dnl'
937 dnl Check whether name is defined in header by using it in codesnippet.
938 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
939 dnl Defines HAVE_DEF_{NAME}
940 AC_DEFUN([LYX_CHECK_DEF],
941 [LYX_AH_CHECK_DEF($1, $2)
942 AC_MSG_CHECKING([whether $1 is defined by header $2])
943 save_CPPFLAGS=$CPPFLAGS
944 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
945 save_CXXFLAGS=$CXXFLAGS
946 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
948 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$2>]], [[$3]])],[lyx_have_def_name=yes],[lyx_have_def_name=no])
950 CXXFLAGS=$save_CXXFLAGS
951 CPPFLAGS=$save_CPPFLAGS
952 AC_MSG_RESULT($lyx_have_def_name)
953 if test "x$lyx_have_def_name" = xyes; then
954 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
958 dnl Extract the single digits from PACKAGE_VERSION and make them available.
959 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
960 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
961 AC_DEFUN([LYX_SET_VERSION_INFO],
962 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
963 lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
964 lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
965 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
966 lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
967 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
968 test "x$lyx_patch" = "x" && lyx_patch=0
969 lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
970 lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
971 AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
972 AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
973 AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
974 AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
975 AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
976 AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")