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 Qt5, or Qt6. Default is Qt5.
68 AC_DEFUN([LYX_CHECK_QT6],[
69 AC_MSG_CHECKING([whether Qt6 is requested])
71 [AS_HELP_STRING([--enable-qt6],[use Qt6 for building])],
72 USE_QT6=$enableval, USE_QT6=no)
73 AC_MSG_RESULT([$USE_QT6])
79 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
80 dnl flag lyx_warning to yes.
81 AC_DEFUN([LYX_WARNING],[
82 lyx_warning_txt="$lyx_warning_txt
88 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
89 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
90 AC_DEFUN([LYX_LIB_ERROR],[
91 AC_MSG_ERROR([cannot find $1. Please check that the $2 library
92 is correctly installed on your system.])])
95 dnl Usage: LYX_CHECK_WARNINGS Displays a warning message if a LYX_WARNING
96 dnl has occurred previously.
97 AC_DEFUN([LYX_CHECK_WARNINGS],[
98 if test x$lyx_warning = xyes; then
100 === The following minor problems have been detected by configure.
101 === Please check the messages below before running 'make'.
102 === (see the section 'Problems' in the INSTALL file)
109 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
111 define(LYX_SEARCH_PROG,[dnl
112 for ac_prog in $2 ; do
113 # Extract the first word of "$ac_prog", so it can be a program name with args.
114 set dummy $ac_prog ; ac_word=$[2]
115 if test -z "[$]$1"; then
116 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
117 for ac_dir in $PATH; do
118 test -z "$ac_dir" && ac_dir=.
119 if test -f [$ac_dir/$ac_word]; then
127 if test -n "[$]$1"; then
133 test -n "[$]$1" && break
138 dnl Usage: LYX_PROG_CLANG: set CLANG to yes if the compiler is clang.
139 AC_DEFUN([LYX_PROG_CLANG],
140 [AC_CACHE_CHECK([whether the compiler is clang],
142 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
146 ]])],[lyx_cv_prog_clang=yes ; CLANG=yes],[lyx_cv_prog_clang=no ; CLANG=no])])
147 if test $CLANG = yes ; then
148 AC_CACHE_CHECK([for clang version],
149 [lyx_cv_clang_version],
151 AC_COMPUTE_INT(clang_major,__clang_major__,,[clang_noversion_=yes])
152 AC_COMPUTE_INT(clang_minor,__clang_minor__,,[clang_noversion_=yes])
153 AC_COMPUTE_INT(clang_patchlevel,__clang_patchlevel__,,[clang_noversion_=yes])
154 if test $clang_noversion = yes ; then
155 clang_version=unknown
157 clang_version=$clang_major.$clang_minor.$clang_patchlevel
159 lyx_cv_clang_version=$clang_version])
164 dnl Usage: LYX_CXX_CXX11_FLAGS(VERSION): add to AM_CXXFLAGS the best flag that
165 dnl selects C++11 mode; gives an error when C++11 mode is not found.
166 dnl VERSION is a list of years to try (e.g. 11 or {14,11}).
167 AC_DEFUN([LYX_CXX_CXX11_FLAGS],
168 [AC_CACHE_CHECK([for a good C++ mode], [lyx_cv_cxx11_flags],
169 [lyx_cv_cxx11_flags=none
170 for flag in `eval echo -std=c++$1 default -std=gnu++$1` ; do
171 if test $flag = default ; then
174 save_CPPFLAGS=$CPPFLAGS
175 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
176 save_CXXFLAGS=$CXXFLAGS
177 CXXFLAGS="$flag $AM_CXXFLAGS $CXXFLAGS"
178 dnl sample openmp source code to test
179 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
180 template <typename T>
183 static_assert(sizeof(int) <= sizeof(T), "not big enough");
186 typedef check<check<bool>> right_angle_brackets;
191 TestDeleted() = delete;
198 typedef check<int> check_type;
200 check_type&& cr = static_cast<check_type&&>(c);
202 auto d = a;]], [[]])],[lyx_cv_cxx11_flags=$flag; break],[])
203 CXXFLAGS=$save_CXXFLAGS
204 CPPFLAGS=$save_CPPFLAGS
206 if test x$lyx_cv_cxx11_flags = xnone ; then
207 AC_MSG_ERROR([Cannot find suitable mode for compiler $CXX])
209 AM_CXXFLAGS="$lyx_cv_cxx11_flags $AM_CXXFLAGS"
213 dnl Usage: LYX_CXX_USE_CALL_ONCE
214 dnl check whether we can use std::call_once and set the
215 dnl LYX_USE_STD_CALL_ONCE macro and conditional accordingly.
216 AC_DEFUN([LYX_CXX_USE_CALL_ONCE],
217 [AC_MSG_CHECKING([for std::call_once availability])
218 save_CPPFLAGS=$CPPFLAGS
219 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
220 save_CXXFLAGS=$CXXFLAGS
221 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
222 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
224 static std::once_flag flag;
226 std::call_once(flag, [](){ return; });
227 ]])],[lyx_std_call_once=yes],[lyx_std_call_once=no])
228 CXXFLAGS=$save_CXXFLAGS
229 CPPFLAGS=$save_CPPFLAGS
230 AC_MSG_RESULT([$lyx_std_call_once])
232 if test $lyx_std_call_once = yes ; then
233 AC_DEFINE([LYX_USE_STD_CALL_ONCE], 1, [define to 1 if std::call_once is supported by the compiler])
235 AM_CONDITIONAL([LYX_USE_STD_CALL_ONCE], test $lyx_std_call_once = yes)
239 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
240 AC_DEFUN([LYX_LIB_STDCXX],
241 [AC_CACHE_CHECK([whether STL is libstdc++],
243 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
244 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
245 this is not libstdc++
247 ]])],[lyx_cv_lib_stdcxx=yes],[lyx_cv_lib_stdcxx=no])])
251 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
252 dnl if the STL library is GNU libstdc++ and the C++11 ABI is used.
253 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
254 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
255 [lyx_cv_lib_stdcxx_cxx11_abi],
256 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
257 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
258 this is not libstdc++ using the C++11 ABI
260 ]])],[lyx_cv_lib_stdcxx_cxx11_abi=yes],[lyx_cv_lib_stdcxx_cxx11_abi=no])])
264 AC_DEFUN([LYX_PROG_CXX],
265 [AC_REQUIRE([AC_PROG_CXX])
266 AC_REQUIRE([AC_PROG_CXXCPP])
268 ### We might want to force the C++ standard.
269 AC_ARG_ENABLE(cxx-mode,
270 AS_HELP_STRING([--enable-cxx-mode],[choose C++ standard (default: 17, 14, then 11)]),,
271 [enable_cxx_mode={17,14,11}]
276 LYX_CXX_CXX11_FLAGS($enable_cxx_mode)
278 LYX_LIB_STDCXX_CXX11_ABI
279 LYX_CXX_USE_CALL_ONCE
282 if test $lyx_cv_lib_stdcxx = "yes" ; then
283 if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
284 AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
286 AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
289 if test $lyx_cv_prog_clang = "yes" ; then
290 AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
294 ### We might want to get or shut warnings.
295 AC_ARG_ENABLE(warnings,
296 AS_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
297 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $GXX = yes ; then
302 if test x$enable_warnings = xyes ; then
303 lyx_flags="$lyx_flags warnings"
306 ### We might want to disable debug
308 AS_HELP_STRING([--enable-debug],[enable debug information]),,
309 [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
312 AC_ARG_ENABLE(stdlib-debug,
313 AS_HELP_STRING([--enable-stdlib-debug],[enable debug mode in libstdc++]),,
314 [enable_stdlib_debug=no]
317 AC_ARG_ENABLE(stdlib-assertions,
318 AS_HELP_STRING([--enable-stdlib-assertions],[enable assertions in libstdc++]),,
319 [AS_CASE([$build_type], [dev*], [enable_stdlib_assertions=yes],
320 [enable_stdlib_assertions=no])]
323 ### set up optimization
324 AC_ARG_ENABLE(optimization,
325 AS_HELP_STRING([--enable-optimization@<:@=ARG@:>@],[enable compiler optimisation]),,
326 enable_optimization=yes;)
327 case $enable_optimization in
329 if test $lyx_devel_version = yes ; then
335 *) lyx_optim=${enable_optimization};;
338 AC_ARG_ENABLE(assertions,
339 AS_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
340 [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
341 [enable_assertions=no])]
343 if test "x$enable_assertions" = xyes ; then
344 lyx_flags="$lyx_flags assertions"
345 AC_DEFINE(ENABLE_ASSERTIONS,1,
346 [Define if you want assertions to be enabled in the code])
349 # set the compiler options correctly.
350 if test x$GXX = xyes; then
351 dnl clang++ pretends to be g++ 4.2.1; this is not useful
352 if test x$CLANG = xno; then
353 dnl Useful for global version info
354 gxx_version=`${CXX} -dumpversion`
357 *) gxx_version=`${CXX} -dumpfullversion` ;;
359 CXX_VERSION="($gxx_version)"
361 gxx_version=clang-$clang_version
362 CXX_VERSION="($clang_version)"
366 2.*|3.*|4.@<:@0-8@:>@*) AC_MSG_ERROR([gcc >= 4.9 is required]);;
369 AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
370 if test x$enable_debug = xyes ; then
371 AM_CXXFLAGS="-g $AM_CXXFLAGS"
373 if test $build_type = gprof ; then
374 AM_CXXFLAGS="$AM_CXXFLAGS -pg"
375 AM_LDFLAGS="$AM_LDFLAGS -pg"
377 if test $build_type = profiling ; then
378 AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
381 AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
383 dnl Warnings are for preprocessor too
384 if test x$enable_warnings = xyes ; then
385 AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
386 dnl Shut off warning -Wdeprecated-copy, which triggers too much
387 dnl note that g++ always accepts -Wno-xxx, even when -Wxxx is an error.
389 AX_CHECK_COMPILE_FLAG([-Wdeprecated-copy],
390 [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-copy"], [], [-Werror])
393 if test x$enable_stdlib_debug = xyes ; then
394 dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
395 dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
396 if test x$lyx_cv_lib_stdcxx = xyes ; then
397 lyx_flags="$lyx_flags stdlib-debug"
398 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
399 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
400 AC_SUBST(STDLIB_DEBUG, "-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC")
402 enable_stdlib_debug=no
405 if test x$enable_stdlib_assertions = xyes ; then
406 if test x$lyx_cv_lib_stdcxx = xyes ; then
407 lyx_flags="$lyx_flags stdlib-assertions"
408 AC_DEFINE(_GLIBCXX_ASSERTIONS, 1, [libstdc++ assertions mode])
410 enable_stdlib_assertions=no
415 # Some additional flags may be needed
416 if test x$GXX = xyes; then
418 clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
419 dnl boost contains pragmas that are annoying on older clang versions
420 AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
425 dnl Usage: LYX_USE_INCLUDED_NOD : select if the included nod should be used.
426 AC_DEFUN([LYX_USE_INCLUDED_NOD],[
427 AC_MSG_CHECKING([whether to use included nod library])
428 AC_ARG_WITH(included-nod,
429 [AS_HELP_STRING([--without-included-nod], [do not use the nod lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
430 [lyx_cv_with_included_nod=$withval],
431 [lyx_cv_with_included_nod=yes])
432 AM_CONDITIONAL(USE_INCLUDED_NOD, test x$lyx_cv_with_included_nod = xyes)
433 AC_MSG_RESULT([$lyx_cv_with_included_nod])
434 if test x$lyx_cv_with_included_nod = xyes ; then
435 lyx_included_libs="$lyx_included_libs nod"
436 NOD_INCLUDES='-I$(top_srcdir)/3rdparty/nod'
440 AC_MSG_CHECKING([for nod library])
442 [AC_LANG_PROGRAM([#include <nod.hpp>],
443 [nod::scoped_connection conn;])],
444 [AC_MSG_RESULT([yes])],
446 AC_MSG_ERROR([cannot find suitable nod library (do not use --without-included-nod)])
450 AC_SUBST(NOD_INCLUDES)
453 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
455 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
456 AC_MSG_CHECKING([whether to use included boost library])
457 AC_ARG_WITH(included-boost,
458 [AS_HELP_STRING([--with-included-boost], [use the boost lib supplied with LyX])],
459 [lyx_cv_with_included_boost=$withval],
460 [lyx_cv_with_included_boost=no])
461 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
462 AC_MSG_RESULT([$lyx_cv_with_included_boost])
463 if test x$lyx_cv_with_included_boost = xno ; then
465 AC_MSG_CHECKING([for boost library])
467 [AC_LANG_PROGRAM([#include <boost/crc.hpp>],
468 [boost::crc_32_type crc;])],
469 [AC_MSG_RESULT([yes])],
471 lyx_cv_with_included_boost=yes
475 if test x$lyx_cv_with_included_boost = xyes ; then
476 lyx_included_libs="$lyx_included_libs boost"
477 BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
481 AC_SUBST(BOOST_INCLUDES)
485 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
487 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
488 AC_MSG_CHECKING([whether to use included iconv library])
489 AC_ARG_WITH(included-iconv,
490 [AS_HELP_STRING([--with-included-iconv], [use the iconv lib supplied with LyX instead of the system one])],
491 [lyx_cv_with_included_iconv=$withval],
492 [lyx_cv_with_included_iconv=no])
493 AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
494 AC_MSG_RESULT([$lyx_cv_with_included_iconv])
495 if test x$lyx_cv_with_included_iconv = xyes ; then
496 lyx_included_libs="$lyx_included_libs iconv"
498 dnl This is hardcoded to make it compile
499 AC_DEFINE([HAVE_WORKING_O_NOFOLLOW], 0, [Define to 1 if O_NOFOLLOW works.])
501 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
504 AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
505 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.15/lib/loop_wchar.h.
506 if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
511 AC_SUBST([USE_MBSTATE_T])
512 AC_CACHE_CHECK([whether <wchar.h> is standalone],
513 [gl_cv_header_wchar_h_standalone],
519 [gl_cv_header_wchar_h_standalone=yes],
520 [gl_cv_header_wchar_h_standalone=no])])
521 if test $gl_cv_header_wchar_h_standalone = yes; then
526 AC_SUBST([BROKEN_WCHAR_H])
527 dnl we want const correctness
528 AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
529 [Define as const if the declaration of iconv() needs const.])
531 AC_SUBST([ICONV_CONST])
532 dnl we build a static lib
534 AC_SUBST([DLL_VARIABLE])
535 ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.15 -I$(top_builddir)/3rdparty/libiconv'
536 ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
537 ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.15/include/iconv.h.in
541 if test "$am_cv_func_iconv" = no; then
542 AC_MSG_ERROR([cannot find required library iconv.])
544 ICONV_LIBS="$LIBICONV"
548 AC_SUBST(ICONV_INCLUDES)
550 AC_SUBST(ICONV_ICONV_H_IN)
554 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
556 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
557 AC_MSG_CHECKING([whether to use included zlib library])
558 AC_ARG_WITH(included-zlib,
559 [AS_HELP_STRING([--with-included-zlib], [use the zlib lib supplied with LyX instead of the system one])],
560 [lyx_cv_with_included_zlib=$withval],
561 [lyx_cv_with_included_zlib=no])
562 AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
563 AC_MSG_RESULT([$lyx_cv_with_included_zlib])
564 if test x$lyx_cv_with_included_zlib = xyes ; then
565 lyx_included_libs="$lyx_included_libs zlib"
566 ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
567 ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
568 mkdir -p 3rdparty/zlib
569 dnl include standard config.h for HAVE_UNISTD_H
570 echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
571 dnl prevent clash with system zlib that might be dragged in by other libs
572 echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
573 cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
576 AC_CHECK_HEADERS(zlib.h,
577 [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
578 [LYX_LIB_ERROR(zlib.h,zlib)])
580 AC_SUBST(ZLIB_INCLUDES)
585 dnl Usage: LYX_BUILD_INCLUDED_DTL : select if the included dtl should
586 dnl be built and installed.
587 AC_DEFUN([LYX_BUILD_INCLUDED_DTL],[
588 AC_MSG_CHECKING([whether to build dv2dt and dt2dv])
589 AC_ARG_WITH(included-dtl,
590 [AS_HELP_STRING([--with-included-dtl], [build and install the dv2dt and dt2dv programs supplied with LyX])],
591 [lyx_cv_with_included_dtl=$withval],
592 [lyx_cv_with_included_dtl=no])
593 AM_CONDITIONAL(BUILD_INCLUDED_DTL, test x$lyx_cv_with_included_dtl = xyes)
594 AC_MSG_RESULT([$lyx_cv_with_included_dtl])
595 if test x$lyx_cv_with_included_dtl = xyes ; then
596 lyx_flags="$lyx_flags build-dtl"
600 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
601 dnl necessary APIs are available to print callstacks.
602 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
603 [AC_ARG_ENABLE([callstack-printing],
604 [AS_HELP_STRING([--disable-callstack-printing],[do not print a callstack when crashing])],
605 lyx_cv_callstack_printing=$enableval, lyx_cv_callstack_printing=yes)
607 if test x"$lyx_cv_callstack_printing" = xyes; then
608 AC_CACHE_CHECK([whether printing callstack is possible],
609 [lyx_cv_callstack_printing],
610 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
611 #include <execinfo.h>
615 size_t size = backtrace(array, 200);
616 backtrace_symbols(array, size);
618 abi::__cxa_demangle("abcd", 0, 0, &status);
619 ]])],[],[lyx_cv_callstack_printing=no])])
621 if test x"$lyx_cv_callstack_printing" = xyes; then
622 AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
623 [Define if callstack can be printed])
624 lyx_flags="$lyx_flags callback-printing"
625 AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"
630 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
632 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
633 AC_ARG_WITH(included-mythes,
634 [AS_HELP_STRING([--with-included-mythes], [force to use the MyThes lib supplied with LyX])],
635 [use_included_mythes=$withval],
636 [use_included_mythes=no])
637 if test x$use_included_mythes != xyes ; then
639 use_included_mythes=yes
640 AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
641 [mythes_h_location="<$ac_header>"
643 AC_MSG_CHECKING([checking for MyThes library])
644 for ac_lib in mythes mythes-1.2 ; do
645 LIBS="-l$ac_lib $save_LIBS"
647 [AC_LANG_PROGRAM([#include <cstdio>]
648 [#include $mythes_h_location], [MyThes dummy("idx","dat")])],
649 [MYTHES_LIBS=-l$ac_lib
650 AC_MSG_RESULT([$MYTHES_LIBS])
651 use_included_mythes=no])
653 if test $use_included_mythes != no ; then
654 AC_MSG_RESULT([not found])
659 if test $use_included_mythes = yes ; then
660 mythes_h_location="<mythes.hxx>"
661 MYTHES_INCLUDES='-I$(top_srcdir)/3rdparty/mythes/1.2.5/'
662 MYTHES_LIBS='$(top_builddir)/3rdparty/mythes/liblyxmythes.a'
663 lyx_included_libs="$lyx_included_libs mythes"
665 AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$use_included_mythes = xyes)
666 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$mythes_h_location,[Location of mythes.hxx])
667 AC_SUBST(MYTHES_INCLUDES)
668 AC_SUBST(MYTHES_LIBS)
669 AC_MSG_CHECKING([whether to use included MyThes library])
670 AC_MSG_RESULT([$use_included_mythes])
674 dnl Usage: LYX_CHECK_MACOS_DEPLOYMENT_TARGET : select the macos deployment target
675 dnl [default-auto-value])
676 dnl Assign the macosx-version-min value for compiler, linker and Info.plist.
677 dnl Default is dynamic - depends on used Qt library version.
678 AC_DEFUN([LYX_CHECK_MACOS_DEPLOYMENT_TARGET],[
679 AC_ARG_WITH(macos-deployment-target,
680 [AS_HELP_STRING([--with-macos-deployment-target], [force the macos deployment target for LyX])],
681 [macos_deployment_target=$withval],
682 [macos_deployment_target=auto])
683 if test "${macos_deployment_target}" = "auto" ; then
684 macos_deployment_target="10.10"
685 case "$QTLIB_VERSION" in
687 macos_deployment_target="10.12"
690 macos_deployment_target="10.14"
694 AM_CPPFLAGS="-mmacosx-version-min=$macos_deployment_target $AM_CPPFLAGS"
695 AM_LDFLAGS="-mmacosx-version-min=$macos_deployment_target $AM_LDFLAGS"
696 AC_SUBST(macos_deployment_target,"${macos_deployment_target}")
697 AC_MSG_CHECKING([the macos deployment target for LyX])
698 AC_MSG_RESULT([$macos_deployment_target])
702 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
703 dnl [default-yes-value])
704 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
705 dnl resulting directory name in 'dir-var-name'.
706 AC_DEFUN([LYX_WITH_DIR],[
707 AC_ARG_WITH($1,[AS_HELP_STRING([--with-$1],[specify $2])])
708 AC_MSG_CHECKING([for $2])
709 if test -z "$with_$3"; then
710 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
712 test "x$with_$3" = xyes && with_$3=$5
715 AC_MSG_RESULT($lyx_cv_$3)
719 dnl Usage: LYX_LOOP_DIR(value,action)
720 dnl Executes action for values of variable `dir' in `values'. `values' can
721 dnl use ":" as a separator.
722 AC_DEFUN([LYX_LOOP_DIR],[
723 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
724 for dir in `eval "echo $1"`; do
725 if test ! "$dir" = NONE; then
726 test ! -d "$dir" && AC_MSG_ERROR(['$dir' is not a directory])
734 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
736 AC_DEFUN([LYX_ADD_LIB_DIR],[
738 if test "`(uname) 2>/dev/null`" = SunOS &&
739 uname -r | grep '^5' >/dev/null; then
740 if test $GXX = yes ; then
741 $1="${$1} -Wl[,]-R$2"
748 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
750 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
752 ### Check for a headers existence and location iff it exists
753 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
754 ## It almost works. I've tried a few variations but they give errors
755 ## of one sort or other: bad substitution or file not found etc. The
756 ## actual header _is_ found though and the cache variable is set however
757 ## the reported setting (on screen) is equal to $ac_safe for some unknown
759 ## Additionally, autoheader can't figure out what to use as the name in
760 ## the config.h.in file so we need to write our own entries there -- one for
761 ## each header in the form PATH_HEADER_NAME_H
763 AC_DEFUN([LYX_PATH_HEADER],
764 [ AC_CHECK_HEADER($1,[
765 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
766 ### the only remaining problem is getting the second parameter to this
767 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
768 ### of $ac_safe being printed.
769 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
770 [ cat > conftest.$ac_ext <<EOF
771 #line __oline__ "configure"
772 #include "confdefs.h"
776 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
777 grep $1 2>/dev/null | \
778 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
779 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
781 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
783 ### end of LYX_PATH_HEADER
785 ## Check what kind of packaging should be used at install time.
786 ## The default is autodetected.
787 AC_DEFUN([LYX_USE_PACKAGING],
788 [AC_MSG_CHECKING([what packaging should be used])
789 AC_ARG_WITH(packaging,
790 [AS_HELP_STRING([--with-packaging=STR], [set packaging for installation among:
791 posix, windows, macosx, haiku (default is autodetected)])],
792 [lyx_use_packaging="$withval"], [
794 *-apple-darwin*) lyx_use_packaging=macosx ;;
795 *-pc-mingw*) lyx_use_packaging=windows ;;
796 *-mingw32*) lyx_use_packaging=windows ;;
797 *haiku*) lyx_use_packaging=haiku ;;
798 *) lyx_use_packaging=posix ;;
800 AC_MSG_RESULT($lyx_use_packaging)
801 lyx_install_posix=false
802 lyx_install_macosx=false
803 lyx_install_cygwin=false
804 lyx_install_windows=false
805 case $lyx_use_packaging in
806 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
807 PACKAGE=LyX${version_suffix}
808 default_prefix="/Applications/${PACKAGE}.app"
809 AC_SUBST(osx_bundle_program_name,"${program_base_name}")
810 bindir='${prefix}/Contents/MacOS'
811 libdir='${prefix}/Contents/Resources'
812 datarootdir='${prefix}/Contents/Resources'
813 pkgdatadir='${datadir}'
814 mandir='${datadir}/man'
815 lyx_install_macosx=true ;;
816 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
817 PACKAGE=LyX${version_suffix}
818 default_prefix="C:/Program Files/${PACKAGE}"
819 bindir='${prefix}/bin'
820 libdir='${prefix}/Resources'
821 datarootdir='${prefix}/Resources'
822 pkgdatadir='${datadir}'
823 mandir='${prefix}/Resources/man'
824 lyx_install_windows=true ;;
825 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
826 PACKAGE=lyx${version_suffix}
827 program_suffix=$version_suffix
828 pkgdatadir='${datadir}/${PACKAGE}'
829 default_prefix=$ac_default_prefix
831 *cygwin*) lyx_install_cygwin=true ;;
832 *apple-darwin*) lyx_install_macosx=true ;;
834 lyx_install_posix=true ;;
835 haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
836 PACKAGE=lyx${version_suffix}
837 program_suffix=$version_suffix
838 pkgdatadir='${datadir}/${PACKAGE}'
839 default_prefix=$ac_default_prefix
840 lyx_install_posix=true ;;
841 *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
843 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
844 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
845 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
846 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
848 AC_SUBST(program_suffix)
852 ## ------------------------------------------------------------------------
853 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
854 ## one or two arguments.
856 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
857 ## ------------------------------------------------------------------------
859 AC_DEFUN([AC_FUNC_MKDIR],
860 [AC_CHECK_FUNCS([mkdir _mkdir])
861 AC_CACHE_CHECK([whether mkdir takes one argument],
862 [ac_cv_mkdir_takes_one_arg],
863 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
864 #include <sys/stat.h>
868 ]], [[mkdir (".");]])],[ac_cv_mkdir_takes_one_arg=yes],[ac_cv_mkdir_takes_one_arg=no])])
869 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
870 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
871 [Define if mkdir takes only one argument.])
876 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
877 dnl (which may be a relative path, and need not refer to any existing
880 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
881 dnl native Win32 path name, (but with slashes, not backslashes).
883 dnl On any other system, it is simply the result which would be obtained
884 dnl if PATHNAME represented an existing directory, and the pwd command was
885 dnl executed in that directory.
886 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
888 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
889 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
890 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
892 ac_dir=`AS_DIRNAME(["$ac_dir"])`
894 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
895 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
896 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
900 dnl this is used by the macro blow to general a proper config.h.in entry
901 m4_define([LYX_AH_CHECK_DECL],
902 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
903 [Define if you have the prototype for function `$1'])])dnl`
905 dnl Check things are declared in headers to avoid errors or warnings.
906 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
907 dnl Defines HAVE_DECL_{FUNCTION}
908 AC_DEFUN([LYX_CHECK_DECL],
909 [LYX_AH_CHECK_DECL($1)
912 AC_MSG_CHECKING([if $1 is declared by header $ac_header])
913 AC_EGREP_HEADER($1, $ac_header,
915 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
920 dnl this is used by the macro below to generate a proper config.h.in entry
921 m4_define([LYX_AH_CHECK_DEF],
922 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
923 [Define to 1 if `$1' is defined in `$2'])])dnl'
925 dnl Check whether name is defined in header by using it in codesnippet.
926 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
927 dnl Defines HAVE_DEF_{NAME}
928 AC_DEFUN([LYX_CHECK_DEF],
929 [LYX_AH_CHECK_DEF($1, $2)
930 AC_MSG_CHECKING([whether $1 is defined by header $2])
931 save_CPPFLAGS=$CPPFLAGS
932 CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
933 save_CXXFLAGS=$CXXFLAGS
934 CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
936 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$2>]], [[$3]])],[lyx_have_def_name=yes],[lyx_have_def_name=no])
938 CXXFLAGS=$save_CXXFLAGS
939 CPPFLAGS=$save_CPPFLAGS
940 AC_MSG_RESULT($lyx_have_def_name)
941 if test "x$lyx_have_def_name" = xyes; then
942 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
946 dnl Extract the single digits from PACKAGE_VERSION and make them available.
947 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
948 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
949 AC_DEFUN([LYX_SET_VERSION_INFO],
950 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
951 lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
952 lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
953 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
954 lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
955 lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
956 test "x$lyx_patch" = "x" && lyx_patch=0
957 lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
958 lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
959 AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
960 AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
961 AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
962 AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
963 AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
964 AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
967 AC_DEFUN([LYX_CHECK_WITH_SAXON],
970 AC_ARG_WITH(saxon, AS_HELP_STRING([--without-saxon],[do not install saxon library (epub export)]))
971 test "$with_saxon" = "no" && lyx_use_saxon=false
973 if $lyx_use_saxon ; then
974 AC_MSG_RESULT(Set to installing internal saxon.)
977 AM_CONDITIONAL(SAXON_INSTALL, $lyx_use_saxon)
980 AC_DEFUN([LYX_CHECK_WITH_XSLT_SHEETS],
982 lyx_use_xslt_stylesheets=true
983 AC_ARG_WITH(xslt-stylesheets, AS_HELP_STRING([--without-xslt-stylesheets],[do not install XSLT Stylesheets (epub export)]))
984 test "$with_xslt_stylesheets" = "no" && lyx_use_xslt_stylesheets=false
986 if $lyx_use_xslt_stylesheets ; then
987 AC_MSG_RESULT(Set to installing XSLT Stylesheets.)
990 AM_CONDITIONAL(XSLT_SHEETS_INSTALL, $lyx_use_xslt_stylesheets)